一、LDP邻居发现和会话建立


1.1 LDP基本概念

1.png

  • MPLS需要使用标签分发协议完成标签的分配控制和保持
  • 目前有很多种标签分发协议,LDP(Label Distribution Protocol)为其中之一
  • LDP为FEC分配标签:LDP邻居之间发送Label/FEC映射信息

1.1.1 LDP消息类型

2.png

  • LDP消息承载在UDP或TCP之上,端口号为646

  • Discovery message: 宣告和维护网络中一个LSR的存在。

  • Session message: 建立、维护和终止LDP Peers之间的LDP Session。
  • Advertisement message: 生成、改变和删除FEC的标签映射。
  • Notification message: 宣告告警和错误信息。
  • 注意,上面的只是消息类型,并不是真正的协议报文

1.1.2 LDP消息类型与封装格式

3.png

  • LDP Header
    • Version:2B,表示LDP版本,当前版本号为1
    • PDU Length:2B,字节为单位,表示除了Version和PDU Length以外的其他部分的总长度
    • LDP Identifier:6B,前4B用来唯一标识一个LSR,即LSR ID,后2B用来表示LSR的标签空间,LDP Identifier用来表示LDP会话的Peer ID(类比OSPF和BGP的Router ID,只是LDP的LSR ID一定要手工配置,另外如果没有配置Transport Address,LSR ID也会用作TCP连接和LDP Session的建立)
  • LDP Message
    • U:1B,为Unknown Message bit,当LSR收到一个无法识别的消息时,该消息的U=0时,LSR会返回给该消息的生成者一个通告,当U=1时,忽略该无法识别的消息,不发送通告给生成者
    • Type:2B,表示具体的消息类型,可参考1.1.3
    • Message Length:2B,以字节为单位表示Message ID、Mandatory Parameters和Optional Parameters的总长度
    • Message ID:4B,用来标识一个消息
    • Mandatory Parameters:该可变长消息的必须的参数
    • Optional Parameters:该可变长消息的可选的参数

1.1.3 LDP消息作用

4.png

  • Hello报文用的是UDP封装,Session Message用的是TCP封装
  • Label Mappping消息很重要,其实就是标签的映射信息(FEC对应一个标签,在华为设备中,默认情况是以IP前缀来划分FEC,所以不同的前缀就对应不同的标签)


    补充说明:

  • Label Withdraw Message:用来撤消FEC/Label映射。LSR通过发送Label Withdraw Message告诉对等体该对等体不可以继续使用自己以前通告给他的标签。

  • Label Release Message:用来释放标签。当一个LSR不再需要以前从LDP Peer收到的标签时,就发送一个Label Release Message给该LDP Peer。
  • Notification Message:用来通知LDP Peer错误信息或者其他一些辅助信息如LDP Session状态等。

1.1.4 LDP的四个阶段

  1. 发现(Discovery)消息:用于通告和维护网络中LSR的存在;
  2. 会话(Session)消息:用于建立、维护和终止LDP对等体之间的会话;
  3. 通告(Advertisement)消息:用于创建、改变和删除标签—FEC绑定;
  4. 通知(Notification)消息:用于提供建议性的消息和差错通知。

为保证LDP消息的可靠发送,除了发现阶段使用UDP传输外,LDP的Session消息、Advertisement消息和Notification消息都使用TCP传输。


1.2 LDP邻居发现机制

5.png

  • LDP基本发现机制可以自动发现直连在同一条链路上的LDP Peers,所以这种情况下不需要明确指明LDP Peer
    • 使用组播,只在本地链路有效,而扩展发现机制使用单播

1.2.1 LDP基本发现机制

6.png

  • LSR通过周期性(5s)地发送Hello Message表明自己的存在。
  • Hello Message消息是封装在UDP报文中的,目的端口号为646。在LDP基本发现机制中,该消息的目的IP地址为组播IP地址224.0.0.2,即该消息发给该网段上所有的路由器(如图中的SWA和SWB分别周期性地发送Hello Message给224.0.0.2)。
  • Hello Message中携带了LDP Identifier(LSR ID)信息以便告诉对方自己使用的标签空间。
  • 然后LSR ID IP地址(Transport Address )大的LSR作为主动方发起TCP连接。(原则:使用一个TCP Session就可以了)
  • TCP连接建立之后,LSR会继续发送Hello Message以便发现新的邻居或者检测错误。
  • 补充1:LDP基本发现机制分析

image.png
可以看到,Hello Message的源地址就是接口的IP地址,目的地址为224.0.0.2。
另外,Hello Message中有一个非常重要的字段:
image.png
就是Transport Address,可以看到,后面的TCP连接和LDP Session的建立都是通过该地址进行的
默认情况,Transport Address是LSR ID,并且LSR ID一定要手工配置的。

1.2.2 LDP拓展发现机制

7.png

  • Hello Message的源端口是否一定是646呢?是的
  • 与LDP基本发现机制不同的是,LDP扩展发现机制是运行LDP协议的LSR(如SWA)周期性地发送Hello Message给特定的目的IP,所以需要通过配置指定建立Session的LDP Peer
  • 另外一个LSR(如SWB)将决定是否要回应该报文,如果要回应,则通过发送Hello Message给特定的LSR(SWA)。

1.3 LDP会话建立过程

1.3.1 LDP Session建立和维护1

8.png

  • 建立TCP连接之前,两个LSR(如图中SWA和SWB)首先会决定使用哪个地址建立TCP连接以及谁是主动方谁是被动方,然后由主动方发起连接。
  • 如果Hello Message中携带了Transport Address,该Transport Address用于建立TCP连接,如果Hello Message中没有携带Transport Address,LSR ID用于建立TCP连接。两个LSR都从对端发来的Hello Message中获得对端用于建立TCP连接的地址,然后比较两个地址的大小,地址大的作为主动方发起TCP连接,图中SWB作为主动方发起TCP连接。
  • TCP连接建立之后,由主动方(SWB)发出Initialization Message携带会话协商参数,如LDP协议号,标签分发方式等等,被动方(SWA)检查参数能够接受,如果接受则发送Initialization Message并携带自己希望使用的协商参数,并随后发KeepAlive Message。(实际测试的结果是,被动方的这两条消息是同时发送的
  • 直到双方都收到对端的KeepAlive Message后,会话建立。两个LSR就会成为LDP Peers并交换Advertisement Message。
  • 补充1:Initialization Message报文示例

9.jpg
初始化消息,可以看到最后一个是标签空间。

  • 补充2:协商完整过程

10.jpg
注意的第一点是,被动方回复的初始化消息和Keep Alive消息是封装在同一个数据包中的:
11.jpg
注意的第二点是,协商完成后会发送Address Message,这只是该peer上有的IP地址(宣告接口地址,就是peer所有使用了MPLS和MPLS LDP的接口的IP地址,当然LSR ID的l0口可以不使能),而不是FEC/Label映射消息:
12.jpg
注意的第三点是,接下来才会互相发送FEC/Label映射消息(Label Mapping):
13.jpg
可以看到,一个FEC一个Label Mapping Message,其关键的字段为:FEC Element Type(Prefix FEC)FEC Element Length(32)Prefix(10.1.3.3)

1.3.2 LDP Session建立和维护2

14.png

  • 如果被动方(SWA)不接受协商参数,则发送Error Notification Message给对方取消连接。

1.4 LDP会话配置

本地LDP会话(Local LDP Session):建立会话的两个LSR之间是直连的;
远端LDP会话(Remote LDP Session):建立会话的两个LSR之间是非直连的。

1.4.1 本地LDP会话基本配置

15.png

  • 图中,SWA 的Loopback1地址为1.1.1.1/32,SWB 的Loopback1地址为2.2.2.2/32,SWC 的Loopback1地址为3.3.3.3/32,SWD 的Loopback1地址为4.4.4.4/32。各交换机之间的互连地址如图所示。
  • 配置SWA和SWB之间正确建立LDP Session,以便分发标签。
  • 配置基本思路:
    • 1、首先需要配置SWA和SWB的mpls lsr-id,用于建立和维护LDP Session。VRP没有缺省的LSR ID,必须手工配置; lsr-id使用IPv4地址格式,在MPLS域内唯一;通常使用Loopback接口的IPv4地址作为LSR ID。
    • 2、lsr-id是用来建立LDP Session,缺省情况下使用lsr-id建立TCP连接(实际上TCP的建立和LDP Session的建立都是使用**Transport Address**建立的,只是默认情况下就是LSR ID)所以交换机上要配置路由协议使得SWA和SWB的lsr-id之间可达
    • 3、全局模式下,使能MPLS和MPLS LDP。
    • 4、相应的接口下,使能MPLS和MPLS LDP。
  • 验证如下:

16.png

  • Peer-ID为LDP Peer的LDP Identifier,由LDP Peer的lsr-id(这里为 2.2.2.2)和表示标签空间的2Bytes(这里为0,表示基于平台的标签空间)构成。
  • 也可以使用dis mpls ldp peer来查看LDP Peer的信息,加个verbose就可以查看peer的Transport Address

17.png

  • 可以指定使用直连接口来建立TCP连接

18.png

1.4.2 远端LDP会话基本配置

19.png

  • 验证如下:

20.png


1.5 LDP状态机

21.png

  • NON-EXISTENT状态:该状态为LDP Session最初的状态,在此状态双方发送HELLO消息,选举主动方,在收到TCP连接建立成功事件的触发后变为INITIALIZED状态。
  • INITIALIZED状态:该状态下分为主动方和被动方两种情况,
    • 主动方将主动发送Initialization消息,转向Opensent状态,等待回应的Initialization消息;
    • 被动方在此状态等待主动方发给自己的Initialization消息,如果收到的Initialization消息的参数可以接受,则发送Initialization和KeepAlive转向OPENREC状态。
    • 主动方和被动方在此状态下收到任何非Initialization消息或等待超时时,都会转向NON-EXISTENT状态。
  • OPENSENT 状态:此状态为主动方发送Initialization消息后的状态,在此状态等待被动方回答Initialization消息和KeepAlive消息,如果收到的Initialization消息中的参数可以接受则转向OPENREC状态,如果参数不能接受或Initialization消息超时则断开TCP连接转向NON-EXISTENT状态。(实际测试是,被动方会同时发出Initialization和KeepAlive消息,所以主动方收到后直接进入OPERATIONAL状态
  • OPENREC状态:在此状态不管主动方还是被动方都是发出KeepAlive后的状态,在等待对方回应KeepAlive,只要收到KeepAlive消息就转向OPERATIONAL状态;如果收到其它消息或KeepAlive超时则转向NON-EXISTENT状态。(实际测试是,被动方会同时发出Initialization和KeepAlive消息,所以主动方收到后直接进入OPERATIONAL状态
  • OPERATIONAL状态:该状态是LDP Session成功建立的标志。在此状态下可以发送和接收所有其它的LDP消息。在此状态如果KeepAlive超时或收到致命错误的Notification消息(Shutdown消息)或者自己主动发送Shutdown消息主动结束会话,都会转向NON-EXISTENT状态。

1.6 LDP状态机案例分析

22.png
23.png
24.png


二、LDP标签管理

2.1 LDP标签空间

2.1.1 LDP标签空间报文

25.png

  • LDP Header中包含6Bytes的LDP Identifier,其中前4Bytes表示Lsr-id,后2Bytes表示标签空间,LDP Identifier也用来表示LDP会话中的Peer ID
  • 标签空间有基于平台的标签空间和基于接口的标签空间,当后2Bytes填充0时表示基于平台的标签空间。
  • 帧模式封装的MPLS使用基于平台的标签空间,信元模式的MPLS使用基于接口的标签空间。

2.1.2 VRP标签空间

26.png

  • 可以看到VRP使用基本平台的标签空间(2.2.2.2:0)

2.1.3 基本平台的标签空间

27.png

  • 简单解释为:对于不同的前缀,分配的标签肯定是不一样的;而对于相同的前缀,分配给不同的邻居的标签都是一样的,不管从哪个接口发出。
  • 基于平台的标签空间中,LSR为一个目的网段分配只分配一个标签,并将该标签发送给所有的LDP Peers。该标签基于平台,可以用于本LSR任意一个入接口。
    • 故该方式可以节省标签。
    • 节省设备的资源。
  • 帧模式的MPLS缺省都使用基于平台的标签空间。
  • 如上图,SWB为10.1.0.0分配一个标签1029并分别发送给他的LDP Peer SWC和SWE。所以SWC上到达10.1.0.0的数据包封装出标签1029并通过接口Vlanif2转发给下一跳SWB,同样SWE上到达10.1.0.0的数据包也封装出标签1029并通过接口Vlanif4和Vlanif3(在SWE和SWB之间存在两条链路)转发给下一跳SWB 。

28.png

  • 在SWB上根据入标签转发,入标签为1029的数据包从接口Vlanif1转发出去。
  • 另外还可以看出在SWE和SWB之间虽然存在两条链路,但是LDP只建立一个Session传递标签。故基于平台的标签空间可以最小化LDP Session的数量。

29.png

  • 但是基于平台的标签空间在安全性上有这样一个弊端:假设SWB只向SWC分发了标签1029,并没有向SWE发送标签,即SWB不希望标签转发从SWE来的数据包。
  • 但是如果在SWE上有攻击者伪造了标签为1029的报文发给了SWB,由于SWB转发的时候只是根据入标签去匹配但是并不检查入接口,所以按照SWB上的标签转发表,SWB也会将这个非法报文转发。

2.1.4 基于接口的标签空间

image.png

  • 简单解释:即使是相同的前缀,从不同的接口分给不同的邻居,标签也是不一样的。
  • 弊端:维护的标签空间多,设备资源消耗大。

2.2 LDP标签分发

2.2.1 DU下游自主

30.png

  • DU:Distribution Unsolicited下游自主,下游指的是LSP的下游,**华为设备默认情况下就是下游自主方式(就是下游会自动为上游分发标签,记住标签一定是下游为上游分发的**)(帧模式使用的就是DU的方式)
  • DU方式下,无需上游交换机请求,下游LSR将根据某一触发策略向上游LSR发送相应网段(通过配置可以分别实现对路由表中所有网段、对路由表中主机路由或者对特定的IP Prefix分发标签)的标签映射消息(Label Mapping Message)。
  • 上游和下游的概念:对于2.2.2.2/32,下游LSR为SWB,上游LSR为SWA,SWC;对于1.1.1.1/32,下游LSR为SWA,上游LSR为SWB(从数据沿着LSP的路径去转发的角度去理解就好了)

2.2.2 DoD下游按需

31.png

  • DoD:Distribution on Demand下游按需,收到上游交换机的标签请求消息才发送标签映射消息(信元模式使用的就是DoD的方式)
  • DU方式不会发送标签请求消息,DoD方式下才会发送。
  • DoD方式下,只有当收到上游交换机请求特定网段的标签请求消息(Label Request Message)时,才发送标签映射消息(Label Mapping Message)给上游交换机。如图中SWB只有收到SWA的标签请求消息(2.2.2.2/Label)时才会发送标签映射消息给SWA(2.2.2.2/1029)。

2.2.3 配置实例与分析

32.png

  • 下面的说明,都是针对SWB上的2.2.2.2/32来作为下游。
  • 上图中,SWA和SWB之间使用VRP5.30缺省的标签分发方式DU,SWB和SWC之间配置为DoD方式。
  • 在SWA和SWC上都配置为触发建立LSP,分别观察SWB,SWA和SWC上的标签情况。
  • 配置解释:

[SWB-mpls] lsp-trigger host 配置32位地址的主机IP路由触发建立LSP,默认情况也是这样
[SWC-mpls] lsp-trigger none不触发建立LSP,表示本设备不会产生任何前缀的LSP,即不会为任何前缀产生标签(还有all等其他参数)
33.png

  • 可以看出,由于SWB和SWA之间采用DU方式分发标签,所以虽然上游交换机SWA没有向SWB请求标签,但是SWB依然发送标签映射消息给SWA,在SWA上能够看到SWB分发的标签。
  • 而SWB和SWC之间采用DoD方式分发标签,因为上游交换机SWC没有请求标签,所以SWB没有发送标签映射消息给SWC,故SWC上没有相应的标签映射。(因为在SWC上配置了lsp-trigger none,即不会产生任何标签,所以SWC也不会发送标签请求消息,或者说也没有必要去发送请求了,但是如果重新配置为lsp-trigger host后,就会发送请求,即标签分发模式为DoD时,才会发送标签请求消息,分发方式为DU时,就没有这个必要了,另外需要注意的是,**同一链路上两个接口的标签分发模式相同才可以建立LDP Session**)

2.3 LDP标签控制

  • 后面的说明都是以目的地为1.1.1.1/32的LSP来作为例子进行说明的。

2.3.1 Independent独立的(+DoD)

34.png

  • 简单解释:只要我IGP有前缀,就马上去为这些前缀分配标签,同时发送给所有邻居,而不管是否有收到这些前缀的下一跳发来的标签信息(比如华为设备默认只为直连的/32主机分配标签,即lsp-trigger host,如果采用独立模式,那么,即使不是直连的/32主机,也会为其分配标签,并发送给它的所有邻居,显然独立模式跟华为设备默认的方式是相反的)
  • 采用Independent控制方式时,每个LSR随时可以向邻居发送标签映射。
  • 在使用DoD作为标签分发方式的情况下,当LSR(图中SWC)收到上游交换机(图中SWD)发来的标签请求消息时,不必等待自己的下游交换机(如图中SWB)发来标签映射,就可以立即响应该标签请求消息发送自己的标签映射给上游交换机(图中SWD)。

2.3.2 Independent(+DU)

35.png

  • 在使用DU作为标签分发方式的情况下,无论何时,只要LSR准备好标签转发相应的FEC,就可以向其邻居发送标签映射。
  • 如上图中,配置SWA不触发LSP,SWB对所有路由触发LSP,由于SWB使用Independent作为标签控制方式,所以尽管它的下游交换机(SWA)不会给它分发标签,它也会发送标签映射给它的上游交换机(SWD)。

  • 案例如下:

36.png

  • 上图中,SWA和SWB之间采用DU标签分发方式,SWB上配置采用Independent标签控制方式,SWB上通过路由协议学习到SWA所连接网段的路由,并且配置SWB所有静态路由和IGP路由项触发建立LSP,SWA配置为不触发LSP 。观察SWB和SWC上的标签信息。
  • 验证如下:

37.png

  • 可以看出,虽然SWA(下游交换机)没有分配标签给SWB,但SWB采用Independent控制方式,仍然发送标签映射消息给SWC(上游交换机)。

2.3.3 Ordered有序的(+DoD)

38.png

  • 简单解释:SWB想为SWC分配1.1.1.1的标签,则必须收到通过前缀1.1.1.1/32的下一跳发来的标签消息之后,才能给SWC进行分配。
  • 当标签控制方式为Ordered,只有当LSR收到特定FEC下一跳发送的特定FEC-标签映射消息或者LSR是LSP的出口节点时,LSR才可以向上游发送标签映射消息。(一定要注意上游和下游的概念是针对LSP的,而不是针对设备的)
  • 上图给出了标签控制方式为Ordered,分发方式采用DoD时标签的分配情况 ,SWD向下游交换机(即特定FEC下一跳交换机)LSR SWC请求1.1.1.1的标签,SWC只有在收到他的下游交换机SWB发给他的标签映射消息之后才可能给SWD分发标签,所以SWC在给SWD分发标签之前,首先发送标签请求消息给SWB,SWB再发送标签请求消息给SWA,由于SWA是该LSP的出口节点,所以SWA分发标签给SWB,SWB收到SWA分发的标签后,再分发标签给SWC,SWC收到SWB分配的标签后,再为SWD分发标签。

2.3.4 Ordered(+DU)

39.png

  • 华为设备默认就是使用DU+Ordered的方式。
  • 上图给出了标签控制方式为Ordered,标签分发方式为DU时标签的分配情况。
  • 下游交换机SWA发送1.1.1.1的标签映射消息给SWB,SWB收到下游交换机SWA分发的标签后给SWC分发标签,SWC收到SWB发来的标签后再给SWD发送标签。

  • 案例如下:

40.png

  • 将SWB上的标签控制方式改为Ordered。SWB是否会给1.1.1.1/32分发标签呢?

  • 验证如下:

41.png

  • 使用display mpls lsp查看SWB的LSP,可以看到SWB上配置了使用Ordered的标签控制方式后,由于SWB没有收到下游交换机SWA给1.1.1.1/32分发的标签(在SWA上使用lsp-trigger none命令禁止了触发对本地路由分发标签),所以SWB就不会给上游交换机SWC发送1.1.1.1/32标签映射消息,即不建立LSP。

2.3.5 标签分发和标签控制实例分析

  • DU+Independent(下游自主+独立模式)

42.png

  • 上图中,SWA和SWB之间采用DU标签分发方式,SWB上配置采用Independent标签控制方式,SWB上通过路由协议学习到SWA所连接网段的路由,并且配置SWB所有静态路由和IGP路由项触发建立LSP,SWA配置为不触发LSP 。观察SWB和SWC上的标签信息。

43.png

  • 可以看出,虽然SWA(下游交换机)没有分配标签给SWB,但SWB采用Independent控制方式,仍然发送标签映射消息给SWC(上游交换机)。
  • DU+Ordered(下游自主+有序模式)

44.png

  • 将SWB上的标签控制方式改为Ordered。SWB是否会给1.1.1.1/32分发标签呢?
  • 配置解释:

[SWB-mpls-ldp]label-distribution ordered 配置标签控制方式为Ordered。
45.png

  • 使用display mpls lsp查看SWB的LSP,可以看到SWB上配置了使用Ordered的标签控制方式后,由于SWB没有收到下游交换机SWA给1.1.1.1/32分发的标签(在SWA上使用lsp-trigger none命令禁止了触发对本地路由分发标签),所以SWB就不会给上游交换机SWC发送1.1.1.1/32标签映射消息,即不建立LSP。
  • 另外需要注意的是,对于AR2200系列路由器,无论是在真机设备还是模拟器上,都没有办法去进行修改。

2.4 LDP标签保持

  • 简单解释:从多个邻居收到同一个前缀的标签,那么这个时候就需要使用一个,另外一个不使用的,保存方式是怎样的呢?有两种保存方式,一种是Conservative保守的,另外一种是Liberal自由的。

2.4.1 Conservative保守

46.png

  • DU标签分发:当使用DU标签分发方式时,LSR可能从多个LDP Peer收到到同一网段的标签映射消息,如图中SWC会分别从SWB和SWE收到网段10.1.0.0/24的标签映射消息。如果采用Conservative保持方式,则SWC只保留下一跳SWB发来的标签(**这里的下一跳指的是从SWC去往10.1.0.0/24的下一跳**),丢弃非下一跳SWE发来的标签。
    • 优点:维护的标签项少
    • 缺点:当下一跳发生改变时,需要重新进行收敛
  • DoD标签分发:当使用DoD标签分发方式时,如果采用Conservative保持方式, LSR根据路由信息只向它的下一跳请求标签。
  • Conservative方式的优点在于只需保留和维护用于转发数据的标签,当标签空间有限时,这种方式非常实用,如ATM交换机;缺点在于如果路由表中到达目的网段的下一跳发生了变化,必须从新的下一跳那里获得标签然后才能够转发数据。

2.4.2 Liberal自由

47.png

  • 华为设备默认的标签保持方式。
  • DU标签分发:DU标签分发方式下,如果采用Liberal保持方式,则SWC保留所有LDP Peer SWB和SWE发来的标签,无论该LDP Peer是否为到达目的网段的下一跳。
  • DoD标签分发:DoD标签分发方式下,如果采用Liberal保持方式, LSR会向所有LDP Peer请求标签。但通常来说,DoD分发方式都会和Conservative保持方式搭配使用。
  • Liberal方式的最大优点在于路由发生变化时能够快速建立新的LSP进行数据转发,因为Liberal方式保留了所有的标签。**缺点是需要分发和维护不必要的标签映射**。

2.4.3 标签保持配置实例

  • Liberal保持方式

48.png
从中可以看出SWC到10.1.0.0/24的下一跳为SWB。另外,缺省的标签保持方式为Liberal。
49.png
从中可以看出SWC保留了SWB和SWE分发的标签。
50.png
从中可以看出SWC保留了SWB和SWE分发的标签。

  • Conservative保持方式

51.png
配置SWC采用conservative标签保持方式。
52.png
从中可以看出SWC只保留了SWB分发的标签。
53.png
从中可以看出SWC只保留了SWB分发的标签。

2.4.4 VPR推荐组合

54.png

  • VRP推荐组合为DU+Ordered+Liberal。该组合为VRP缺省设置。
    • 标签分发:DU下游自主
    • 标签控制:Ordered有序
    • 标签保持:Liberal自由模式
  • 回顾LDP标签分配原则

55.jpg

  • 标签分发:DU下游自主,原则2
  • 标签控制:Ordered有序,原则3b
  • 标签保持:Liberal自由模式,原则4

2.5 PHP

56.png

  • PHP(Penultimate Hop Popping)倒数第二跳弹出,可以使得标签在倒数第二跳LSR上弹出。
    • 次末跳是针对LSP或FEC,而不是针对设备的。
  • 使用倒数第二跳弹出时,倒数第二个LSR依然根据上游LSR标签决定向哪里转发报文,然后直接去掉标签,进行转发,那么当最后一跳LSR(即Egress LER)收到这个报文时,就是传统的IP报文了,这时直接进行传统的IP转发。
  • 那么LSR如何知道自己是倒数第二跳呢?倒数第一跳的交换机将为其分配一个特殊的标签3。

2.5.1 配置PHP

57.png

  • LER可以配置3种不同的标签分发方式,以通知倒数第二跳LSR是否应该弹出标签。

    1. [SWD-mpls]label advertise ?
    2. explicit-null explicit-null
    3. implicit-null implicit-null
    4. non-null non-null
  • explicit-null:为显式空标签,显式空标签值为0。这个值只有出现在标签栈底时才有效,表示报文的标签在分配该标签的这个LSR(即Egress LER)上必须被弹出,然后对此报文进行IP转发;

  • implicit-null:标签值3表示隐式空标签(implicit-null),这个值不会出现在标签栈中。当一个LSR (倒数第二跳LSR)发现自己被分配了隐式空标签时,它并不用这个值替代栈顶原来的标签,而是直接执行Pop操作。
  • non-null:表示不使用PHP特性,Egress节点向倒数第二跳正常分配标签。
  • 缺省情况下,Egress节点向倒数第二跳节点分配隐式空标签implicit-null。

2.5.2 配置explicit-null

58.png

  • 可以看出,SWD给SWC分配了显式空标签0,SWD收到入标签为0的报文后,由于标签0只在栈底出现,所以弹出该标签,然后进行IP转发。
    • 在MPLS域部署了QoS的情况下,需要在整个MPLS域都进行基于标签的MPLS报文的转发。
    • 正常情况下,SWD收到了标签为0的报文后,先查找LFIB表,再查找FIB表,但是华为设备对此做了优化,只要收到了标签为0的报文后,直接把标签去掉,去做IP的查询(直接查询FIB),而不需要做两表的查询
  • 如果是其他普通标签还要判断是否是在栈底,如果不是还要取内层标签通过Mpls转发。(如果是普通的非PHP标签,是需要判断是否为栈底标签的,因为需要考虑Label多层嵌套的情况,也就是说,Label为0时就肯定不是嵌套,所以也不需要判断该标签是否为栈底标签

2.5.3 配置non-null

59.png

  • 表示不使用PHP特性,Egress节点向倒数第二跳正常分配标签。
  • 可以看出,SWD给SWC分配了标签1031。

2.5.4 特殊标签固定值

image.png


三 LDP拓展特性

3.1 LDP Timer

image.png

3.2 LDP安全特性

image.png

3.2.1 MD5认证配置

image.png

3.2.2 Keychain认证查询

image.png

3.2.3 GTSM配置

image.png


3.3 LDP策略

image.png

  • inbound和outbound在功能实现上是一样的,但是在细节上有所区别:
    • 对于inbound配置的策略,例如只允许接收特定FEC的标签,其实际上还是会接收peer发送来的所有标签,通过dis mpls ldp lsp仍然可以查看,但是设备会通过该配置把不满足策略的过滤掉,最后在dis mpls lsp中看到的只有允许的FEC的标签;
    • 对于outbound配置的策略,例如只允许发送特定FEC的标签,那么在peer上,无论是在lsp数据库还是转发表上,都会看到只有该允许的FEC的标签。

3.4 LDP IGP同步

3.4.1 LDP IGP同步介绍

image.png
60.png
以上面的拓扑图来进行说明。

  • R1发送给R5的流量,默认情况直走的就是R2~R6的LSP路径,因为采用的是Liberal的标签保持方式,当R2~R6链路出现问题时,LSP路径可以很快切换到R2~R3上。
  • 当R2~R6链路恢复时,会有两种情况:
    • LDP收敛比IGP快
      • 这种情况的话,当IGP收敛完成时,LSP路径也就可以切换了,LSP流量并没有丢失。
    • IGP收敛比LDP快
      • 这种情况下,当IGP收敛完成时,由于上面的路径更优,所以R2就不会使用从R3上得到的标签了,那么这时R1到R5的流量,R2~R6路径走的是IP数据报文,R6~R5走的是MPLS标签报文;
      • 如果有上层应用,比如MPLS VPN,那么这时就会有问题了。
    • 拓扑中的情况
      • 在上面的拓扑中,LDP收敛肯定比IGP快的,当链路恢复时,互相发送LDP Hello Message,当收到时,R6就会向Transport Address发起TCP连接,因为R2-R3-R4-R5的链路是正常的,所以LDP很快就会收敛完成;
      • 如果为了模拟效果,可以在R3上配置ACL,过滤R2与R6建立TCP连接时的流量;
      • 这样之后,当主链路恢复时,会发现刚开始一段时间,R2~R6路径上的数据包为IP数据包,一段时间LDP会话建立后,又恢复为MPLS标签报文,可以查看保存的抓包。
  • 为了避免上面出现的情况,就可以使用LDP IGP同步了,主要是有两个时间:

61.png

  • HoldDown Timer:等待10s后(为了给LDP建立会话一段时间),才开始建立OSPF邻居,10s过后,不管有没有建立 LDP会话,都会开始建立OSPF邻居;
  • HoldMaxCost Timer:OSPF邻居建立后,如果LDP会话还没有建立,R6发送给R2关于R5的cost值是最大的,即65535(如果要模拟这个场景,可以把R2的g0/0/1接口关掉),10s后就会恢复为原来的cost值,当然,也可以配置成永远不恢复,也就是,只要LDP会话没有建立,cost值就一直保持为最大。
  • 要模拟上面的情况,可以在R2上配置ACL,过滤掉R2与R6建立LDP会话的TCP连接流量。

3.4.2 配置命令

  • 配置和介绍其实也可以参考HedEx文档

image.png
image.png


3.5 LDP与BGP交互

image.png

  • 实现的原理如下

image.png

  • 拓扑说明
    • 上面三个区域分别是不同的BGP区域;
    • R1、R2、R5、R7会有100.100.100.100和50.50.50.50的BGP路由;
    • R7访问100.100.100.100时,先把数据发给R5;
    • R5递归查询,发现去往100.100.100.100的下一跳是10.1.2.2(因为R2和R5通过l0口建立BGP邻居关系);
    • 因为R2—>R5和R5—>R2建立了LSP隧道(10.1.2.2和10.1.5.5),所以R5到R2的数据转发是基于MPLS标签转发的;
    • 这样的话,当数据到达R2时,R2看到的是去往100.100.100.100的纯IP报文,就可以发给R1了;
    • 数据返回的过程也是这样的。
  • 需要注意的是,上面的过程在华为设备上并没有办法实现,但是理论上是可行的。

3.6 LDP GR

LDP GR
LDP GR(Graceful Restart)利用MPLS转发平面与控制平面分离的特点,实现设备在协议重启或主备倒换时转发不中断。
产生原因
在MPLS网络中,设备协议重启或主备倒换时,设备会删除转发平面上的标签转发表项,导致数据转发中断。
通过LDP GR可以解决此问题,提高了网络的可靠性。LDP GR在设备协议重启或主备倒换时,利用控制平面和转发平面分离的特点,保留标签转发表项,设备依然根据该表项转发报文,从而保证数据传输不会中断。同时,协议重启或主备倒换后,设备在邻居的协助下恢复到重启之前的状态。
相关概念
LDP GR是基于NSF(None Stop Forwarding)理念设计的一种高可靠性技术。GR过程中有GR Restarter和GR Helper两种角色的设备:

  • GR Restarter:具备GR能力,且要进行GR的设备。
  • GR Helper:GR Restarter的邻居,具备GR能力,辅助GR设备完成GR功能的设备。


说明:
仅AR3260设备支持作为GR Restarter和GR Helper,其他设备只支持作为GR Helper。
LDP GR过程中引入了三个定时器:

  • 转发状态保持定时器(Forwarding State Holding Timer):标识了LDP GR过程持续的时间。
  • 重连接定时器(Reconnect Timer):GR Restarter发生协议重启或主备倒换后,GR Helper检测到和GR Restarter的LDP会话失败,将启动重连接定时器,等待LDP会话的重新建立。
  • 恢复定时器(Recovery Timer):LDP会话重新建立后,GR Helper启动恢复定时器,等待LSP的恢复。

实现过程
LDP GR具体实现过程如图1所示:
图1 LDP GR实现过程

  1. GR Restarter和GR Helper之间建立LDP会话。LDP会话建立过程中,协商GR能力。
  2. GR Restarter协议重启或主备倒换时,启动MPLS转发状态定时器,保留标签转发表项,然后对GR Helper发送LDP初始化消息。GR Helper发现与GR Restarter之间的LDP会话失败后,将保留GR Restarter相关的标签转发表项,并启动重连接定时器。
  3. GR Restarter协议重启或主备倒换后,重新建立与GR Helper的LDP会话。如果在重连定时器超时前,没有建立LDP会话,则GR Helper删除GR Restarter相关的标签转发表项。
  4. GR Restarter和GR Helper之间重新建立LDP会话后,GR Helper启动恢复定时器。在恢复定时器超时前,GR Restarter和GR Helper在新建立的LDP会话上交互标签映射。GR Helper协助GR Restarter恢复转发表项,同时GR Restarter也会协助GR Helper恢复转发表项。定时器超时后,GR Helper会删除所有未恢复的与GR Restarter相关的MPLS转发表项。
  5. MPLS转发状态保持定时器超时后,GR Restarter删除标签转发表项,结束GR。