全2364文字
PR

 IPを使えば、ネットワークを越えてデータをやりとりできる。しかしデータを確実に送れるとは限らない。IPはパケット単位でデータを送るので、一部のパケットが途中で失われたり、パケットの届く順番が入れ替わったりする。信頼性が必要なアプリケーションからするとパケットが正しく届くように制御してほしい。逆に信頼性よりも効率を重視したいアプリケーションは制御してほしくない。こうした制御の役割を担うのがトランスポート層である。

 トランスポート層の代表的なプロトコルがTCPとUDPだ(図3-1)。TCPは宛先にデータが正しく届いているかを確認する通信プロトコルである。逆にUDPはほぼ無手順でデータを送る。TCPに比べてオーバーヘッドが小さい。

図3-1●TCPとUDPの特徴
図3-1●TCPとUDPの特徴
TCPはデータを確実に受信させる仕組みを備えるがオーバーヘッドが大きい。UDPはコネクションを確立せずに一方的にデータを送る。
[画像のクリックで拡大表示]

確実にデータを届ける

 TCPはアプリケーション間に仮想的な回線(コネクション)を確立し、データを正しく送受信できたかを確認しながら通信する。パケットの損失(パケットロス)が発生すると送信側は対応するデータを作り直し、同じデータを再び送信する。こうした処理を再送処理と呼ぶ。

 TCPによる通信は3段階に分けられる(図3-2)。まずコネクションを確立する。次にコネクションを通じてデータをやりとりする。その際にデータを正しい順番に並べ替えるための番号を付与する。エラーがあればデータを再送する。最後にコネクションを終了させる。

図3-2●TCPは3段階で通信する
図3-2●TCPは3段階で通信する
データを確実に届けるため、TCPでは仮想的な回線(コネクション)を確立してからデータを送信する。しかし1個のデータを送信するために最低でも9回のやりとりが必要になる。
[画像のクリックで拡大表示]

 こうした手順を実現するため、TCPではTCPヘッダーに様々な制御情報を付与する。TCPではヘッダーとデータ本体を合わせてTCPセグメントと呼ぶ。

 TCPで通信を開始する際は、受信側の機器とパケットを3回やりとりしてコネクションを確立する。この手順を3スリーウエイハンドシェークと呼ぶ。

 最初に送るセグメントはコネクションの確立を要求するSYNセグメントだ。TCPヘッダーのコントロールビットの1つであるSYNを「1」にしたセグメントである。

 SYNセグメントを受け取った受信側は、正しく受け取ったことを伝えるACKというビットを「1」にし、さらにSYNを「1」にしたセグメントを返す。セグメントを受け取った送信側は、受信側に受け取ったことを通知するためにACKを「1」にしたセグメントを送る。こうしてコネクションを確立する。コネクション確立後、データのやりとりに移る。データのやりとりについては後述する。

 通信を終了する際も送信側と受信側で同様のやりとりが必要だ。そのためデータを1個送るだけでも最低9回のやりとりが発生する。