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

2. Segment Routing Header (セグメントルーティングヘッダ)

2. Segment Routing Header (セグメントルーティングヘッダ)

ルーティングヘッダは [RFC8200] で定義されています。Segment Routing Header (セグメントルーティングヘッダ, SRH) は新しい Routing Type (ルーティングタイプ) (4) を持ちます。

SRH は次のように定義されます:

  0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hdr Ext Len | Routing Type | Segments Left |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Last Entry | Flags | Tag |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| Segment List[0] (128-bit IPv6 address) |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| |
...
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| Segment List[n] (128-bit IPv6 address) |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// //
// Optional Type Length Value objects (variable) //
// //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

ここで:

Next Header: [RFC8200] のセクション 4.4 で定義されています。

Hdr Ext Len: [RFC8200] のセクション 4.4 で定義されています。

Routing Type: 4。

Segments Left: [RFC8200] のセクション 4.4 で定義されています。

Last Entry: Segment List (セグメントリスト) 内の最後の要素のインデックス (ゼロベース) を含みます。

Flags: 8 ビットのフラグ。セクション 8.1 は新しいフラグを定義するための IANA レジストリを作成します。以下のフラグが定義されています:

      0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|U U U U U U U U|
+-+-+-+-+-+-+-+-+

U: 未使用で将来の使用のため。送信時は 0 でなければならず, 受信時は無視されます。

Tag: パケットをクラスまたはパケットグループの一部としてタグ付けします -- たとえば, 同じプロパティセットを共有するパケット。Tag がソースで使用されない場合, 送信時にゼロに設定する必要があります。Tag が SRH 処理中に使用されない場合, 無視すべきです。Tag はセクション 4.3.1 で定義された SID を処理する際には使用されません。この文書で定義されていない他の SID を処理する際に使用される可能性があります。Tag の割り当てと使用はこの文書の範囲外です。

Segment List[0..n]: Segment List 内の n 番目のセグメントを表す 128 ビット IPv6 アドレス。Segment List は SR Policy (SR ポリシー) の最後のセグメントから開始してエンコードされます。つまり, Segment List の最初の要素 (Segment List[0]) には SR Policy の最後のセグメントが含まれ, 2 番目の要素には SR Policy の最後から 2 番目のセグメントが含まれます。以下同様です。

TLV: Type Length Value (タイプ長さ値, TLV) はセクション 2.1 で説明されています。

SRH では, Next Header, Hdr Ext Len, Routing Type, および Segments Left フィールドは [RFC8200] のセクション 4.4 で定義されています。そのセクションの制約に基づいて, Next Header, Header Ext Len, および Routing Type は不変ですが, Segments Left は可変です。

TLV 値の可変性は, セクション 2.1 で指定されているように, タイプの最上位ビットによって定義されます。

セクション 4.3 は, この文書で定義された SID のコンテキストにおける SRH の残りのフィールド (Flags, Tag, Segment List) の可変性を定義します。

将来定義される新しい SID は, Flags, Tag, および Segment List の可変性プロパティを指定し, Hashed Message Authentication Code (ハッシュメッセージ認証コード, HMAC) TLV (セクション 2.1.2) 検証がどのように機能するかを示す必要があります。実際には, これらのフィールドは可変であることに注意してください。

SR モデルと一致して, SRH のソースは常に, SR ドメイン内で使用するために SRH の Segment List, Flags, Tag, および TLV をどのように設定するかを知っています。これをどのように達成するかはこの文書の範囲外ですが, トポロジ, 利用可能な SID とそれらの可変性プロパティ, 宛先の SRH 可変性要件, またはその他の情報に基づいている可能性があります。

2.1. SRH TLVs

このセクションでは Segment Routing Header の TLV を定義します。

TLV はセグメント処理のためのメタデータを提供します。この文書で定義されている唯一の TLV は HMAC (セクション 2.1.2) とパディング TLV (セクション 2.1.1) です。セクション 4.3.1 で定義された SID を処理する間, ローカル設定で特に指示されない限り (セクション 4.3.1.1.1), すべての TLV は無視されます。したがって, TLV および HMAC サポートは任意の実装にとってオプションです。ただし, TLV を追加または解析する実装は PAD TLV をサポートしなければなりません。他の文書では追加の TLV とそれらの処理ルールを定義する可能性があります。

Hdr Ext Len が (Last Entry+1)*2 より大きい場合, TLV が存在します。

セグメントエンドポイントで TLV を処理する際, TLV は Hdr Ext Len によって決定される SRH 内に完全に含まれている必要があります。SRH Hdr Ext Len の境界を超える TLV の検出は, ソースアドレスへの ICMP Parameter Problem (パラメータ問題), Code 0 メッセージを生成し, SRH の Hdr Ext Len フィールドを指し, パケットは破棄されます。

実装は, ローカル設定に基づいて処理する TLV の数や長さを制限してもかまいません。以下を制限できます:

  • 連続する Pad1 (セクション 2.1.1.1) オプションの数を 1 に。複数バイトのパディングが必要な場合は, PadN (セクション 2.1.1.2) を使用すべきです。

  • PadN の長さを 5 に。

  • 処理される非 Pad TLV の最大数。

  • 処理されるすべての TLV の最大長。

実装は, これらの設定された制限を超えた場合, SRH 内の追加 TLV の処理を停止してもかまいません。

 0                   1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-----------------------
| Type | Length | Variable-length data
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-----------------------

Type: "Segment Routing Header TLVs" [IANA-SRHTLV] からの 8 ビットコードポイント。認識されないタイプは受信時に無視しなければなりません。

Length: 可変長データフィールドの長さ (バイト単位)。

Variable-length data: Type に固有のデータ。

Type Length Value (TLV) エントリには, パケットの Destination Address (宛先アドレス, DA) で識別されるノードによって使用される可能性のあるオプション情報が含まれます。

各 TLV には独自の長さ, フォーマット, およびセマンティクスがあります。各 TLV Type に割り当てられた (IANA による) コードポイントは, TLV で運ばれる情報のフォーマットとセマンティクスの両方を定義します。複数の TLV が同じ SRH 内にエンコードされる可能性があります。

TLV タイプの最上位ビット (ビット 0) は, そのタイプの TLV データがパケットの最終宛先への経路上で変更できるかどうかを指定します:

0: TLV データは経路上で変更されない

1: TLV データは経路上で変更される

すべての TLV は xn+y 形式を使用してアラインメント要件を指定します。xn+y 形式は [RFC8200] に従って定義されます。SR ソースノードは, SRH を構築する際に TLV とパディング TLV の xn+y アラインメント要件を使用します。

TLV の Length フィールドは, ノードが Type をサポートまたは認識しない場合に SRH を検査する際に TLV をスキップするために使用されます。Length は TLV の長さをオクテットで定義し, Type および Length フィールドは含みません。

この文書では以下の TLV が定義されています:

Padding TLVs (パディング TLV)

HMAC TLV

将来, 追加の TLV が定義される可能性があります。