要約

  • RFC 3063はスレッドが巻き戻るまでラベルの割り当てを待たせ、ループ防止を経路確立の前提条件にした。
  • スレッドの色、ホップ数、TTLは固定長の状態を保つが、その保証は手順内に限られ、実装やパケット配送の証明にはならない。

ラベルを最後に回す

RFC 3063の眼目は、単にループを検出することではない。検出結果を、ラベルマッピングをいつ出すかという具体的な判断に結び付けた点にある。ループ防止モードでは、制御スレッドが巻き戻るまでノードはマッピングを送信しない。

MPLSでは、各ルーターがパケットごとに経路全体を読み直すわけではない。ラベルスイッチルーターは、転送等価クラス(FEC)にラベルを結び付ける。次ホップの変更時にレイヤー3の経路がループしていれば、早すぎるラベル配布によって、新しいLSPにもループが持ち込まれるおそれがある。そこでRFC 3063は経路確立をゲートにする。候補経路がまずスレッドの条件を満たし、その後でラベルマッピングを解放する。

2001年2月に公開されたこの文書はExperimentalであり、インターネット標準を定めるものではない。スレッドはパス制御メッセージの列で、色、ホップ数、Time To Liveという三つの属性を持つ。色は起点ノードのIPアドレスとローカルなイベント識別子を組み合わせ、ノード間とイベント間で一意になるよう意図されている。同じ色が再び届くと、スレッドが既訪問箇所に戻ったことを検知できる。ホップ数は経路上で増加する尺度を保ち、ループに関わる一部の状態には特別な「不明」値を使う。TTLは制御メッセージが進める範囲を制限するもので、ループがないこと自体を証明する値ではない。

ノードはスレッドを出口側へ延長し、両立する処理と統合し、以前見た色が戻れば停止させ、次ホップを失えば撤回し、通過経路を逆向きに確認応答して巻き戻す。防止モードでは巻き戻し後にだけラベルマッピングが出る。検出モードでは、色付きスレッドを受信した時点でマッピングを返せるが、その返答はスレッドを巻き戻さない。同じ仕組みでも解放条件が異なるため、両者を一括して「ループ防止」と呼ぶと運用上の違いが消える。

状態量にも境界がある。経路ベクトルはLSPが長いほど大きくなるが、スレッドオブジェクトの大きさは一定だ。伝送中は関連するリンクで色とホップ数を一時的に保持し、巻き戻し後には活動中の色を捨ててホップ数だけを残せる。RFC 3063は、これによりメッセージがネットワーク規模に比例せず、次ホップ変更時に関与するノードも新しい候補経路の下流に限られると説明する。これは著者らの設計上の比較であり、本番網の測定値ではない。

新しいレイヤー3経路にループがある間、古い経路を維持することもできるが、RFCはそれを実装上の選択としている。順序付き下流割り当ての二方式や、VC mergeの対応が異なる網、異なるスレッドによる負荷分散も論じている。適用可能性が記述されているからといって、製品実装や運用実績が証明されたわけではない。

制御プレーンの受領証とパケットの観測は別物

RFC 3031のMPLSアーキテクチャでは、ラベル配布の手続きと転送プレーンでの適用が分かれている。スレッドの巻き戻しが示すのは、そのアルゴリズムが調べた制御状態である。全ルーターの転送表に正しいラベルが入ったか、パケットが経路を通ったか、別のイベント順序で一時ループが起きたかまでは示さない。これらを確かめるには、FIB状態、カウンター、プローブと観測期間をそろえる必要がある。

後年のLDP仕様RFC 5036は、Path VectorとHop CountのTLVを使う設定可能なループ検出を記述する。経路ベクトルは通過したLSR識別子を記録し、識別子の再出現または設定上限への到達でループとして扱う。これはRFC 3063のExperimentalなスレッド方式とは別のLDPメカニズムだ。後の仕様に含まれることから、スレッド方式の普及率や、標準化で技術的に退けられた理由を推定することはできない。RFC 5715は後にトポロジー変更後のループフリー収束を扱うが、ループしたLSPの確立を防ぐ問題とは範囲が異なる。

歴史的な意味は成功・失敗の二択ではない。RFC 3063はラベル解放の前に制御プレーンの確認を置き、経路に比例して増えるベクトルを運ばずにすむ設計を示した。RFCのモデル内では巻き戻し後のLSPがループフリーになる。実際にどの実装が使われ、旧経路が保たれ、パケットが配送されたかは別の証拠で確かめるべきだ。