【1】TCP (Transmission Control Protocol)
* コネクション型通信 => データを確実に届けるために、受信側と1対1で通信を行う * 確実性を重視(誤りがあった場合、誤り訂正、再送を行う)
1)役割
[1] 接続と切断
* 通信相手を呼び出して相手と1対1で通信できる 仮想的な通信路(コネクションという)を確保すること * このコネクションを確立する手順を 「3ウェイハンドシェイク」という (下記の「3ウェイハンドシェイク」を参照のこと)
[2] 通信制御
* 通信相手と確実かつ効率よく通信できるようにする 1) 送受信するデータを決められた大きさに分割(※)し、 転送スピードをコントロールして相手が確実に受信させる ※ データの単位を、「セグメント」という 2) 通信途中で紛失したデータを再送する 3) アプリケーションとの仲介 => 「ポート番号」を使って、 通信相手のアプリケーション層を識別し、受信データを受け渡す
2)TCP/IPモデルでの位置付け
+----------------------+ | アプリケーション層 | +----------------------+ | トランスポート層 | <= TCP/UDP +----------------------+ | インターネット層 | +----------------------+ | ネットワーク層 | +----------------------+
主なサービス
* WWW(Webページ) * 電子メール
概要
[1] HTTPリクエストのデータをネットワーク経由で送りやすいように小さな断片に分割。 [2] 断片化されたデータに対して、ポート番号や送信元の情報を 格納した「TCPヘッダー」と呼ぶデータを付加して「パケット」を作成
イメージ
クライアント +---------------------------------------------+ | Webブラウザ(URL/ポート番号XX) | +---------------------------------------------+ | | | +------------+ +------------+ +------------+ | 宛先の | | 宛先の | | HTTP | | IPアドレス | | ポート番号 | | リクエスト | +------------+ +------------+ +------------+ | | | +-----------------------------------------------+ | | | | | | +----------------------+ +------------------+ | | | 通信に必要な | | HTTPリクエスト | | | | 制御情報(ヘッダー) | | のデータを | | | | を作成 | | 小さな断片に分割 | | | +----------------------+ +------------------+ | | | | | | +--+ +--+ +--+ +--+ | | | | | | | | | | | | | | +--+ +--+ +--+ +--+ | | | | | +-----------------------------------------------+ | | +-------------------------+---------------------+ | TCPヘッダー | HTTPリクエストの | | * 送信元のポート番号 | データの断片 | | * 宛先のポート番号 | | | * シーケンス番号 | | | (送信データの連番) | | | * ACK信号 | | | (受信データの連番) | | +-------------------------+---------------------+
主な役割
* 宛先/送信元アプリケーションの特定 * 誤り制御 * シーケンス制御(到着順序保証)
3ウェイハンドシェイク
* データをやりとりする相手同士が3度の手続きを踏んで通信すること
コントロールフラグ
URG (Urgent flag)
* 1ならセグメントが緊急データを含んでいる
ACK (Acknowledgement flag)
* 1なら通信確認に対して了解 / 確認応答 * Acknowledgement = 承認
PSH (Push flag)
* 1ならセグメントをすぐにアプリケーション層へ渡す
RST (Reset flag)
* 1なら通信を強制的に切断 * 何らかの異常を検出した場合に送信される
SYN (Synchronize flag)
* 1なら通信開始を要求
FIN (Fin flag)
* 1なら通信終了を要求
手順
データやり取り時
[1] 送信側がデータをやり取りしたい場合、 要求として「SYN(シン)」を送る [2] 受信側は、[1]の「SYN」と共に、 応答確認として「ACK(アック)」を送る [3] 送信側は、[2]の「SYN」「ACK」に伴い、 確認として「ACK」を送る
データやり取り終了時
[1] 送信側がデータをやり取り終了したい場合、 要求として「FIN(フィン)」を送る [2] 受信側は、[1]の「FIN」を受けて、 応答確認として「ACK」を送る [3] 受信側もやり取り終了する旨を 送信側に「FIN(フィン)」として送る [4] 送信側は、[3]の「FIN」を受けて、 応答確認として「ACK」を送る
TCPの状態遷移図
https://qiita.com/mogulla3/items/196124b9fb36578e5c80 http://www.atmarkit.co.jp/ait/articles/0402/13/news096_3.html http://image.itmedia.co.jp/ait/articles/0402/13/wi-fig06.gif
【2】UDP(User Datagram Protocol)
* コネクションレス型通信 => 事前の打合せをしないで、一方的にデータを送り付ける * スピード・リアルタイム性を重視(再送しない)
主なサービス
* IP電話 * 動画
代表的なアプリケーション
* DNS => ドメイン名からIPアドレスを調べる * DHCP => ホスト(クライアント)に対して自動的にIPアドレスを割り当てるプロトコル * SNMP => ネットワーク機器をリモートから管理 * RIP => ルータ間で経路情報を相互に交換するためのプロトコル * NTP => ネットワークに接続される機器において、 機器が持つ時計を正しい時刻へ同期するための通信プロトコル
参考文献
http://itpro.nikkeibp.co.jp/article/lecture/20070305/263897/
【3】TCP / UDP の比較
TCP | UDP | 備考 | |
---|---|---|---|
通信方式 | コネクション型 | コネクション型 | |
信頼性 | 高い | 低い | 受信確認、誤り訂正、パケット再送、輻輳制御(※1) |
転送速度 | 低速 | 高速 | |
マルチキャスト | 不可 | 可 |
※1 輻輳(ふくそう, congestion)
* ものが一ヶ所に集中して混雑している状態のこと
参考文献
http://www.infraexpert.com/study/tcpip12.html
http://d.hatena.ne.jp/ikeas/20100415/1271338590