帯域の魔術師:LACPの深淵と、パケットが語る「論理リンク」の真実
ネットワークエンジニアの端くれとして、これまで数々の「リンクダウン」の悲鳴を聞いてきた。パケットロス、再送の嵐、そして原因不明の帯域枯渇。そんなカオスな現場で、我々が最後に頼るのが IEEE 802.3ad 、そして現代の標準である IEEE 802.1AX 、いわゆるリンクアグリゲーション(LACP)だ。
単に「リンクを束ねて速くする」という教科書的な理解で止まっているなら、それは宝の持ち腐れだ。今日は、パケットレベルの挙動、そしてプロトコルが隠し持つ「死線」について深く掘り下げていこう。
—
LACPのパケット:SLOW_PROTOCOLSという舞台
LACPは、01:80:c2:00:00:02 という、IEEEが定めた SLOW_PROTOCOLS マルチキャストアドレスの上で踊っている。このアドレスの肝は、ブリッジ(L2スイッチ)がこのフレームを転送せず、必ず自装置で終端させるというルールにある。
LACPDU(LACP Data Unit)の中身を覗くと、Actor(自分)と Partner(相手)のシステム優先度、MACアドレス、そして Key という概念が見えてくる。現場でトラブルが起きる原因の多くは、この Key の不一致や、LACPのタイマー設定ミスによる「フラッピングの連鎖」だ。
パケットキャプチャで見る「生存確認」
tcpdump を叩いて流れてくるLACPDUを眺めると、Fast Periodic モード(1秒間隔)と Slow Periodic モード(30秒間隔)があることが分かる。
高負荷なWebサーバーのバックボーンなら、迷わず Fast を選択すべきだ。ネットワークの故障検知時間を物理リンクの切断を待たずに、プロトコルレベルで最短で特定する。これが、TCPセッションを切断させないための、インフラ屋の矜持だ。
—
物理リンクの束ねから、トランスポートの最適化へ
リンクアグリゲーションは、単に帯域を広げるだけではない。実は、TCP/IPのパフォーマンス最適化と密接に関わっている。
フローのハッシュ化とTCPバッファの関係
LACPでは、パケットの送信元・宛先のIPやポートをハッシュ計算し、どの物理リンクを使うか決定する。ここで注意すべきは「順序逆転(Out-of-order)」だ。NICのバッファやスイッチのASIC内部での処理順序が入れ替わると、TCPは「パケットロス」と誤認し、Congestion Window を一気に縮小させる。
これを防ぐためのチューニングとして、以下の設定を検討してほしい。
# Linuxにおけるbondingのハッシュアルゴリズム設定
# xmit_hash_policyをlayer3+4にすることで、ポート番号を含めたハッシュを生成
# これにより、単一のTCPフローが特定の物理リンクに固定され、順序逆転を防ぐ
echo "layer3+4" > /sys/class/net/bond0/bonding/xmit_hash_policy
# TCP受信バッファの最適化:高帯域・長距離通信でのRTTを考慮
# 10Gbps以上のリンクを束ねるなら、以下の値をチューニングする
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
—
現場のセキュリティ:LACPを狙う「なりすまし」への備え
意外と見落とされがちなのが、LACPのネゴシエーションを悪用した中間者攻撃だ。悪意のあるデバイスがLACPDUを偽装して送り込み、アグリゲーションの一部として自らを取り込むことで、トラフィックの盗聴を試みる。
これを防ぐための防御策として、スイッチ側での LACP Port-Security 的な挙動、あるいは Static LAG の検討が必要だ。
脆弱性を回避するためのベストプラクティス
1. LACPのActive/Passiveの分離: サーバー側を Active にするのは当然だが、スイッチポート側で LACP Timeout を Short に設定し、異常なパケットの挙動を即座に検出する。
2. ポート保護: 未使用ポートをすべて shutdown するのは基本中の基本だが、物理ポートに対して STP PortFast や BPDU Guard と同様に、LACPのネゴシエーションに参加できる機器を限定する設定を投入せよ。
—
結論:パケットに語らせる技術者であれ
リンクアグリゲーションは、単なる「配線」ではない。それは、物理層とネットワーク層の間に築かれた、信頼の契約だ。
- RTT削減: 物理リンクが安定していれば、再送タイマーのチューニングも攻めた値に設定できる。
- TLSハンドシェイク: 高速なリンク冗長は、TLSハンドシェイクにおけるRTTの積み重ねを安定させ、ユーザー体験を劇的に改善する。
インフラアーキテクトとして、コマンドを叩く際、「今、このパケットはどのハッシュアルゴリズムを通り、どの物理リンクの電圧に乗っているのか」を常に想像してほしい。その想像力こそが、大規模障害を防ぐ最後の砦になるのだから。
次の記事では、より深淵な IEEE 802.1Q のタグ付けと、それによる MTU サイズのオーバーヘッド問題について語ろうと思う。ネットワークは、常に微細な値の中にこそ、真実が隠されている。
コメント