ECMP

読み:いーしーえむぴー / 英語表記:Equal-Cost Multi-Path

同じ宛先までのコストが等しい複数の経路を利用し、通信を負荷分散する仕組みである。ルータは複数の次ホップを転送先の候補として持つ。

イマシルちゃんの解説

同じ相手へ届ける経路が二つあっても、普段は片方しか使わない構成では、もう片方の回線に余裕があっても活用できないね。
ECMPは、経路を選ぶときの評価値であるコストが等しい複数の経路に通信を分ける仕組みだよ。
ルータは、次にパケットを渡す相手である次ホップを複数候補に持ち、通信ごとに送り先を選ぶんだ。
例えば、ある通信は左側の経路、別の通信は右側の経路というように振り分けるの。
一つの経路へ通信を集中させず、複数の回線を普段から活用できるようになるよ。

より深い解説

同じ宛先への候補を複数持つ

IPパケットを転送するルータは、宛先に一致する経路を調べて、次にパケットを渡す相手である次ホップを選ぶ。ECMPを利用すると、一つの宛先プレフィックスに対して複数の次ホップを転送先の候補にできる。

OSPFやIS-ISなどは、同じ宛先までのコストが等しい経路を複数求められる。ルーティングプロトコルは利用できる経路を求め、転送処理はその候補から実際のパケットの送り先を選ぶ。ECMPで利用できる経路数や振り分け方は、機器と設定によって異なる。

メリット:複数の経路を平常時から使い、一つの経路への通信の集中を減らせる。 以下では、同じエリア内のOSPF経路を求め、通信のまとまりごとに振り分ける例を追う。

経路全体の値を比べる

ルータAからDの先にある同じ宛先ネットワークへ、B経由とC経由で到達できるとする。図の矢印はAからDへ進む向き、数字はその向きのリンクに設定したコストを示す。Dから宛先ネットワークまでの共通区間は省略している。

AからBまたはCを経由してDへ進む4台のルータの構成
AからBまたはCを経由してDへ進む4台のルータの構成

OSPFでは、経路を構成するリンクのコストを合計し、値が最も小さい最短経路を選ぶ。この例でAからDまでの値を比べると、次のようになる。

経路計算結果
A → B → D8+1220
A → C → D11+920

Dから先に共通の値を加えても両者は等しい。この二つが同じ宛先への最良の経路なら、AはBとCを次ホップの候補にできる。個々のリンクの値がすべて同じである必要はなく、比べるのは経路全体の合計である。

例えばCからDへ向かうリンクの値を9から14へ変更すると、C経由は25となる。この例ではB経由の20の方が小さいため、通常はB経由だけが選ばれる。配線を二重にしても、経路の選択条件がそろわなければECMPにはならない。

通信のまとまりごとに振り分ける

候補がBとCに決まったら、Aはどちらへパケットを渡すかを選ぶ。一般的な方法は、一連の通信を表すフローごとに送り先を決める方法である。

例えばTCPやUDPの通信は、送信元IPアドレス、宛先IPアドレス、プロトコル番号、送信元ポート番号、宛先ポート番号の組で識別できる。この五つの情報の組を5タプルという。実際に振り分けへ使う項目は、機器と設定によって異なる。

ルータは識別情報をハッシュ関数に入力し、得られたハッシュ値をBかCの選択へ対応付ける。選択方法と候補の集合が変わらない間は、同じフローを同じ経路へ送れる。一方で別の通信は異なる値になることがあり、複数の経路へ分散できる。

パケットごとに交互に経路を変えると、経路ごとの遅延差によって受信時の順序が入れ替わる場合がある。TCPでは不要な再送などにつながり得るため、フロー単位の選択は、このような経路差による影響を抑えるうえでも役立つ。

ただし、接続の本数が分散しても通信量まで等しくなるとは限らない。大容量の転送がB経由へ集まり、小さな通信がC経由へ割り当てられることもある。通常のハッシュ関数による選択は、現在の混雑を測って空いている経路へ切り替える動作ではない。

注意:フロー単位で分散する場合、一つの通信が複数経路を合わせた速度になるわけではない。 例えば二つの経路がそれぞれ10Gbit/sでも、一本のTCP接続が自動的に20Gbit/sになることはない。複数の通信を振り分けることで全体の帯域を活用する。また、図のDより先に細い共通回線があれば、そこがボトルネックになる。

経路を増減させたときの動作

BからDへの回線が切れると、経路制御はその変化を反映する必要がある。OSPFの経路情報が更新され、Aの転送先からB経由が外れれば、残るC経由へ通信を送れる。

ECMPによる分散と、障害を検出して経路を切り替える処理は分けて考える。 障害の検出にはリンク状態や隣接装置の死活監視などを使う。検出から情報の伝達、経路の再計算、転送先への反映までには時間がかかる。各装置が変更後の経路へ落ち着くことを収束という。切替えの途中ではパケット損失が起こる場合があり、経路が複数あるだけで無停止が保証されるわけではない。

経路が減ると、同じハッシュ値でも割り当て先が変わる場合がある。故障した経路を使っていた通信だけでなく、ほかのフローの経路も変わるかどうかは選択アルゴリズムによる。回線が復旧して候補が増えた場合にも、同じ点を確認する。

障害後は一つの経路へ通信が集まるため、平常時に二経路の帯域を使い切っていると、残った経路で輻輳する可能性がある。冗長性を確保する設計では、回線が一本減った後にも必要な通信量を運べるかを考える。

リンクを束ねる技術と使い分ける

リンクアグリゲーションは、複数の物理リンクを一つの論理リンクとして扱う技術である。束ねたグループをLAGという。複数の回線を活用する点はECMPと共通するが、選択する対象が異なる。

観点ECMPLAG
選択する対象宛先へ向かう次ホップ論理リンク内の物理リンク
扱う単位IPの経路機器間をつなぐリンク
経路の形異なる中継ルータを通れる束ねる両端が協調する

異なる中継ルータを経由するIP経路を使いたい場合はECMPを検討する。隣り合う装置の間の複数リンクを一つとして利用したい場合は、リンクアグリゲーションを検討する。両者は併用でき、ECMPの各経路上のリンクをLAGで構成することもできる。

どちらにもフロー単位で振り分ける実装があり、単一の通信の速度だけを比べても違いは判断できない。どの区間を増強したいのか、どの装置や回線の故障に備えるのかを先に決める。束ねる条件やLACPの動作は、リンクアグリゲーションの記事で扱う。

参考資料

実際の試験ではここに出る!全1問

ネットワークスペシャリスト

午後Ⅱ

この用語が出てくる記事

↑