EIGRP のメトリック計算と variance|不等コスト負荷分散の仕組み

  • URLをコピーしました!
目次

はじめに

EIGRP で variance 2 を設定したのに、期待した経路がルーティングテーブルへ追加されない。variance を「2 番目の経路も使う指定」と理解していると、この状況は説明できません。

不等コスト経路が使われるかどうかは、フィージビリティ条件と、variance で決まるメトリックの範囲という 2 つの独立した条件で決まります。variance は後者を広げるだけで、フィージビリティ条件を緩めるコマンドではありません。

この記事でわかること
  • EIGRP のメトリックに使う値と、既定で計算に加わる値・加わらない値
  • 最小帯域幅と累積遅延から複合メトリックを手計算する手順
  • Classic Metrics の 32 ビット計算と Wide Metrics の 64 ビット計算の違い
  • variance 2 が何を 2 倍しているのか
  • variance の範囲内でも不等コスト経路として採用されない理由
  • Classic Mode と Named Mode での設定場所と、設定後の確認手順
  • ルーティングテーブルへの複数経路登録と、実際の転送の違い

本記事は Cisco IOS XE 17.x の公式資料を基準にした IPv4 構成を対象とします。DUAL、RD、CD、FD の定義は関連記事『EIGRP の DUAL とフィージブルサクセサの仕組み』で扱っているため、ここでは必要な範囲で振り返るにとどめます。

EIGRP のメトリック計算

メトリックを構成する値

EIGRP は経路ごとに複数のベクターメトリックを運びます。Cisco の設定ガイドが挙げているのは次の 5 つです。

内容経路上での扱い既定の計算
bandwidth経路の最小帯域幅(kbps)合計せず、最も小さい値を採用使用する
delay経路の遅延(10 マイクロ秒単位)経路上の値を合計使用する
reliabilityパケット送信の成功見込み(0〜255)動的に算出使用しない
load経路の実効負荷(0〜255)動的に算出使用しない
mtu経路上の最小 MTU(バイト)最も小さい値を運搬使用しない

帯域幅は合計せず経路上の最小値を使い、遅延だけが合計されます。1 か所でも低速なリンクがあれば、経路全体の帯域幅の項はその値で決まります。

MTU は経路情報として運ばれますが、既定の計算式には現れません。ホップ数も計算式には含まれず、EIGRP AS の最大サイズを制限する役割を持ちます。信頼性と負荷は動的に計算されて Vector metric に表示されますが、既定の K 値では計算に寄与しません。

bandwidth と delay は実際の性能を変えるコマンドではない

bandwidth コマンド

ルーティングプロトコルの計算や統計に使う帯域幅の値を宣言します。インターフェースが実際に送出できる速度を制限するものではありません。

delay コマンド

メトリック計算に使う遅延の値を宣言します。実際のパケットに遅延を発生させるものではありません。

どちらも経路選択に影響する宣言値です。実回線と大きく異なる値を入れると、経路選択が設計意図からずれます。

K 値と既定の計算式

K 値は、各ベクターメトリックを計算へどれだけ反映するかを決める係数です。既定値は次のとおりです。

係数既定値対応する値
K11帯域幅
K20負荷
K31遅延
K40信頼性
K50信頼性
K60拡張属性(Wide Metrics で追加)

Cisco が示す Classic Metrics の一般式は次のとおりです。

EIGRP composite cost metric = 256 * ((K1*Scaled Bw) + (K2*Scaled Bw)/(256 - Load) + (K3*Scaled Delay)*(K5/(Reliability + K4)))

K2 が 0 なので第 2 項は消え、K5 が 0 の場合は K5/(Reliability + K4) が 1 として扱われます。既定の K 値では、式は「256 ×(Scaled Bw + Scaled Delay)」まで短くなります。Cisco の資料も、ほとんどの構成では遅延と帯域幅だけが使われ、帯域幅が優先されると説明しています。

K 値はネイバー間で一致していることが前提です。食い違うとネイバー関係が確立できず、コンソールに K-value mismatch が表示されます。EIGRP ドメイン全体で同時に変更する必要があるため、運用中の変更は影響範囲が広くなります。Cisco の Wide Metrics のドキュメントも、K 値の既定は多くのネットワークで最適に動作するよう選定されており、経験のあるネットワーク設計者の助言なく変更しないよう推奨しています。

経路を調整したい場合は、K 値ではなく bandwidthdelay の宣言値を見直すほうが影響範囲を限定できます。両者は別の作業です。

帯域幅と遅延による計算例

既定の K 値を前提に、経路のメトリックを段階的に計算します。R1 から宛先まで 2 本のリンクを経由し、次の値が設定されているものとします。

区間帯域幅遅延
R1 から R22000 kbps20000 マイクロ秒
R2 から宛先ネットワーク100000 kbps100 マイクロ秒
手順
経路上で最小の帯域幅を選ぶ

2000 kbps と 100000 kbps のうち小さいほうを採用し、最小帯域幅は 2000 kbps になります。合計しない点に注意します。

手順
経路上の遅延を合計する

20000 マイクロ秒と 100 マイクロ秒を足します。累積遅延は 20100 マイクロ秒です。

手順
Cisco の計算式へ単位を合わせる

帯域幅は 10 の 7 乗を最小帯域幅(kbps)で割って反転・スケーリングします。遅延はマイクロ秒を 10 で割り、10 マイクロ秒単位へ変換します。

Scaled Bw    = 10000000 / 2000  = 5000
Scaled Delay = 20100 / 10       = 2010

この例はどちらも割り切れる値を選んでいます。割り切れない値では端数の扱いが問題になるため、手計算では割り切れる値から始めると追いやすくなります。

手順
既定の K 値を適用して合計する

K1 と K3 が 1、ほかが 0 なので、Scaled Bw と Scaled Delay を足すだけです。

5000 + 2010 = 7010
手順
256 を掛けて最終メトリックを出す
256 * 7010 = 1794560

この経路の複合メトリックは 1794560 になります。

Cisco の資料も同じ手順の例を示しています。帯域幅 128 kbps、遅延 84000 マイクロ秒のリンクでは 256 * (10000000/128 + 84000/10) = 256 * 86525 = 22150400 です。低速なリンクが 1 本入るだけで、帯域幅の項が桁違いに大きくなります。遅延で経路を制御したい場合も、帯域幅の項が支配的であれば効果は限定されます。

Classic Metrics と Wide Metrics の違い

ここまでの計算は 32 ビットの Classic Metrics です。Cisco の Wide Metrics のドキュメントは、64 ビット計算の適用範囲を明確に区切っています。

参考: Cisco「IP Routing Configuration Guide, Cisco IOS XE 17.x – EIGRP Wide Metrics」
“The 64-bit metric calculations work only in EIGRP named mode configurations”
(64 ビットのメトリック計算は EIGRP named mode の設定でのみ動作します。)
https://www.cisco.com/c/en/us/td/docs/routers/ios/config/17-x/ip-routing/b-ip-routing/m_ire-wid-met.html

この引用は、Wide Metrics が Named Mode 固有の機能であることの根拠です。Classic Mode では 32 ビット計算のままです。

Wide Metrics が必要になった背景

Classic Metrics には、高速インターフェースで差を表現できない問題があります。インターフェースへ設定できる遅延の最小値は 10 マイクロ秒のため、10 ギガビットイーサネットやポートチャネルで束ねたリンクが、単一のギガビットイーサネットと同じに見えます。Cisco の資料は、この結果として意図しない等コストロードバランシングが起きる可能性を挙げています。

Wide Metrics は 64 ビット計算と RIB スケーリングにより、およそ 4.2 テラビットまでのインターフェースに対応します。既定の計算式は Classic Metrics とは形が異なります。

項目Wide Metrics での定義
既定の複合メトリック(K1 × Minimum Throughput) + (K3 × Total Latency)
Minimum Throughput(10000000 × 65536) ÷ 帯域幅
Total Latency(1 ギガビット未満)(遅延 × 65536) ÷ 10
Total Latency(1 ギガビット超)(10000000 × 65536 ÷ 10) ÷ 帯域幅
ワイドスケール定数65536

先ほどと同じ経路(最小帯域幅 2000 kbps、累積遅延 20100 マイクロ秒)を Wide Metrics で計算すると、Minimum Throughput が 327680000、Total Latency が 131727360、合計は 459407360 です。Classic Metrics の 1794560 とは桁が異なります。

RIB スケーリングと表示値の違い

64 ビットの値は、Cisco の RIB が必要とする 4 バイトの符号なし整数へそのままは収まりません。そのため EIGRP は、RIB へ登録する際にスケーリング係数で縮尺します。この係数は metric rib-scale コマンドで設定し、Cisco の EIGRP コマンドリファレンスでは既定値は 128 です。Named Mode で Wide Metrics を使用する場合、トポロジテーブルのメトリックとルーティングテーブルのメトリックが一致しないのは、この縮尺が入るためです。

metric rib-scale を設定すると、RIB 内のすべての EIGRP 経路がクリアされ、新しいメトリック値で入れ直されます。対象プラットフォームやリリースでの実際の値は show eigrp protocols の表示でも確認できます。

variance による不等コストロードバランシング

EIGRP は、メトリックが異なる経路へも通信を分散できます。これを制御するのが variance です。Cisco の EIGRP コマンドリファレンスは、追加する経路の条件を、そのメトリックがサクセサのメトリックと variance の積より小さいことと定めています。値の範囲は 1 から 128 で、既定は 1 です。既定の 1 でも等コスト経路は通常の等コストロードバランシングとして扱われ、variance が関係するのは不等コスト経路だけです。

2 段階の判定

参考: Cisco「How Does Unequal Cost Path Load Balancing (Variance) Work in IGRP and EIGRP」
“If a path is not a feasible successor, the path is not used in load balancing”
(フィージブルサクセサでない経路は、ロードバランシングに使用されません。)
https://www.cisco.com/c/en/us/support/docs/ip/enhanced-interior-gateway-routing-protocol-eigrp/13677-19.html

これが本記事の結論の根拠です。不等コスト経路が使われるには、次の両方を満たす必要があります。

  1. フィージビリティ条件を満たす。つまり、そのネイバーが通知した RD が、自ルーターの FD より小さい
  2. その経路のメトリックが、サクセサのメトリックと variance の積より小さい

1 つ目は DUAL がループのない経路を選ぶための条件で、variance の値とは無関係です。RD、CD、FD の定義は関連記事『RD・CD・FD の違い』で整理しています。2 つ目だけを見て「variance を大きくすれば経路が増える」と考えると、次の数値例でつまずきます。

3 経路の数値例

関連記事と同じ仮想例を使います。以下は説明のために作成した値であり、実機から取得した出力ではありません。R1 から宛先ネットワークへ、R2・R3・R4 の 3 経路があるとします。

経由先RDCD初期状態
R22816030720サクセサ
R33072040960フィージブルサクセサではない
R42048038400フィージブルサクセサ

R2 経由の CD が最小の 30720 であり、初期状態の FD は 30720 です。ここで variance 2 を設定すると、比較の基準になる値は次のように決まります。

30720 * 2 = 61440

この 61440 と各経路の CD を比べます。判定結果は次のとおりです。

経由先条件 1: RD と FD 30720 の比較条件 2: CD と 61440 の比較不等コスト経路としての採用
R3RD 30720 は FD と等しく、RD < FD が成立しないCD 40960 は 61440 より小さい採用されない
R4RD 20480 は FD より小さく成立するCD 38400 は 61440 より小さい採用される

R3 経由は条件 2 を満たしていますが、RD と FD が等しくフィージビリティ条件を満たさないため採用されません。この経路は variance をいくら大きくしても追加されません。variance が広げるのはメトリックの範囲だけだからです。なお、この例では 38400 と 40960 のいずれもしきい値 61440 と一致しないため、境界値ちょうどの扱いによって結論が変わることはありません。

Classic Mode と Named Mode の設定

ネイバーが確立し経路を学習できている状態を前提に、差分の設定だけを示します。networkpassive-interface を含む基本構成は、関連記事『Classic Mode と Named Mode の設定方法』を参照してください。

Classic Mode では、EIGRP プロセスの配下へ直接設定します。

router eigrp 100
 maximum-paths 4
 variance 2
 traffic-share balanced

Named Mode では、これらのコマンドはアドレスファミリー直下ではなく、topology base から入るアドレスファミリートポロジコンフィグレーションモードに置きます。

router eigrp EIGRP-LAB
 address-family ipv4 unicast autonomous-system 100
  topology base
   maximum-paths 4
   variance 2
   traffic-share balanced
  exit-af-topology
 exit-address-family

トポロジテーブルに対する動作は topology base の配下、インターフェースに対する動作は af-interface の配下という切り分けで覚えると、設定場所に迷いにくくなります。

maximum-paths と traffic-share

variance

どのメトリックまでを候補に含めるかを決めます。フィージビリティ条件と組み合わせて、採用する経路を選び出す段階です。

maximum-paths

条件を満たした経路を何本までルーティングテーブルへ登録できるかを決めます。既定の本数は機種やリリースで異なる可能性があるため、自環境で確認します。

traffic-share

登録された複数経路へ通信をどう振り分けるかの方針を決めます。balanced はメトリックの比率に応じた配分で、Cisco の資料ではこれが既定と説明されています。

まず variance とフィージビリティ条件で候補が決まり、次に maximum-paths の上限内で登録され、最後に traffic-share の方針が適用されます。候補に入っていない経路は、登録の上限を広げても対象になりません。

traffic-share min across-interfaces を指定すると、ルーティングテーブルに複数経路があっても通信は最小コストの経路だけへ送られ、転送の見え方は variance を設定しない場合と同じになります。それでも意味があるのは、フィージブルな経路がすべてルーティングテーブルへ登録され、収束時間の短縮につながるためです。平常時は最短経路だけを使い、障害時の切り替えを速くしたい場合の選択肢になります。

経路の登録と実際の転送は別の層

Cisco の EIGRP コマンドリファレンスは、EIGRP が複数の経路をローカルのルーティングテーブルへ登録すること、および実際のロードシェアはローカルのスイッチングハードウェアまたはソフトウェアが担当することを説明しています。複数経路が登録されることと、実通信が期待した比率で分かれることは同じではありません。

実際の転送結果は、対象プラットフォームの Cisco Express Forwarding(CEF)の情報と、実通信の両方で確認します。転送側の挙動は機種やソフトウェアによって異なるため、本記事では踏み込みません。

設定結果を確認する

期待した経路が追加されない場合は、どの段階で外れたのかを順に確認します。以下のコマンド例では、宛先を説明用に予約されたアドレスである 192.0.2.0/24 としています。

手順
K 値とメトリック方式を確認する
show eigrp protocols
show ip protocols

K 値、AS 番号、設定した variance の値、メトリックのバージョンと RIB スケーリングの値を確認します。K 値が想定と違えば、メトリックの計算そのものが前提から外れます。

手順
すべての候補経路を確認する
show ip eigrp topology all-links

show ip eigrp topology はサクセサとフィージブルサクセサだけを表示します。条件を満たしていない経路まで見るには all-links が必要です。追加したい経路を受信できているかをここで確認します。

手順
RD と FD を突き合わせる

対象の宛先について、その経路の RD と自ルーターの FD を比べます。RD < FD が成立していなければ、この時点で候補から外れています。variance の値を変えても結果は変わりません。

手順
variance のしきい値を計算する

サクセサのメトリックに variance の値を掛けてしきい値を求めます。候補経路のメトリックがこの値を下回っていなければ、variance を引き上げる余地があります。ただし条件 1 を満たしていることが前提です。

手順
ルーティングテーブルを確認する
show ip route eigrp
show ip route 192.0.2.0 255.255.255.0

同じ宛先に複数のネクストホップが並んでいれば、複数経路が登録されています。経路コードの D と角括弧内の [管理ディスタンス/メトリック] をあわせて確認します。登録本数が想定より少ない場合は maximum-paths の上限を確認します。

手順
転送側を確認する
show ip cef 192.0.2.0 255.255.255.0

ルーティングテーブルに複数経路が入っていても、実際の転送が想定どおりとは限りません。転送情報にも複数のパスが載っているかを確認し、必要に応じて実通信でも偏りを確認します。

本記事にはコマンドの出力例を掲載していません。実機やラボでの取得を行っておらず、経過時間やシェアカウントなどの変動値を示せないためです。表示形式は自環境の出力で確認してください。

よくある誤解と設計上の注意点

誤解実際の動作
variance 2 は 2 経路を使う指定サクセサのメトリックを 2 倍した値をしきい値にする指定。使われる経路数とは無関係
2 番目にメトリックが小さければ採用されるメトリックの順位ではなく、RD と FD の比較で候補が決まる
maximum-paths を増やせば不等コスト経路が入る登録の上限が変わるだけで、候補そのものは増えない
bandwidth を変えれば回線が速くなる計算に使う宣言値が変わるだけで、実際の通信速度は変わらない
K 値の変更と帯域幅・遅延の調整は同じことK 値は計算式そのものを変え、ドメイン全体で一致が必要。帯域幅と遅延は該当インターフェースの入力値
複数経路が登録されれば通信量は均等になる登録は EIGRP、転送はスイッチングハードウェアまたはソフトウェアの役割

設計時に確認すること

  • 実回線と大きく異なる bandwidthdelay を設定していないか。宣言値がずれると経路選択も設計意図からずれる
  • K 値を EIGRP ドメイン内で不用意に変更していないか。変更する場合は全機器で同時に揃える
  • 低速側のリンクが、追加されるトラフィックを処理できる余裕を持っているか
  • 経路が分かれることで非対称ルーティングが発生し、ファイアウォールなどステートフルな装置の通信に影響しないか
  • 障害時だけ代替経路として保持したいのか、平常時から転送へ使いたいのか。前者なら traffic-share min across-interfaces が選択肢になる
  • 本番適用の前に、ルーティングテーブルだけでなく転送情報と実通信まで確認できているか

まとめ

EIGRP のメトリックは、経路上の最小帯域幅と累積遅延から計算されます。variance はその許容範囲を広げるコマンドであり、フィージビリティ条件は別の判定として残ります。経路が増えないときは、範囲の問題なのか条件の問題なのかを切り分けることが出発点になります。

  • 合計せず最小値を使う帯域幅と、経路上で合計する遅延
  • 既定の K 値で 256 ×(Scaled Bw + Scaled Delay)まで短くなる計算式
  • Named Mode でのみ動作する Wide Metrics の 64 ビット計算と RIB スケーリング
  • サクセサのメトリックと variance の積をしきい値とする判定
  • フィージビリティ条件と variance のしきい値という 2 段階の判定
  • topology base の配下へ設定する Named Mode での記述場所
  • EIGRP による経路登録と、転送処理という層の違い

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

関西を拠点に活動する、現役インフラエンジニア。経験20年超。

大手通信キャリアにて、中〜大規模インフラ(ネットワーク・サーバ・クラウド・セキュリティ)の設計・構築およびプロジェクトマネジメントに従事。現場で直面した技術課題への対処や、最新の脆弱性情報への実務対応を、一次情報として発信しています。

保有資格
CCIE Lifetime Emeritus(取得から20年以上)/ VCAP-DCA / Azure Solutions Architect Expert

▶ 運営者プロフィール(詳細)

目次