メインコンテンツまでスキップ

3. SRv6 SID

3. SRv6 SID

[RFC8402] は, SRv6 Segment Identifier (セグメント識別子) をセグメントに明示的に関連付けられた IPv6 アドレスとして定義しています。

SRv6 SID がパケットの IPv6 ヘッダーの Destination Address (宛先アドレス) フィールドにある場合, それは IPv6 ネットワーク内の中継ノードを介して IPv6 アドレスとしてルーティングされます。

その処理は [RFC8754] の Section 4.3 で定義されており, ここでリマインダーとして再現します:

実装の詳細を制約することなく, SR segment endpoint node (セグメントエンドポイントノード) はそのローカル SID の Forwarding Information Base (転送情報ベース, FIB) エントリを作成します。

SRv6 対応ノードが IPv6 パケットを受信すると, パケットの宛先アドレスに対して longest-prefix-match lookup (最長プレフィックス一致ルックアップ) を実行します。このルックアップは次のいずれかを返す可能性があります:

  • ローカルにインスタンス化された SRv6 SID を表す FIB エントリ

  • ローカルインターフェースを表す FIB エントリ, SRv6 SID としてローカルにインスタンス化されていない

  • 非ローカルルートを表す FIB エントリ

  • マッチなし

本ドキュメントの Section 4 は, [RFC8754] の Section 4.3.1 で定義されたものに加えて, 新しい SRv6 SID behaviors (動作) のセットを定義します。

3.1. SID Format (SID フォーマット)

本ドキュメントは, SRv6 SID を LOC:FUNCT:ARG で構成されるものとして定義します。ここで, locator (ロケータ, LOC) は SID の最上位 L ビットにエンコードされ, その後に F ビットの function (関数, FUNCT) と A ビットの arguments (引数, ARG) が続きます。L, つまり locator length (ロケータ長) は柔軟であり, オペレータは自由に選択したロケータ長を使用できます。F と A は, L+F+A <= 128 である限り任意の値にできます。L+F+A が 128 未満の場合, SID の残りのビットはゼロでなければなりません。

locator は B:N として表すことができます。ここで, B は SRv6 SID block (SRv6 SID ブロック, オペレータが SRv6 SID に割り当てた IPv6 プレフィックス) であり, N は SID をインスタンス化する親ノードの識別子です。

SRv6 SID の LOC 部分がルーティング可能である場合, それは SID をインスタンス化するノードに導きます。

FUNCT は, SID にバインドされたローカル動作の不透明な識別です。

用語 "function" (関数) は, SRv6 SID 内のビット文字列を指します。用語 "behavior" (動作) は, SID にバインドされた動作を識別します。いくつかの動作は本ドキュメントの Section 4 で定義されています。

SRv6 Endpoint behavior (エンドポイント動作) は, その処理のために追加情報を必要とする場合があります (例えば, フローやサービスに関連する)。この情報は, SID の ARG ビットにエンコードできます。

そのような場合, ARG ビットのセマンティクスとフォーマットは, SRv6 Endpoint behavior 仕様の一部として定義されます。

routed SID (ルーティングされた SID) の ARG 値は, 特定のフロー内のパケット間で一定に保たれるべきです。フロー内のパケット間で ARG 値が変化すると, 異なる ECMP hashing (ハッシング) が発生し, 再順序付けを引き起こす可能性があります。

3.2. SID Allocation within an SR Domain (SR ドメイン内の SID 割り当て)

Locator は, IPv6 infrastructure allocation (インフラストラクチャ割り当て) と一致して割り当てられます。たとえば, ネットワークオペレータは次のことができます:

  • block B::/48 を SR domain (SR ドメイン) に割り当てる

  • ドメイン内の各 SRv6 対応ノードに一意の B:N::/64 ブロックを割り当てる

例として, あるモバイルサービスプロバイダーは, 1000 台以上の商用ルーターと 1800 台のホワイトボックスルーターに SRv6 を商業展開しています。これらのデバイスはすべて SRv6 が有効で, SRv6 SID をアドバタイズしています。このプロバイダーは歴史的に IPv6 を展開し, Unique Local Address (ユニークローカルアドレス, ULA) 空間 [RFC4193] からインフラストラクチャアドレスを割り当てていました。彼らは SRv6 インフラストラクチャをサポートするために 3 つの /48 プレフィックス (国 X, 国 Y, 国 Z) を明確に割り当てました。これらの /48 プレフィックスから, 各ルーターには /64 プレフィックスが割り当てられ, そのルーターのすべての SID がそこから割り当てられます。

別の例では, 大規模なモバイルおよび固定回線サービスプロバイダーが, 全国ネットワークに SRv6 を商業展開しています。このプロバイダーは, Regional Internet Registry (地域インターネットレジストリ, RIR) から /20 プレフィックスを割り当てられています。彼らは SRv6 を展開するために, インフラストラクチャにいくつかの /48 プレフィックスをサブ割り当てしました。各ルーターには /64 プレフィックスが割り当てられ, そのルーターのすべての SID がそこから割り当てられます。

これら両方の例における IPv6 アドレス消費は最小限であり, それぞれ利用可能なアドレス空間の 10 億分の 1 未満と 100 万分の 1 未満を表しています。

RIR から現在の最小割り当てである /32 プレフィックスを受け取るサービスプロバイダーは, SRv6 を展開するインフラストラクチャに /48 プレフィックスを割り当て, その後各 SRv6 ノードで SID に /64 プレフィックスを割り当てることができます。/48 割り当ては, プロバイダーが割り当てに使用できる IPv6 アドレス空間の 65,000 分の 1 (1/2^16) です。

オペレータがノードで SID をインスタンス化する場合, 本ドキュメントで定義されたレジストリの SRv6 Endpoint Behavior codepoint (エンドポイント動作コードポイント) の 1 つを使用して, SID 値 B:N:FUNCT と SID にバインドされた動作を指定します (Table 6 を参照)。

ノードは, control plane (コントロールプレーン) で SID, B:N:FUNCT をアドバタイズし (Section 8 を参照), SID の動作を識別する SRv6 Endpoint Behavior codepoint も一緒にアドバタイズします。

SR source node (ソースノード) は, SID の FUNCT 値を調べることによって動作を推測することはできません。

したがって, SRv6 Endpoint Behavior codepoint は, コントロールプレーンで SID と共にアドバタイズされます。

SR source node は, SRv6 Endpoint Behavior codepoint を使用して, 受信した SID (B:N:FUNCT) を動作にマッピングします。

SR source node は, 望ましい動作でアドバタイズされた SID (B:N:FUNCT) を選択することによって, アドバタイズノードで望ましい動作を選択します。

例として:

  • ネットワークオペレータは, 社内運用ブロックから SRv6 インフラストラクチャ用に SRv6 SID block 2001:db8:bbbb::/48 を割り当てることができます。

  • ネットワークオペレータは, SR Domain 内の特定のルーター, 例えば Router 3 に SRv6 Locator 2001:db8:bbbb:3::/64 を割り当てることができます。

  • Router 3 では, locator 2001:db8:bbbb:3::/64 内で, ネットワークオペレータまたはルーターが動的割り当てを実行します:

    • Function 0x0100 は, behavior End.X (Endpoint with L3 cross-connect, L3 クロスコネクトを持つエンドポイント) に関連付けられ, router 3 とその接続された隣接ルーター (例えば, Router 4) の間で使用されます。この function は 16 ビット値としてエンコードされ, 引数はありません (F=16, A=0)。

      この SID は, コントロールプレーンで 2001:db8:bbbb:3💯: として, SRv6 Endpoint Behavior codepoint 値 5 でアドバタイズされます。

    • Function 0x0101 は, behavior End.X (Endpoint with L3 cross-connect, L3 クロスコネクトを持つエンドポイント) に関連付けられ, router 3 とその接続された隣接ルーター (例えば, Router 2) の間で使用されます。この function は 16 ビット値としてエンコードされ, 引数はありません (F=16, A=0)。

      この SID は, コントロールプレーンで 2001:db8:bbbb:3:101:: として, SRv6 Endpoint Behavior codepoint 値 5 でアドバタイズされます。

これらの例は, 他の IPv6 addressing allocation scheme (アドレス割り当てスキーム) を排除するものではありません。

3.3. SID Reachability (SID 到達可能性)

ほとんどの場合, ノード N は, その SID をカバーする LOC 部分に一致する IPv6 prefix (プレフィックス) またはより短いマスクプレフィックスをアドバタイズします。これらのアドバタイズの配布と到達可能性の計算は, ルーティングプロトコルに固有であり, 本ドキュメントの範囲外です。

SRv6 SID が, ルーティングプロトコルを介してアドバタイズされた IPv6 プレフィックスに属している場合, それは routed (ルーティングされている) と言われます。この条件を満たさない SRv6 SID は non-routed (非ルーティング) です。

典型的な例を示しましょう:

ノード N は, 2 つの SID で明示的に設定されています: 2001:db8🅱️1💯: と 2001:db8🅱️2:101::。

ネットワークは IGP を介して 2001:db8🅱️1::/64 へのパスを学習します。したがって, 2001:db8🅱️1💯: 宛のパケットは N までルーティングされます。ネットワークは IGP を介して 2001:db8🅱️2::/64 へのパスを学習しません。したがって, 2001:db8🅱️2:101:: 宛のパケットは N までルーティングされません。

パケットは, SID list (SID リスト) <...,2001:db8🅱️1💯:,2001:db8🅱️2:101::,...> を使用して non-routed SID 2001:db8🅱️2:101:: を経由するようにステアリングできます。ここで, non-routed SID の前には同じノードへの routed SID が配置されます。パケットは, SID list 内でそのノードへの Adj-SID を先行させることによって, non-routed SID をインスタンス化するノードにステアリングすることもできます。Routed および non-routed SRv6 SID は, それぞれ global および local segments (グローバルおよびローカルセグメント) の SRv6 インスタンス化です [RFC8402]。