Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

輻輳制御(フクソウセイギョ)とは | 意味や読み方など丁寧でわかりやすい用語解説

輻輳制御(フクソウセイギョ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

ふくそうせいぎょ (フクソウセイギョ)

英語表記

congestion control (コンジェスチョンコントロール)

用語解説

輻輳制御とは、ネットワークが混雑した状態、すなわち輻輳が発生した際に、その混雑を緩和し、ネットワーク全体のデータ伝送を安定させるための技術である。システムエンジニアとしてネットワークやアプリケーションの設計、開発、運用に携わる上で、この輻輳制御の概念を理解することは、システムのパフォーマンスや信頼性を確保するために非常に重要となる。

まず、輻輳とは何か。これは、複数の送信元からのデータが、限られたネットワーク資源(例えば、通信経路の帯域幅やルータの処理能力、バッファメモリなど)を同時に利用しようとすることで、その資源の供給が需要に追いつかなくなり、データが滞留したり、場合によっては破棄されたりする現象を指す。例えるなら、一本の狭い道に多数の車が集中して渋滞が発生する状況と似ている。ネットワークでは、データは「パケット」という小さな単位に分割されて送られるが、輻輳が発生すると、ルータのバッファメモリが一杯になり、新たに到着したパケットが受け入れられずに破棄される。これをパケットロスと呼ぶ。パケットロスが増加すると、送信側は失われたパケットを再送する必要が生じ、その結果、ネットワーク上のデータ量がかえって増加し、さらに混雑が悪化するという負の連鎖に陥りやすい。最悪の場合、ネットワーク全体が機能不全に陥る「輻輳崩壊」を引き起こす可能性もあり、これを防ぐために輻輳制御は不可欠な機能である。

輻輳制御は主に、データを送信する側のエンドホスト(コンピュータやサーバーなど)で行われるエンド・ツー・エンド制御と、ルータなどのネットワーク機器側で行われるネットワーク内制御の二つに分けられる。特に、インターネットの基盤プロトコルであるTCP(Transmission Control Protocol)において、非常に洗練された輻輳制御メカニズムが実装されており、これが現代のネットワークの安定稼働を支えている。TCPの輻輳制御は、送信側がネットワークの混雑状況を「推測」しながら、自身のデータ送信量を動的に調整することで実現される。

TCPの輻輳制御は、主に以下の四つの主要なアルゴリズムによって構成される。

一つ目は「スロースタート(Slow Start)」である。これはTCPコネクションが確立された直後や、ネットワークの混雑が解消された後に用いられる。送信側は、最初はごく少量のデータから送信を開始し、受信側からの正常な確認応答(ACK)が返ってくるたびに、送信可能なデータ量を示す「輻輳ウィンドウ(Congestion Window, cwnd)」のサイズを指数関数的に増加させていく。これにより、ネットワークの帯域を段階的に利用し始め、未知のネットワーク容量に対して急激なデータ送信による輻輳発生のリスクを低減する。

二つ目は「輻輳回避(Congestion Avoidance)」である。スロースタートによって輻輳ウィンドウが増加し、あらかじめ設定された「輻輳閾値(Slow Start Threshold, ssthresh)」に達するか、あるいはパケットロスなどの輻輳の兆候が検知されると、アルゴリズムはスロースタートから輻輳回避に切り替わる。このフェーズでは、輻輳ウィンドウの増加は指数関数的ではなく、より緩やかに、線形的に増加させられる。これは、ネットワークの容量上限に近づいていると判断し、これ以上の急激な増加は輻輳を引き起こす可能性が高いため、慎重にネットワークの余力を見極めながら送信量を増やしていく段階である。

三つ目は「高速再送(Fast Retransmit)」である。これは、パケットロスをタイムアウトを待つことなく早期に検出し、再送するための仕組みである。TCPでは、データを受信するとその確認応答(ACK)を返す。もし途中のパケットが失われた場合、受信側は次に届いたパケットに対するACKを、期待するパケットのシーケンス番号で重複して送信する。送信側は、同じシーケンス番号のACKが一定回数(通常は3回)連続して届いた場合、失われたパケットがあると判断し、タイムアウトを待たずにそのパケットを再送する。これにより、再送までの遅延を大幅に短縮し、通信スループットの低下を最小限に抑えることができる。

四つ目は「高速回復(Fast Recovery)」である。高速再送と組み合わせて用いられる。高速再送によってパケットロスが検出された場合、通常であれば輻輳閾値を半分に減らし、スロースタートから再開するか、輻輳回避に移行する。しかし、高速回復では、重複ACKが届いているという事実から、ネットワークにはまだデータ伝送能力が残っていると判断し、輻輳ウィンドウを急激に減らすことなく、再送したパケットが確認応答されるまで、輻輳ウィンドウを緩やかに回復させる。これにより、ネットワークが完全に混雑しているわけではない状況での過度な送信量削減を防ぎ、データ伝送効率の低下を緩和する。

これらのアルゴリズムは、TCPの様々なバージョン(例:TCP Reno, TCP NewReno, TCP Cubic, TCP BBRなど)によって改良が加えられており、より高速なネットワークや特定のネットワーク特性に適応できるよう最適化されてきた。

また、ルータなどのネットワーク機器側でも輻輳制御を補完する仕組みが存在する。代表的なものに「RED(Random Early Detection)」などのアクティブキュー管理(AQM: Active Queue Management)アルゴリズムがある。これは、ルータのバッファが満杯になる前に、ランダムにパケットを破棄することで、送信側に早期に混雑の兆候を伝え、TCPの輻輳制御を能動的にトリガーすることを目的としている。これにより、バッファが完全に溢れてしまうことを防ぎ、結果的にパケットロスによる再送の増加やネットワーク全体の利用効率の低下を防ぐ効果がある。

輻輳制御は、インターネットがこれほどまでに普及し、安定して稼働している根幹を支える技術である。もしこの仕組みがなければ、少しでも多くのユーザーがネットワークを利用しようとすると、すぐに混雑が発生し、通信速度は著しく低下し、最悪の場合、ネットワークが完全に機能停止してしまうだろう。輻輳制御は、個々の通信の効率を最大化するだけでなく、ネットワーク資源を複数のユーザーやアプリケーション間で公平に分配する役割も担っている。システムエンジニアとして、これらの基本的なメカニズムを理解することは、日々のネットワークトラブルシューティング、システム設計、クラウド環境でのパフォーマンス最適化など、多岐にわたる業務において非常に有用な知識となる。

関連コンテンツ

関連IT用語