AIMD と輻輳制御の数理(なぜ加法増加・乗法減少か)
TCPが回線を奪い合わず公平に分け合える理由が腑に落ちる。AIMDが収束と公平性を生む原理を、Chiu-Jainのベクトル図と微分方程式から解き明かす。
- 1.AIMD は輻輳なしなら毎RTT定数だけ増やし(加法増加)、損失検知で半分に落とす(乗法減少)制御。
- 2.Chiu-Jain のベクトル図では、加法増加が45度線方向の移動、乗法減少が原点方向の移動となり、公平線に収束する。
- 3.公平性に効くのは乗法減少。加法増加だけ、あるいは MIMD では公平点に収束しない。
AIMD とは何を最適化する制御か
TCP の輻輳制御は、送信側が同時に流せる量を表す輻輳ウィンドウ(cwnd)を、ネットワークの混み具合に応じて動的に調整します。中核となるのが AIMD(Additive Increase / Multiplicative Decrease)です。
- 加法増加(AI): 損失が観測されない間、おおむね 1 RTT ごとに cwnd を定数
a(典型的には MSS 1個分)だけ増やす。 - 乗法減少(MD): パケット損失(=輻輳のシグナル)を検知したら、cwnd を係数
b(標準では 0.5)倍に落とす。
なぜ「増やすときは足し算、減らすときは掛け算」という非対称な形なのか。これは恣意的な経験則ではなく、複数フローが分散的に(互いの状態を知らずに)動いても、帯域の公平な分配と安定した収束を同時に達成できる、という数理的な要請から導かれます。前提として TCP の信頼性・再送の枠組みは TCP と UDP の違い を、回線容量とスループットの関係は 帯域・レイテンシ・スループット を参照してください。
Chiu-Jain のベクトル図で見る収束
Chiu と Jain(1989)は、2 つのフローが帯域を共有する状況を 2 次元平面で表しました。横軸をフロー1の割り当て x1、縦軸をフロー2の割り当て x2 とします。この平面に 2 本の重要な直線を引きます。
- 効率線(efficiency line):
x1 + x2 = C。合計が回線容量Cに一致する線。これより内側は容量を使い切れておらず、外側は輻輳(オーバーフロー)。 - 公平線(fairness line):
x1 = x2。両フローが等量を得る 45 度の直線。
理想は両線の交点、すなわち「容量を使い切り、かつ等分」の点です。各フローは合計が C を超えたか(損失あり)どうかという1ビットの共有情報しか持たず、自分の割り当てしか直接は動かせません。この制約下で各操作がベクトル図上でどう動くかを見ます。
| 操作 | 更新式 | ベクトル図での動き |
|---|---|---|
| 加法増加 (AI) | x ← x + a(両者同量を加算) | 傾き1の45度方向へ平行移動 |
| 乗法減少 (MD) | x ← b·x(両者同率を乗算) | 原点へ向かう直線上を移動 |
| 乗法増加 (MI) | x ← c·x | 原点から遠ざかる直線上を移動 |
| 加法減少 (AD) | x ← x − a | 傾き1の45度方向へ後退 |
ここが核心です。加法増加は両フローに同じ量 a を足すので、点 (x1, x2) は傾き 1 の方向へ動きます。これは公平線に平行な移動なので、両者の比 x1/x2 は 1 に近づきません(差 x1 − x2 が保たれる)。一方、乗法減少は両フローに同じ率 b を掛けるので、点は原点と現在地を結ぶ直線上を原点へ向かって動きます。この動きは比 x1/x2 を保ったまま縮小する、つまり原点・現在点・公平線の幾何から、差 x1 − x2 が b 倍に縮むことを意味します。
加法増加は差を一定に保ち、乗法減少は差を比例的に縮める。この 2 つを交互に繰り返すと、輻輳のたびに x1 − x2 が b 倍されて単調に 0 へ収束し、点は公平線へ吸い寄せられます。AI と MD を組み合わせて初めて「効率(効率線への到達)」と「公平(公平線への収束)」が両立します。
なぜ AI/MD でなければならないかは、4 つの組み合わせを比べると明確です。
| 方式 | 効率(容量利用) | 公平性(差の収束) | 判定 |
|---|---|---|---|
| AIAD(加算増・加算減) | 振動するが到達は可能 | 差が縮まらない | 公平点に収束せず |
| MIMD(乗算増・乗算減) | 到達可能 | 差が縮まらない(比を保つ) | 公平点に収束せず |
| MIAD | 不安定になりやすい | むしろ差が拡大しうる | 不適 |
| AIMD(加算増・乗算減) | 効率線へ収束 | 差が単調に0へ | 唯一の安定・公平解 |
MIMD(例: スロースタートのような毎回 2 倍)は増減ともに比を保つため、初期の不公平がいつまでも消えません。AIAD は差を保つだけで縮めません。増加と減少で「足し算」と「掛け算」を非対称に組み合わせることが、分散制御で公平点へ収束する必要条件なのです。
微分方程式で見るのこぎり波と平衡
時間連続の近似でも本質は同じです。1 フローの平均ウィンドウ w(t) の挙動を、損失確率を p、RTT を R として表すと、増加項と減少項の釣り合いで書けます。
dw/dt ≈ (1 / R) − (w / 2) · (p · w / R)
─────── ─────────────────────
加法増加 乗法減少(損失率 p·w/R で w/2 を失う)
- 第1項: 損失がなければ 1 RTT あたり 1 ずつ増える、線形の増加。
- 第2項: 単位時間に約
p·w/R回の損失が起き、そのたびにw/2を失う乗法減少。
平衡(dw/dt = 0)を解くと、平均ウィンドウは w* ≈ sqrt(2/p) に落ち着きます。1 パケットあたりのデータ量と RTT で割れば、有名な逆数平方根則が得られます。
スループット ≈ MSS / (R · sqrt(2·p / 3)) # 係数3は b=1/2 と triple-dup-ack を含めた標準形
この式が示す含意は実務的に重要です。スループットは損失率 p の平方根に反比例し、RTT に反比例します。ゆえに RTT が長いフローは同じボトルネックでも不利になり(RTT 公平性の問題)、わずかな損失率の悪化がスループットを大きく削ります。
AIMD のもとで cwnd は、ゆっくり線形に増えては損失で半分に落ちる三角形を繰り返します。これがのこぎり波(sawtooth)です。平均利用率は理論上 (1+b)/2 = 0.75、つまりバッファが足りないと帯域の約 4 分の 1 を取りこぼします。BDP(帯域遅延積)相当のバッファがあると、減少後も配管が空にならず利用率を保てます。
設計上の含意と発展
- 公平性の前提: 上の収束は「全フローが同じ
a,bと同じ RTT を持つ」理想化です。RTT が異なれば短 RTT フローが速く増やせるため、Reno 系では RTT 不公平が残ります。これを緩めるのが CUBIC(増加を RTT 非依存の三次関数にする)です。 - 損失=輻輳という仮定: AIMD は損失を輻輳のシグナルとみなします。無線のランダム損失では誤って減速します。ECN(明示的輻輳通知)はルータが損失前にマークを付け、MD の起点を損失から分離します。RFC 5681 が Reno の標準挙動を規定します。
- 遅延ベースとの対比: BBR は損失ではなくボトルネック帯域と RTT を推定して動くため、AIMD ののこぎり波とは別系統です。とはいえ「分散フローが共有資源へ公平収束する」という Chiu-Jain の評価軸は今も設計の物差しです。
- どこに効かせるか: AIMD はエンド間の制御です。経路上で重要通信を守る優先制御は別レイヤの課題で、QoS(通信品質の制御) が担います。プロトコル階層の役割分担は TCP/IP(インターネットの基礎) を参照してください。
「なぜ MD は乗算で AI は加算か」を一言で言えること。答えは「乗算減少だけがフロー間の差を比例的に縮め、加算増加だけでは差が保たれるから、両者の組み合わせが公平線への収束を保証する」。スループットが 1/sqrt(p) かつ 1/RTT に比例する逆数平方根則も頻出です。
ネットワーク Article
AIMD と輻輳制御の数理(なぜ加法増加・乗法減少か)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
TCP
比較で見る軸
難易度: advanced / カテゴリ: ネットワーク / タグ数: 4
導入後に効く点
Chiu-Jain のベクトル図では、加法増加が45度線方向の移動、乗法減少が原点方向の移動となり、公平線に収束する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ネットワーク
- タグ数
- 4
判断チェックリスト
- 自社の用途が「TCP / 輻輳制御」に近いか確認する。
- 強みである「AIMD は輻輳なしなら毎RTT定数だけ増やし(加法増加)、損失検知で半分に落とす(乗法減少)制御。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。