イーサチャネルでまとめても単純に帯域幅が増えるわけではない

イーサチャネルによって、複数のイーサネットリンクを1つにまとめて負荷分散することで利用可能な帯域幅を増加させられます。ただ、まとめたリンク数分だけ帯域幅が単純に増えるわけではありません。たとえば、2本の1Gbpsのイーサネットリンクをイーサチャネルでまとめても、単純に2Gbpsで通信ができるようになるわけではありません。

イーサチャネルでのイーサネットフレームの転送の仕組み

イーサチャネルの負荷分散はフロー単位で行われます。1つのフローで利用できる最大の帯域幅が増えるわけではありません。1Gbpsを2本まとめても、1つのフローで利用できる最大の帯域幅1Gbpsです。イーサチャネルを経由するたくさんのフローが発生すると、全体として利用できる帯域幅がイーサチャネルで束ねたリンク分だけ増えるようになります。

具体的には、転送するイーサネットフレームのアドレス情報からハッシュ計算を行い、利用するリンクを振り分けます。そのため、同じフロー、つまり同じアドレス情報のイーサネットフレームは同じリンクを通じて転送されることになります。同じフローのイーサネットフレームが同じリンクで転送されるので、1つのフローで利用できる最大の帯域幅は増えません。

同じフローとみなすイーサネットフレームのアドレス情報をどのように判断するかは、スイッチの設定によって決まります。設定により、送信元MACアドレス、宛先MACアドレスや、ネットワーク層のIPアドレス、さらにはトランスポート層のTCP/UDPポート番号などによって利用するリンクの振り分けを行うことができます。イーサチャネルのリンク上で、どのようなアドレス情報のイーサネットフレームを転送するかを考えて、適切な振り分けが行われるように設定しなければいけません。

イーサチャネルのフレーム転送の例(送信元MACアドレス)

イーサチャネルのフレーム転送について、次の図のような、シンプルな例で考えてみます。

図 イーサチャネルでのリンクの振り分け その1
図 イーサチャネルでのリンクの振り分け その1

この図では、SW1とSW2間を2本のリンクで接続して、イーサチャネルによって2本のリンクを1つにまとめています。SW1とSW2は、イーサチャネルのリンクの振り分けとして、送信元MACアドレスに基づくものとしています。SW1にはPC1とPC2が接続され、SW2にはSRV1が接続されています。話を簡単にするために、すべて同一VLANと考えてください。

PC1からSRV1へのイーサネットフレームとPC2からSRV1へのイーサネットフレームでは、送信元MACアドレスが異なります。SW1は送信元MACアドレスがPC1のイーサネットフレームはポート1へ転送し、送信元MACアドレスがPC2のイーサネットフレームはポート2へ転送するといったように、複数のリンクを振り分けることができます。PC1/PC2からSRV1あてのイーサネットフレームは、この図のようにうまくリンクの振り分けができます。

そして、通信はたいてい双方向です。PC1やPC2からSRV1に何らかのデータを送信すると、その返事が返ってきます。SRV1からPC1やPC2へのイーサネットフレームの転送を考えると、次の図のようになります。

図 イーサチャネルのリンクの振り分け その2
図 イーサチャネルのリンクの振り分け その2

SRV1からPC1またはPC2あてのイーサネットフレームの送信元MACアドレスは当然ながら、SRV1のMACアドレスで共通です。SW2でのリンクの振り分けを送信元MACアドレスで行っていると、PC1宛てもPC2宛ても結局は同じリンクにイーサネットフレームを転送することになります。1つのリンクだけに集中すると、帯域幅が足りなくなってしまう可能性があります。この場合、SW2では宛先MACアドレスや送信先IPアドレスを基にリンクの振り分けを行うようにすると、うまく負荷分散できるようになります。

先にも述べたが、イーサチャネルのリンク上でどのようなイーサネットフレームを転送するかをしっかりと考えて、適切なリンクの振り分けができるようにすることが重要です。可能ならば、TCP/UDPポート番号などよりレイヤの高いアドレス情報でリンクを振り分けるようにしたほうがリンクの利用効率がよくなります。アプリケーションが異なれば、TCP/UDPのポート番号も異なるので、同じPCの通信であっても、アプリケーションごとにリンクが振り分けられることが期待できます。

リンクの振り分けのアルゴリズムとして、どのようなアドレス情報を利用できるかも機器によって異なるので、機器の仕様を確認しておくことが重要です。

レイヤ2スイッチの仕組み