全2153文字
PR

 IPは、データを確実に送る仕組みを備えていない。TCP/IPでは、トランスポート層のプロトコルであるTCPがその役割を担う。TCPは通信の信頼性と効率性を高めるために、「3ウエイハンドシェーク」「データの再送」「ウインドウ制御」「スロースタートアルゴリズム」という大きく4つの仕組みを備える。

 3ウエイハンドシェークは、相手の同意を得てから仮想的な通信路(コネクション)を確立する仕組みだ(図5-1)。

図5-1●「3回の握手」でコネクションを確立
図5-1●「3回の握手」でコネクションを確立
TCPでは、お互いが「通信可能」であることを確認する「3ウエイハンドシェーク」という仕組みでコネクションを確立してから通信を開始する。
[画像のクリックで拡大表示]

 3ウエイハンドシェークでは、まず送信側がTCPヘッダーの「コントロールビット」と呼ばれる領域にあるSYNというフラグ(SYNフラグ)を「1」にしたTCPセグメント(SYNセグメント)を送る。SYNセグメントを受け取った受信側は、正しく受け取ったことを伝えるため、コントロールビットのACKというフラグ(ACKフラグ)とSYNフラグを「1」にしたセグメント(ACK+SYNセグメント)を返す。

 これを受け取った送信側は、ACKフラグを「1」にしたセグメント(ACKセグメント)を送る。こうしてコネクションを確立してからデータのやりとりを始める。

送受信の順番を番号で管理

 データの再送は、データが受信側に届かなかったときに機能する仕組みだ。TCPでは、受信側が1個のTCPセグメントを受け取るたびに確認応答を返す。確認応答が一定時間内にないと、送信側はデータを送ることができなかったと判断してそのセグメントを再送する。

 TCP/IPでは、アプリケーションのデータを分割して送る。これは、再送を効率化するためでもある。大容量のデータを1度に送ると、受信側に届かなかった場合にデータ全体を再送しなければならない。複数のTCPセグメントに分割して送ることで、無駄なく再送できる。

 TCPでは分割したセグメントに「シーケンス番号」という情報を付与して送る。また、受信側が確認応答を返すときに「確認応答番号」という情報を送る。複数のTCPセグメントに分割して送ると、送信した順番通りに届かないことがある。確認応答も同様だ。そこで、どのセグメントが届いたのかをシーケンス番号と確認応答番号で管理する(図5-2)。

図5-2●確認応答がない場合はデータを再送
図5-2●確認応答がない場合はデータを再送
TCPでは「シーケンス番号」と「確認応答番号」をやりとりすることで、分割して送信したデータがどこまで相手に届いたのかを管理する。確認応答がない場合は再送して、パケットロスによるデータの欠損を防ぐ。
[画像のクリックで拡大表示]