4. Packet Processing (パケット処理)
4. Packet Processing (パケット処理)
このセクションでは, SR ソースノード, 中継ノード, および SR セグメントエンドポイントノードでの SRv6 パケット処理について説明します。
4.1. SR Source Node (SR ソースノード)
ソースノードはパケットを SR Policy に誘導します。SR Policy が単一のセグメントを含む Segment List になり, SRH フラグに情報を追加したり TLV を追加したりする必要がない場合, DA は単一の Segment List エントリに設定され, SRH は省略してもかまいません。
必要な場合, SRH は次のように作成されます:
Next Header および Hdr Ext Len フィールドは [RFC8200] で指定されているように設定されます。
Routing Type フィールドは 4 に設定されます。
パケットの DA は最初のセグメントの値に設定されます。
SRH Segment List の最初の要素は最終セグメントです。2 番目の要素は最後から 2 番目のセグメントです。以下同様です。
Segments Left フィールドは n-1 に設定されます。ここで n は SR Policy の要素数です。
Last Entry フィールドは n-1 に設定されます。ここで n は SR Policy の要素数です。
TLV (HMAC を含む) はその仕様に従って設定される可能性があります。
パケットはパケットの Destination Address (宛先アドレス) (最初のセグメント) に向けて転送されます。
4.1.1. Reduced SRH (削減された SRH)
ソースが SRH 内に SID リスト全体を保持する必要がない場合, 削減された SRH を使用できます。
削減された SRH には関連する SR Policy の最初のセグメントが含まれません (最初のセグメントは既に IPv6 ヘッダの DA にあります)。Last Entry フィールドは n-2 に設定されます。ここで n は SR Policy の要素数です。
4.2. Transit Node (中継ノード)
[RFC8200] で指定されているように, Routing Extension Header (ルーティング拡張ヘッダ) (したがって SRH) を検査できる唯一のノードは, パケットの DA に対応するノードです。他のすべての中継ノードは下層のルーティングヘッダを検査してはならず, その IPv6 ルーティングテーブルに従って DA に向けてパケットを転送しなければなりません。
SID がパケットの IPv6 ヘッダの宛先アドレスにある場合, それは IPv6 アドレスとして IPv6 ネットワークを通じてルーティングされます。SID, または SID をカバーするプレフィックス, およびそれらの到達可能性は, この文書の範囲外の手段によって配布される可能性があります。たとえば, [RFC5308] または [RFC5340] を使用して, ノード上の SID をカバーするプレフィックスをアドバタイズできます。
4.3. SR Segment Endpoint Node (SR セグメントエンドポイントノード)
実装の詳細を制約することなく, SR セグメントエンドポイントノードはそのローカル SID の Forwarding Information Base (転送情報ベース, FIB) エントリを作成します。
SRv6 対応ノードが IPv6 パケットを受信すると, パケットの宛先アドレスに対して最長プレフィックス一致検索を実行します。この検索は次のいずれかを返すことができます:
-
ローカルにインスタンス化された SRv6 SID を表す FIB エントリ
-
SRv6 SID としてローカルにインスタンス化されていないローカルインターフェースを表す FIB エントリ
-
非ローカルルートを表す FIB エントリ
-
一致なし
4.3.1. FIB Entry Is a Locally Instantiated SRv6 SID (FIB エントリはローカルにインスタンス化された SRv6 SID)
この文書およびこのセクションでは単一の SRv6 SID を定義します。将来の文書では追加の SRv6 SID が定義される可能性があります。そのような場合, このセクションの全内容はその文書で定義されます。
FIB エントリがローカルにインスタンス化された SRv6 SID を表す場合, [RFC8200] のセクション 4 で定義されているように IPv6 ヘッダの次のヘッダチェーンを処理します。セクション 4.3.1.1 は SRH の処理方法を説明します。セクション 4.3.1.2 は上位層ヘッダまたは Next Header の不在を処理する方法を説明します。
この SID を処理すると Segments Left が変更され, TLV を処理するように設定されている場合, 経路上で変更される TLV タイプの "variable-length data" が変更される可能性があります。したがって, Segments Left は可変であり, 経路上で変更される TLV は可変です。SRH の残り (Flags, Tag, Segment List, および経路上で変更されない TLV) は, この SID を処理する間は不変です。
4.3.1.1. SRH Processing (SRH 処理)
S01. SRH が処理される場合 {
S02. Segments Left がゼロに等しい場合 {
S03. パケット内の次のヘッダの処理に進みます。
そのタイプはルーティングヘッダの Next Header フィールドで識別されます。
S04. }
S05. それ以外の場合 {
S06. ローカル設定が TLV 処理を必要とする場合 {
S07. TLV 処理を実行します (TLV 処理を参照)
S08. }
S09. max_last_entry = ( Hdr Ext Len / 2 ) - 1
S10. ((Last Entry > max_last_entry) または
S11. (Segments Left が (Last Entry+1) より大きい) 場合 {
S12. ソースアドレスに ICMP Parameter Problem, Code 0 メッセージを送信し,
Segments Left フィールドを指し, パケットを破棄します。
S13. }
S14. それ以外の場合 {
S15. Segments Left を 1 減らします。
S16. SRH から Segment List[Segments Left] を
IPv6 ヘッダの宛先アドレスにコピーします。
S17. IPv6 Hop Limit が 1 以下の場合 {
S18. ソースアドレスに ICMP Time Exceeded -- Hop Limit Exceeded in
Transit メッセージを送信し, パケットを破棄します。
S19. }
S20. それ以外の場合 {
S21. Hop Limit を 1 減らします
S22. 新しい宛先への送信のためにパケットを IPv6 モジュールに再送信します。
S23. }
S24. }
S25. }
S26. }
4.3.1.1.1. TLV Processing (TLV 処理)
Active Segment がこの文書で定義されたローカル SID である場合, ローカル設定によって TLV の処理方法が決定されます。ローカル設定の定義はこの文書の範囲外です。
説明のためにのみ, SID に関連付けられる可能性のある 2 つのローカル設定の例を以下に示します。
例 1: インターフェース I2 から受信したパケットの場合 TLV 処理をスキップ
例 2: インターフェース I1 から受信したパケットの場合 最初の TLV が HMAC の場合 { HMAC TLV を処理 } それ以外の場合 { パケットを破棄 }
4.3.1.2. Upper-Layer Header or No Next Header (上位層ヘッダまたは次ヘッダなし)
この文書で定義された SRv6 SID としてローカルにインスタンス化された FIB エントリに一致するパケットの上位層ヘッダを処理する場合:
(上位層ヘッダが IPv4 または IPv6 である) かつ
ローカル設定が許可する場合 {
IPv6 デカプセル化を実行
デカプセル化されたパケットを IPv4 または IPv6 モジュールに再送信
}
それ以外の場合 {
ソースアドレスに ICMP parameter problem メッセージを送信し,
パケットを破棄します。エラーコード (4) "SR Upper-layer
Header Error", ポインタは上位層ヘッダのオフセットに設定されます。
}
一意のエラーコードにより, SR ソースノードはエンドポイントでの SID 処理のエラーを認識できます。
4.3.2. FIB Entry Is a Local Interface (FIB エントリはローカルインターフェース)
FIB エントリがローカルインターフェースを表し, SRv6 SID としてローカルにインスタンス化されていない場合, SRH は次のように処理されます:
Segments Left がゼロの場合, ノードはルーティングヘッダを無視し, パケット内の次のヘッダの処理に進む必要があります。そのタイプはルーティングヘッダの Next Header フィールドで識別されます。
Segments Left がゼロ以外の場合, ノードはパケットを破棄し, パケットのソースアドレスに ICMP Parameter Problem, Code 0 メッセージを送信し, 認識されない Routing Type を指す必要があります。
4.3.3. FIB Entry Is a Nonlocal Route (FIB エントリは非ローカルルート)
処理はこの文書によって変更されません。
4.3.4. FIB Entry Is a No Match (FIB エントリは一致なし)
処理はこの文書によって変更されません。