在HCIE-Routing&Switching学习中,我们经常会遇到有关MPLS LDP的知识点,MPLS建立外层隧道的方式有很多,一般我们使用LDP的方式,今天让我们讨论一下在LDP方式下当发生路径切换时如何减少被丢弃流量的产生。
通过LDP方式构建外层隧道的MPLS网络中,可能会因为某个节点或者链路出现故障,LSP隧道重新建立发生了路径切换,从而产生丢包,这种情况是控制平面+转发平面都出现了问题。还有一种情况是控制层面故障了,但是转发层面是没问题的。今天让我们一下来看一下,在不同场景下,如何减少被丢弃流量的产生,主要通过如下两种方式:
1、故障检测:加快故障检测速度,保证故障时候能够尽快使用故障保护技术。
2、流量保护技术:
即控制平面+转发平面出现问题;
控制平面出问题,转发平面没问题。
接下来我们先来讲讲LDP中的故障检测技术,以如下拓扑为例:
前提条件:该环境中底层已经全部部署IGP,并将互联接口全部宣告进IGP。
正常情况下,R1访问R4走如下路径:R1->R2->R3(主LSP),当主LSP出现问题时会切换到备LSP:R1->R4->R2->R3
如果R1---R2的链路掉了,LDP需要多久才能知道我跟邻居失效了?有计时器对不对,LDP的Hello包5s一次,15s没收到认为邻居失效。当然在上图的场景,接口掉线,设备会立即知晓,物理层会告诉LDP;但是如果R1--R2中有二层设备,这个时候R1、R2感知到LDP邻居关系出现问题均需要15s的时间,这会极大影响业务的正常运行。
有什么办法可以解决该问题,加速路径切换呢?我们可以使用BFD联动LDP,实现快速感知LDP邻居故障,从而将主LSP切换到备LSP,缩短业务故障时间。
R1的配置命令:
FEC-list R1toR3 //创建一个FEC列表
FEC-node 3.3.3.3 //Fec为3.3.3.3
Mpls//进入Mpls视图
Mpls bfd-trigger fec-list R1toR3 //指定检测R1--R3的路径
Mpls bfd enable //使能BFD检测mpls
Mpls bfd min-tx-interval 150 min-rx-interval 150
//指定每个包的发送时间,单位为毫秒ms
R3的配置命令:
BFD
Mpls-passive//在R3上配置被动使能BFD for LSP能力
在R1、R3上完成以上配置之后,R1会通过BFD协议定期检测前往R3(3.3.3.3)的连通性,如果R1前往R3的中间链路出现问题,则无需等待15s的定时器,BFD模块会直接通知LDP模块进行重新收敛。
现在通过部署BFD,LDP能够实现快速收敛,但该收敛需要多久完成呢?让我们继续分析。
还是这个场景,R1---R2链路出现问题,R1与R2之间的链路出现故障,LDP在感知到故障之后,重新计算IGP路由、LSP,但此时若存在流量经由R1前往R3,由于IGP、LDP收敛还未完成,R1无法对流量执行转发操作,流量将会被丢弃。
是否存在某种方式无需重新进行IGP收敛?
我们可以使用IP FRR技术。
R1的配置:
router-policy XXX //创建一个策略
Apply backup-interface XXX//设备备份出接口
Apply backup-nexthop XXX//设置备份下一跳
Ip frr router-policy XXX//使能IP FRR功能
R1与R2之间的链路出现问题,备份路由将会直接生效,IP FRR跳过了IGP收敛过程。IGP路由切换之后,,LDP也需要建立邻居发布标签了。此时LDP等IGP收敛完毕后,开始重新建立邻居,发布标签,那如果在LDP分配标签的这个时候来了流量,是不是又会丢包?为了解决这个问题,有一种技术叫LDP FRR,依旧使用之前的Topo为例,当主LSP出现问题的时候,备LSP立即生效用于指导报文转发。这就是LDP FRR的作用,一起来看看配置:
手工模式(Manual LDP FRR)
直接在R1主LSP的接口下,也就是G0/0/1口下,
配置:
mpls ldp frr nexthop 4.4.4.4//配置备份LSP的下一跳
自动模式
在底层IGP中,直接配置
loop-free-alternate //开启自动模式的LDP FRR
在mpls视图下
Lsp trigger all //为所有路由分配标签(保证每个FEC都可以有备份)
配置完IP FRR、LDP FRR之后,当发生链路故障时流量可以快速从主LSP切换到备LSP,接下来再分析…..
接下来再分析一个细节问题,如果现在流量已经快速切换到了备LSP,此时,主LSP恢复正常了,会出现什么样的情况?
1、流量通过备LSP走。
2、主LSP链路故障消失恢复,流量按照备LSP转发,此时IGP、LDP会再次进行重新计算,此时我们的LDP FRR和IP FRR会生效吗?不会的,因为我们设置的是当主LSP故障,切换到备LSP。这样的过程我们称回切故障,流量重新切换回主LSP的过程我们成为回切,那么在回切过程中会产生什么问题呢:由于IGP的收敛速度快于LDP的速度,因此当IGP收敛完毕后,R1去往R3的下一跳已经切换到了主LSP,可是,标签还没分发完,此时访问就会造成丢包现象,所以我们设定了一个定时器:Hold-down-timer,该定时器指定了接口不建立OSPF邻居而等待LDP会话建立的时间间隔,在接口Up之后等待一段时间,在该时间内LDP邻居先完成了建立。
这个是回切故障需要注意的一个点。
3、再来一种情况,主LSP的链路正常,LDP故障了,那么此时我们可以设置一个定时器---Hold-max-cost(用来配置OSPF在本地设备的LSA中保持通告最大开销值的时间),当主LSP的LDP出现故障,但是IGP运行正常,此时R1的下一跳肯定还是R2,不是R4,可是R1--R2的LDP出现了问题,此时流量过来,就无法走MPLS转发了,那么我们用这个定时器,当LDP会话出现问题时,把R1---R2的cost改到最大持续一段时间,那么R1此时的下一跳就是R4了,走备份LSP即可,等LDP会话恢复,Cost值不再维持最大开销,则又可以通过主LSP转发了。
现在来看下这两个命令:
ospf timer ldp-sync hold-down 8 //Hold-down-timer为8s
ospf timer ldp-sync hold-max-cost 9 //cost改为9
现在看最后一种情况,在MPLS网络中,设备协议重启或主备倒换时,设备会删除转发平面上的标签转发表项,导致数据转发中断。也就是我们开头说的,控制平面某个节点出现问题,但是转发平面没问题。比如设备重启了,我们希望设备在重启的过程中流量依然能够正常转发,那么就得用到LDP GR技术。我们来分析一下LDP GR是怎么保证设备重启或主备倒换时候,做到保证数据转发不中断的。还是以一开始的拓扑作为例子。
假如我们要保证R2设备重启,流量不中断,那么我们定义R2为GR Restarter,R1作为GR Helper。
1、R1---R2之间先建立LDP会话然后协商GR能力
2、R1时重启,立即启动一个计时器--MPLS转发状态定时器,在这个定时器存在的时间内,R1保留原有的MPLS转发表项,并且发送LDP Init消息给R2,R2收到后,尝试和R1建立LDP发现失败,意识到R1在重启,R2就保留有关R1的MPLS转发表项,这样就可以保证R1重启时,转发不中断!
3、等R1重启后,重新和R2建立LDP会话,R2帮助R1恢复MPLS转发表项。
配置命令:
在MPLS LDP视图下
执行 graceful-restart命令即可
补充:GR的全称:Graceful-restart(平滑重启)