フロー制御
TCP にはフロー制御のメカニズムもあります。 フロー制御は、ある特定のセッションについて送信元と宛先の間のデータ フローの速度を調整することで、TCP 伝送の信頼性を維持するのに役立ちます。 フロー制御は、一度に転送されるデータ セグメントの量を制限するとともに、受信の確認応答を待ったうえで後続のセグメントを送信するようにすることで達成されます。
フロー制御を達成するために TCP が最初にやることは、宛先デバイスが受け入れられるデータ セグメントの量を判定することです。 TCP ヘッダーには、ウィンドウ サイズと呼ばれる 16 ビットのフィールドがあります。 これは TCP セッションの宛先デバイスが一度に受け入れて処理できるバイト数です。 初期ウィンドウ サイズは、セッションの開始時に送信元と宛先の間で 3 ウェイ ハンドシェイクによって合意されます。 合意ができた後、送信元デバイスはウィンドウ サイズに基づいて宛先デバイスに送信するデータ セグメントの量を制限する必要があります。 送信元デバイスは、データ セグメントが受信されたという確認応答を受け取った後にだけ、そのセッションのデータ送信を続けることができます。
確認応答の受信が遅延している間は、送信側がそれ以上セグメントを送信することはありません。 ネットワークが輻輳していたり、受信側ホストのリソースの負荷が大きいときは、遅延が増大することがあります。 この遅延が長くなるにつれて、そのセッションの実質的なデータ伝送速度は低下していきます。 各セッションのデータ伝送を減速すると、複数のセッションが動作しているときにネットワークおよび宛先デバイスでのリソースの競合を軽減するのに役立ちます。
ここに示す図は、ウィンドウ サイズと確認応答を単純化して表現したものです。 この例では、TCP セッションの初期ウィンドウ サイズが 3000 バイトに設定されています。 送信側は、3000 バイトを送信すると、これらのバイトの確認応答を待ちます。このセッションの後続のセグメントを送信するのは、その後になります。 受信側から確認応答があれば、送信側はさらに 3000 バイトを送信できます。
TCP はウィンドウ サイズを使用することにより、データの消失と再送信を最小限に抑えながら、ネットワークと宛先デバイスがサポートできる最大フローまで伝送速度を管理しようとします。