【ネットワーク】【プロトコル】トランスポート層 ~ TCP / UDP ~

TCP(Transmission Control Protocol)

 * コネクション型通信
 ⇒データを確実に届けるために、受信側と1対1で通信を行う
 * 確実性を重視(誤りがあった場合、誤り訂正、再送を行う)

役割

1) 接続と切断
 => 通信相手を呼び出して相手と1対1で通信できる仮想的な通信路(コネクションという)を確保すること
 => このコネクションを確立する手順を「3ウェイハンドシェイク」という(下記の「3ウェイハンドシェイク」を参照のこと)
2) 通信制御
 => 通信相手と確実かつ効率よく通信できるようにする
 2-1) 送受信するデータを決められた大きさに分割(※)し、転送スピードをコントロールして相手が確実に受信させる
 ※ データの単位を、「セグメント」という
 2-2) 通信途中で紛失したデータを再送する
3) アプリケーションとの仲介
 => 「ポート番号」を使って、通信相手のアプリケーション層を識別し、受信データを受け渡す

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

UDP(User Datagram Protocol)

 * コネクションレス型通信
 ⇒事前の打合せをしないで、一方的にデータを送り付ける
 * スピード・リアルタイム性を重視(再送しない)

主なサービス

 * IP電話
 * 動画

代表的なアプリケーション

 * DNS  : ドメイン名からIPアドレスを調べる
http://blogs.yahoo.co.jp/dk521123/34548384.html
 * DHCP : ホスト(クライアント)に対して自動的にIPアドレスを割り当てるプロトコル
http://blogs.yahoo.co.jp/dk521123/34546170.html
 * SNMP : ネットワーク機器をリモートから管理
http://blogs.yahoo.co.jp/dk521123/31217356.html
 * RIP  : ルータ間で経路情報を相互に交換するためのプロトコル
http://blogs.yahoo.co.jp/dk521123/34580405.html
 * NTP  : ネットワークに接続される機器において、機器が持つ時計を正しい時刻へ同期するための通信プロトコル

参考文献

http://itpro.nikkeibp.co.jp/article/lecture/20070305/263897/

TCP / UDP の比較

``TCP`UDP`備考
通信方式コネクション型コネクション型
信頼性高い低い受信確認、誤り訂正、パケット再送、輻輳制御(※1)
転送速度低速高速
マルチキャスト不可

 ※1 輻輳(ふくそう, congestion) 
      => ものが一ヶ所に集中して混雑している状態のこと

参考文献

http://www.infraexpert.com/study/tcpip12.html
http://d.hatena.ne.jp/ikeas/20100415/1271338590


関連記事

Webブラウザにページが表示される

http://blogs.yahoo.co.jp/dk521123/21366320.html

インターネット層 ~ IP ~

http://blogs.yahoo.co.jp/dk521123/34546170.html

Linux】【Windowsnetstat ~ ネットワーク統計や状態を確認 ~

https://blogs.yahoo.co.jp/dk521123/34848875.html