広告
広告
https://www.7key.jp/nw/routing/r_protocol/poison_reverse.html#what
ネットワーク構成に冗長性がある場合に、ルーティングループの発生を防止するために考案されたのがポイズンリバースと呼ばれる方法です。ポイズンリバースはスプリットホライズンを更に徹底したもので、ルート情報を受け取った際にそのルート情報を受け取ったインターフェイスを含めたすべてのインターフェイスからそのルートの到達不可能性を送信します。このため、ポイズンリバース付きスプリットホライズンと呼ばれることもあるようです。ただ、大規模なネットワークでこれを実装すると膨大なトラフィックが発生していまいます。そこで、ルートのダウン情報を受けた場合にだけそのルート情報のメトリックを到達不可能として送り返す実装が一般的です。
ではまず冗長構成のネットワークでルーティングループが起こるメカニズムから見てみましょう。図:Fig1のようにループが作られているネットワークがコンバージェンスに達している状態で、ネットワーク"10.1.1.0"に障害が発生したとしましょう。
まずルータAは「"10.1.1.0"、ホップ数16」を含むルート情報をアドバタイズします。するとルータBとルータDのルーティングテーブルは図:Fig2のようになります。
この場合に、ルータBとルータDがアドバタイズする前に、ルータCがアドバタイズする可能性はゼロではありません。つまり、ルータBとルータDのトリガアップデートよりも先にルータCの定時更新のタイミングが早かった場合、ルータCは"10.1.1.0"に関してネクストホップをルータBとするルートとルータDとするルートの両方を知っていますので、スプリットホライズンの原則に従ってネクストホップをルータBとするルートをルータDに教え、ネクストホップをルータDとするルートをルータBに教えます(図:Fig3)。
この後、ルータBとルータDがそれぞれルータAに"10.1.1.0"のルート情報を教えることによってルーティングループが発生する可能性があるのです。
ではポイズンリバースを使うとどのようにしてルーティングループが抑えられるのでしょうか。まず"10.1.1.0"がダウンしたことを検出したルータAは、トリガアップデートで直ちに「"10.1.1.0"、メトリック16」の情報をルータBとルータDに送信します。これを受信したルータBとルータDはすべてのインターフェイスから「"10.1.1.0"、メトリック16」の情報をアドバタイズします。ルータBは「"10.1.1.0"、メトリック16」という情報を"s1"からだけでなく"s0"からも送信しますので、ルータAはネクストホップをルータBとする場合も"10.1.1.0"に到達できないことを知ります。同様にルータDをネクストホップとする場合も"10.1.1.0"に到達できないことを知ります(図:Fig4)。
この時点でルータAでは宛先"10.1.1.0"のルートに関して、ネクストホップをルータBとするルートもルータDとするルートもメトリックが16となり、ホールドダウン状態となります。従って、これらのルートに関しては今後新しい情報を受け付けることはありません。このことによってアドバタイズのタイミングに関りなく、ルーティングループの発生が抑えられることとなります。
広告