メインコンテンツへスキップ
  1. ネットワーク 記事一覧/
  2. MPLS記事一覧/

LDPのラベル配布モードとラベルスペース

目次

LDPのラベル配布モードとラベルスペース

RFC 5036はLDPの動作について3組の選択肢を定義しています。ラベルをいつ配るか、受け取ったラベルをどこまで持っておくか、上流へ配る順序をどうするかの3つです。このうち実装で選べるのは1組だけで、残りは固定されています。本記事では3組の違いとラベルスペースの考え方を解説し、IOS XR(XRd)のラボで確かめます。LDPの基本はLDPとはで解説しています。

3組の選択肢

RFC 5036選択肢何が変わるか
ラベル広告2.6.3節Downstream Unsolicited / Downstream on Demand要求を待ってから配るかどうか
ラベル保持2.6.2節liberal / conservative次ホップ以外から受けたラベルを捨てるかどうか
ラベル配布制御2.6.1節independent / ordered下流からラベルを受け取る前に上流へ配ってよいか

3組とも下流のLSRがラベルを決めて上流へ渡すという前提は共通です。MPLSではパケットを受け取る側がラベルを決めるため、宛先に近いLSRが「私に送るときはこのラベルを付けてください」と伝える形になります。

ラベル広告:DUとDoD

Downstream Unsolicitedは、セッションが上がったら持っているプレフィックスの分だけLabel Mappingを送ります。相手が使うかどうかは考えません。Downstream on Demandは、上流からLabel Requestを受け取ってから該当するFECのLabel Mappingを返します。

DoDはATMのようにラベル資源が限られる環境のために用意されました。イーサネットが前提の現代のルータではラベルが枯渇しないため、既定はDUです。

IOS XRではmpls ldp配下のsession downstream-on-demand with <ACL>で、DoDにする相手をACLで指定します。両端のルータに設定しないとDoDになりません。片側だけではDUのままです。

ラベル保持:liberalとconservative

LDPはセッションを張った相手全員からLabel Mappingを受け取ります。そのうち実際に使うのは、IGPが選んだ次ホップから受け取った分だけです。

liberalは使わない分も保持します。ラベルを覚えておく分メモリを使いますが、経路が変わって次ホップが入れ替わったとき、すでに持っているラベルをそのまま使えますconservativeは次ホップの分だけ保持し、経路が変われば改めてラベルを要求します。資源を節約できる代わりに収束が遅くなります。

ラベル配布制御:independentとordered

independentは、下流からラベルを受け取る前でも上流へ自分のラベルを配ってよい方式です。orderedは、下流からラベルを受け取るまで上流へ配りません。出口LSRだけは配る相手が自分なので例外です。

orderedはLSPが端から端までつながってからラベルが配られるため、途中で切れたLSPへパケットが流れ込むことを避けられます。independentはその保証がない代わりに収束が速くなります。

実装ではどれが選べるか

選べるのはラベル広告だけです。残る2組は実装ごとに固定されています。

実装ラベル広告ラベル保持ラベル配布制御
IOS XRDU / DoDを選択可liberal固定independent固定
IOS XEDU / DoDを選択可liberal固定independent固定
JunosDU / DoDを選択可liberal固定ordered固定

ラベル保持は3社ともliberalです。ラベル配布制御はCiscoとJuniperで逆になっています。Juniperのドキュメントは「Ordered mode is supported, but not Independent mode」と明記しています。

IOS XEにはmpls ldp atm control-modeがありorderedindependentを選べますが、これはLC-ATMインタフェース専用です。イーサネットでは使えません。RFCが2択で定義したのはATMを含む幅広い実装を想定していたためで、ルータの実装はliberalとindependent、またはliberalとorderedに収束しています。

混在環境で配布制御が揃わなくても、LDPのメッセージ交換そのものは変わりません。LSPが完成するまでの順序が違うだけです。

本記事のラボで確かめるのはラベル広告とラベル保持だけです。ラベル配布制御は設定できないため、実機では観測していません

ラベルスペース

ラベルスペースは、LSRがラベルの値を管理する単位です(RFC 5036の2.2.1節)。

種類意味使う場面
per-platform装置全体で1つのラベル空間を持つイーサネットなど、ラベルの値に制約がない
per-interfaceインタフェースごとに別のラベル空間を持つATMのVPI/VCIのように、リンクがラベル資源を握る

どちらかはLDP識別子の後半2オクテットに現れます(2.2.2節)。per-platformなら常に0です。3.3.3.3:0と表示されていればper-platformです。

per-platformだと、どのリンクから届いたパケットでも同じラベル値で同じ転送先に解決されます。だからこそリンクを複数持っていてもLDPセッションは1本で済みます。

実機での検証

検証環境

CE1 — PE1 — P1 — P2 — PE2 — CE2 を直列につないでいます。AS 65001のPE1 / P1 / P2 / PE2がMPLSネットワークで、OSPF(area 0)で経路を、LDPでラベルを配っています。PE1とP1の間は2本のリンクでつながっています。CE3 / CE4はVRF CUST-Aの顧客です。

ルータ役割Lo0
CE1顧客側(AS 65101)、192.168.1.0/24を広告1.1.1.1/32
PE1入口 / 出口LSR(AS 65001)2.2.2.2/32
P1中継LSR3.3.3.3/32
P2中継LSR4.4.4.4/32
PE2入口 / 出口LSR(AS 65001)5.5.5.5/32
CE2顧客側(AS 65102)、192.168.6.0/24を広告6.6.6.6/32
CE3VRF CUST-Aの顧客側(AS 65107)7.7.7.7/32
CE4VRF CUST-Aの顧客側(AS 65108)8.8.8.8/32

観測はP1を中心に行います。P1はPE1とP2の両方とLDPセッションを持つため、保持モードの確認に向いています。

検証のSTEP

STEP操作狙い
0初期状態既定がDUであること。LDP識別子が:0でper-platformであること。次ホップでないピアのラベルも保持していること
1PE1にだけsession downstream-on-demand片側だけではDoDにならないこと
2P1にも同じ設定両端そろってDoDになり、Label Requestが流れること
3STEP 1・2を削除(最終状態)STEP 0と同じに戻ること

STEP 0:初期状態

P1から見た2つのピアです。どちらもDownstream-Unsolicitedで、LDP識別子は:0で終わっています。

STEP 0 P1 show mpls ldp neighbor detail(抜粋)
Peer LDP Identifier: 4.4.4.4:0
  TCP connection: 4.4.4.4:39224 - 3.3.3.3:646
  State: Oper; Msgs sent/rcvd: 18/17; Downstream-Unsolicited
Peer LDP Identifier: 2.2.2.2:0
  TCP connection: 2.2.2.2:646 - 3.3.3.3:28568
  State: Oper; Msgs sent/rcvd: 16/18; Downstream-Unsolicited

保持モードはバインディングに現れます。P1にとって5.5.5.5/32はPE2のLoopback0で、経路の次ホップはP2です。

STEP 0 P1 show route ospf(抜粋)
O    2.2.2.2/32 [110/2] via 10.2.3.2, 00:05:12, GigabitEthernet0/0/0/0
O    4.4.4.4/32 [110/2] via 10.3.4.4, 00:06:11, GigabitEthernet0/0/0/1
O    5.5.5.5/32 [110/3] via 10.3.4.4, 00:04:01, GigabitEthernet0/0/0/1
O    10.4.5.0/24 [110/2] via 10.3.4.4, 00:06:11, GigabitEthernet0/0/0/1

5.5.5.5/32の次ホップは10.3.4.4、つまりP2だけです。それにもかかわらず、バインディングにはPE1のラベルも残っています。

STEP 0 P1 show mpls ldp bindings 5.5.5.5/32
5.5.5.5/32, rev 17
	Local binding: label: 24003
	Remote bindings: (2 peers)
	    Peer                Label    
	    -----------------   ---------
	    2.2.2.2:0           24004   
	    4.4.4.4:0           24004   

Remote bindings: (2 peers)とあり、次ホップではない2.2.2.2(PE1)のラベルも保持しています。これがliberalの動作です。conservativeなら4.4.4.4の1件だけになります。

STEP 1:PE1にだけDoDを設定する

PE1に相手を指定するACLを作り、session downstream-on-demandを入れました。

STEP 1 PE1 の設定
ipv4 access-list DOD-PEERS
 10 permit ipv4 host 3.3.3.3 any
!
mpls ldp
 session downstream-on-demand with DOD-PEERS

設定するとセッションが張り直されます。syslogの理由がLabel advertisement mode changedになっています。

STEP 1 PE1 show logging(抜粋)
RP/0/RP0/CPU0:Sep 11 05:49:10.357 UTC: mpls_ldp[1178]: %ROUTING-LDP-5-NBR_CHANGE : VRF 'default' (0x60000000), Neighbor 3.3.3.3:0 is DOWN (Label advertisement mode changed) 
RP/0/RP0/CPU0:Sep 11 05:49:14.891 UTC: mpls_ldp[1178]: %ROUTING-LDP-5-NBR_CHANGE : VRF 'default' (0x60000000), Neighbor 3.3.3.3:0 is UP (IPv4 connection) 

張り直した後もモードは変わりません。

STEP 1 PE1 show mpls ldp neighbor detail(抜粋)
Peer LDP Identifier: 3.3.3.3:0
  TCP connection: 3.3.3.3:15840 - 2.2.2.2:646
  Graceful Restart: No
  Session Holdtime: 180 sec
  State: Oper; Msgs sent/rcvd: 15/14; Downstream-Unsolicited
  Up time: 00:03:15

片側だけの設定ではDoDになりません。相手のP1も同じ表示です。

STEP 2:P1にも設定する

P1にも同じ設定を入れると、両方の表示が変わります。

STEP 2 PE1 show mpls ldp neighbor detail(抜粋)
Peer LDP Identifier: 3.3.3.3:0
  TCP connection: 3.3.3.3:22947 - 2.2.2.2:646
  Graceful Restart: No
  Session Holdtime: 180 sec
  State: Oper; Msgs sent/rcvd: 14/14; Downstream-on-Demand
  Up time: 00:04:20

このときP1は、PE1に対してはDoD、P2に対してはDUという状態になります。配布モードはセッション単位です。

キャプチャーには、DUでは流れないLabel Requestが現れます。確立してから4秒後にPE1が5つのRequestを送り、P1がLabel Mappingで応えています。

STEP 2 PE1 - P1 のキャプチャー(Helloを除く)
19	9.533811000	3.3.3.3	2.2.2.2	Initialization Message 
28	14.245187000	3.3.3.3	2.2.2.2	Initialization Message 
29	14.266202000	2.2.2.2	3.3.3.3	Initialization Message Keep Alive Message 
30	14.269227000	3.3.3.3	2.2.2.2	Keep Alive Message 
31	14.273151000	2.2.2.2	3.3.3.3	Address Message 
32	14.275792000	3.3.3.3	2.2.2.2	Address Message 
35	18.254353000	2.2.2.2	3.3.3.3	Label Request Message Label Request Message Label Request Message Label Request Message Label Request Message [Malformed Packet]
36	18.258873000	3.3.3.3	2.2.2.2	Label Mapping Message Label Mapping Message Label Mapping Message Label Mapping Message Label Mapping Message 
41	20.712829000	3.3.3.3	2.2.2.2	Label Request Message [Malformed Packet]
42	20.716533000	2.2.2.2	3.3.3.3	Label Mapping Message 

DUではAddressの直後にLabel Mappingが並びますLDPとはのSTEP 1を参照)。DoDではその間にLabel Requestが入ります。

Requestの中身は、どのFECのラベルが欲しいかを示すPrefix FECです。

STEP 2 No.35 Label Request(tshark -V 抜粋)
Label Distribution Protocol
    Label Space ID: 0
    Label Request Message
        Message Type: Label Request Message (0x401)
            FEC Elements
                FEC Element 1
                    FEC Element Type: Prefix FEC (2)
                    FEC Element Address Type: IPv4 (1)
                    FEC Element Length: 32
                    Prefix: 3.3.3.3
上のtshark出力のパケット(No.35 Label Request)のpcapをダウンロード

タイプ値は0x0401で、RFC 5036の定義と一致します。なお[Malformed Packet]はtsharkが1つのセグメントに詰まった複数のRequestを解釈しきれなかったための表示で、ルータ側は正常に処理しています。

STEP 3:設定を削除(最終状態)

両方から設定を外すとDUに戻り、バインディングも9件に復帰します。STEP 0と同じ状態です。

キャプチャー

PE1 - P1の1本目を採取しています。フィルターなしで取得しました。

STEP 2 DoDへの切り替え

検証Configおよびshow結果

各STEPで8台すべてから、次の種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態は最後のSTEPのもの)。

ファイル内容
..._show.txtshow version / show interface description / show route と、OSPF・LDP・MPLS転送・BGPの一式
..._log.txtそのSTEPの範囲だけに絞ったshow logging
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)
..._trace.txtコア4台のLDPとLSDのトレース

STEP 0:初期状態

ルータshow出力syslogrunning-configtrace
CE1showlogrun-
PE1showlogruntrace
P1showlogruntrace
P2showlogruntrace
PE2showlogruntrace
CE2showlogrun-
CE3showlogrun-
CE4showlogrun-

STEP 1:PE1にだけDoDを設定する

ルータshow出力syslogrunning-configtrace
CE1showlogrun-
PE1showlogruntrace
P1showlogruntrace
P2showlogruntrace
PE2showlogruntrace
CE2showlogrun-
CE3showlogrun-
CE4showlogrun-

STEP 2:P1にも設定する

ルータshow出力syslogrunning-configtrace
CE1showlogrun-
PE1showlogruntrace
P1showlogruntrace
P2showlogruntrace
PE2showlogruntrace
CE2showlogrun-
CE3showlogrun-
CE4showlogrun-

STEP 3:設定を削除(最終状態)

ルータshow出力syslogrunning-configtrace
CE1showlogrun-
PE1showlogruntrace
P1showlogruntrace
P2showlogruntrace
PE2showlogruntrace
CE2showlogrun-
CE3showlogrun-
CE4showlogrun-

参考

RFCタイトル概要
RFC 5036LDP Specificationラベル配布制御(2.6.1節)、ラベル保持(2.6.2節)、ラベル広告(2.6.3節)、ラベルスペース(2.2.1節)、LDP識別子との関係(2.2.2節)。

書籍: Luc De Ghein『MPLS Fundamentals』(Cisco Press, 2006)Chapter 2, 4

関連記事