发现失效后做什么?IS-IS联动BFD时的一个bug的全面分析

测试中遇到失效,删除IS-IS联动BFD的命令,BFD会话依然up。

确认bug有效性:在这之前IS-IS和BFD会话都正常,IS-IS和BFD的绑定关系也正常。说明配置正确,而且出现失效之前系统处于正常工作状态。说明这是一个有效的bug。

重现条件总结:对比之前的测试,之前删除IS-IS联动BFD的命令,BFD会话是会被删除的。所以说明这是一个特定条件下触发的失效。我考虑可能的原因,这个环境里目前还配置了BGP联动跨跳BFD。我怀疑是这个因素影响了IS-IS BFD的行为。删除BGP+BFD,恢复IS-IS+BFD的环境。然后删除IS-IS与BFD的绑定,发现IS-IS的BFD会话还是up的。说明不是BGP+BFD的影响。

失效定位:通过查看debug信息发现,IS-IS邻居保活消息超时down后,认为并没有绑定BFD会话,所以控制平面并没有去通知转发平面删除BFD会话。控制平面为什么认为并没有绑定BFD会话?是谁解绑了BFD会话?在历史debug信息中查找,发现有打印说明,接口IP地址被人删除了,控制平面通知转发平面删除BFD会话。原来是有人操作了我的环境,删除了IS-IS接口上的IP地址。但是因为之前我确信配置没有问题,所以没有检查配置。转发平面发现有IS-IS邻居绑定在这个BFD会话上,所以并没有删除BFD会话。但是转发平面却错误的向控制平面返回BFD会话删除成功的消息。这导致后面IS-IS邻居down时,没有再通知转发平面删除BFD会话。这样就定位出了缺陷的原因,也分析出了重现条件。将环境恢复正常后,尝试重现,确实复现了。所以最终的缺陷是,IS-IS和BFD联动,先删除接口IP地址,再删除IS-IS联动BFD的命令,BFD会话依然up。

代码修改思路:删除IP地址后,就删除BFD会话。转发平面删除BFD会话失败时,通知控制平面删除失败。

其它分析:

是否存在同类问题:我使用脚本测试100次,OSPF都没有出现问题。因为OSPF使用IP报文建立邻居,不像IS-IS直接使用链路层报文建立邻居关系。接口IP地址被删除时,OSPF会收到通知,所以OSPF会立刻要求解除BFD绑定关系。但是OSPF没有类似问题的前提是,在控制平面收到假的BFD删除成功的消息之前,OSPF就将解绑BFD的请求发送给了转发平面。接下来,我让OSPF不停地收发大量LSA,使OSPF进程非常繁忙,同时运行脚本反复测试,发现也会出现类似问题。类似的BGP、RIP、VRRP也存在问题。

用户现场出现的可能性:不算很高。因为实际环境中,IP地址规划好了之后,不会轻易删除或者修改。

出现之后影响程度和恢复方法:影响不算很大,就是存在一个没有使用的BFD会话。如果IS-IS再次绑定这个BFD的会话,可以恢复正常工作。但是如果累积了较多的无用的BFD会话,会影响性能和占用BFD会话的有效容量。

含有此bug的版本操作时的规避手段:删除IS-IS和BFD的绑定关系之前,不要先删除接口IP地址。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值