ルーティングループの防止
目次
無限カウント
ルーティングループを防ぐ手段として、もっとも単純な方法が「無限カウント」です。無限カウントでは、ただひたすら「待つ」ことによってループの防止を行います。ルーティングループは、お互いにあるネットワークのエントリに対して、メトリックを増やしながら教えあうことによって発生しています。そのメトリック増加の上限を決めることによって、ルーティングループを止めることができます。
RIPでは、ホップ数16が到達不可能、つまり無限のメトリックとみなされます。メトリックを増やしながら間違った経路を教えあって、メトリックが16(無限大)になると、そのエントリはホールドダウン状態となり、やがてルーティングテーブルからエントリが削除されます。
ただし、無限カウントではルーティングループが止まるまで、非常に長い時間がかかってしまいます。
スプリットホライズン
ルーティングループが発生する原因を考えてみると、図でルータBがルータAから教えてもらった10.0.0.0/8のネットワークに対するエントリをルータAに教え返していることがそもそもの原因であることがわかります。
もし、ルータBが10.0.0.0/8のエントリをルータAに教え返さなければ、ルータAのルーティングテーブルにある10.0.0.0/8のエントリは、やがてFlushタイマーがタイムアウトしルーティングテーブルから削除されるはずです。多少時間はかかるものの、無限カウントでループが止まるのを待つよりもはるかに短い時間でルーティングループを止めることができます。教えてもらったエントリを再び教え返さないようにすることを「スプリットホライズン」と呼んでいます。
「教え返さない」ということをもっと厳密にいうと、
「あるエントリを学習したインタフェースから送信するアップデートの中にはそのエントリを含めない」
ということです。
スプリットホライズンを有効にすると、次の図のようにルータBはルータAから教えてもらった10.0.0.0/8のエントリをルータAには教え返さなくなります。
つまり、インタフェースE0から送信されるRIPアップデートの中には、(10.0.0.0,2)というエントリが含まれません。しかし、インタフェースE1から送信されるRIPアップデートの中には(10.0.0.0,2)というエントリは含まれています。また、スプリットホライズンによって直接接続されたネットワークのエントリは、そのインタフェースから送信するRIPアップデートに含まれなくなります。
結局のところ、ルータBからインタフェースE0から送信されるRIPアップデートは(30.0.0.0,1)、インタフェースE1から送信されるRIPアップデートは(10.0.0.0,2) (20.0.0.0,1)という内容になります。そして、ルータBのルーティングテーブルにある10.0.0.0/8のエントリは、アップデートを受信しなくなるのでFlushタイマーがタイムアウトし、ルーティングテーブルから削除され、ネットワークはコンバージェンス状態になります。