SRv6(IPv6ネイティブのセグメントルーティング)
MPLSコアを持たずにトラフィックエンジニアリングとサービス連鎖を実現できる理由が、SRHの中身とSIDのFunctionから正確にわかる。
- 1.SRv6はSIDを128ビットのIPv6アドレスとして扱い、Locator:Function:Argsの構造でアドレス自体に動作を埋め込む。
- 2.経路情報はIPv6拡張ヘッダSRHのセグメントリストに列挙され、ヘッダの宛先アドレスは常に先頭(アクティブ)SIDになる。
- 3.END/END.X/END.DT4などのFunctionを呼び分けることで、転送だけでなくVRF挿入やVNF連鎖までSIDの指定だけで表現できる。
SIDを「宛先アドレス」に埋め込む発想
セグメントルーティングは経路情報を入口でパケットに書き込み、中継ルータからパスごとの状態を消す技術です。そのデータプレーンのうち、SIDを MPLS ラベルではなく 128ビットの IPv6 アドレスそのものとして扱うのが SRv6 です。SR-MPLS がラベルスタックという専用のシムヘッダを必要としたのに対し、SRv6 は素の IPv6 転送だけでセグメントを渡り歩けます。MPLS データプレーンを一切必要としない点が、SRv6 が「IPv6 ネイティブ」と呼ばれる理由です。
SRv6を解さない中継ルータでも、宛先アドレス(アクティブSID)が指すLocatorプレフィックスへ向けて普通にIPv6として転送できます。SIDが特別なラベル空間ではなく通常のルーティング可能なアドレスだからです。これにより既存のIPv6コアへの漸進的な導入がしやすくなります。
SIDの構造:Locator : Function : Args
SRv6 の SID は128ビット全体が単なる識別子ではなく、内部が3つの領域に分かれます。
|<-- Locator(例 48bit) -->|<-- Function(例 16bit) -->|<-- Args(可変・省略可) -->|
そのノードへ経路可能な 到達後に実行する動作 動作へ渡す追加パラメータ
プレフィックス(IGPで広告) (END, END.X, END.DTなど) (オプション)
- Locator は当該ノードへ IGP(IS-IS/OSPFv3 の SR 拡張)が到達可能に広告する上位ビット列で、通常のIPv6プレフィックスとしてルーティングされます。中継ルータはこの部分だけを見て、素のIPv6最長一致転送でSIDの所有ノードまでパケットを運べます。
- Function はそのノードに着いた後で「何をするか」を指定します。同じLocatorを持つノードでも、Functionを変えるだけで挙動を切り替えられます。
- Args はFunctionへの追加パラメータで、フローハッシュ用の情報などを詰める用途もあります。
SIDがアドレスであると同時に命令でもある、というのがSRv6の核心です。SR-MPLSではラベルは単なる索引で「何をするか」はノードのローカルなラベル操作テーブルが決めますが、SRv6ではその意味がSIDの値そのものに埋め込まれています。
SRH:セグメントリストを運ぶ拡張ヘッダ
セグメントリストは SRH(Segment Routing Header) という IPv6 拡張ヘッダに格納されます。主要フィールドは次のとおりです。
IPv6ヘッダ
Destination Address = アクティブSID(先頭で処理すべきSID)
SRH(拡張ヘッダ、Next Header=43)
Next Header : SRHの次に続くヘッダ種別
Hdr Ext Len : SRHの長さ
Routing Type : 4(SRH)
Segments Left : 残りセグメント数(デクリメントされるポインタ)
Last Entry : セグメントリストの末尾インデックス
Flags
Segment List[0..n] : SID列(末尾がリストの先頭=最初に通ったセグメント)
(Optional TLV) : HMAC認証などの追加情報
Segments Left が現在アクティブなセグメントの位置を指すポインタです。ノードがSIDを1つ処理し終えると、Segments Left を1減らし、Segment List[Segments Left] の値を IPv6ヘッダの宛先アドレスへコピー します。この「ポインタを進めて宛先アドレスを書き換える」操作こそがSRv6の転送そのもので、宛先アドレスは常に「次に向かうべきアクティブSID」を表し続けます。
経路: ノードC → ノードB → ノードA(最終目的地)
SegList = [SID_A, SID_B, SID_C]([0]が最後に訪れるセグメント、[n]が最初)
送信元: DA = SegList[2] = SID_C(アクティブ), SL=2
ノードC: SLを2→1に更新 → DA = SegList[1] = SID_B
ノードB: SLを1→0に更新 → DA = SegList[0] = SID_A
ノードA: SL=0(残りセグメントなし)→ SRHを終端しローカルのFunction(END.DT4など)を実行
SR-MPLSとの違いを構造で押さえる
| 観点 | SR-MPLS | SRv6 |
|---|---|---|
| SIDの実体 | 20ビットのMPLSラベル | 128ビットのIPv6アドレス |
| 経路情報の置き場 | ラベルスタック(シムヘッダ) | SRH(IPv6拡張ヘッダ) |
| 転送基盤 | MPLSラベルスイッチング | 素のIPv6ルーティング |
| 動作の指定方法 | ラベルは索引、動作はノード側テーブルで解釈 | Functionが値としてSIDに埋め込まれる |
| 1SIDのオーバーヘッド | 4バイト | 16バイト(SRH上はSID列としてさらに嵩む) |
| 非対応ノードの扱い | MPLS転送に非対応だと中継不可 | 宛先アドレスとして素のIPv6転送が可能 |
SRHはSIDごとに16バイトを消費するため、セグメントリストが深くなるほどヘッダが肥大し、パスMTUを圧迫します。実運用ではリスト長を数個に抑えるか、圧縮SID(uSIDなど、複数のマイクロセグメントを1つの128ビットSID内に連結して詰め込み、セグメントリスト自体を短くする方式)で緩和します。
プログラマブルなネットワーク機能:Function一覧
SRv6が「プログラマブル」と呼ばれるのは、Functionの呼び分けだけでネットワーク機能を合成できるからです。代表的なFunctionは次のとおりです。
| Function | 意味 | 用途 |
|---|---|---|
| END | SegmentsLeftをデクリメントし次のSIDへ | 純粋な中継(次のセグメントへの受け渡し) |
| END.X | 指定した特定リンクへ転送 | SR-MPLSの隣接SIDに相当、リンク強制 |
| END.DT4 / END.DT6 | SRHを外しVRFへルックアップして転送 | L3VPNの出口でテナントのルーティングテーブルへ注入 |
| END.DX4 / END.DX6 | SRHを外し指定ネクストホップへ直接転送 | PE-CE間のクロスコネクト的な出口処理 |
| END.AD | 指定したVNFへトラフィックを迂回し戻す | サービスチェイニング(FW/DPIなどの挿入) |
たとえば [END.AD(FW), END.DT4(VRF-A)] というセグメントリストは「まずファイアウォールVNFを経由させ、その後VRF-Aへルックアップして配送せよ」という指示を、中継ルータへの個別設定なしにパケット自身に埋め込みます。中継ルータはこの意図を知らなくても、宛先アドレス(アクティブSID)に従って処理を委譲していくだけです。これが「SIDの指定だけでネットワーク機能を呼び出す」プログラマビリティの正体で、トンネル終端だけを扱う一般的なオーバーレイと違い、SRv6は経路上の任意ノードでの処理呼び出しまでアドレス空間に統合しています。
(1)SIDはLocator(経路可能)+Function(動作)+Argsの3層構造。(2)SRHのSegments Leftが処理ポインタで、進むたびに宛先アドレスへ次SIDを書き写す。(3)SR-MPLSはラベルスタック+MPLS転送、SRv6はSRH+素のIPv6転送、という基盤の違い。(4)END.DT/END.DX/END.ADなどFunctionの組み合わせがVPN終端やサービスチェイニングを実現する。
まとめ
SRv6の本質は、セグメントルーティングの「経路をパケットに書く」という発想を、専用のラベル空間ではなくIPv6アドレス空間の上にそのまま実装したことです。SIDはLocator:Function:Argsの構造を持ち、アクティブSIDは常にIPv6ヘッダの宛先アドレスとして現れます。SRHのSegments Leftというポインタが処理位置を管理し、1セグメント処理するたびに宛先アドレスを次のSIDへ書き換えます。SR-MPLSがMPLSという既存基盤の再利用だったのに対し、SRv6はMPLSコアなしで完結し、かつFunctionによってVRF挿入やVNF連鎖までアドレスの指定だけで表現できる。オーバーヘッドとMTUという代償はあるものの、この「アドレスがそのままプログラム」という設計が、キャリア網やデータセンターでSRv6が広がっている理由です。
ネットワーク Article
SRv6(IPv6ネイティブのセグメントルーティング)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
SRv6
比較で見る軸
難易度: advanced / カテゴリ: ネットワーク / タグ数: 5
導入後に効く点
経路情報はIPv6拡張ヘッダSRHのセグメントリストに列挙され、ヘッダの宛先アドレスは常に先頭(アクティブ)SIDになる。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ネットワーク
- タグ数
- 5
判断チェックリスト
- 自社の用途が「SRv6 / セグメントルーティング」に近いか確認する。
- 強みである「SRv6はSIDを128ビットのIPv6アドレスとして扱い、Locator:Function:Argsの構造でアドレス自体に動作を埋め込む。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。