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 XR | DU / DoDを選択可 | liberal固定 | independent固定 |
| IOS XE | DU / DoDを選択可 | liberal固定 | independent固定 |
| Junos | DU / DoDを選択可 | liberal固定 | ordered固定 |
ラベル保持は3社ともliberalです。ラベル配布制御はCiscoとJuniperで逆になっています。Juniperのドキュメントは「Ordered mode is supported, but not Independent mode」と明記しています。
IOS XEにはmpls ldp atm control-modeがありorderedとindependentを選べますが、これは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 | 中継LSR | 3.3.3.3/32 |
| P2 | 中継LSR | 4.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 |
| CE3 | VRF CUST-Aの顧客側(AS 65107) | 7.7.7.7/32 |
| CE4 | VRF CUST-Aの顧客側(AS 65108) | 8.8.8.8/32 |
観測はP1を中心に行います。P1はPE1とP2の両方とLDPセッションを持つため、保持モードの確認に向いています。
検証のSTEP
| STEP | 操作 | 狙い |
|---|---|---|
| 0 | 初期状態 | 既定がDUであること。LDP識別子が:0でper-platformであること。次ホップでないピアのラベルも保持していること |
| 1 | PE1にだけsession downstream-on-demand | 片側だけではDoDにならないこと |
| 2 | P1にも同じ設定 | 両端そろってDoDになり、Label Requestが流れること |
| 3 | STEP 1・2を削除(最終状態) | STEP 0と同じに戻ること |
STEP 0:初期状態
P1から見た2つのピアです。どちらもDownstream-Unsolicitedで、LDP識別子は:0で終わっています。
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です。
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/15.5.5.5/32の次ホップは10.3.4.4、つまりP2だけです。それにもかかわらず、バインディングにはPE1のラベルも残っています。
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を入れました。
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になっています。
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) 張り直した後もモードは変わりません。
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にも同じ設定を入れると、両方の表示が変わります。
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で応えています。
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です。
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タイプ値は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.txt | show 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出力 | syslog | running-config | trace |
|---|---|---|---|---|
| CE1 | show | log | run | - |
| PE1 | show | log | run | trace |
| P1 | show | log | run | trace |
| P2 | show | log | run | trace |
| PE2 | show | log | run | trace |
| CE2 | show | log | run | - |
| CE3 | show | log | run | - |
| CE4 | show | log | run | - |
STEP 1:PE1にだけDoDを設定する
| ルータ | show出力 | syslog | running-config | trace |
|---|---|---|---|---|
| CE1 | show | log | run | - |
| PE1 | show | log | run | trace |
| P1 | show | log | run | trace |
| P2 | show | log | run | trace |
| PE2 | show | log | run | trace |
| CE2 | show | log | run | - |
| CE3 | show | log | run | - |
| CE4 | show | log | run | - |
STEP 2:P1にも設定する
| ルータ | show出力 | syslog | running-config | trace |
|---|---|---|---|---|
| CE1 | show | log | run | - |
| PE1 | show | log | run | trace |
| P1 | show | log | run | trace |
| P2 | show | log | run | trace |
| PE2 | show | log | run | trace |
| CE2 | show | log | run | - |
| CE3 | show | log | run | - |
| CE4 | show | log | run | - |
STEP 3:設定を削除(最終状態)
| ルータ | show出力 | syslog | running-config | trace |
|---|---|---|---|---|
| CE1 | show | log | run | - |
| PE1 | show | log | run | trace |
| P1 | show | log | run | trace |
| P2 | show | log | run | trace |
| PE2 | show | log | run | trace |
| CE2 | show | log | run | - |
| CE3 | show | log | run | - |
| CE4 | show | log | run | - |
参考
| RFC | タイトル | 概要 |
|---|---|---|
| RFC 5036 | LDP 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