コンピュータ ネットワーク において、スプリット ホライズン ルート アドバタイズメントは、ルータがルートを学習したインターフェイスにルートをアドバタイズすることを禁止することで、 距離ベクトル ルーティング プロトコルでのルーティング ループを防ぐ方法です。
このコンセプトは1974年にトルステン・セグレルによって提案され、もともとARPANETに触発されたスウェーデンのネットワークTIDASで実装されました。[1] [2] [3]
用語
基本的な用語は次のとおりです。
- ルート ポイズニング: ノード N が宛先 D へのルートが到達不能であることを知った場合、N から D までの距離が N によって認識されるように無限であることを示すメッセージをネットワーク内のすべてのノードに送信して、そのことを通知します。
- スプリット ホライズン ルール: ノード N がインターフェイス I を使用して特定の宛先 D に送信する場合、N は I を介して D に関する新しい情報を送信してはなりません。
- ポイズンリバースルール: ノード N がインターフェース I を使用して特定の宛先 D に送信する場合、N は I を介して、D への移動コストが無限であるという情報を送信します。
スプリット ホライズンでは N は I を通じて情報を送信しませんが、ポイズン リバース ノードでは N は嘘をつきます。
例
この例では、ネットワーク ノードA は、ノードCに到達するためにパケットをノードBにルーティングします。ノード間のリンクは、個別のポイントツーポイント リンクです。

スプリット ホライズン ルールによれば、ノードA はCへのルート(つまりAからBからCへ)をBにアドバタイズしません。表面的には、ルートのコストが B からCへの直接ルートよりも高いため、B がノードA経由でルーティングすることは決してないため、これは冗長に見えます。ただし、BとC の間のリンクがダウンし、B がAからCへのルートを受信した場合、B はA経由でそのルートを使用することになります。AはパケットをそのままBに送り返すため、ループが発生します。これがカウント トゥ インフィニティ問題です。スプリット ホライズン ルールが適用されると、この特定のループ シナリオは発生せず、複雑で冗長性の高い環境での 収束時間が改善されます。
ポイズンリバースを使用したスプリットホライズンルーティング[4]は、スプリットホライズンルート広告の変形であり、ルータはルートメトリックを無限(RIPの場合は16 )に設定することにより、ルートを学習したインターフェイス上でルートが到達不能であることを積極的に広告します。このような広告の効果は、ループしているルートのほとんどを、ネットワークを介して伝播する前に即座に削除することです。
ポイズン リバースの主な欠点は、一般的なネットワーク トポロジの一部でルーティング アナウンスのサイズが大幅に増加する可能性があることですが、障害が発生した場合にネットワーク全体の効率を向上させることができます。スプリット ホライズンでは、隣接ルータがルータにルートを送信した場合、受信ルータは同じインターフェイス上のアドバタイズ ルータにこのルートを伝播しません。
ルート ポイズニングでは、ルータが接続されたルートの 1 つに障害が発生したことを検出すると、ルータはルートに無限のメトリックを割り当ててネイバーにアドバタイズすることでルートをポイズニングします。ルータがポイズニングされたルートをネイバーにアドバタイズすると、ネイバーはスプリット ホライズンのルールを破り、ポイズニングされた同じルートを発信元に送り返します。これをポイズニング リバースと呼びます。ルータがポイズニングされたルートを伝播するのに十分な時間を与え、伝播中にルーティング ループが発生しないようにするために、ルータはホールドダウン メカニズムを実装します。
ポイズンリバース
ポイズン リバースは、カウント トゥ インフィニティ問題を解決するために、距離ベクトル ルーティング内でよく使用されます。実際には、ポイズン リバースはスプリット ホライズンの代替として考えることができます。ポイズン リバースを使用すると、スプリット ホライズンによって抑制されるルート広告が、代わりに無限の距離で広告されます。
ポイズン リバースの基本的な考え方は、ネットワーク内でコストが変更された場合に、パスが同じノードに戻らないようにすることです。この例は次のようになります。ノード Z は、ノード Y 経由で宛先 X にルーティングします。Y と X の間のコストが増加すると、無限カウント問題が発生します。これを回避するには、ポイズン リバースを実装します。Z がノード Y 経由で X に到達している限り、Z は Y に嘘をつきます。つまり、Z は宛先 X までのコストが無限であると Y に通知します。

端にある数字はリンクのコストです。
このトポロジに従って、ネットワーク内のすべてのノードの距離ベクトルを構築します。
1 行目、2 行目、3 行目はそれぞれノード Z、ノード Y、ノード X の距離ベクトルに対応します。
次の行列には、Z からネットワーク内の他のすべてのノードまでの各隣接ノードを経由した距離の推定値が含まれています。
Z は Y を経由して X に到達するため、Z から X への移動コストは 3 です。ポイズン リバースは、ノードが距離ベクトルを近隣ノードにブロードキャストすると有効になります。Z によってブロードキャストされる距離ベクトルは次のとおりです。
Yへ: ノードZは距離ベクトルを通知し、最後の要素を∞に置き換えます。つまり、[0, 1, ∞]を送信します。
Xへ: ノードZは距離ベクトルを置き換えずに通知します。つまり、[0, 1, 3]を送信します。
ノード Y にブロードキャストされる距離ベクトルを見ると、最終目的地 X には無限大の値があることがわかります。

ポイズン リバースは、カウント トゥ インフィニティ問題を解決します。これは、Y と X の間のリンクのコストが、たとえば 70 に増加した場合、Y と Z は互いにバウンスせず、代わりに別のパスを直接試すためです。あるいは、ポイズン リバースが使用されない場合、Y と X の間のリンクのコストが増加すると、Y は Z にそのニュースを通知します。ただし、通知する前に、Y は、Z がコスト 3 で X に到達できるという事実を利用して、Y がコスト 4 で X に到達できると判断する場合があります。次に、Z は、Y を経由して X に到達するコストを 5 に更新します。その後、Y は、Z を経由して X に到達するコストを 6 に更新し、これを Z から X へのコストが 30 に達するまで繰り返します。この時点で、30 回の反復の後、アルゴリズムは収束します。
毒の逆転は常に機能するとは限りません。例:
C と D の間のリンクに障害が発生した場合、ノード C は宛先に到達するために B を経由しようと試みることができます。B はすでに A を経由してルーティングしており、引き続きそうします。現在、ポイズン リバースのため、A は B を経由してルーティングできませんが、この時点で、A は最終的に C から、C には D へのコスト 7 のルートがあることを通知するメッセージを受け取ります。ここで、c(C,B)+距離(B,D)=3+(3+1)=7 です。次に、A は D へのルーティングに C に依存します。要約すると、CD の障害後、C が更新され、その後 A、B、C、A、B、C と続きます。そこから、ポイズン リバースでは解決できないループが発生します。[5]
ただし、これはRIPと呼ばれる距離ベクトル プロトコルの実装によって完了できます。
実装
スプリット ホライズン方式は効果的で実装が簡単なため、ほとんどの距離ベクトル プロトコルで使用されています。特に、次のプロトコルで使用されています。
参照
- スプリットホライズンDNSは、 DNSにおける同様の概念で、情報の選択的な公開を行うものである。
- ルートポイズニング
参考文献
- ^ TIDAS メッセージ交換ネットワークのルーティング手順、IEEE Transactions on communication 1975
- ^ トルステン・ツェグレルからレナード・クラインロッホ教授への手紙[永久リンク切れ ]、1974-08-19
- ^ Torsten Cegrell - インターネットを「直した」スウェーデン人、Internetmuseum.se、アクセス日 2017-11-09
- ^ IP ルーティング プロトコル Uyless D. Black 著
- ^ https://people.mpi-sws.org/~gummadi/teaching/sp07/datanets/宿題/宿題2ソリューション.pdf [裸のURL PDF ]
James F. Kurose、Keith W. Ross (2017)。『コンピュータネットワーキング:トップダウンアプローチ、第 7 版』。イギリス、ハーロー:ピアソン。418 ページ。
外部リンク
- Microsoft TechNet の RIP インターネットワークにおけるコンバージェンスの「Split Horizon」および「Split Horizon with Poison Reverse」。
