パケットの鼓動を聞け:LACPDUフレーム構造から紐解くリンクアグリゲーションの深層
ネットワークエンジニアなら誰もが一度は設定する「LACP(Link Aggregation Control Protocol)」。複数の物理リンクを束ねて太い一本の論理パスを作り出すこの技術は、データセンターの可用性とスループットを支えるインフラの基礎の基礎です。
「とりあえず channel-group mode active と書いておけば動く」
実務の現場ではそれで事足りるかもしれません。しかし、ひとたびポートフラッピングやリンクの片通(片方向通信)、あるいは他ベンダー間でのLACPネイバー不成立といったドロドロとした障害に直面したとき、あなたの武器になるのは「ワイヤーを流れるフレームの真実」を知っているかどうかです。
今回は、IEEE 802.3ad(現在はIEEE 802.1AXに統合)で規定されているLACPDU(Link Aggregation Control Protocol Data Unit)のフレーム構造を深掘りし、パケットの隅々に宿るエンジニアリングの美しさと、現場で使える実践的なデバッグ手法を解説していきます。
—
1. LACPDUとは何か?:L2の深淵を流れるハートビート
LACPは、スイッチ間(またはサーバとスイッチ間)で動的にリンク集約グループ(LAG)を形成・維持するためのプロトコルです。このLACPが状態同期のために交換し続ける制御パケットこそが、LACPDUです。
LACPDUは、通常のデータフレームとは異なり、OSI参照モデルのデータリンク層(L2)で完結します。上位層のIPアドレスやTCP/UDPポート番号は存在しません。彼らはただ、物理ポートの生死と対向デバイスとの絆を確かめ合うために、ひたすらイーサネットフレームを投げ合っています。
宛先は誰か?(Slow Protocols Multicast Address)
LACPDUが送出されるとき、その宛先MACアドレスはユニークなブロードキャストや特定のスイッチのMACではありません。IEEE 802.3で規定された「スロープロトコル(Slow Protocols)」のための予約済みマルチキャストアドレスが使用されます。
- 宛先MACアドレス:
01:80:c2:00:00:02(Slow Protocols Multicast Address) - イータイプ(EtherType):
0x8809(Slow Protocols)
この 01:80:c2:00:00:02 というアドレスのミソは、IEEE 802.D互換のブリッジ(通常のL2スイッチ)によってフォワード(転送)されないという点にあります。このマルチキャストアドレス宛てのフレームは、直近の受信用ポートで必ず終端(トラップ)されます。つまり、LACPDUが対向機器を飛び越えてネットワークの奥深くへ氾濫することはありません。
—
2. LACPDUのフレーム構造とTLVの解剖学
LACPDUは、イーサネットヘッダに続き、サブタイプやバージョン情報、そして複数のTLV(Type-Length-Value)構造の塊(Actor / Partner情報など)で構成されています。
パケットキャプチャ(Wiresharkなど)を覗いたときに見える、LACPDUの主な内部構造を上から順に紐解いていきましょう。
+---------------------------------------------------+
| Destination MAC: 01:80:c2:00:00:02 |
| Source MAC: <送信元ポートのMACアドレス> |
| EtherType: 0x8809 (Slow Protocols) |
+---------------------------------------------------+
| Subtype: 0x01 (LACP) |
| Version Number: 0x01 |
+---------------------------------------------------+
| [TLV 1] Actor Information (送信側の情報) |
| - System Priority, System ID, Key, Port... |
+---------------------------------------------------+
| [TLV 2] Partner Information (受信側の認識情報) |
| - System Priority, System ID, Key, Port... |
+---------------------------------------------------+
| [TLV 3] Collector Information (集約受信側の情報) |
| - МакMax Delay |
+---------------------------------------------------+
| [TLV 4] Terminator (終端マーカー) |
+---------------------------------------------------+
主要なフィールドとパラメータの意味
LACPDUの内部には、対向機器とお互いのアイデンティティを突き合わせるための重要なパラメータが詰まっています。
1. Actor Information (送信側情報)
- System Priority(システム優先度): 2バイト。LAGを形成するマスターデバイスを決めるための値。小さい方が優先されます。
- System ID(システムID): 6バイト。通常はスイッチのベースMACアドレスが使われます。System PriorityとSystem IDを合わせた8バイトが、LACPにおける「デバイスの固有識別子」になります。
- Key(アグリゲーションキー): 2バイト。管理者が手動または自動で割り当てるポートのグループ化キーです。「同じキーを持つポート同士しか束ねない」という厳格なルールを司ります。
- Port Priority / Port Number: 送信元ポートの優先度と物理ポート番号。
- State(ステート・フラグ): 1バイト(実際にはビットフィールド)。LACPの挙動を左右する非常に重要なフラグ群です。
最重要フラグ:LACP Stateの8ビット
Actor/Partner情報の中に含まれる State フィールドは、以下の1バイトのビットマスクで構成されています。実務のトラブルシューティングでは、このフラグがオンになっているかどうかが勝負の分かれ目になります。
Bit 0: LACP_Activity (1 = Activeモード, 0 = Passiveモード)
Bit 1: LACP_Timeout (1 = ショートタイムアウト [1秒毎], 0 = ロングタイムアウト [30秒毎])
Bit 2: Aggregation (1 = リンク集約可能, 0 = 個別リンク)
Bit 3: Synchronization (1 = 同期完了・LAG参加中, 0 = 未同期)
Bit 4: Collecting (1 = 受信フレーム処理中)
Bit 5: Distributing (1 = 送信フレーム配信中)
Bit 6: Defaulted (1 = パートナー情報喪失によりデフォルト値使用)
Bit 7: Expired (1 = タイムアウト発生)
例えば、対向機器との間で Synchronization(Bit 3)が立たない場合、いくら待ってもLAGはアップしません。原因はキーの不一致か、VLANネイティブの不整合、あるいは物理層のL1障害によるLACPDUのロストです。
—
3. 実務で役立つ通信フローと状態遷移
LACPがリンクを確立するまでのシーケンスは、お互いの状態フラグを交換するハンドシェイクの連続です。
[Switch A (Actor)] [Switch B (Partner)]
| |
|------- LACPDU (Actor: A, Partner: NULL) ------>| ※最初は相手を知らない
|<------ LACPDU (Actor: B, Partner: A) ---------| ※相手がAを認識して返答
| |
|--- LACPDU (Actor: A, Partner: B [Sync=1]) ---->| ※双方が同期状態を確認
|<-- LACPDU (Actor: B, Partner: A [Sync=1]) ----|
v v
[ 双方でLAG (Channel-Group) 確立 ]
タイムアウトの挙動:ActiveとPassiveの組み合わせ
LACPには、フレームを積極的に送信する Active モードと、相手から送られてくるのを待ち受ける(自分からはあまり喋らない) Passive モードがあります。
- Active vs Active: 双方からLACPDUが飛び交い、瞬時にリンクアップします(推奨設定)。
- Active vs Passive: 片方がActiveであれば、Passive側のポートもLACPで応答するため正常にリンクアップします。
- Passive vs Passive: 両方Passiveだと一生LACPDUが送信されないため、絶対にLAGは組み上がりません。(現場でありがちな凡ミスのひとつです)
また、LACPDUの送信間隔(Timeout)には以下の2種類があります。
- Long Timeout(デフォルト): 30秒に1回送信。3回分(90秒)ロストするとリンクダウンと判定。
- Short Timeout: 1秒にモンスターのように送信。3秒で障害を検知するため、高可用性が求められるサーバー接続などで重宝されますが、CPU負荷やリンクフラッピング時のログ増大に注意が必要です。
—
4. 現場のインフラエンジニア向け:トラブルシューティングと設定例
理論が分かったところで、現場で直面するトラブルを想定した具体的な設定例と、LACPの状態を確認するためのCLIコマンドを見ていきましょう。
設定例:Cisco IOS / Catalystスイッチの場合
サーバーのNICチーミング(LACP / 802.3ad)を収容するポートチャネルの設定例です。
! 物理インターフェース側の設定
interface GigabitEthernet0/1
description Server-A NIC1 (LACP Active)
channel-group 1 mode active ! LACPをActiveモードで強制起動
no shutdown
interface GigabitEthernet0/2
description Server-A NIC2 (LACP Active)
channel-group 1 mode active
no shutdown
! 論理ポートチャネル(LAG)側の設定
interface Port-channel1
description LAG to Server-A
switchport trunk encapsulation dot1q
switchport mode trunk
デバッグコマンド:LACPの脈拍を診る
LACPがうまく同期しないとき、まず叩くべきコマンドがこれです。
Switch# show lacp neighbor
Flags: S - Device is_synchronized with partner. Exp - LACP timeout
A - Device is in active mode. P - Device is in passive mode
F - Partner is operating in collectors_distributing mode
Chan Partner ID Sys Pri Port Pri Port No Flags
------+--------------+---------+----------+---------+-------
Po1 aabb.cc00.1100 32768 32768 1 SA
Po1 aabb.cc00.1100 32768 32768 2 SA
ここで Flags 欄に注目してください。SA(Synchronized & Active)が出ていれば正常です。もしフラグが A のままで S に変わらない場合、対向のスイッチやサーバー側で以下のような問題が発生しています。
1. アグリゲーションキーの不一致: スイッチ側の channel-group 番号が異なっていたり、他ポートのグループと混ざっている。
2. ネイティブVLANやSTPの不整合: L2の基本設定ミス。
3. 物理層(L1)の片通: 送信はできているが受信ができていない(光ファイバーのRx/Txクロスなど)。
さらに深くパケットレベルで追う必要がある場合は、スイッチのパケットキャプチャ機能(Ciscoであれば Embedded Packet Capture (EPC) や Ethanalyzer)を使います。
! Cisco NexusなどのEthanalyzerでLACPDU(EtherType 0x8809)をキャプチャする例
ethanalyzer local interface int mgmt0 capture-filter "ether proto 0x8809" limit-packets 10
—
まとめ
LACPDUは、一見するとただの地味な制御フレームです。しかし、その内部には「我々は同じグループだ」「私は生きている」「同期を完了した」というデバイス同士の熱い対話が刻まれています。
日々の運用で「なぜかLAGが組めない」「片方のリンクが落ちると通信が途切れる」といった壁にぶぶつかったとき、今回解説したLACPのフレーム構造、TLVのパラメータ、そして状態フラグの意味を思い返してみてください。パケットのバイナリやステータス表示の裏側にある「ネットワークの鼓動」が聞こえてくれば、どんな複雑なインフラ障害も、必ずロジカルに紐解くことができるはずです。
コメント