操作して学ぶ

TCP輻輳制御シミュレータ

TCPは相手や経路の帯域が分からないまま送信を始め、パケットロスを合図に速度を調整します。 その中心が輻輳ウィンドウ(cwnd)。スロースタートで素早く探り、輻輳回避で慎重に増やし、ロスで一気に下げる—— この動きを Reno・CUBIC・Tahoe で動かして見比べてください。

ロス時に半減し、輻輳回避では毎RTT +1。典型的な鋸歯状。

015304560ボトルネック容量 40RTT →cwnd
1
現在のcwnd
SS
フェーズ
0
ロス回数
0%
容量利用率

SS(スロースタート)はcwndを毎RTTで倍にして帯域を素早く探り、CA(輻輳回避)では慎重に加算増加します。ロス(三重重複ACK)はcwndを乗算減少、 タイムアウトはcwnd=1へ戻す。Renoの鋸歯に対し、CUBICは前回到達点付近で増加を緩めて安定し、平均で容量をより高く使えます。

ここが要点

  • AIMD(加算増加・乗算減少)が公平性の鍵。全員が「ゆっくり増やし・急に下げる」ことで、帯域を奪い合わず分け合える。
  • スロースタートは指数増加。名前に反して立ち上がりは速く、ssthreshに達すると輻輳回避の直線的増加へ切り替わる。
  • CUBICは前回の到達点(Wmax)付近で増加を緩めるので鋸歯が浅く、平均スループットが高い。だからLinuxの既定になった。
  • タイムアウトは最悪:cwndが1に戻る。三重重複ACKによる高速回復は半減で済む。