要約

  • RFC 9524 の Replication-SID は、単一の SR ノードにあるローカルな分岐状態を呼び出す。ルート、中継、リーフ、Bud では正しい状態の形が異なる。
  • 各ノードで正しい Replication segment も、組み合わせれば誤ったグラフになり得る。設定ミスのループは、MPLS TTL または IPv6 Hop Limit が尽きるまで複製ストームを起こす。
  • 「ツリー稼働中」という判断には、同じ世代を指す三つの証拠が必要だ。循環検査済みのグラフ、全ノードのインストール読戻し、期待したリーフへの実配送である。

成功応答だけを集めた事故報告

障害後の会議で、担当者は三台の装置から得た成功応答を並べた。ルート R は X と Y へ分岐し、X も所定の Replication-SID を保持していた。しかし、X の古い分岐が R の状態へ戻っていた。各装置は自分に与えられた仕事を正しく実行したからこそ、パケットは循環しながら増えた。

RFC 9524 はこの故障を曖昧にしていない。Replication segment を誤って設定すると、segment の連鎖がループになり得る。特に制御プレーンを介さず SR ノードごとに設定した場合、複製パケットは SR-MPLS の TTL または SRv6 の IPv6 Hop Limit がゼロになるまでストームを生む。寿命が有限であることは、安全な構造の証明ではない。

ここで監査単位を変える必要がある。装置の成功は一つの局所的事実である。点から点を結んだ有向グラフが循環せず、必要なリーフを含み、意図したサービスだけを運ぶという主張には、別の証拠が必要になる。

SID はローカルな索引である

Replication segment は、複製ノード上に置かれる論理的なローカル構造である。そのノードと一群の下流ノードを結び、<Replication-ID, Node-ID> の組で識別される。データプレーンのハンドルが Replication-SID であり、SR-MPLS ではラベル、SRv6 では SID となる。

SID がアクティブになると、ノードはローカルの Replication state を参照する。この状態は概念上、分岐のリストだ。各分岐は下流ノード、下流 Replication-SID、そこまでの到達方法を含む。到達方法はインターフェースとネクストホップかもしれず、制約付き経路、SID リスト、SR Policy かもしれない。状態はローカル設定でも制御プレーンでも投入できる。

したがって、SID の値だけを資産台帳に残してもツリーは復元できない。所有ノード、状態の世代、役割、分岐先、有効期間が意味を決める。SID は全体図の短縮表現ではなく、あるノードのある状態へ入る索引である。

空の分岐表には文脈がある

分岐リストは空でもよい。リーフでは、そこから先の複製が不要だからだ。それでもリーフの Replication-SID は点対多点サービスを識別でき、RFC 9524 は一般化のため Replication segment と呼び続ける。Bud は複製ノードとリーフを兼ねるので、下流への分岐とローカル配送を同時に持てる。

「分岐数ゼロ」という同じ測定値が、予定されたリーフでは正常であり、ルートや中継では配送断を示す。状態が存在するかだけを確認しても不十分で、分岐数を一律に監視しても誤警報になる。期待する役割、期待する分岐、実装された分岐、観測された動作を一組として比較しなければならない。

MPLS と SRv6 に共通する証拠の限界

SR-MPLS のノードは、アクティブな Replication-SID を受け取るとラベルを POP し、ローカル状態の各分岐についてパケットを複製する。コピーごとに下流 Replication-SID と必要なラベルを PUSH する。リーフや Bud のローカル配送は別のローカル設定に従う。

SRv6 の End.Replicate も同じ範囲で動く。ローカル SID の機能部から状態を検索し、見つからなければ破棄する。IPv6 Hop Limit を検査して減らし、許可された SRH 情報を処理した後、分岐ごとにコピーを作る。コピーの宛先は下流 Replication-SID になり、必要なら segment list が追加される。

この処理が成功して証明できるのは、当該ノードがその時点の状態を実行したことだ。次のノードに対応状態があること、すべてのリーフへ道が続くこと、祖先へ戻る分岐がないこと、VPN の配送文脈が正しいことまでは証明しない。

segment をつないだ瞬間に別の対象になる

ルート、中間複製ノード、リーフの Replication segment をつなぐと、点対多点ツリーを構成できる。RFC 9524 は具体的な制御プレーン手順を他文書に委ねる一方、局所設定した連鎖はループを作るべきでなく、制御プレーン仕様はループを防止するか、定常状態で検出・緩和しなければならないと定める。

後発の RFC 9960 は SR P2MP Policy を定義した。Policy はルート、リーフ集合、candidate path を持ち、candidate path は P2MP tree instance を生成できる。制御装置はその instance を構成する Replication segment を各ノードに入れる。RFC 10018 はさらに、MVPN と EVPN の手順が SR P2MP ツリーや ingress replication をどう利用するかを定めた。

この階層は証拠でも維持すべきだ。Replication-SID はローカルなハンドル、state はローカルな分岐計画、tree instance は複数ノードの合成、サービス意図はルート・リーフ・VPN 文脈、配送結果は実際に届いたコピーである。前段の緑色表示を後段の証明に流用してはならない。

TTL と Hop Limit が証明しないこと

TTL または Hop Limit がゼロになれば、循環するパケットは最終的に止まる。しかし一周ごとに複数のコピーが作られるなら、停止までの総量は初期寿命、分岐数、ループ位置に左右される。有限のストームは正常なツリーではない。

SRv6 の Replication segment には IPv6 Hop Limit Threshold を設定できる。到着時の値が閾値より小さければ破棄し、レート制限付きで記録する。通常転送ノードが Hop Limit をゼロにしてルートへ大量の ICMPv6 エラーを返す危険を抑える狙いもある。一方、閾値は最遠の正規リーフへ到達できる値でなければならない。

閾値は実行時の安全弁であって、グラフ検査ではない。循環していなくても、リーフ欠落、余分な分岐、誤ったサービス結合は起こる。構造の問いと寿命の問いを一つの設定値に押し込めてはいけない。

一つの応答から枝を推測しない

RFC 9524 では、リーフまたは Bud の Replication-SID に ping できる。中継複製ノードを通る Echo Request は他のリーフへも複製され、宛先に対してチェックサムが合わず破棄されることがある。また、複製経路では通常の ICMPv6 Time Exceeded を生成しないため、この仕組みだけでツリーを traceroute することはできない。

一つの Echo Reply は一つの応答点への到達性を示す。全枝の列挙でも、無環性の証明でも、全リーフ配送の確認でもない。OAM の結果には、対象、時刻、状態世代、そして測れない範囲を付けて保存する必要がある。

稼働判定を三段階に分ける

第一はグラフ受領証である。サービスと policy の版、ルート、予定リーフ集合、制約、計算した有向グラフ、その同じ版に対する循環検査を保存する。各辺は所有ノード、下流 Replication-SID、到達性オブジェクトに解決されなければならない。

第二はインストール受領証だ。影響するすべてのノードから、設定世代、役割、ローカル SID、分岐リスト、ローカル配送フラグ、有効時刻を読み戻す。段階更新なら順序も必要である。最終状態が安全でも、旧状態と新状態の混在中に一時的なループやブラックホールが生じ得る。

第三は結果受領証である。入口パケット数、各ノードのコピー数、各分岐の計数、TTL/Hop-Limit 破棄、期待リーフごとの観測を照合する。一つのリーフが応答しても集合の完全性は証明されず、送信先を増やしていないのにコピー比率が上がれば疑うべきである。

三つが同じ世代を指して初めて、「この policy 版がこのグラフを作り、各ノードが対応状態を入れ、この時間帯にこれらのリーフでこの結果を観測した」と言える。限定された文章だからこそ、機械が検証し、人が取り消せる。

情報源

出典