作者:https://blog.51cto.com/361531/1701214
LDP收敛总结Summary:
如果一个有冗余链路的网络,主链路down了,那么LDP的收敛时间=IGP的收敛时间.(约等于)
当主链路恢复以后,LDP的收敛需要等待IGP收敛完了,LDP才能重新建立邻居(TCP/UDP 646,建立LPD绘话和邻居),然后交换标签.
在中间会出现空档期,IGP的下一跳和LSP不一致,且IGP邻居建立好了,LDP的标签状态是drop状态。LSP不完整,最后走IP进行报文的转发.
------LDP会话保护,可以解决主链路恢复以后的空档期的问题.
那么问题来了,有没有一种技术,在冗余链路的网络环境中,当IGP的链路一恢复以后,那么LDP就立即恢复呢?--下面是LDP的高级feature,所有细节都会涉及到.
LPD的计时器:
当然是有技术能保障LDP的收敛,该技术是LDP的高级feature.
对于日常应用来说,其实不需要修改LDP的任何计时器.
Directed LDP 邻居:(LDP直连邻居,监听组播224.0.0.2)
session hold time=180s, keepalive=60s.----这两个时间是针对TCP连接的时间.
mpls ldp holdtime
Discovery hello: hold time =15s, interval=5s. -------这个是UDP的hello包.当邻居建立之前和邻居建立之后.
需要用UDP的hello进行饱和。来感知邻居的存在.
命令: mpls ldp discovery hello holdtime xxxx
mpls ldp discovery hello interval xxxx
Targeted LDP邻居:
下面的计时器,是用于非直连的LDP邻居之间的建立所用的计时器:
我们知道,LDP的建立,发送的是224.0.0.2的组播,然后直连路由器监听该组播端口,然后建立LDP邻居.但是如果是非直连的话,只能发送单播进行邻居的建立和饱和。
所以targeted LDP邻居不能自动发现,需要手动定义.
holdtime=90s interval=10s.
命令:
ldp discovery targeted hello holdtime xxx
ldp discovery targeted hello interval xxx
LDP的认证:
LDP的认证采用的是MD5的散列算法进行加密:
mpls ldp neigbhor 22.1.1.1 password Hank
22.1.1.1是邻居的router-id,后面配置密码,采用md5.
直接在全局下面配置的.
注意:
当我们的LDP邻居已经起来以后,再配置密码,这个时候不管是否邻居是否超过holdtime,都不会down掉.因为邻居已经建立好了,而keepalive也一直都是进行饱和的,只要链路没有问题,那么邻居永远不会down掉,所以配置密码需要在ldp建立邻居以前做认证.
LDP的自动配置(auto config):
该功能运行以后,就不需要再在接口下面打上mpls ip.
例如路由协议是ospf:
router ospf 1
mpls ldp autoconfig area x
network 0.0.0.0 255.255.255.255 a 0
exit
这样的话,就可以让该路由器所有处于OSPF的接口自动运行mpls ip,并且运行LDP协议.
建立LDP邻居.
如果在IGP路由进程中配置了mpls ldp autoconfig,就算在接口下面no mpls ip都不行,系统会给一个提示:
这个时候需要在接口下面no mpls ldp igp autoconfig才能将该接口移除了.
LDP会话保护:(LDP收敛的高级feature)
-----LDP快速收敛
R1到R5有两个路径:
主用链路:R1--R2--R4--R5
备用链路:R1--R3--R2--R4--R5
当主用链路R1--R2 down掉了。这个时候IGP会在核心路由表删除R1到R5下一跳的R2路径.当IGP收敛以后,因为LDP数据库中有R3分配过来的标签,所以当主用链路down了,那么IGP的收敛时间约等于LDP的收敛时间.
当主用链路恢复了,那么首先R1和R2需要建立IGP的邻居.
当R1和R2 IGP邻居建立好以后,R1和R2的LDP才开始建立邻居。这中间IGP和LSP的路径不一致,最后导致的结果是:
当R1和R2的主用链路恢复以后,R1和R2的IGP邻居建立好以后,R3分配给R1的标签会立即将状态切换到Drop.标签是不可用的。这个时候再来报文,R1因为没有MPLS标签,而会直接走IP进行转发.这样实际上是没有走MPLS的.
要解决这个问题,有两种方式:
1) LDP的会话保护
2) LDP,IGP同步时间缩短.
LDP链路保护:(targeted LDP)
Session protection
主链路故障,down了:
R1---R2---链路OK, LDP neighbor OK.Targeted LDP.
R1---R2---链路down掉,那么IGP收敛(R1和R2的LDP邻居关系不会down掉,因为是target LDP).
R1到R5,路径为R1-R4-R2-R3-R5.(LDP收敛约等于IGP收敛)
主链路恢复:
R1和R2 IGP收敛.那么R1到R5的下一跳一定会变成R2,这个时候,从LDP binding 表中把R2分配给我关于55.1.1.1/32的标签再次装载到MPLS Forwarding table中去,这样LDP就完成了收敛.
Summary:
用targeted LDP,当主链路恢复的时候,几乎LDP的收敛时间可以等于IGP收敛时间,或者说略长于IGP的收敛时间.因为LDP不用重新建立邻居. 这就是Targeted LDP neighbor的好处.
解决方案:在LDP邻居两端启用target LDP session, 实现跨越多跳来维持session.
配置方法:
1, 在所有支持session保护的路由器上面配置:mpls ldp session protection
2, 在不支持session保护的路由器上面配置: mpls ldp discovery targeted-hello accept
会话保护的意思:主链路恢复以后,IGP收敛完成以后,需要LDP建立邻居,这里会话保护和targeted LDP neighbor技术可不重新建立邻居.这样就大大缩短了LDP收敛时间,因为LDP不需要重新建立邻居,只需要重新装载MPLS Forwarding table的标签.
试验:
在R1和R2上面,全局打上:mpls ldp session protection
这样一来, 其他的配置和以往一样.
现在来观察一下现象.
R1要到R5的55.1.1.1/32,首选的路径是R1-->R2-->R3-->R5
在主用链路正常的情况下,我们看看R1的表项:
下面可以看到,标签,R2和R4都分配了标签给R1.
在R1上面show mpls ldp nei,可以发现,R2显示的是Targeted hello 11.1.1.1-->22.1.1.1, active.passive
现在将R1和R2的链路shutdown.
这里当R1的e 0/0 shutdown以后,LDP邻居不是down掉,而是hold up.
这个时候再看看R1的标签数据库,我们惊讶的发现,R1和R2的邻居虽然down了,但是系统还是保留了R2为55.1.1.1/32分配过来的标签:
而且R1的LDP邻居,11.1.1.1到22.1.1.1还是继续保留的:\
但是这个时候,在R1的MPLS标签转发表,因为IGP已经切换到R4为下一跳了,所以MPLS标签表也切换到了R4分配的40x的标签:
链路恢复,R1的e 0/0做no shutdown的操作:
这里可以看到,LDP邻居恢复成功.
IGP ospf一旦收敛以后,LDP要做的事情不是建立邻居,因为LDP邻居从头到尾就没有down过.
LDP要做的事情就是将之前保留在LDP数据库中的R2分配过来的标签再次装载进入MPLS 标签转发表中就能达到快速收敛的效果。