1. Introduction (はじめに)
セグメントルーティング (Segment Routing, SR) は, ソースルーティングパラダイムを活用します。ノードは, "セグメント" と呼ばれる順序付けられた命令リストとして実体化されたSRポリシー (SR Policy) を通じてパケットを誘導します。セグメントは, トポロジベースまたはサービスベースの任意の命令を表すことができます。セグメントは, SRノードにローカルなセマンティクスを持つことも, SRドメイン内でグローバルなセマンティクスを持つこともできます。SRは, SRドメインへの入口ノードでのみフロー毎の状態を維持しながら, フロー毎の明示的ルーティングをサポートします。
セグメントは, そのセグメント識別子 (Segment Identifier, SID) によって参照されることがよくあります。
セグメントは, トポロジ命令に関連付けられる場合があります。トポロジローカルセグメントは, ノードに対して特定の出力インターフェースを介してパケットを転送するように指示する場合があります。トポロジグローバルセグメントは, SRドメインに対して特定のパスを介して宛先にパケットを転送するように指示する場合があります。同じ宛先に対して異なるセグメントが存在する場合があり, それぞれ異なるパス目標 (例えば, どのメトリックを最小化するか, どのような制約が指定されているか) を持ちます。
セグメントは, サービス命令に関連付けられる場合があります (例えば, パケットはセグメントに関連付けられたコンテナまたは仮想マシン (Virtual Machine, VM) によって処理される必要があります)。セグメントは, QoS処理に関連付けられる場合があります (例えば, このセグメントで受信したパケットをx Mbpsでシェーピングします)。
SRアーキテクチャは, セグメントに関連付けられた任意のタイプの命令をサポートします。
SRアーキテクチャは, 分散型, 集中型, またはハイブリッド型の任意のタイプのコントロールプレーンをサポートします。
分散シナリオでは, セグメントはIS-IS, OSPF, またはBGPによって割り当てられ, シグナリングされます。ノードは個別にSRポリシー上でパケットを誘導することを決定します (例えば, 事前計算されたローカル保護 [RFC8355])。ノードは個別にSRポリシーを計算します。
集中型シナリオでは, セグメントはSRコントローラによって割り当てられ, 実体化されます。SRコントローラは, どのノードがどのソースルーティングポリシーでどのパケットを誘導する必要があるかを決定します。SRコントローラは, ソースルーティングポリシーを計算します。SRアーキテクチャは, コントローラがネットワークをプログラムする方法を制限しません。可能性のあるオプションは, ネットワーク構成プロトコル (Network Configuration Protocol, NETCONF), パス計算要素通信プロトコル (Path Computation Element Communication Protocol, PCEP), およびBGPです。SRアーキテクチャは, SRコントローラの数を制限しません。具体的には, 複数のSRコントローラが同じSRドメインをプログラムする場合があります。SRアーキテクチャにより, これらのSRコントローラは, どのSIDがどのノードで実体化されているか, どのローカル (SRLB) およびグローバル (SRGB) ラベルセットがどのノードで利用可能かを発見できます。
ハイブリッドシナリオは, 基本分散コントロールプレーンを集中型コントローラで補完します。例えば, 宛先がIGPドメインの外にある場合, SRコントローラはIGPノードに代わってSRポリシーを計算する場合があります。SRアーキテクチャは, 分散コントロールプレーンの一部であるノードがSRコントローラとどのように相互作用するかを制限しません。可能性のあるオプションは, PCEPとBGPです。
ホストはSRドメインの一部である場合があります。集中型コントローラは, これらのポリシーをホストにプッシュするか, ホストからのリクエストに応答することによって, ホストにポリシーを通知できます。
SRアーキテクチャは, さまざまなデータプレーンで実体化できます。この文書は, SRの2つのデータプレーン実体化を紹介します: MPLS上のSR (SR over MPLS, SR-MPLS) とIPv6上のSR (SR over IPv6, SRv6)。
SRは, 転送プレーンに変更を加えることなく, MPLSアーキテクチャに直接適用できます [SR-MPLS]。セグメントはMPLSラベルとしてエンコードされます。SRポリシーはラベルのスタックとして実体化されます。処理するセグメント (アクティブセグメント) はスタックの最上部にあります。セグメントが完了すると, 関連するラベルがスタックからポップされます。
SRは, SRヘッダー (SR Header, SRH) [IPv6-SRH] と呼ばれる新しいタイプのルーティングヘッダーを使用して, IPv6アーキテクチャに適用できます。命令はセグメントに関連付けられ, IPv6アドレスとしてエンコードされます。SRv6セグメントは, SRv6 SIDとも呼ばれます。SRポリシーは, ルーティングヘッダー内のSRv6 SIDの順序付きリストとして実体化されます。アクティブなセグメントは, パケットの宛先アドレス (Destination Address, DA) によって示されます。次のアクティブなセグメントは, SRH内のSegmentsLeft (SL) ポインタによって示されます。SRv6 SIDが完了すると, SLが減少し, 次のセグメントがDAにコピーされます。パケットがSRポリシーに誘導されると, 関連するSRHがパケットに追加されます。
IGPベースの分散コントロールプレーンのコンテキストでは, 2つのトポロジセグメントが定義されます: IGP隣接セグメント (IGP-Adjacency segment) とIGPプレフィックスセグメント (IGP-Prefix segment)。
BGPベースの分散コントロールプレーンのコンテキストでは, 2つのトポロジセグメントが定義されます: BGPピアリングセグメント (BGP peering segment) とBGPプレフィックスセグメント (BGP-Prefix segment)。
SRポリシーのヘッドエンドは, SID (バインディングセグメントまたはBSIDと呼ばれる) をそのポリシーにバインドします。ヘッドエンドが, ローカルSRポリシーのBSIDと一致するアクティブセグメントを持つパケットを受信すると, ヘッドエンドはパケットを関連するSRポリシーに誘導します。
この文書は, SR-MPLSおよびSRv6データプレーン用のIGP, BGP, およびバインディングセグメントを定義します。
注意: この文書は, セグメントルーティングのアーキテクチャを定義しており, 基本的なオブジェクトと機能の定義, および全体的な設計の説明が含まれています。アーキテクチャを実装する手段は定義していません -- それは多数の参照文書に含まれており, その一部は読者の便宜のためにこの文書で言及されています。