はじめに
こんにちは。ネットワークエンジニアの「だいまる」です。
今回は、以前実機確認を行ったSR-MPLSの概要についてまとめていきたいと思います。
Sement Routingの教材については、以下の教材が有名となります。
SR-MPLSで使うSID種別や利用範囲
SIDの種類は主に2種類
セクションのタイトルにも記載した通りSR-MPLSで利用されるSIDは主に2種類存在します。
1つ目は「Prefix-SID」です。
これは、SRドメイン全体で固有値となりノードの識別子を意味し、SRGB(Segment Routing Global Block)から利用されます。
また、ラベル番号 16000〜23999までの8000個が予約されており、16000を「0」としたIndexも割り当てられております。
肝心な使い方ですが、自動で割り振られないため、各ルータに設定を投入し手動でPrefix-SIDを指定する必要があります。
そして、2つ目が各ノードで固有となりSRLB(Segment Routing Local Block)から利用されるAdj-SID(Binding-SID)。
Adj-SIDは、ラベルテーブルで用いられ各ルータに到着したパケットの宛先となるインタフェースを指定するために利用される。
SRMPLSにおけるラベルの利用範囲は「24000〜最大値」となる。※最大値:ベンダーによって異なる
また、このラベルはLocal labelとも呼ばれ、LSD(Label Switching Data Base)で管理されている。
- Prefix-SID
-
- ノードの識別子
- SRGBから利用(16000〜23999)
- SRドメイン全体で固有
- Adj-SID(Binding-SID)
-
- 宛先IFを指定するために利用
- SRLBから利用(24000〜最大値) ※ベンダーに依存
- ノード内で固有
IOS-XRによるSR-MPLSの設定方法(OSPF編)
IOS-XRによるSR-MPLSの設定方法は、以下の通りとなります。
router ospf <プロセスID>
segment-routing mpls
segment-routing sr-prefer
area <area ID>
interface Loopback <Loopback ID>
prefix-sid [option1] {index <index> | absolute <SID>} [option2]
!
!
!
上記のConfigについては以下で解説しているので、もしよければ確認してみてください。
- segment-routing mpls
-
SRMPLSをOSPF全体で有効化(エリア単位で有効化したい場合は、area配下で指定)
- segment-routing sr-prefer
-
LDPとSRMPLSによるラベル配布時、SRMPLSにおけるラベル配布や処理を優先するコマンド
- prefix-sid [option1] {index <index> | absolute <SID>} [option2]
-
- option1:[strict-spf|algorithm <algorithm no>]
- strict-spf:strict-spfの適用
- algorithm <algorithm no>:Flex Algoのアルゴリズム番号を指定(Delay Metric etc)
- index <index>:indexによるSIDの指定(16000を「0」としてカウント)
- absolute <SID>:16000~23999のSIDを指定
- option2:[n-flag-clear | explicit-null]
- n-flag-clear:prefix-sidを意味するn-flagを0にする
- explicit-null:end pointにおいてEXPフィールド値をToS値にコピーするため、decapしない
- option1:[strict-spf|algorithm <algorithm no>]
SR-MPLSで利用されるFEC(RFC8660)
そもそもFECとは
FECとは転送等価クラス(Forwarding Equvalence Class)といい、同じ方法、経路、転送処理で転送されるグループのことを指します。
以下の図で行くと、各ネットワークごとにフローや宛先がセットになったものがFECというイメージになります。
FECの定義
FECには主に4種類があり、各用途によって利用方法が異なります。
今回のSR-MPLS/SR-TEでは、End PointとColorで利用されることが多いです。
- Prefix,Routing Instance,Topology,Algorithm
- Nexthop,Outgoint interface
- No of adj,next hop list, outgoing interface ID
- End point,Color
Collision・タイブレークルール(備忘録として)
同一のラベルが割り当てられるFECが複数存在した場合、Collisionルールとタイブレークルールに則って割り当てるラベルを決定しています。
- 最小のAD値を持つFECが選択される(同一の場合は最小のnumerical valueをもつFEC)
※注意:SPFアルゴリズム以外のFECはFIBにインストールされない
Global SIDのPUSH/CONTINUE/NEXT
SID(Label)の動作処理には主に3つあります。
以下ではその説明をしていきましょう。
PUSH
PUSHではMPLSラベルを付与し、ラベルに応じてルーティングを実施していきます。
CONTINUE
CONTINUEでは、incomeラベルとoutcomeラベルの入れ替えを実施します。
絵は若干異なりますが、イメージとしては以下のようなイメージとなります。
NEXT
NEXTは、エンドルータでTop LabelをPOPする動作になります。
CML実機確認
それでは、概要を説明してきたのでこれらを実機確認していきましょう。
今回、利用した構成は以下の通りとなります。
事前状態の確認(SRMPLS有効化前)
事前状態を確認するとSRMPLSを有効化していないため、ラベルテーブルには何も設定されていないことがわかります。
RP/0/RP0/CPU0:Router2#show mpls forwarding detail
Sun Sep 3 07:49:22.101 UTC
RP/0/RP0/CPU0:Router2#show mpls label table
Sun Sep 3 07:49:25.182 UTC
Table Label Owner State Rewrite
----- ------- ------------------------------- ------ -------
0 0 LSD(A) InUse Yes
0 1 LSD(A) InUse Yes
0 2 LSD(A) InUse Yes
0 13 LSD(A) InUse Yes
設定投入
それでは、SRMPLSの設定を投入していきます。
RP/0/RP0/CPU0:Router2#conf e
Sun Sep 3 07:49:30.886 UTC
RP/0/RP0/CPU0:Router2(config)#router ospf 100
RP/0/RP0/CPU0:Router2(config-ospf)#segment-routing mpls
RP/0/RP0/CPU0:Router2(config-ospf)#segment-routing sr-prefer
RP/0/RP0/CPU0:Router2(config-ospf)#commit
Sun Sep 3 07:49:45.235 UTC
RP/0/RP0/CPU0:Sep 3 07:49:45.757 UTC: config[66209]: %MGBL-CONFIG-6-DB_COMMIT : Configuration committed by user 'cisco'. Use 'show configuration commit changes 1000000006' to view the changes.
RP/0/RP0/CPU0:Router2(config-ospf)#end
上記コマンドをRouter2〜Router5に全て投入したことによりSRMPLSが有効化されました。
その際に流れたパケットの中身をみていきたいと思います。
Commit直後のパケットを拾って見てみるとLSA-Type10を使ったパケットがあります。
このLSA-Type10の詳細は、次の記事で説明します。
このパケットによりSRMPLSのラベル情報をやりとりしているのです。
事後状態の確認(SRMPLS有効化後)
有効化後の状態を確認していくと有効化されていることがわかります。
追加されたLocalのラベルは「24000」と「24001」になります。
追加されたラベルの詳細を確認すると各IF宛のラベルとして紐づけられていることがわかります。
また、動作は「POP」となっており、事前の説明の中で出てきた「NEXT」動作となります。
RP/0/RP0/CPU0:Router2#show mpls label table
Sun Sep 3 07:58:45.606 UTC
Table Label Owner State Rewrite
----- ------- ------------------------------- ------ -------
0 0 LSD(A) InUse Yes
0 1 LSD(A) InUse Yes
0 2 LSD(A) InUse Yes
0 13 LSD(A) InUse Yes
0 16000 OSPF(A):ospf-100 InUse No
0 24000 OSPF(A):ospf-100 InUse Yes
0 24001 OSPF(A):ospf-100 InUse Yes
RP/0/RP0/CPU0:Router2#show mpls forwarding detail
Sun Sep 3 07:58:49.653 UTC
Local Outgoing Prefix Outgoing Next Hop Bytes
Label Label or ID Interface Switched
------ ----------- ------------------ ------------ --------------- ------------
16002 Pop SR Pfx (idx 2) Gi0/0/0/1 10.0.1.2 0
Updated: Sep 3 07:58:37.966
Version: 63, Priority: 1
Label Stack (Top -> Bottom): { Imp-Null }
NHID: 0x0, Encap-ID: N/A, Path idx: 0, Backup path idx: 0, Weight: 0
MAC/Encaps: 4/4, MTU: 1500
Outgoing Interface: GigabitEthernet0/0/0/1 (ifhandle 0x01000028)
Packets Switched: 0
Traffic-Matrix Packets/Bytes Switched: 0/0
16003 Pop SR Pfx (idx 3) Gi0/0/0/2 10.0.2.2 0
Updated: Sep 3 07:58:37.966
Version: 65, Priority: 1
Label Stack (Top -> Bottom): { Imp-Null }
NHID: 0x0, Encap-ID: N/A, Path idx: 0, Backup path idx: 0, Weight: 0
MAC/Encaps: 4/4, MTU: 1500
Outgoing Interface: GigabitEthernet0/0/0/2 (ifhandle 0x01000020)
Packets Switched: 0
Traffic-Matrix Packets/Bytes Switched: 0/0
16004 16004 SR Pfx (idx 4) Gi0/0/0/2 10.0.2.2 0
Updated: Sep 3 07:58:37.970
Version: 68, Priority: 1
Label Stack (Top -> Bottom): { 16004 }
NHID: 0x0, Encap-ID: N/A, Path idx: 0, Backup path idx: 0, Weight: 0
MAC/Encaps: 4/8, MTU: 1500
Outgoing Interface: GigabitEthernet0/0/0/2 (ifhandle 0x01000020)
Packets Switched: 0
16004 SR Pfx (idx 4) Gi0/0/0/1 10.0.1.2 0
Updated: Sep 3 07:58:37.970
Version: 68, Priority: 1
Label Stack (Top -> Bottom): { 16004 }
NHID: 0x0, Encap-ID: N/A, Path idx: 1, Backup path idx: 0, Weight: 0
MAC/Encaps: 4/8, MTU: 1500
Outgoing Interface: GigabitEthernet0/0/0/1 (ifhandle 0x01000028)
Packets Switched: 0
Traffic-Matrix Packets/Bytes Switched: 0/0
24000 Pop SR Adj (idx 0) Gi0/0/0/1 10.0.1.2 0
Updated: Sep 3 07:58:37.979
Version: 11, Priority: 1
Label Stack (Top -> Bottom): { Imp-Null }
NHID: 0x0, Encap-ID: N/A, Path idx: 0, Backup path idx: 0, Weight: 0
MAC/Encaps: 4/4, MTU: 1500
Outgoing Interface: GigabitEthernet0/0/0/1 (ifhandle 0x01000028)
Packets Switched: 0
24001 Pop SR Adj (idx 0) Gi0/0/0/2 10.0.2.2 0
Updated: Sep 3 07:58:37.979
Version: 12, Priority: 1
Label Stack (Top -> Bottom): { Imp-Null }
NHID: 0x0, Encap-ID: N/A, Path idx: 0, Backup path idx: 0, Weight: 0
MAC/Encaps: 4/4, MTU: 1500
Outgoing Interface: GigabitEthernet0/0/0/2 (ifhandle 0x01000020)
Packets Switched: 0
最後に
今回は、SRMPLSの概要についてまとめて見ました。
次回は、SRMPLSで使われるOSPFやBGPの拡張部分についてまとめていきたいと思います。
コメント