リンクアグリゲーション(LACP)の原理
複数の物理リンクを論理1本に束ねて帯域と冗長性を同時に得る仕組みが、LACP のネゴシエーションとハッシュ分散の原理から腑に落ちる。単一フローは速くならない理由まで理解できる。
- 1.リンクアグリゲーションは複数の物理リンクを1本の論理リンク(LAG)に束ね、帯域の合算とリンク障害時の自動フェイルオーバーを両立させる L2 の技術。
- 2.LACP(802.1AX)は両端で LACPDU を交換して束ねてよいリンクを動的に合意し、速度・デュプレックス・対向装置が一致するリンクだけを Selected 状態にして転送に使う。
- 3.分散はパケット単位ではなくフローのハッシュ単位なので、単一フローはメンバ1本ぶんしか出せず、総帯域はあくまで多数フローの合計に対する非保証の上限になる。
リンクアグリゲーションが解く問題
スイッチ間やサーバーとスイッチの間を 1Gbps のリンク1本で結ぶと、その帯域が天井になり、ケーブルやポートが1つ壊れれば通信が止まります。素直な発想は「同じ2点間にケーブルをもう数本足す」ことですが、L2 のままリンクを並列に張るとブロードキャストが循環し、スパニングツリーが冗長リンクを問答無用でブロックしてしまいます。結局1本しか使えません。
リンクアグリゲーション(Link Aggregation、LAG)は、この複数物理リンクを1本の論理リンクとして上位層に見せる技術です。STP からは1本のポートに見えるためブロックされず、帯域は合算され、メンバの1本が落ちても残りで通信が続きます。IEEE では当初 802.3ad、現在は 802.1AX として標準化されています。ベンダ用語では EtherChannel(Cisco)、ボンディング/bonding(Linux)、ポートトランク(trunk)などと呼ばれますが、ここでの trunk はVLAN のトランクとは別概念なので注意が必要です。
リンクを束ねてハッシュで分散する点はECMPとそっくりですが、LAG は L2 で同一の2装置間の物理リンク群を1本の論理リンクに見せる技術、ECMP は L3 で別々の next-hop(多くは別装置)へ分散する技術です。LAG は MAC 層の単一隣接として振る舞い、ECMP は IP 経路レベルで効くため複数ルータをまたげます。両者を多段で重ねる設計も一般的です。
静的集約と LACP の違い
リンクを束ねる方法は2つあります。**静的集約(static / mode on)**は、両端の管理者が「この N 本を束ねる」と手で固定するだけで、リンク間のプロトコル交換を行いません。設定ミスで片側だけ集約していたり、誤って別装置につながっていても気付かず、ループや黒穴(ブラックホール)を生むリスクがあります。
LACP(Link Aggregation Control Protocol)は、両端が LACPDU という制御フレームを定期的に交換し、束ねてよい組み合わせを動的に合意するプロトコルです。対向が本当に同じ集約相手か、リンクが双方向に生きているかを確認してから転送に組み入れるため、片側設定ミスや配線間違いを検出して安全側(束ねない)に倒せます。実務では原則 LACP を使い、対向が非対応のときだけ静的にするのが定石です。
| 観点 | 静的集約(on) | LACP(active/passive) |
|---|---|---|
| 制御フレーム | なし | LACPDU を定期交換 |
| 設定ミス検出 | できない(無言で組み込む) | 不一致リンクを除外し安全側へ |
| メンバの動的増減 | 手動のみ | ネゴシエーションで自動 |
| 相互運用 | 実装差が出にくい | 802.1AX 準拠どうしで相互運用 |
| 推奨 | 対向が非対応のとき限定 | 原則こちらを使う |
LACP のネゴシエーション
LACP には active と passive の2モードがあります。active は自分から LACPDU を送り始め、passive は相手の LACPDU を受けてから応答します。activeどうし、またはactiveとpassiveの組なら成立しますが、passiveどうしは両者とも待ちに入り集約が成立しません。
リンクが同じ束に入れるかは、LACPDU が運ぶ識別子で判定します。各装置は System ID(システム優先度+装置 MAC)を持ち、各リンクには Key(速度・デュプレックスなどから決まる集約グループ番号)が割り当てられます。両端の System ID と Key が整合するリンク群だけが同一 LAG の候補になります。さらにポートごとに Port ID(ポート優先度+ポート番号)を持ち、メンバ数に上限があるときの選抜順を決めます。
LACPDU が運ぶ主な情報:
Actor 自分側の System ID / Key / Port ID / State
Partner 自分が認識している相手側の同情報
State Activity(active/passive), Timeout(fast/slow),
Aggregation, Synchronization, Collecting, Distributing ...
各リンクは Actor と Partner の情報を突き合わせ、双方が「お互いを正しく認識し、同期した」と確認できると Selected(選抜)状態になり、Collecting(受信を有効化)とDistributing(送信を有効化)が立って初めて転送に使われます。LACPDU は既定で 30 秒間隔(slow)、fast 設定なら 1 秒間隔で送られ、3回連続で受信が途切れるとそのリンクを束から外します。fast は障害検出が速い反面、制御トラフィックが増えます。
LAG のメンバは原則すべて同一速度・同一デュプレックスである必要があります。Key がこれらから決まるため、1Gbps と 10Gbps を混ぜようとしても Key が一致せず別グループ扱いになり、片方しか Selected になりません。「ケーブルは挿さっているのに帯域が増えない」ときは、まずメンバ間の速度設定の不一致を疑うのが定石です。
ハッシュによるフロー分散
束ねたリンクへトラフィックをどう割り振るか。ここが LAG の性能を理解する核心です。素朴にパケットを1個ずつラウンドロビンで各メンバへ撒けば最も均等ですが、メンバ間の遅延差で**リオーダリング(順序逆転)**が起き、TCP が受信側でこれを欠落と誤認して不要な高速再送・輻輳回避を誘発します(詳細は再送制御の内部を参照)。そのため LAG も ECMP と同じく、同一フローは同一メンバに固定するフロー単位の分散を採ります。
割り当ては送信側が、パケットの特定フィールドをハッシュし、メンバ数で割った剰余でリンクを選ぶことで決めます。
index = H(ハッシュ入力) mod N # N は Selected メンバ数
member = link[index]
ハッシュ入力に何を使うかは装置と設定次第で、おおむね次の段階があります。
| ハッシュ入力 | 分散の粒度 | ばらつき |
|---|---|---|
| src/dst MAC(L2) | MAC ペア単位 | ルータ越しだと相手 MAC が固定で偏りやすい |
| src/dst IP(L3) | IP ペア単位 | サーバー間1対1だと1本に集中 |
| L4 ポート込み 5タプル | フロー(接続)単位 | ポートで散り、最も均等に近い |
ハッシュは送信方向ごとに各装置が独立に計算する点が重要です。スイッチ A から B への分散は A が決め、B から A への分散は B が決めます。したがって両端のハッシュ方式が違っても通信自体は成立し、方向ごとに偏りが変わり得ます。LAG が L2 を MAC ペアだけで分散していると、ルーティングを挟んだ通信では相手 MAC が常にルータの MAC に固定され、全フローが1本へ集中します。これが「LAG を組んだのに1リンクしか使われない」典型原因で、L3/L4 入力に変えるのが対処です。
フェイルオーバーと帯域非保証
メンバが1本落ちると、LACP は LACPDU の途絶(3回連続未受信)かリンクダウンでそれを検知し、当該リンクを Distributing から外します。以後ハッシュは残り N-1 本に対して計算され、そのリンクに固定されていたフローだけが別メンバへ移ります。STP の再収束を待つ必要がないため切り替えは速く、ミリ秒〜秒オーダーで残存帯域へ流れます。これがリンク冗長としての LAG の価値です。
「4本×1Gbps を束ねれば1本の通信が 4Gbps 出るか?」の答えはノー。分散はフロー単位のハッシュ固定なので、単一の TCP フローは必ず1メンバ=1Gbps しか使えない。4Gbps はあくまで十分に多くの独立フローがメンバ間に均された場合の合計上限であり、保証値ではない。ここを取り違えると性能設計を誤る。
合計帯域が「非保証」なのには2つの理由があります。第一に、単一フローはメンバ1本ぶんが上限です。バックアップやストレージ同期のような大流量1本(エレファントフロー)は、束が何本あっても1リンクしか飽和させられません。第二に、ハッシュの偏りです。フロー数が少ない、入力フィールドの散りが悪い、mod Nでたまたま同じ index に集まる、といった事情でメンバ間に不均衡が残ります。mod Nは N が変わると大半のフローの割り当て先がずれるため、メンバ増減のたびに一部フローが移動する点も ECMP と同様です。
帯域を真に積み上げたいなら、フロー数を稼ぐ(接続を多重化する)か、フロー内分散に踏み込む必要があります。ただしフロー内でパケットを撒くとリオーダリングが避けられないため、RDMA 系のように再順序付けに強いトランスポートや専用ハードウェアが前提になります。複数装置をまたいで束ねる MLAG/vPC のような構成、さらに上位のClos/Fat-Treeで水平スケールさせる設計は、LAG 単体の限界を補う方向の発展形です。
まとめ
リンクアグリゲーションは複数物理リンクを論理1本に束ね、帯域の合算とフェイルオーバーを同時に得る L2 技術です。LACP は両端で LACPDU を交換し、System ID・Key・State の整合を確認したリンクだけを Selected として転送に組み入れることで、片側設定ミスや配線間違いを検出して安全側に倒します。分散は ECMP と同じくフロー単位のハッシュ固定で、リオーダリングによる TCP 性能劣化を避ける代わりに、単一フローはメンバ1本ぶんしか出せません。総帯域はあくまで多数の独立フローを均した上限であって保証ではない――この「フロー固定ゆえの帯域非保証」を正しく理解することが、LAG を期待どおりに設計・運用する鍵になります。
ネットワーク Article
リンクアグリゲーション(LACP)の原理を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
LACP
比較で見る軸
難易度: advanced / カテゴリ: ネットワーク / タグ数: 6
導入後に効く点
LACP(802.1AX)は両端で LACPDU を交換して束ねてよいリンクを動的に合意し、速度・デュプレックス・対向装置が一致するリンクだけを Selected 状態にして転送に使う。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ネットワーク
- タグ数
- 6
判断チェックリスト
- 自社の用途が「LACP / リンクアグリゲーション」に近いか確認する。
- 強みである「リンクアグリゲーションは複数の物理リンクを1本の論理リンク(LAG)に束ね、帯域の合算とリンク障害時の自動フェイルオーバーを両立させる L2 の技術。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。