【ネットワーク】OSI参照モデル / トランスポート層

【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

参考文献

動画
https://www.youtube.com/watch?v=9flBSsQb-7M