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 へ移行する動機になった。
参考文献#
- James F. Kurose, Keith W. Ross. Computer Networking: A Top-Down Approach, 8th ed. Pearson, 2021.
- Transmission Control Protocol (TCP). RFC 9293, 2022. https://doi.org/10.17487/RFC9293
- Neal Cardwell et al. BBR: Congestion-Based Congestion Control. ACM Queue 14(5), 2016. https://doi.org/10.1145/3012426.3022184