【SRv6/SRMPLS】SR-MPLS(概要:SID/FEC)

  • URLをコピーしました!
目次

はじめに

 こんにちは。ネットワークエンジニアの「だいまる」です。

今回は、以前実機確認を行った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)で管理されている。

【まとめ】SIDの種類について
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しない

SR-MPLSで利用されるFEC(RFC8660)

そもそもFECとは

 FECとは転送等価クラス(Forwarding Equvalence Class)といい、同じ方法、経路、転送処理で転送されるグループのことを指します。

 以下の図で行くと、各ネットワークごとにフローや宛先がセットになったものがFECというイメージになります。

MPLS網
MPLS網
送信元
送信元
ネットワークA
192.168.1.0/24
192.168.2.0/24
ネットワークA…
ネットワークB
10.8.0.0/24
10.10.0.0/24
ネットワークB…
FEC1
FEC1
FEC3
FEC3
FEC2
FEC2
Text is not SVG – cannot display

FECの定義

 FECには主に4種類があり、各用途によって利用方法が異なります。

今回のSR-MPLS/SR-TEでは、End PointとColorで利用されることが多いです。

  1. Prefix,Routing Instance,Topology,Algorithm
  2. Nexthop,Outgoint interface
  3. No of adj,next hop list, outgoing interface ID
  4. End point,Color

Collision・タイブレークルール(備忘録として)

同一のラベルが割り当てられるFECが複数存在した場合、Collisionルールとタイブレークルールに則って割り当てるラベルを決定しています。

STEP
同じラベルを割り当てるFECがある場合、タイブレークルールを適用
  • 最小のAD値を持つFECが選択される(同一の場合は最小のnumerical valueをもつFEC)
STEP
タイブレークルールにより選択されたFECにはラベルを割り当てる。そのほかはラベルなしで処理

※注意:SPFアルゴリズム以外のFECはFIBにインストールされない

STEP
異なるMCCかつ同一ラベルの割り当てがある場合は、再割り当てを実施
STEP
IP FIBにFECをインストール・Label FIBにラベルをインストール

Global SIDのPUSH/CONTINUE/NEXT

SID(Label)の動作処理には主に3つあります。

以下ではその説明をしていきましょう。

PUSH

 PUSHではMPLSラベルを付与し、ラベルに応じてルーティングを実施していきます。

Pay Load
Pay Load
IPv4 Header
IPv4 Header
Pay Load
Pay Load
IPv4 Header
IPv4 Header
MPLS Label
MPLS Label
 PUSH
 PUSH
Pay Load
Pay Load
IPv4 Header
IPv4 Header
MPLS Label
MPLS Label
Text is not SVG – cannot display

CONTINUE

 CONTINUEでは、incomeラベルとoutcomeラベルの入れ替えを実施します。

絵は若干異なりますが、イメージとしては以下のようなイメージとなります。

Pay Load
Pay Load
IPv4 Header
IPv4 Header
Pay Load
Pay Load
IPv4 Header
IPv4 Header
MPLS Label
MPLS Label
MPLS Label
MPLS Label
Pay Load
Pay Load
IPv4 Header
IPv4 Header
MPLS Label
MPLS Label
MPLS Label
MPLS Label
Pay Load
Pay Load
IPv4 Header
IPv4 Header
MPLS Label
MPLS Label
MPLS Label
MPLS Label
Pay Load
Pay Load
IPv4 Header
IPv4 Header
MPLS Label
MPLS Label
MPLS Label
MPLS Label
CONTINUE
CONTINUE
Text is not SVG – cannot display

NEXT

 NEXTは、エンドルータでTop LabelをPOPする動作になります。

Pay Load
Pay Load
IPv4 Header
IPv4 Header
Pay Load
Pay Load
IPv4 Header
IPv4 Header
MPLS Label
MPLS Label
POP
POP
Pay Load
Pay Load
IPv4 Header
IPv4 Header
Text is not SVG – cannot display

CML実機確認

それでは、概要を説明してきたのでこれらを実機確認していきましょう。

今回、利用した構成は以下の通りとなります。

eBGPピア
eBGPピア
eBGPピア
eBGPピア
SRMPLS/OSPF
SRMPLS/OSPF
OSPF 100
OSPF 100
Gi0/1
Gi0/1
Gi0/1
Gi0/1
Gi0/2
Gi0/2
Gi0/2
Gi0/2
Gi0/2
Gi0/2
Gi0/2
Gi0/2
Gi0/1
Gi0/1
Gi0/1
Gi0/1
Router3
Lo 0:10.1.0.3
SID:16002
Router3…
Router5
Lo 0:10.1.0.5
SID:16004
Router5…
Router4
Lo 0:10.1.0.4
SID:16003
Router4…
Router2
Lo 0:10.1.0.2
SID:16001
Router2…
Text is not SVG – cannot display

事前状態の確認(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の拡張部分についてまとめていきたいと思います。

  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次