ネットワーキングにおけるセグメントルーティングとソースパケットルーティングとは
セグメントルーテッドネットワークでは、デバイスはパケットを転送または処理する方法を表す一連の命令を生成します。これらの命令はセグメントと呼ばれます。セグメントをスタックすることで、オペレーターは任意の2つのデバイス間に正確なパスを作成できます。これにより、BGPフリーコア、トラフィックエンジニアリング(TE)、バックアップパス、マルチドメインパス、マルチトポロジーネットワーキングなどの機能が可能になります。データプレーンでは、セグメントはMPLSラベルまたはIPv6アドレスを使用して表すことができます。
前提となる知識
読者が一般的なIPルーティングとMPLSラベルスイッチの原理を理解し、IS-ISまたはOSPFのいずれかに関する豊富な実用的な知識を持っていることを前提としています。これらの概念については、 技術資料の他のリソースで説明しています。
セグメント ルーティング(SR)は、パケットがトポロジー上でどのように転送または処理されるかを示す一連の命令を生成する方法です。これらの命令はセグメントと呼ばれます。これらの命令をパケットに書き込むことで、トランジットデバイスが意図したとおりにパケットを転送して処理できるようになります。複数のセグメントをスタックして、任意の2つのデバイス間のエンドツーエンドパスを定義できます。
セグメントは、IS-IS、OSPF、BGPなどのルーティングプロトコル内で直接アドバタイズされます。つまり、ネットワーク全体でこれらのセグメントをアドバタイズするために追加のプロトコルを実行する必要がないということです。このセクションでは、セグメントの概念を定義します。また、セグメントのアドバタイズ方法と、セグメントを使用してネットワーク全体に正確なパスを作成する方法についても説明します。さらに、MPLSラベルを使用するか、SRv6アドレスと呼ばれる特別なIPv6アドレスを使用して、これらのセグメントをデータプレーンで表現する方法を調査します。これらのオプションは、それぞれSR-MPLSおよびSRv6と呼ばれます。
セグメントで表される指示の例
セグメントとは、1つの命令を表すコンストラクトに付けられた名前です。これは、転送に関する命令、あるいは受信ルーターでパケットをローカルに処理する方法に関する命令である場合もあります。セグメント ルーティングでは、これらの命令はネットワーク全体にアドバタイズされます。たとえば、IS-ISレベルやOSPFエリア全体などです。その結果、SR 対応デバイスはこれらの命令をスタックして、ネットワーク上の任意のリモート デバイスへの正確なパスを作成できます。
セグメントが表現できる命令の例をいくつか示します。
-
内部ゲートウェイプロトコル(IGP)の最短パスを特定のリモートルーターにパケットを転送します。
-
トランジット ルーターに、パケットをネクストホップ ネイバーに直接送信し、特定のローカル インターフェイスから送信するように指示します。
-
自律システム(AS)ボーダールーターに、特定の外部 BGP(EBGP)ピアに向けてパケットを送信するように指示し、BGP 最適経路の決定を上書きします。
-
2つ以上のトランジットルーターまたはエンドポイントルーター間でパケットのロードバランシングを行います。
-
複数の出口候補の中から、最も近い境界ルーターに向けてパケットを送信します。
-
トランジット ルーターに、パケットを特定のトラフィック制御(TE)トンネルにリダイレクトするように指示します。
-
メイントポロジー内でより小さい制約付きトポロジーを定義し、その制約付きトポロジー内の最短パスを下ってパケットを転送します。
-
パケットにプッシュされたセグメント命令をすべて削除し、特定のレイヤー2またはレイヤー3転送テーブルでパケット自体を処理します。
セグメントは、既存のルーティングプロトコル内でアドバタイズされます
SR ネットワークでは、各デバイスは、パケットの転送または処理方法を表すさまざまなセグメントを生成します。これらのセグメントの大部分は、同じルーティングドメイン内(同じOSPFエリアやIS-ISレベルなど)、またはBGPピア間など、他のすべてのルーターにアドバタイズされます。
セグメントルーティングは、専用のプロトコルを使用する代わりに、プロトコル拡張を介してIS-IS、OSPF、およびBGPでセグメントを直接アドバタイズします。セグメントルーティング用に新しいプロトコルを有効にする必要はありません。すでに使用しているプロトコルに頼るだけです。
その結果、ルーティングドメイン内のすべてのSR対応デバイスは、ネットワーク内の他のすべてのSR対応ノードからアドバタイズされたすべてのセグメント命令を完全に可視化できます。つまり、すべてのデバイスは、他のすべてのデバイスが受信できるすべてのアドバタイズされたセグメントについて学習します。
図1 は、この考え方を示し、SR-MPLSネットワークにおけるセグメントがどのように見えるかの概要を示しています。この概念はSRv6でも同様です。
図1 は、R1からR10までの番号が付けられた10台のルーターのトポロジーを示しています。リンク状態型ネットワークでは、すべてのルーターがネットワーク内のその場所を説明するオブジェクトを生成します。OSPFはこのオブジェクトをリンクステートアドバタイズメント(LSA)と呼び、IS-ISはこれをリンクステートプロトコルデータユニット(LSP)と呼びます。いずれの場合も、SR はこの LSA または LSP に追加情報を付加できます。
例えば、 図1では、R5はR4およびR10に隣接関係があることを発表しています。セグメント ルーティングでは、LSA または LSP で、R5 がセグメント ルーティングを使用して、セグメント識別子(SID)と呼ばれる番号とともに、これらのネイバーに直接トラフィックを送信できることを示すセグメント命令を付けることができます。これらは、SR-MPLS では隣接セグメントと呼ばれます。SRv6 の同等の構成は、End.X SID と呼ばれます。
また、R5は、IGP最短パスを下に送られたトラフィックを受け入れることを示す命令で、独自のループバックIPv4アドレスプレフィックスにタグ付けしています。これは、SR-MPLS ではノード セグメントと呼ばれます。
LSA または LSP はルーティング ドメイン全体にフラッディングされます。これは、OSPF エリアまたは IS-IS レベルのすべてのルーターが、これらのプロトコルを使用してアドバタイズされたすべてのセグメントについて学習することを意味します。このセグメント情報を使用して、SR対応ルーターは、1つ以上のセグメント命令をパケットに直接スタックし、パケットが特定のリモートルーターにたどるパスとパケットの処理方法に関する情報を示すことができます。
セグメントを結合してネットワーク上の正確なパスを作成
各ルーターが生成した命令を表すさまざまなセグメントを通知した後、ネットワーク内の任意のルーターはこれらのセグメントを組み合わせて、任意のパスを作成できます。これには、セグメントのスタックの作成が含まれる場合もあれば、宛先ルーターへの最短パスセグメントを1つ使用するのと同じくらい簡単な場合もあります。
セグメント ルーティングでは、すべてのセグメント命令が既存のルーティング プロトコルによってすでにアドバタイズおよび学習されているため、パスを積極的にシグナリングしたり要求したりすることなく、これを実現します。どのルーターでも、必要なパスを計算し、そのパスに関連する必要なセグメントを抽出し、それらの命令をデータプレーンのパケットに追加することができます。
図2 は、これらのセグメントを組み合わせる方法の人間が読める例を示しています。
図は、R1 から始まり、R7 に向けてパケットを送信する一連の 3 つの命令を示しています。最初のセグメントは、R4 への最短パスをたどります。2 番目のセグメントは、R4 から R9 に直接接続します。最後の命令は、R7 への最短パスを使用します。
R4 は、最初の 2 つのセグメントを生成してアドバタイズしました。R7 は 3 番目のセグメントを生成しました。ネットワーク内のどのルーターも、これらのセグメントを利用して、トポロジーを横断する正確なパスを作成できます。
セグメントのスタックを使用する必要はありません。例えば、トラフィックがリモートデバイスへの最短パスをたどることだけが要件である場合、パケットに必要なセグメントは1つだけです。これを 図3に示しますが、R1とR5の間の最短パスを記述するために必要なセグメントは1つだけです。
これは、トラフィック制御を使用せずに、パケットが宛先ボーダールーターへの IGP 最短パスをたどるだけという、従来の BGP フリーコア設計を実現するのに十分です。
MPLS または IPv6 を使用してデータプレーン内のセグメントを表現する
データプレーンでは、セグメントはMPLSラベルまたはIPv6アドレスを使用して表すことができます。これらのメソッドは、それぞれSR-MPLSおよびSRv6と呼ばれます。
図4 は、データプレーンにおける各プロトコルの外観の概要を示しています。SR-MPLS は 1 つの MPLS ラベルを使用して単一のセグメントを表しますが、SRv6 は単一の IPv6 アドレス内で 1 つ以上のセグメントをエンコードできます。フルパスを記述するために複数のIPv6アドレスが必要な場合、これらのアドレスは、セグメントルーティングヘッダー(SRH)と呼ばれるIPv6拡張ヘッダー内に格納されます。
図4 は、各データプレーンプロトコルのセグメントのスタックを示しています。ただし、パケットがリモートデバイスへの最短パスをたどるだけでよい場合は、セグメントのスタックを使用する必要はありません。代わりに、この命令は単一の MPLS ラベルまたは IPv6 アドレス内にエンコードできます。
SR-MPLSとSRv6はどちらも、セグメント識別子(SID)と呼ばれる数値構造を使用します。SIDは、データプレーンで使用すべきMPLSラベルまたはIPv6アドレスを通信するために使用されます。SID値は、アドバタイズするセグメントのタイプに応じて、さまざまな方法に使用されます。
例えば、SR-MPLS では、SID 値が、ルーターがそのセグメントについて受信することを期待する正確な MPLS ラベルである場合があります。ただし、他のセグメントタイプでは、SID値をインデックスとして使用し、事前に割り当てられたMPLSラベルのセットと組み合わせて、ルーターがセグメントに受信することを期待する正しいMPLSラベルを計算できます。
対照的に、SRv6の導入では、IPv6アドレスの一意のサブネット全体をネットワーク内の個々のルーターに割り当てる傾向があります。次に、ルーターはこの大きなプレフィックスから個々のセグメントを割り当てます。セグメントとプレフィックスは両方とも、どのルーターも、少なくともそのセグメントに向かって計量的に最短のパスをたどることができるように、ネットワーク上でアドバタイズされます。
IS-ISとOSPFはどちらも同じタイプのセグメントを作成およびアドバタイズし、どちらもセグメントID値を同じ方法で使用します。ただし、各プロトコルには、この情報を宣伝する独自の方法があります。
SR-MPLSとSRv6を個別に詳しく説明し、これらのデータプレーンプロトコルを有効にするIS-ISとOSPFの設定、およびSR-MPLSとSRv6が提供する固有のセグメントタイプについて詳しく説明しています。この詳細なドキュメントを読む前に、まず以下のセクションで説明されているドキュメントを読んで、セグメントルーティング全般について広く理解することを強くお勧めします。
今後の予定
セグメントルーティングの一般的な理解を得るには、以下の記事を読むことを強くお勧めします。