輻輳制御 ふくそうせいぎょ
輻輳制御輻輳スロースタート輻輳回避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が採用され普及が進む
スロースタートの動作イメージ
主要な輻輳制御アルゴリズムの比較
| アルゴリズム | 特徴 | 採用OS・製品 |
|---|---|---|
| Reno | 古典的ロスベース制御 | 古いOS |
| CUBIC | 高速・長距離向けに最適化 | Linux(デフォルト), macOS |
| BBR | 帯域・遅延ベース。バッファに依存しない | Linux 4.9+, Android, GCP |
| QUIC/BBR | QUICプロトコル上でBBRを活用 | Google, Cloudflare |
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 5681 | TCP輻輳制御の標準仕様 |
| RFC 6582 | TCP NewRenoアルゴリズム |
| RFC 8312 | CUBIC輻輳制御アルゴリズム |
| RFC 9002 | QUICの輻輳制御 |
関連用語
- TCP — 輻輳制御を実装するプロトコル
- TCP BBR — 最新の輻輳制御アルゴリズム
- TCPウィンドウ制御 — 輻輳制御と連携するフロー制御
- 再送制御 — パケットロス検知と再送