輻輳制御はTCPの信頼性メカニズムの一部にすぎません
輻輳制御に加えて、TCPはシーケンス番号、確認応答、再送タイマーによってデータが欠けることなく順序どおりに届くことを保証しています。輻輳制御が特に扱うのは、ネットワーク全体の公平性と安定性です。これがなければ、一部の強気な送信者が回線を独占し、他の利用者の通信を悪化させてしまいます。
使っているアルゴリズムは確認できても、変更できる場面は限られます
一般消費者向けのOSやブラウザの多くは、輻輳制御アルゴリズムを切り替える設定を公開していません。この設定はクライアント側よりもサーバー側でずっと重要になるためです。Linuxサーバーでは、カーネルのパラメータでCubicやBBRなど利用可能なアルゴリズムを確認・切り替えられることが多く、だからこそアクセスの多いWebサイトや動画配信、CDNの運用者にとって選択が重要になります。
Linuxで現在の設定を確認する
Linuxでは、sysctl net.ipv4.tcp_congestion_controlで標準のアルゴリズムを、net.ipv4.tcp_available_congestion_controlで読み込まれているアルゴリズムの一覧を確認できます。ssコマンドに-iオプションを付けると、接続ごとの現在の輻輳ウィンドウ、往復遅延、再送回数などが表示され、転送が遅いときの原因調査に役立ちます。標準のアルゴリズムを変更するには通常は管理者権限が必要で、システム全体に影響するため、重要でない環境でまず試し、実際に提供するトラフィックで測定してください。
運用者はどのアルゴリズムを選ぶべきか
Cubicは長年Linuxカーネルの標準であり、幅広い条件で安定して動作するため、基準として妥当です。BBRは、大陸間通信のような長距離・損失の多い・遅延の大きい経路で効果を発揮することがありますが、結果はバッファの大きさや同じボトルネックを共有する他のトラフィックに左右され、2016年の最初のリリース以降も改訂されています。一般的なベンチマークではなく、実際のトラフィックでA/Bテストを行い、スループット、遅延、再送率を比較するのが確実です。
QUICと、アプリケーション側への輻輳制御の移行
2021年にRFC 9000として標準化されたQUICは、UDPの上で動作し、損失回復と輻輳制御をOSではなくアプリケーションのライブラリ内で実装します。これにより、ブラウザやサーバーはカーネルの更新を待たずにアルゴリズムを更新できます。仕様ではNew Renoに似た標準的な制御方式が示されており、実装によってはCubicやBBRも選べます。HTTP/3の通信でも、このページで説明した原則がそのまま当てはまります。
よくある質問
自分のデバイスが使う輻輳制御アルゴリズムを切り替えられますか?
Linuxではカーネルの設定でCubicやBBRなどを選択できます。一方WindowsやmacOS、多くのモバイルOSはこの設定を一般ユーザーに公開しておらず、実際には接続のサーバー側の方が体感速度に与える影響が大きいのが実情です。
UDPで送られる動画通話やゲームの通信にも輻輳制御は関係しますか?
UDP自体には輻輳制御の仕組みがないため、行儀の悪いUDPアプリケーションはネットワークが混雑していてもデータを送り続け、同じ回線を使う他の通信に負担をかけることがあります。QUICのようなUDPの上に構築された最新のプロトコルは、自前の輻輳制御ロジックを実装してより責任ある挙動を実現しています。
パケットロスは必ず混雑のサインですか?
いいえ。損失は混雑が原因のこともありますが、無線の干渉やケーブルの不良、機器の過負荷が原因のこともあります。従来のTCPは損失を混雑と見なすため、品質の悪い無線回線で不要に速度を落とすことがあります。
ダウンロードが最初は遅く、だんだん速くなるのはなぜですか?
スロースタートが働いているためです。接続は小さなウィンドウから素早く成長しますが、小さなファイルは最高速度に達する前に転送が終わってしまいます。短い接続を何本も使うよりも、長い接続を再利用するほうが効率的な場合が多いのはこのためで、HTTP/2などで接続の再利用が重視される理由の一つです。
回線の契約を速いプランにすれば、1本のダウンロードも速くなりますか?
必ずしもそうとは限りません。1本の接続は、契約帯域よりも往復遅延、ウィンドウサイズ、経路上の損失によって制限されることがあります。遠いサーバーからのダウンロードでは大きなプランを使い切れないことがあり、近くのサーバーやCDNなら使い切れる可能性があります。
スループットのグラフののこぎり歯は何を意味しますか?
緩やかな増加と、損失後の急な減少が繰り返された結果です。もっとなめらかな線が出る場合は、遅延や測定した帯域幅に基づいて調整する別のアルゴリズムか、余裕のある経路である可能性があります。