TCP

TCP

執筆済 ソフトウェア開発ネットワーク

信頼性のあるバイトストリームを提供するトランスポートプロトコル。

IP は「届くかもしれない」だけ。 TCP がその上で確実性を作る。

提供するもの#

機能 仕組み
到達確認 ACK、再送
順序保証 シーケンス番号で並べ直す
重複除去 シーケンス番号
フロー制御 受信側の余裕(ウィンドウ)に合わせる
輻輳制御 ネットワークの混雑に合わせる

接続確立(3-way handshake)#

クライアント → SYN         →  サーバ
クライアント ← SYN + ACK   ←  サーバ
クライアント → ACK         →  サーバ

1 往復(RTT)かかってからデータを送れる。 TLS を足すとさらに 1〜2 往復。 遅延の大きい経路ではこれが体感速度を左右する。

輻輳制御#

ネットワークが詰まると、送る量を減らす。

スロースタート     指数的に増やす
輻輳回避          線形に増やす
損失を検知        大きく減らす

パケット損失を「混雑の合図」とみなすのが古典的な方式 (Reno、CUBIC)。

無線では混雑でなくても損失が起きるため、 この仮定が崩れる。 Google の BBR は損失ではなく 帯域と遅延を推定する方式で、この問題に対処している。

特有の問題#

head-of-line blocking — 1 つのパケットが失われると、 後続が届いていても順序保証のために渡せない。

HTTP/2 が 1 本の TCP に複数ストリームを載せたことで この影響が顕在化し、 HTTP/3 が UDP ベースの QUIC へ移行する動機になった。

参考文献#

ノート一覧を閉じる