はじめに
こんにちは。ネットワークエンジニアの「だいまる」です。
今回は、セグメントルーティングの代表例であるSRv6の概要についてまとめてみました。
CiscoのクレランスさんがSegement Routingを勉強するならこれを読め!とおっしゃっていたので、紹介しておきます。
SRv6とは?
SRv6とは、「Segment Routing over IPv6」の略称であり、IPv6拡張ヘッダを利用したセグメントルーティング系のプロトコルとなります。
セグメントルーティング(以降:SR)の代表例であるSR-MPLSは、ラベルを用いたセグメントルーティングやトラフィックエンジニアリングを実施しています。
直近だとJanog52の「SRv6による社内検証網の提供と、SR-MPLS/SRv6双方を運用してみてわかったこと」がとても面白かったので、参考になると思います。
私もこの発表を現地で聞いていてとてもためになりました。
SRv6の理解のために、いくつかの用語の理解から始めていきたいと思います。
まずはSID(Segment ID)を理解しよう!
SID(Segment ID)とは「IPv6アドレス形式(128bit)で表現されるノードやFunction等の識別子」です。
SIDには、以下3つのフィールドがあり、各フィールドで用途が異なってきます。
- SID:IPv6アドレス形式(128bit)で表現されるノードやFunction等の識別子
- Locator:ノード識別子(SRv6ノードのアドレス)※64bit利用が多いイメージ
- SID Block:SRv6 ネットワークの識別子(IPv6 Prefix相当)
- Node ID:SRv6ノードの識別子(ホストアドレス相当)
- Function:各ノードで実行されるSRv6 Functionを示す値
- Args:FunctionのためのOption値
- Locator:ノード識別子(SRv6ノードのアドレス)※64bit利用が多いイメージ
SIDの次は「ノードの種類」を理解しよう!
3つのノード種別
SRv6ネットワークを構成するためには、3つのノード種別を理解する必要があります。
- Source Node(Ingress Node):SRヘッダ(SRH)を付与するノード
- Transit Node:SRv6 Pathの途中にあるノード・SRHを付加しないノード
- Endpoint Node(Egress Node):SRv6 Pathの宛先かつEnd Functionを実施するノード
Endpoint Nodeによる3つの動作
PSP(Penultimate Segment PoP)
これは「Endpoint Nodeの1つ前であるペナルティノード(Penulty Node)上で、宛先IPv6アドレスに最後のSIDを挿入し、Segment Leftを0にする」動作となります。
USP(Ultimate Segment PoP)
Endpoint Node上でSRHを削除する動作であり、例は以下の通りとなります。
- Segment Left(SL)が0のとき
- 元のNext Header値をSRHのNext Header値に書き込む
- IPv6 Payload長を「8×(拡張ヘッダ長+1)」分だけ減らす
- SRHを削除
- Next Headerを読み込む
USD(Ultimate Segment Decapsulation)
これはNext Header Typeを参照し、そのTypeに準じた動作を実施していきます。
- IPv6(41)の時
- SRHを含むOuter IPv6 Headerを削除
- egress IPv6 FIBを参照し、該当のIFから送信
- IPv4(4)の時
- SRHを含むOuter IPv6 Headerを削除
- egress IPv4 FIBを参照し、該当のIFから送信
最後は「SRヘッダ(SRH)」
前のセクションでも少し出てきましたが、最後はSRヘッダ(SRH)についてまとめていきます。
このSRHとは、「IPv6の拡張ヘッダを利用したSRv6向けのヘッダであり、8つのフィールドから構成」されています。
主な構成要素は以下の表の通りとなります。
ずらずらと長文を書くと逆にわかりづらくなりそうだったので表にしました!
フィールド名 | Bit長 | 用途・詳細 |
Next Header | 8 | SRHの次のHeader Typeを格納 |
Header Length | 8 | SRH長を示す |
Routing Type | 8 | ルーティング種別の定義 ・IPv4の場合:「4」 |
Segement Left | 8 | 残セグメントリスト数 |
Last Entry | 8 | セグメントリストの最終Index(リスト長-1) |
Flags | 8 | パケットの優先度やグループの定義(ToSのイメージ) |
Tags | 8 | パケットの優先度やグループの定義(ToSのイメージ) |
Segement List | 128Bit * N | SIDリスト(通過するノードの指定等) |
最後に
今回はSRv6の基本的な概念であるSIDとSRH、ノード種別についてまとめてみました。
次回はファンクションや実機確認など投稿していきたいと思います。
-
ネットワーク
【ネットワーク入門編】SRv6をまとめてみた(概要)
-
技術
【セグメントルーティング(SR)実践編】SR-MPLS TE Explicit pathについて
-
ネットワーク
【ネットワーク入門:セグメントルーティング】SRv6(エンドファンクション・トランジットファンクション)
-
技術
【セグメントルーティング】Unreachable Prefix Announcement(UPA)
-
ネットワーク
【セグメントルーティング入門】そもそもセグメントルーティング(SR)とは?
-
技術
【セグメントルーティング(SR)実践編】SR-MPLS TE Anycast SIDをCMLで実装してみた話