スプリットホライズン

 ディスタンスベクタ型のルーティングプロトコルは、どうしてもネットワーク全体に経路情報が行き渡るのに時間がかかってしまいます。これをコンバージェンスの問題と言います。

 正常な状態が恒久的に変化しないネットワークであれは、問題ないのですが、障害などでネットワーク構成が変化した場合に、ルーティングループの問題が発生します。

そもそも、なぜ、ルーティングループが発生するのでしょうか?

ルーティングループが発生する過程を見て行きます。

ネットワーク1の障害を検出した Router_A は、Router_B にネットワーク1への経路がなくなったことを通知します。

 その後、間もなく、Router_D は、定期更新で、Router_D(自分)を経由すれば、ネットワーク1 に到達できるという情報(Router_D → Router_C → Router_A)をRouter_Bへ送ります。

 Router_B はネットワーク1への経路がなくなったのではなく、Router_D を経由すれば、ネットワーク1 に到達できると勘違いしてしまいます。

 そして、ネットワーク1へ到達できない経路情報であるにもかかわらず、Router_B は、Router_A に、この情報を通知してしまいます。

その結果、間違った経路情報を学習してしまうことで、ネットワーク上でループができあがってしまいます。

なぜ、ルーティングループが発生してしまったのか、気づきましたでしょうか?

Router_B は、ネットワーク1への経路情報を Router_A から教えてもらったにもかかわらず、Router_A に教えています。

Router_A に教えてもらったネットワーク1 への経路情報をあえて、教える必要があるのでしょうか?

Router_B が余計なことをしたばっかりに、ルーティングループが発生しています。

 今回は、Router_B に注目しましたが、ネットワーク1への経路を Router_B から学習したのであれば、Router_D についても同様なことが言えます。

教えてもらった経路情報を教え返さなければ、この問題は、そもそも起こらなかったはずです。

スプリットホライズンとは、一言で説明すると

「教えてもらったことを教え返さない。」

ことです。

とても単純なメカニズムですが、この動作が効果的にルーティングループを防いでくれます。

チャンネルの紹介