空标签:
一、隐式空标签
在 MPLS网络的出站LER处,首先需要对接收的报文进行标签移除(通过查找标签转发表),然后再进行FIB表的查找并转发,由于进行了两次查表操作,所以过程比较耗时。如果到达出站LER的流量较大,会对设备性能造成一定的影响。为减轻出站LER的负担,标签在到达出站LER之前就被弹出,这样在报文到达出站LER时已经是IP报文了,只需要查找IP转发表就转发出去,这样提高了出站LER的工作效率。
为使标签在到达出站LER之前就被弹出,这个过程也就是PHP(倒数第二跳弹出)机制,使用了一个特殊的标签——“3”,这个标签也叫隐式空标签,如图所示:
在图所示的场景中,对于网络172.16.1.0/24来说,LSR3作为最后一跳路由器,向上游邻居LSR2通告一个标签值为3的材示签,当LSR2接收到去往该目标网络的报文(带有标签值为1024的报文)时,会将1024标签进行弹出操作后再转发至下游邻居LSR3,也就是说,3号标签实际上是代表一种弹出操作,而不是实际需要携带的标签,所以叫隐式空标签。
二、显式空标签
如果在MPLS 网络中部署了QoS,最后跳 MPLS路由器还需要通过标签中的EXP字段来获知QoS信息,所以要保证报文到达MPLS边界时还是携带标签的。一般情况下,如果边界路由器接收到的是带有标签的报文,先是要查找标签转发表,而后还要查找IP转发表,比较消耗资源。为了使边界路由器能正确实施MPLS的QoS策略,同时不加重路由器的负担,引入了另一个特殊的标签——显式空标签(标签值为0)。边界路由器接收到带有显式空标签的报文后,可通过标签中的EXP读取QoS的参数信息,读取完QoS信息后直接将标签移除,也就是说不需要查找标签转发表,直接通过IP转发表进行转发。
在FEC 的最后一跳路由器上,可通过命令label advertise,为自己直连的网络映射个显式空标签,如图8-34所
示,在LER1上将隐式空标签改为显式空标签:
[LER1]mpls
[LER1-mpls]label advertise explicit-null
这时来观察一下LER1的标签转发表,如下输出所示:
由输出信息可知,在华为设备中,不像隐式空标签那样,路由器可以为所有直连网络映射标签(条件是配置了lsp-trigger 策略),而接口不论是否启用了MPLS,相应的直连网络都会被映射到О号标签。
三、出标签为NULL
如下图所示,有些FEC 对应的出标签为空(NULL),这表示收到的报文要剥离掉所有标签,然后以IP的方式进行转发。这类FEC对应的网络是本地直连或是从其他IP路由器接收到的路由前缀。比如对于5.5.5.0/24这个路由前缀来说,出标签为空,那是因为该路由的下一跳邻居(AR)没有运行MPLS,AR没有标签映射信息发送到LER1。这时,LER1也不会在本地为这样的路由前缀映射一个隐式或显式空标签,而是一个普通的标签值,如下输出所示:
当LER1接收到FEC(5.5.5.0/24)报文时,由于出标签为空,所以需要剥离掉报文的所有标签,然后以IP报文转发的方式转发出去。
LDP的环路检测:
在三层网络中使用的每种动态路由技术都有各自的防环机制,LDP协议也有防环机制,但华为VRP系统默认不开启LDP防环功能,这是因为三层路由技术已经避免了路由环路,而LDP协议又是基于路由来分配标签和建立LSP的,所以这时报文通过LSP进行转发是不会出现环路的。除非因为路由协议收敛出现问题,出现了短暂环路。标签中也有TTL字段,这样也避免了数据包在 MPLS网络中无限循环。LDP协议本身的防环方式有以下几种:
- 规定最大跳数
如同RIP协议规定路由的最大跳数为16跳一样,LDP协议也可以限制标签报文经过的LSR数量,这个特性通过在报文中使用一个叫作 Hop Count的TLV来实现。LDP
报文(比如标签请求报文)每经过一个LSR,该LSR都在跳数TLV中增加一跳,当跳数达到最大值后,环路就被检测到了,这I
时就终止LSP的建立。华为VRP系统默认定
义的最大跳数为32跳。 - TTL处理
MPLS报文中每经过一台LSR,标签中的TTL减1,当TTL减少到0的时候,报文最终被丢弃,通过这种方法达到防止数据包的无限循环问题。 - 路径矢量法
路径矢量法是指在LDP报文传递过程中,记录沿途经过的所有LSR,就像BGP协议的AS-PATH属性一样,当一台LSR收到LDP报文后,就会将自己的LSR-ID添加到报文中;如果收到的LDP报文已经有了本地的LSR-ID,则认为出现了环路,终止建立LSP。
LDP和IGP的同步:
存在主备链路组网的环境中,当主链路出现故障又从故障中恢复后,业务流量会从备用链路切换到主链路。在这个过程中,IGP协议收敛速度要快于LDP协议,这就会导致旧的LSP已经删除,而新的LSP还没建立好,这期间的 MPLS业务会中断一会,一般在5s左右,LDP和IGP同步的目的就是为解决这个问题。
为使LDP和IGP同步,在主链路恢复后,先抑制IGP 邻居关系的建立,从而推迟路由的切换,也就是说,在新的LSP建立好之前,继续保留旧的 LSP,流量继续在旧的LSP上转发,只有在新的LSP建立好之后流量才完全切换过来。
LDP和 IGP同步过程需要使用以下三个定时器:
- Hold-down
- Hold-max-cost
- Delay
在主链路故障恢复后:
- 启动Hold-down定时器,在该定时器超时前IGP接口先不建立IGP邻居关系,而等待LDP会话的建立。
- Hold-down定时器超时后,启动Hold-max-cost定时器。IGP在本地路由器的链路状态通告中,主链路通告接口链路的最大metric值。
- 故障链路的LDP会话重新建立以后,启动 Delay定时器等待LSP的建立。当Delay定时器超时以后,无论IGP的状态如何,LDP都会通知IGP同步流程结束。
LDP和 IGP同步过程中会经历如下几个状态:
- Init 状态:LDP和IGP同步的初始化状态。
- Hold-down 状态:IGP不收发Hello报文,抑制故障恢复链路邻居关系的建立。Hold-max-cost状态:IGP建立邻居并在主链路通告接口链路的最大metric值。
- Sync-achieved: LDP和IGP同步状态。此时LDP会话状态为Up,IGP进入正常流程。
状态机切换图示如下:
- Init和 Sync-achieved之间的状态转换。
Init→Sync-achieved:接口状态变为Up,且LDP会话状态变为Up。
Sync-achieved→Init:接口状态变为Down。 - Init和Hold-down之间的状态转换。
Init→Hold-down:接口状态变为Up,且LDP会话状态为Down;或查询LDP状态失败。
Hold-down→Init:接口状态变为Down。 - Init和 Hold-max-cost之间的状态转换。
Init→Hold-max-cost:接口状态变为Up,且 LDP 会诂状念为 Down。
Hold-max-cost→Init:接口状态变为Down。 - Hold-max-cost和Sync-achieved之间的状态转换。
Hold-max-cost→Sync-achieved: LDP会话状态变为Up。
Sync-achieved→Hold-max-cost:LDP会话状态为Down。
Hold-down→Hold-max-cost:LDP路由不可达或Hold-down定时器超时。
Hold-max-cost→Hold-max-cost: Hold-max-cost定时器超时,且 LDP会诂状态为DownoHold-down→Sync-achieved: LDP会话状态变为Up。
LDP和IGP同步的应用场景:
如图所示,在该组网中LER1→LSR1→LSR2→LSR3→LER2为主链路,LER1→LSR1→LSR4→LSR3→LER2为备份链路。当主链路发生故障时,流量从主链路切换到备份链路,这个过程流量的中断时间较短,约几百毫秒。当主链路故障恢复时,流量从备份链路切换到主链路,这个过程流量的中断时间较长,约为5s。通过配置LDP和IGP同步功能,能够缩短流量从备份链路切换到主链路时的中断时间,并控制在毫秒级。
以下是华为VRP系统配置同步的命令,这里以IGP使用OSPF为例:
[LSR1]interface Gigabitethernet0/0/0
[LSR1-interface]ospf ldp-sync
也可以设置接口不建立OSPF 邻居而等待LDP会话建立的时间间隔,即 hold-down计时器:ospf timer ldp-sync hold-down value
缺省情况下,Hold-down定时器的值是10s。其他计时器也可以修改,这里不再赘述。配置完成后,可以使用命令display ospf ldp-sync interface查看同步信息。
路由汇总对LSP的影响:
LSR2上对路由前缀172.16.2.0/24做路由汇总,汇总后的路由前缀为172.16.0.0/22。
汇总后的路由(172.16.0.0/22)会通告给LSR1,而明细路由172.16.2.0/24 不再通告给LSR1,所以这时的问题就是LSR1虽然得到了路由172.16.0.0/22,但并未接收到LSR2关于该路由前缀的标签分配信息。由于华为设备默认采用有序控制的方式来建立LSP,所以LSR1既然没有接收到其下游邻居的标签信息,它自身也不再将分配标签信息给到上游邻居(LER1)。也就是说,对于由用户Site1 发往目标路由前缀172.16.2.0/24的数据包来说经过路径LER1、LSR1、LSR2时,使用的是IP转发方式;经过LSR2后,采用的是MPLS 转发方式。也就是说,对于该FEC 来说,LSP实际上是不连续的。
LDP标签过过滤
在MPLS网络中,有些路由器资源有限,为降低资源开销,减少不必要的LSP的建立,LDP在为邻居通告标签时可以进行标签过滤。
图所示的场景中,假设MPLS域的LSR3资源利用率较高,为节省开销,减少LSP的数量,只接收FEC:172.16.1.0/24和 FEC:172.16.2.0/24的标签映射信息,可以通过在LSR3上配置LDP Inbound策略来实现此需求。
在LSR3上配置LDP Inbound策略,只接收由LSR1发出的对应路由前缀的标签映射报文,如下输出所示:
[LSR3]ip ip-prefix 1 permit 172.16.1.024
[LSR3]ip ip-prefix 1 permit 172.16.2.0 24 #使用前缀列表匹配需要接收标签映射信息的对应FEC路由前缀[LSR3]mpls ldp
[LSR3-mpls-ldplinbound peer 10.1.2.2 fec io-prefix 1#配置 LDP Inbound策略,只接收过滤后的标签映射报文
配置完过滤策略后,检查一下LSR3的LSP转发表,可以发现从LSR1接收到的FEC标签映射信息,在R3上使用命令:dis mpls Isp nexthop 10. 1. 25.1如下输出所示:
LDP配置总览:
动态LSP配置:
- 配置LSR ID:LSR ID用来在网络中唯一标识一个LSR。LSR没有缺省的LSR ID,必须手工配置。为了提高网络的可靠性,推荐使用LSR某个Loopback接口的地址作为LSR ID。
- 使能全局MPLS:只有使能了全局MPLS,才可以配置MPLS的其他配置。
- 使能全局MPLS LDP:只有使能了全局MPLS LDP,才可以配置MPLS LDP的其他配置。
- 配置LDP会话:
执行命令interface interface-type interface-number,进入需要建立LDP会话的接口视图。
执行命令mpls,使能接口的MPLS能力。
执行命令mpls ldp,使能接口的MPLS LDP能力。
MPLS相应常用可选配置:
1.配置LDP传输地址:
执行命令interface interface-type interface-number,进入建立LDP会话的接口视图。
执行命令mpls ldp transport-address { interface-type interface-number | interface },配置LDP传输地址为指定接口的IP地址。 缺省情况下,公网的LDP传输地址等于节点的LSR ID,私网的传输地址等于接口的主IP地址。
两个LSR之间存在多条链路时,若要在多条链路上建立LDP会话,会话同一端的接口都应采用默认的传输地址,或者配置相同的传输地址。如果会话的一端接口配置了不同的传输地址,将导致LDP会话只能建立在一条链路上。
2.配置PHP特性:
在Egress路由器上执行命令mpls,进入MPLS视图。
执行命令label advertise { explicit-null | implicit-null | non-null },配置向倒数第二跳分配的标签。
根据参数的不同,可以配置Egress向倒数第二跳分配不同的标签。
a) 缺省情况下,使用的是implicit-null,表示支持PHP。Egress向倒数第二跳节点分配隐式空标签,值为3。
b) 如果配置的是explicit-null,表示不支持PHP。Egress节点向倒数第二跳分配显式空标签,值为0。当需要支持MPLS QoS属性时,可以选用explicit-null。
c) 如果配置的是non-null,表示不支持PHP。Egress向倒数第二跳正常分配标签,即分配的标签值不小于16。
执行命令label advertise修改本节点的标签分配方式只会对新建的LSP生效,如果修改label advertise之前已经存在LSP,则不会生效,需要执行reset mpls ldp或lsp-trigger策略命令后才会生效。
3.配置LDP会话的定时器
执行命令interface interface-type interface-number,进入建立LDP会话的接口视图。缺省情况下,链路定时器的值是链路保持定时器值的1/3。
执行命令mpls ldp timer hello-send interval,配置链路Hello发送定时器。 链路Hello发送定时器的实际生效值=Min{链路Hello发送定时器的配置值,链路Hello保持定时器值的1/3},其他同理。
执行命令mpls ldp timer hello-hold interval,配置链路Hello保持定时器。 缺省情况下,链路Hello保持定时器的值是15秒。
执行命令mpls ldp timer keepalive-send interval,配置本地LDP会话的Keepalive发送定时器。
执行命令mpls ldp timer keepalive-hold interval,配置本地LDP会话的Keepalive保持定时器。 缺省情况下,本地LDP会话的Keepalive保持定时器的值是45秒。
4.配置LDP认证
为了提高LDP会话连接的安全性,可以对LDP使用的TCP连接配置认证。LDP会话的两个对等体可以配置不同的加密方式,但是密码必须相同。
以MD5认证为例:
执行命令mpls ldp,进入MPLS-LDP视图。
执行命令md5-password { plain | cipher } peer-lsr-id password,使能MD5认证,并配置认证密码。
5.配置LDP标签发布方式
在网络规模较大的情况下,为了尽可能的减少设备上不必要的MPLS转发表项,可以执行mpls ldp advertisement dod命令,配置上游向下游请求标签时,下游才能向上游发送标签映射消息,减少MPLS转发表项。
如果仅针对特定方向LSP时,只需在该LSP方向上Ingress出接口和相邻下游Transit的入接口上配置(双向的话就要两端都进行配置),进入对应发送接口上配置 mpls 1dp advertisement dod。
6.配置LDP标签分配控制方式
在Egress和Transit的MPLS LDP视图下配置(只需在下游设备配置)。
执行命令mpls ldp [ vpn-instance vpn-instance-name ],进入MPLS-LDP视图或者MPLS-LDP-VPN实例视图。
执行命令label distribution control-mode { independent | ordered },配置全局的LDP标签发布方式。
7.远端会话配置
首先配置全局配置,这里和配置本地LDP会话一样,但是不用在接口上进行配置。
执行命令mpls lsr-id lsr-id,配置本节点的LSR ID。
执行命令mpls,使能全局MPLS功能,并进入MPLS视图。
执行命令mpls ldp,使能全局的LDP功能,并进入MPLS-LDP视图。
执行命令mpls ldp remote-peer remote-peer-name,创建MPLS LDP远端对等体,并进入MPLS LDP远端对等体视图。
执行命令remote-ip ip-address,配置MPLS LDP远端对等体的IP地址。
8.配置lsp-trigger
lsp-trigger { all | host | ip-prefix ip-prefix-name | none }或者undo lsp-trigger
使用指南:默认为host
说明: 不推荐配置lsp-trigger all命令。因为配置该命令后,所有IGP路由会触发LDP建立LSP,导致LSP数量庞大,占用过多的系统资源。如果需要配置该命令,可以先配置路由过滤策略,减少路由数量,从而减少路由触发LDP建立的LSP的数量,节约系统资源。
MPLS相应查看命令:
使用较多的用红色标注,且dis mpls lsp [all]更简洁直观查看lsp的信息,而dis mpls ldp lsp则将所有收到的标签都进行表示出来,但是其存在不是最优的ldp信息。
整理资料来源:《HCIE路由交换学习指南》、华为hedex文档