輻輳とは?ネットワーク混雑の仕組み・原因・TCP輻輳制御から対策の判断まで実装者向けに解説
輻輳(ふくそう)とは、ネットワークの特定の経路にトラフィックが集中し、ルータやスイッチが処理しきれずにバッファ(順番待ちの一時保管領域)が溢れ、パケットロスや遅延が起きている状態を指します。道路の渋滞と同じで、流したいデータ量がリンクの通せる帯域を超えると、余ったパケットは待ち行列に積まれ、待ち行列が満杯になれば捨てられます。この記事では、輻輳がどういう仕組みで起きるのか、帯域幅やレイテンシーと輻輳がどう結びつくのか、TCPがスロースタートやCUBIC/BBRといったアルゴリズムでどのように送信量を加減しているのかを実装者の解像度で整理する構成です。そのうえで、実務で最も誤解されがちな「帯域を増やせば輻輳は消える」「バッファは大きいほど安心」という前提を否定し、QoS・リンク束ね・監視をどの順番で入れるべきかを、採用する場面と見送る場面に分けて言い切ります。
目次
まとめ:輻輳の仕組みと原因・TCP輻輳制御・対策の判断を先に整理した結論
輻輳の本質は「ある区間に流れ込むトラフィックが、その区間の通せる帯域とバッファの容量を超えた状態」です。超過ぶんは待ち行列に積まれて遅延(キューイング遅延)となり、行列が満杯になるとパケットが捨てられます。捨てられたパケットは送信側が再送するため、対処を誤ると再送がさらにトラフィックを増やし、輻輳が輻輳を呼ぶ悪循環(輻輳崩壊)に陥るのが厄介な点です。これを防ぐ主役がTCPの輻輳制御で、送信側はネットワークの空き容量を直接知らないまま、パケットロスや遅延の増加を手がかりに送信量(ウィンドウ)を増減させ、使える帯域を推測しながら流します。
設計判断の勘所は3つです。第一に、帯域増強は万能ではありません。バッファが過大な機器では、帯域を足してもキューが深く積まれ続けるバッファブロートが起き、パケットは落ちないのに遅延だけが悪化します。第二に、輻輳制御アルゴリズムには性格差があるという事実です。パケットロスを合図に速度を落とすLossベース(Linuxの既定であるCUBIC系)と、遅延や推定帯域を手がかりにするBBR系では、ロスの多い無線回線や高遅延回線での挙動が変わります。第三に、対策には順序がある点です。まず監視で「どこが・どのくらい・いつ詰まるか」を可視化し、恒常的な帯域不足ならリンク束ね(LAG)や回線増速、瞬間的な競合なら優先制御(QoS)、というふうに原因に合った手を選びます。オンプレの機器からクラウド側の帯域・QoS設計までを一体で組みたい場合は、インフラ構築(AWS/GCP/Azure)の相談窓口で構成方針から相談すると、帯域と遅延のどちらがボトルネックかを取り違えたまま投資する事故を避けられます。
輻輳の仕組み:帯域超過でバッファが溢れパケットロスと遅延が起きる構造
輻輳を「なんとなく混んでいる状態」で捉えると対策がぶれます。まず、トラフィックがどこで待たされ、どこで捨てられるのかという物理的な流れを押さえると、後段の輻輳制御や対策が一本の線でつながります。
輻輳とは何か:リンク帯域を超えた超過分が待ち行列に積まれる状態
ネットワークの各リンクには、1秒あたりに通せるデータ量の上限(帯域幅)があります。ルータやスイッチは、出口のリンクが空くまでパケットを一時的にバッファへ積んで順番待ちさせます。到着するパケットの合計がリンクの帯域を下回っている間は、待ち行列は短く、遅延もわずかです。到着が帯域を上回り始めると、処理しきれないパケットがバッファに溜まり続け、待ち行列が長くなります。バッファが満杯になった時点で、それ以上入ってきたパケットは行き場を失って破棄されます。これがパケットロスであり、輻輳が「起きている」と言える状態です。輻輳は回線そのものが壊れる現象ではなく、需要(流したい量)が供給(通せる量)を超えたときに必ず起こる、確率的で日常的な現象だと捉えるのが出発点になります。
帯域幅・スループット・レイテンシーと輻輳が同時に結びつく相互関係
輻輳は、実測できる3つの指標に同時に影響します。帯域幅は理論上の通せる量、スループットは実際に通った量で、輻輳が起きるとロスと再送でスループットは帯域幅より低く沈むのが実態です。そしてレイテンシー(遅延)は、待ち行列が伸びるぶんだけ増えます。ここが実装者にとって肝で、輻輳の初期症状はパケットロスより先に「遅延の増加」として現れることが多いのです。バッファに積まれて待つ時間そのものがキューイング遅延として応答時間に上乗せされるため、ロスが出ていなくても体感が悪化します。輻輳による遅延の膨らみを応答時間の観点から切り分けたい場合は、レイテンシーの原因と目安・改善方法を併せて押さえると、どこまでが伝送距離由来で、どこからが輻輳(キューイング)由来かを分けて診断できます。
輻輳崩壊:再送が再送を呼び全体のスループットが急落する悪循環
輻輳が厄介なのは、放置すると自己増幅する点です。パケットが捨てられると、送信側は「届かなかった」とみなして再送します。ところが元の輻輳が解消していないところへ再送ぶんが上乗せされると、待ち行列はさらに伸び、より多くのパケットが捨てられ、さらに再送が増えるという二次災害です。この連鎖が進むと、リンクは満杯なのに有効に届くデータはほとんど無い、という状態に落ち込みます。これを輻輳崩壊(congestion collapse)と呼び、1980年代のインターネットで実際にスループットが数百分の1へ急落した記録が、TCPに輻輳制御を組み込む契機になりました。再送のたびに待ち時間を倍にしていくバックオフや、後述の輻輳制御は、この悪循環を断ち切るために設計された仕組みです。アプリケーション側で「失敗したら即リトライ」を素朴に書くと、この崩壊を人為的に再現してしまう点に注意します。
輻輳の原因:トラフィック集中とバッファ設計・再送設計が招く混雑
輻輳の対策を効かせるには、詰まりの発生源を取り違えないことが先決です。原因を「帯域が足りない」の一言で片づけず、集中の仕方・バッファの設計・上位層の振る舞いに分けて見ていきます。
ボトルネックリンクへの集中とマイクロバーストによる瞬間的な溢れ
輻輳は、経路の中で最も細いリンク(ボトルネック)に需要が集まったときに生じます。典型は、多数のクライアントを収容するアクセススイッチから上位へ向かうアップリンクや、拠点間を結ぶWAN回線、データセンターの南北トラフィックが集まる境界です。平均帯域には余裕があっても、ミリ秒未満の短時間に送信が重なるマイクロバーストで瞬間的にバッファが溢れることもあり、この場合は分単位の平均グラフを見ても原因が見えません。マイクロバーストを疑うなら、機器の出力キューの破棄カウンタ(output drops)やマイクロバースト計測に対応した監視で、秒未満の粒度を把握する必要があります。「平均使用率は50%なのにロスが出る」ときは、平均ではなくピークの重なりを疑うのが定石です。
バッファブロート:過大なバッファがロスを隠して遅延だけを膨らませる
「バッファは大きいほど安心」という直感は、しばしば裏目に出ます。バッファが過大な機器では、輻輳時にパケットが捨てられずに延々と待ち行列へ積まれ続け、パケットロスは見かけ上減る一方で、キューイング遅延が数百ミリ秒から秒単位まで膨らむのが特徴です。この状態をバッファブロート(bufferbloat)と呼びます。TCPの多くのアルゴリズムはロスを輻輳の合図に使うため、ロスが出ない過大バッファではブレーキが利かず、遅延だけが悪化してオンライン会議や対話型通信の体感を壊します。対策は、バッファをむやみに増やさず、後述のAQM(能動的キュー管理)で待ち行列が伸びる前に早めにパケットを落とすかECNで通知することです。バッファブロートは、帯域を足しても消えない典型的な「設計由来の輻輳」であり、機器のバッファ設定を見直すまで解決しません。
アプリケーション層の再送・並列接続が輻輳を悪化させる典型パターン
輻輳を悪化させる原因が、ネットワーク機器ではなくアプリケーション側にあることも珍しくありません。タイムアウトを短く設定しすぎたクライアントが、応答が遅いだけのサーバへ次々と再送・リトライを投げると、輻輳で遅れているところへさらに負荷を重ねます。多数のコネクションを同時に張る並列ダウンロードや、指数バックオフを入れないリトライループも同様です。マイクロサービス間で「失敗したら即再試行」を素朴に実装すると、一部の輻輳が連鎖的なリトライ嵐(retry storm)を生み、システム全体を巻き込む障害へ発展します。実務では、リトライに指数バックオフとジッタ(待ち時間のばらつき)を入れ、同時再送が同期しないようにするのが基本線です。輻輳対策はネットワーク層だけの話ではなく、上位のタイムアウト・再送設計とセットで考える必要があります。
TCP輻輳制御:送信量を推測で加減しネットワークを崩壊させない仕組み
輻輳制御の主役はTCPです。送信側はネットワークの空き容量を直接教えてもらえないため、ロスや遅延の変化を手がかりに送信量を探り当てます。その基本動作と、アルゴリズムごとの性格差を押さえます。
スロースタートと輻輳回避:ウィンドウで送信量を増減させる基本動作
TCPは、一度に送って応答待ちにできるデータ量を輻輳ウィンドウ(cwnd)として持ち、これを状況に応じて伸縮させます。通信の開始直後はネットワークの空きが分からないため、スロースタートでウィンドウを1往復ごとに倍々で急拡大し、使える帯域を素早く探るのがこの段階です。ある閾値を超えると輻輳回避に移り、増やし方を1往復あたり1セグメントぶん程度へ緩めて、そっと上限を探ります。そしてパケットロスを検知すると「詰まった」と判断してウィンドウを大きく絞り、再び慎重に増やし直します。この「速く上げて、詰まったら下げる」動きの繰り返しが、複数の通信が同じリンクを公平に分け合いながら、崩壊させずに帯域を使い切るための土台です。TCPの輻輳制御はトランスポート層(L4)で完結する制御で、OSI参照モデルにおける各層の役割のうちL4の責務だと位置づけると、下位のイーサネットやIPには手を入れずに送信量だけを加減している構造が見えます。
LossベースとDelay/帯域ベース:CUBICとBBRの考え方の違い
輻輳の「合図」を何に置くかで、アルゴリズムは大きく2系統に分かれます。Lossベースは、パケットロスを輻輳の合図とみなして速度を落とす方式で、Linuxカーネルが既定に採るCUBIC系がこれにあたります。実装が枯れていて公平性も安定する一方、ロスが輻輳以外の理由でも起きる無線回線では、混んでいないのに速度を落として損をしがちです。もう一方の帯域・遅延ベースは、往復遅延(RTT)の増加や推定した帯域を手がかりにする方式で、Googleが公開したBBR系が代表です。ロスを待たずに遅延の膨らみで輻輳を察知するため、バッファブロートや高遅延・高ロス回線でスループットを保ちやすい半面、既存のLossベースと混在させると帯域の取り合いで挙動が変わることが報告されています。どちらが良いかは回線特性次第で、長距離・高遅延やロスの多い経路ではBBR系、社内LANのようにロスが素直に輻輳を表す環境では既定のCUBIC系、という切り分けが実務の当たりです。バージョンや既定値は環境で変わるため、採用時はカーネルとディストリビューションの当該時点の設定を実機で確認します。
ECNとAQM:ルータ側から輻輳を早期に知らせてロスを避ける仕組み
ロスが出てから減速するのでは、すでに遅延が膨らんだ後です。これを前倒しするのがECN(明示的輻輳通知)とAQM(能動的キュー管理)です。AQMは、待ち行列が完全に満杯になる前から確率的にパケットを落とす、あるいは印を付けることで、送信側へ早めに「そろそろ詰まる」と知らせます。RED系やCoDel・FQ-CoDel系といった方式があり、バッファブロート対策として待ち行列の伸びを抑える役割を担うのがこの仕組みです。ECNは、パケットを捨てる代わりにIPヘッダのビットで「輻輳している」と通知し、送信側は再送を伴わずにウィンドウを絞れます。ロスによる再送を避けられるぶん、対話型トラフィックの体感を保ちやすい仕組みです。ただしECNは経路上の機器と両端がそろって対応している必要があり、途中の機器が印を無視すると効きません。導入時は、端末・サーバ・中継機器の対応状況を確認したうえで、AQMと組み合わせて段階的に有効化するのが安全な進め方です。
輻輳対策の採用判断:帯域増強・QoS・リンク束ね・監視をどう選ぶか
輻輳対策は入れれば入れるほど良いわけではなく、原因に合っていなければ費用だけがかさみます。どの手をどの条件で採り、どこでは見送るかを言い切ります。
帯域増強だけでは輻輳が消えない場面と、それでも増速が効く場面
「遅いなら回線を太くする」は、当たる場面と外れる場面がはっきりしています。恒常的にリンク使用率が上限に張り付き、ピークだけでなく平均でも帯域が不足しているなら、増速やリンク束ねが素直に効きます。一方で、平均使用率に余裕があるのにロスや遅延が出るケース、すなわちマイクロバーストの瞬間集中やバッファブロートが原因の場合は、帯域を倍にしても症状はほとんど変わりません。太い回線を用意しても、過大なバッファが遅延を積み続ける構造は残るからです。この見極めを飛ばして増速に投資すると、費用をかけたのに体感が改善しない典型的な失敗に陥ります。まず監視で平均とピーク、そしてキュー由来の遅延を切り分け、「帯域が足りない輻輳」なのか「設計・バッファ由来の輻輳」なのかを確定させてから、増速するかを決めるべきです。
QoS・優先制御を入れるべき条件と、かえって運用を複雑にする場面
QoS(優先制御)は、限られた帯域を用途ごとに優先度づけして分け合う手段です。音声・ビデオ会議のような遅延に敏感なトラフィックと、バックアップやファイル転送のような遅れても構わないトラフィックが同じ回線を共有し、かつピーク時に取り合いが起きる環境では、QoSで優先度を付ける価値が明確に出ます。逆に、帯域そのものが恒常的に不足している場合、QoSは「誰を先に通すか」を決めるだけで総量は増えないため、根本解決にはなりません。また、拠点数やアプリ種別が多い環境で細かい優先クラスを設計すると、分類ルールの保守が重くなり、設定ミスがかえって障害を招きます。QoSは「帯域は足りているがピークの競合で特定用途が割を食う」ときに絞って入れ、増速で足りるなら無理に導入しないのが運用を軽く保つ判断です。
リンク束ね・MTU調整・監視で輻輳を抑える実務の順序と落とし穴
対策には効かせるべき順序があります。最初にやるのは監視で、リンク使用率・出力キューの破棄・再送率・RTTの推移を継続して取り、詰まりの場所と時間帯を特定する作業です。次に、恒常的な帯域不足に対しては複数の物理リンクを束ねて帯域と冗長性を上げるのが定石で、LACPによるリンクアグリゲーションの仕組みと採用判断が具体的な手段になります。ただし束ねても単一フローは1本ぶんが上限のため、多数の通信が分散する経路でこそ効く点に留意が必要です。パケットサイズの設計も見逃せず、経路の途中で分割(フラグメンテーション)が起きるとオーバーヘッドと再送で実効スループットが下がるため、MTUの仕組みとMSS調整・測定手順を踏まえて経路のMTUに合わせたMSSに調整します。バッファブロートが疑われるならAQMとバッファ見直しを、瞬間競合ならQoSを、というふうに監視で見えた原因に手を当てるのが順序です。オンプレの機器とクラウド側のネットワーク(VPCの帯域・ゲートウェイのスループット上限・複数AZ設計)を一体で詰めたい場合は、インフラ構築(AWS/GCP/Azure)として構成段階から相談すると、物理と仮想の両側で輻輳が起きうる箇所を先に洗い出せます。
よくある質問
輻輳について実務でよく挙がる疑問を、仕組みと対策の観点から簡潔に答えます。
輻輳と輻輳制御は何が違うのですか?
輻輳は「ネットワークの経路が混雑し、バッファ超過でパケットロスや遅延が起きている状態」という現象そのものを指します。輻輳制御は、その現象を起こさない・悪化させないために送信量を加減する仕組みで、担い手は主にTCPです。輻輳が問題(渋滞)、輻輳制御が対処(流量調整)という関係で、輻輳制御があるからこそ多数の通信が同じ回線を崩壊させずに分け合えます。
輻輳が起きると通信はどうなりますか?
まず待ち行列が伸びてレイテンシー(遅延)が増え、体感が重くなります。さらに混雑が進んでバッファが満杯になるとパケットが捨てられ、送信側の再送も重なってスループットが落ちるという二段構えです。対処を誤って再送が積み重なると、リンクは満杯なのに有効に届くデータがほとんど無い輻輳崩壊に近づきます。対話型のアプリほど遅延の増加に敏感で、会議やゲームの品質が先に悪化します。
帯域を増やせば輻輳は解消しますか?
恒常的に帯域が不足しているなら増速は効きますが、常に有効とは限りません。平均使用率に余裕があるのにロスや遅延が出る場合、原因は瞬間的なマイクロバーストや過大バッファによるバッファブロートで、帯域を倍にしても遅延は残ります。まず監視で「帯域不足の輻輳」か「設計・バッファ由来の輻輳」かを切り分け、後者なら増速ではなくAQMやバッファ見直し、QoSで対処するのが正しい順序です。
TCPのCUBICとBBRはどちらを使うべきですか?
回線特性で選びます。パケットロスが素直に輻輳を表す社内LANや安定した経路では、Linux既定のCUBIC系で不都合は起きにくいです。一方、長距離・高遅延やロスの多い無線・モバイル経路では、遅延と推定帯域を手がかりにするBBR系がスループットを保ちやすい傾向があります。ただしBBR系はLossベースと混在すると帯域配分の挙動が変わるため、変更時は本番同等の経路で実測し、既定値やバージョンは当該時点のカーネル設定を確認してから切り替えます。
アプリ側で輻輳を悪化させないために何をすべきですか?
再送・リトライに指数バックオフとジッタ(待ち時間のばらつき)を入れ、失敗時の即時再試行や全クライアント同時再送を避けることが第一です。タイムアウトを短くしすぎると、遅いだけのサーバへ再送を重ねて輻輳を煽ります。同時接続数の上限を設け、リトライ嵐が連鎖しないようサーキットブレーカーで遮断する設計も有効です。輻輳対策はネットワーク機器だけでなく、上位のタイムアウト・再送設計とセットで考えます。
関連記事
- レイテンシーとは?レスポンスタイムとの違い・原因・目安と改善方法:輻輳によるキューイング遅延がレイテンシーをどう押し上げるか、遅延の切り分けと併せて診断できます。
- OSI参照モデルとは?7階層の役割・各層プロトコル・TCP/IPとの違い:TCP輻輳制御がトランスポート層(L4)で完結する制御である点を、7階層の中で位置づけられます。
- LACPとは?仕組み・帯域と冗長化の実像から導入判断まで実装者向けに解説:恒常的な帯域不足への対策として、リンクを束ねて帯域と冗長性を上げる手段を具体化できます。
- MTUとは?最大転送単位の仕組み・1500とジャンボフレーム・PMTUD/MSS調整:経路での分割を避けて実効スループットを保つ、パケットサイズ設計の観点から輻輳対策を補えます。