TL

輻輳制御の公平性とバッファ占有の可視化

なぜ同じ回線でフローごとに速度が偏るのか、その正体が時系列で腑に落ちる。帯域配分・RTT公平性・キュー占有を順に追い、ロスベースとBBRの挙動差を直感で掴めます。

応用輻輳制御公平性BBRCUBICバッファ最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.複数フロー競合は帯域配分・RTT公平性・キュー占有の3軸で観測する。3つは同じ現象を別角度から見たもので、片方だけでは誤読する。
  • 2.ロスベース(CUBIC/Reno)はバッファを満杯近くまで埋めて競うため、キュー占有が高止まりし、RTTの短いフローほど多く帯域を取るRTT不公平が出る。
  • 3.BBRはBDPちょうどを狙うのでキュー占有を低く保つが、BtlBwを最大値で測る性質から少数フロー時に帯域が偏ることがある。

何を可視化すれば挙動が読めるか

複数フローが1本のボトルネックを奪い合うとき、「速い・遅い」だけでは挙動を説明できません。観測すべき量は3つあり、これらは同じ競合を別角度から切り出したものです。

  • 帯域配分(throughput): 各フローが単位時間に運べたバイト数。フロー間の取り分の偏りを示す。
  • RTT公平性: RTTの異なるフローどうしが、取り分でどれだけ差をつけられるか。AIMDは増加が毎RTTなので、RTTが短いフローほど速く窓を伸ばし有利になる。
  • キュー占有(queue occupancy): ボトルネックのバッファに滞留しているバイト数。これが遅延の正体で、ロスやマーキングの発生源でもある。

3軸を分けて見る理由は、片方だけだと誤読するからです。帯域だけ見れば「公平に分かれている」ように見えても、キュー占有が満杯近くなら全フローが過大な遅延を被っている(バッファ肥大)。逆にキューが浅くても、配分が偏っていれば一部フローが飢えている。3軸を時系列で並べて初めて、健全か否かを判定できます。

公平性の物差し:Jainの公平性指標

帯域配分の偏りは Jainの公平性指標で数値化できます。各フローのスループットを x_i として、(Σx_i)^2 / (n · Σx_i^2) で計算する。値は 1/n から 1 の範囲を取り、1 が完全に均等、n はフロー数。全フローが同じ取り分なら 1、1本だけが独占すれば 1/n に落ちます。時系列でこの指標を追えば、収束の速さと安定性が一目で分かります。

ロスベースのキュー占有:満杯近くで動く

CUBIC や Reno などのロスベース制御は、パケットロスを輻輳の合図に使います(基礎はAIMD と輻輳制御の数理を参照)。ロスは「バッファが溢れた」ときに起きるので、送信側はバッファを満杯近くまで埋めて初めて減速します。これがキュー占有を高止まりさせる根本原因です。

時系列で追うと、典型的にこう動きます。

# ボトルネック容量 C、深いバッファのキュー占有を時間で追う(概念)
窓を加法増加 ──▶ in-flight が BDP を超える
            ──▶ 超過分がバッファに溜まり、キュー占有が単調増加
キュー占有が上限に到達 ──▶ テールドロップでロス発生
            ──▶ 全フローが乗法減少(窓を約半分/CUBICは0.7倍)
            ──▶ キューが一気に掃けて占有が急落
            ──▶ 再び加法増加 …(鋸歯状=sawtoothを描く)

キュー占有が鋸歯状に振動し、その谷でも完全には空かないのがロスベースの特徴です。占有がゼロに張り付かない分の滞留時間が、そのまま全フローのRTTに上乗せされます。深いバッファほど振幅が大きく遅延が膨らむ——これがバッファ肥大で、バッファブロートと AQMで扱う問題そのものです。

グローバル同期という罠

バッファが溢れた瞬間、そこに同居する全フローが同時にロスを観測し、いっせいに窓を半減させます。これがグローバル同期(global synchronization)で、全フローの鋸歯が揃ってしまう。結果、キュー占有も大振幅で振動し、谷の瞬間は帯域が余って利用率が落ちます。フロー単位でキューを分ける FQ-CoDel やランダム早期ドロップ(RED)系の AQM は、この同期を崩すことも狙いです。

RTT不公平:短いRTTが帯域を多く取る

ロスベースの最も直感に反する挙動がRTT不公平です。同じボトルネックを共有しても、RTTの短いフローがRTTの長いフローより多くの帯域を取ります。

理由はAIMDの増加が「毎RTT」一定量だからです。RTTが半分のフローは、同じ実時間のあいだに2倍の回数だけ窓を増やせる。ロス後の回復も速い。結果として定常状態の取り分はおおむねRTTに反比例します。RTTが半分のフローは約2倍、4分の1のフローは約4倍の帯域を取る、という構造的な偏りです。

RTT比(短:長)Reno系の帯域比(短:長)理由
1 : 1約 1 : 1増加機会が同回数で対等
1 : 2おおむね 2 : 1短い側が2倍の頻度で加法増加
1 : 4おおむね 4 : 1 に近づく増加機会の差がそのまま取り分差に

CUBICはこの不公平を緩和します。窓更新をRTT回数でなく実時間 t の三次関数で行うため、RTTへの依存が弱まり、長RTTフローも実時間ベースで窓を伸ばせるからです(仕組みはCUBIC の三次関数ウィンドウ制御)。ただし完全には消えません。実装が実時間に近づくほどRTT公平性は改善する、という方向性です。

BBRの可視化:キューを埋めずに競う

BBRはロスを信号にせず、ボトルネック帯域 BtlBw と最小RTT(RTprop)を直接推定して、その積であるBDPちょうどを狙います(詳細はBBR の帯域・RTT推定モデル)。可視化すると挙動が根本的に違います。

  • キュー占有: 定常状態では低く保たれる。ProbeBWのゲイン1.25でわずかに増速したぶん一時的にキューが立つが、続く0.75段で吐き出すため、占有は浅い帯で小さく上下する。ロスベースのような満杯近くの鋸歯にならない。
  • 帯域配分: 多くの場面でロスベースより均等。ただし無条件ではない。
  • RTT公平性: RTpropを最小値で測りBDPを満たすだけ送るので、AIMD由来のRTT不公平は構造的に出にくい。
# BBRのキュー占有(ProbeBWサイクル、概念)
gain 1.25 段 ──▶ 軽く増速、キュー占有がわずかに立つ
gain 0.75 段 ──▶ 余剰を吐き出し、占有がほぼゼロへ戻る
gain 1.0 ×6段 ──▶ BDP相当を安定送出、占有は浅いまま
ProbeRTT     ──▶ in-flightを数パケットに絞り、占有をゼロにしてRTprop再測
BBRの公平性は万能ではない

BBRv1には2つの偏りがあります。第一に、複数BBRフローが同居すると BtlBw を最大値で測る性質から推定がフロー間で食い違い、帯域配分が偏ることがある。第二に、深いバッファでロスベースと競合すると、BBRはキューを埋めても減速しないため、ロスを待つCUBIC側が先に減速して帯域を奪われがちです。これらを是正するため、ロス率やECNも補助信号に取り込む BBRv2/v3 が開発されています。「BBR=常に公平」ではない点が試験・面接の急所です。

系統と分岐:何を信号にするかで挙動が割れる

可視化で見える挙動差は、突き詰めると「何を輻輳の信号にするか」の系統分岐に対応します。年代と分岐を整理します。

  • 1988年・ロスベース(Tahoe/Reno): 信号はパケットロス。バッファを満杯まで埋めて競う。キュー占有が高止まりし、RTT不公平が大きい。
  • 2006年前後・ロスベースの高速版(CUBIC): 信号は依然ロスだが、窓更新を実時間の三次関数にしてRTT依存を弱めた。RTT公平性を改善しつつ大BDP経路を埋める。Linux既定。
  • 2016年・モデルベース(BBR): 信号をロスから帯域とRTTの実測へ置換。キュー占有を低く保つが、最大値推定ゆえの配分の偏りという別の課題を持つ。
  • 遅延ベース(Vegas系): 信号はRTT増加。キューを浅く保てるが、ロスベースと同居すると遅延増加で先に引くため帯域を奪われ、単独では普及しにくい分岐。

全体の流れはTCP輻輳制御の系譜に、3軸の土台となる遅延とスループットの関係は帯域・レイテンシ・スループットにまとまっています。

押さえどころ

「ロスベースはキュー占有が高止まり・RTT不公平が大、BBRはキュー占有が低いが少数フローで配分が偏りうる」——この対比が核心。あわせて「公平性はJain指標 (Σx_i)^2 / (n·Σx_i^2) で測る」「RTT不公平の原因はAIMDの増加が毎RTTだから」「CUBICが実時間ベースでRTT依存を弱めて不公平を緩和する」の3点を区別できれば、競合時の挙動は説明できます。

ネットワーク Article

輻輳制御の公平性とバッファ占有の可視化を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

輻輳制御

比較で見る軸

難易度: advanced / カテゴリ: ネットワーク / タグ数: 5

導入後に効く点

ロスベース(CUBIC/Reno)はバッファを満杯近くまで埋めて競うため、キュー占有が高止まりし、RTTの短いフローほど多く帯域を取るRTT不公平が出る。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
ネットワーク
タグ数
5

判断チェックリスト

  • 自社の用途が「輻輳制御 / 公平性」に近いか確認する。
  • 強みである「複数フロー競合は帯域配分・RTT公平性・キュー占有の3軸で観測する。3つは同じ現象を別角度から見たもので、片方だけでは誤読する。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

輻輳制御公平性BBRCUBICバッファ輻輳制御公平性BBR