【てぃーしーぴーふくそうせいぎょ】

TCP輻輳制御 とは?

最終更新:
💡 渋滞を感知して自動ブレーキ!TCPの交通整理係

TCPの送信側がネットワークの混雑や利用できる容量を推定し、送り出すデータ量やペースを調整する仕組み。経路を混雑させすぎず、通信容量を活用することを目指す。

📌 このページのポイント
送る量を増減する:Reno系の基本例 cwnd:ACKを待たずに送れる量の上限 時間 スロー スタート 輻輳回避 損失検知 減らす 増やし方・減らし方は方式や検知方法で変わる 受信側の容量を守るrwndも別に適用
時間とcwndの関係を簡略化した概念図で、実測値ではありません。高速回復の一時的な変動などは省略しています。タイムアウト時やCUBIC・BBRでは、この線と異なる動作になります。
ひよこ ひよこ
みんな全力で送れば、早く届くんじゃないかな?
ペンギン先生 ペンギン先生
経路が運べる量を超えると、ルーターの待ち行列が伸びたり、パケットが捨てられたりする。再送ばかり増えて有効な通信が進まなくなることもあるから、送信側が量を調整するんだ。
ひよこ ひよこ
どうやって送る量を決めるの?
ペンギン先生 ペンギン先生
ACKという受信確認や、損失・混雑通知などを使うよ。基本的な方式では、スロースタートで小さい量から始め、ACKに応じて増やす。その後は増やし方を控えめにする輻輳回避へ移り、損失などを検知すると減らすんだ。
ひよこ ひよこ
スローという名前なら、ずっとゆっくり増えるの?
ペンギン先生 ペンギン先生
最初から大量に送らないという意味だよ。ACKが順調に返ると増えるペースも速くなる。図はReno系の基本例で、タイムアウト時と重複ACKによる損失検知でも回復のしかたが違うんだ。
ひよこ ひよこ
CUBICやBBRは何が違うの?
ペンギン先生 ペンギン先生
CUBICは損失やECNの混雑通知に反応し、主に3次関数を使ってウィンドウを増やす。BBRは配送速度やRTTなどから経路のモデルを作り、送信ペースと量を調整するよ。効果は回線や同時通信、実装にもよるから、切り替えれば必ず速くなるとは言えないね。
ひよこ ひよこ
受信するパソコンが遅いときも同じ仕組み?
ペンギン先生 ペンギン先生
それはフロー制御の役割だよ。受信側が受け取れる量をrwndで知らせ、送信側はcwndとrwndの両方を守る。ネットワークの混雑と、相手の受信容量を分けて考えると分かりやすいね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「TCP輻輳制御」って出てきたら「ネットワークの混雑に合わせて送る量を調整する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「TCP Congestion Control」 = TCP輻輳制御
💬 Congestion(混雑・渋滞)をControl(制御)するという意味で、道路の渋滞制御と同じ発想だよ

参考資料

← 用語集にもどる