みるぽんぬ @mirupon

なんにもないです

IEEE802.3ad とか Link Aggregation とか bonding とか port channnel って呼ばれるものの誤解

誤解してる人がなんか多そうなので、ちょっとだけ説明。

 

IEEE802.3ad とか Link Aggregation とか bonding とか port channnel (以下Link Aggregation)は、複数のIEEE802.3*経路を束ねて帯域を増やそうというものです。

だけど、帯域がn00Mbpsになったり、nGbpsになるというものではありません

 

なぜか?

それは、Link Aggregationの仕組みによるものです。

 

Link Aggregationは複数の経路を選択する時に、何かしらの要素をハッシュして経路を決定します。

その要素は、MACアドレス・IPアドレス、MAC+IPアドレスIPアドレス+ポート番号など、装置やOSによってことなりますが、いづれもフレームごとに経路を選択するのではなく、最低限でもセッションごとの経路選択になります。

一番細かく経路を選択するIPアドレス+ポート番号でハッシュする方式を設定しても、TCPの1セッションで使える帯域は1本の帯域を越えることはありません。

たとえば、1Gbpsを4本Link Aggregationで束ねたとしても、TCP1セッションで使える帯域は1Gbps

複数のTCPセッションや複数のノードが存在する場合かつハッシュ値が異なり経路が分かれた場合にのみ実効帯域が増えるという感じでしょうか。

 

つまり、Link Aggregation組んだよー → 試しにFTPで1ファイル転送して帯域測定だー → 帯域増えてねー

というのは仕組みを全然理解してないという事ですね

 

Link Aggregationを利用して帯域測定をするなら、束ねた本数*10 多重くらいのデータ転送を10回くらい試して統計を取るようにしましょー

運用中でも物理インターフェイスと論理インターフェイスのパケットカウンタをSNMPで取って集計すると多少なり偏りが出てると思います。偏りすぎてる場合はハッシュ要素を見直した方が良いです。

 

ちなみに通信相手がある程度確定しているのであれば、Link Aggregationを使うよりポリシールーティングを使う方が良かったりする場合もあるので、状況に応じて設計すると良いと思います。

Linuxであれば、iproute2(Advanced Routing)なんかがそれですね。インターフェイスごとにRouting Table持てたりするので、いぢると楽しいかもしれません。