【てぃーしーぴーふくそうせいぎょ】
TCP輻輳制御 とは?
最終更新:
💡 渋滞を感知して自動ブレーキ!TCPの交通整理係
TCPの送信側がネットワークの混雑や利用できる容量を推定し、送り出すデータ量やペースを調整する仕組み。経路を混雑させすぎず、通信容量を活用することを目指す。
📌 このページのポイント
- 送信側がACKなどを手掛かりに、送り出すデータ量を調整する
- 輻輳ウィンドウ(cwnd)は、ACKを待たずに送れるデータ量を制限する
- スロースタートや輻輳回避のほか、CUBIC・BBRなど方式ごとに制御が異なる
- 経路の混雑を扱う輻輳制御と、受信側の容量を守るフロー制御は別
みんな全力で送れば、早く届くんじゃないかな?
どうやって送る量を決めるの?
ACKという受信確認や、損失・混雑通知などを使うよ。基本的な方式では、スロースタートで小さい量から始め、ACKに応じて増やす。その後は増やし方を控えめにする輻輳回避へ移り、損失などを検知すると減らすんだ。
スローという名前なら、ずっとゆっくり増えるの?
最初から大量に送らないという意味だよ。ACKが順調に返ると増えるペースも速くなる。図はReno系の基本例で、タイムアウト時と重複ACKによる損失検知でも回復のしかたが違うんだ。
CUBICやBBRは何が違うの?
受信するパソコンが遅いときも同じ仕組み?
それはフロー制御の役割だよ。受信側が受け取れる量をrwndで知らせ、送信側はcwndとrwndの両方を守る。ネットワークの混雑と、相手の受信容量を分けて考えると分かりやすいね。
📖 おまけ:英語の意味
「TCP Congestion Control」 = TCP輻輳制御
💬 Congestion(混雑・渋滞)をControl(制御)するという意味で、道路の渋滞制御と同じ発想だよ