TCP/UDPの仕組み

輻輳制御 ふくそうせいぎょ

輻輳制御輻輳スロースタート輻輳回避cwndTCP BBR
輻輳制御について教えて

簡単に言うとこんな感じ!

ネットワークの「渋滞対策」だよ。車の量が増えて道路が詰まってきたら速度を落とすみたいに、パケットロスが増えたら送信量を減らして、ネットワーク全体を守る仕組みなんだ!


輻輳制御とは

輻輳制御(Congestion Control)は、ネットワークの混雑(輻輳)を検知して送信量を調整するTCPの仕組みです。ネットワークが混雑するとパケットロスや遅延が増加します。すべてのホストが勝手に最大量を送り続けると、ネットワーク全体が崩壊する「輻輳崩壊(Congestion Collapse)」が起こります。

TCPはパケットロスや遅延を輻輳のシグナルとして検知し、送信量を制御します。フロー制御(受信側のバッファ保護)と異なり、輻輳制御はネットワーク全体を保護するための仕組みです。

主要なアルゴリズムとして、スロースタート・輻輳回避・高速再転送・高速回復の4フェーズで構成される古典的な手法(Tahoe/Renoアルゴリズム)から、より高性能なCUBIC・BBRへと進化してきました。


主要なフェーズ

フェーズ動作輻輳ウィンドウ(cwnd)変化
スロースタート最初は小さく、ACKごとに急増指数的に増加
輻輳回避閾値(ssthresh)以上になったら慎重に増加線形に増加
高速再転送3つの重複ACKでパケットロスを検知ssthreshを半分に。cwndを削減
高速回復タイムアウト時ssthreshとcwndを大幅削減

歴史と背景

  • 1988年:Van JacobsonがTCP輻輳制御アルゴリズムを発表(Tahoe)。ARPANETの輻輳崩壊を解決
  • 1990年:TCP Renoが登場。高速再転送・高速回復を追加
  • 2004年:TCP CUBIC(Linux採用)が登場。高速・長距離ネットワークで有効
  • 2016年:GoogleがBBRアルゴリズムを発表。ロスベースでなく帯域・遅延ベースの制御
  • 2020年代QUIC(HTTP/3)でもBBRが採用され普及が進む

スロースタートの動作イメージ

輻輳ウィンドウ(cwnd)の変化 時間(往復回数) cwnd ssthresh スロースタート 輻輳回避 パケット ロス 回復後に再スタート

主要な輻輳制御アルゴリズムの比較

アルゴリズム特徴採用OS・製品
Reno古典的ロスベース制御古いOS
CUBIC高速・長距離向けに最適化Linux(デフォルト), macOS
BBR帯域・遅延ベース。バッファに依存しないLinux 4.9+, Android, GCP
QUIC/BBRQUICプロトコル上でBBRを活用Google, Cloudflare

関連する規格・RFC

規格・RFC番号内容
RFC 5681TCP輻輳制御の標準仕様
RFC 6582TCP NewRenoアルゴリズム
RFC 8312CUBIC輻輳制御アルゴリズム
RFC 9002QUICの輻輳制御

関連用語