TCPの役割や基本機能は仕様が策定された当初から変わらないが、その機能をコンピュータ上で動作させるプログラムの実装は様々な方向に分化してきた。この結果、OSによってヘッダーの中身が違ったり、物理ネットワークの進化に合わせてデータ配送を制御する方式の改良が進んだりしている。ここでは、そうしたTCPの実装の進化について取り上げる。

TCPの基本機能

 まずは簡単に、TCP通信の基本をおさらいしておこう。

 TCPによる通信は大きく、(1)サーバーへの接続、(2)データの送受信、(3)切断処理──の3つに分かれている。

TCPの通信手順
TCPの通信手順
まずデータを運ぶパイプラインとなるTCPコネクションを確立する(1)。そのコネクションを使って、クライアントとサーバーがデータをやり取りする(2)。通信を終えると、コネクションを切断する(3)。
[画像のクリックで拡大表示]

 (1)の接続処理は、クライアントとサーバーの両方から接続の要求と確認応答(ACK)を送り合う独特の方法をとる。これを「3ウェイハンドシェーク」と呼ぶ。

 コネクション確立後は、(2)のデータ送受信が行われる。送られるデータには「シーケンス番号」が付与され、このシーケンス番号をクライアントとサーバーが互いに確認し合って信頼性を担保する。シーケンス番号は、データの順番を保証している。シーケンス番号を割り当てたデータが届かないと、途中でデータが失われたとわかる。そこで受信側は、データの再送信を送信側に要求する。

 データ送受信に関わるTCPの機能として、もう1つ重要なのが「輻輳制御」だ。ネットワークが混雑してパケットが流れにくくなり、遅延が著しく大きくなる状態を「輻輳」と呼ぶ。この輻輳が連続して発生すると、通信効率が非常に悪化する。そこでTCPには輻輳状態を回避するための輻輳制御機能が備わっている。

▼輻輳制御機能
ネットワークが混み合ってくると、送信側にデータ転送量を減らすように要求する。それを実現する具体的な手法(輻輳回避アルゴリズム)は後述する。

制御情報を格納するヘッダー部

 TCPの重要機能である再送処理や輻輳制御などは、TCPのヘッダーに記された情報によって実現する。