このことは以前考えて自分なりに解決した記憶があって、過去のエントリを見たら書いてあったが、いまひとつ釈然としないので再考してみた。
EIGRP固有の考えにサクセサとフィージブルサクセサというものがある。
サクセサというのは最短経路、フィージブルサクセサは最短経路の次に最短な経路、要は最短経路の代替経路のことである。
経路が最短であるかどうかは帯域幅と遅延(基本はこの2つ)など複数の要素を考慮してメトリックとして計算され、メトリックが最小となる経路が「最短」とされる。
それはOSPFやBGPなどと同様であるが、その代替経路まで選定するのがEIGRP固有である。
「代替経路なんてメトリックが最小の次に小さい経路なんだから別に何も難しくないじゃないか」
と思うのだが、EIGRPでは単にメトリックが最小の次に小さいだけではフィージブルサクセサとして選ばれない。フィージブルサクセサとなるには「その経路のFDがサクセサのRDより小さい」ことが条件となる。
※昔は Feasible DistanceとAdvertised Distanceと言っていたが、今は Advertised DistanceをReported Distanceと言うようになったようである。
なぜだろうか?
この構成で、AからEへのサクセサは A→B→Eであり、そのFDは110である。
フィージブルサクセサを選ぼうとして、候補に挙がるのが下記2つの経路であろう。
A→C→E (FD: 140)
A→D→E (FE: 150)
FD、つまり目的地までの距離はA→C→Eのほうが小さいが、こちらの経路はRDが130でありサクセサのFDより大きいためフィージブルサクセサになれない。
もしA→C→Eをフィージブルサクセサとしたらどうなるか。
AはCにパケットを転送する。CはCでEへの最短の経路を計算している。パッと見てCとEは理隣接しているのだからEが最短に決まっているだろうと思えるが、メトリックを見ると実はC→A→B→Eのほうが120であり、直接接続しているリンクのメトリック130より小さい。だから、CはAにパケットを戻すことになる。
AはBを経由してEに到達する経路が利用できなくなったのでCに転送したのであるが、そのことをCがAと同時に検知してAから受け取っていたRDを無効にする必要がある。それをする前にAからEあてのパケットを受け取っていたら、CはAにパケットを戻すことになるだろう。
ループが発生するのは多分このような場合だ。
つまり、AからEへのフィージブルサクセサと候補となる経路は最初に挙げた2つだけではなく、以下のような経路もあったのだ。
A→C→A→B→E
A→C→A→D→E
A→D→A→B→E
A→D→A→C→E
この問題についてはあまり詳しく述べられていることが少なく単に「ルーティングループが起こるから」としか書いていないのは、たぶん、厳密に説明しようとすると結構複雑な条件が必要になるからだと思う。