用BFD技术检测网络故障
2017-11-08
为提升网络的可靠性,网络设备需要尽可能快地检测到与相邻设备间的通信故障,降低设备故障对业务的影响。在当前网络中,有些链路通过硬件检测信号,但并不是所有的介质都能够提供硬件检测,如DLDP技术,它只能在以太网链路上提供探测机制。此时,就可能需要依靠上层路由协议自身的Hello报文机制来进行故障检测,如OSPF路由协议。但路由协议的Hello包间隔检测时间都在1秒以上,这样的故障检测时间对部分网络环境和应用需求来说是不能接受的,而且如果网络中没有部署路由协议,则无法使用路由协议的Hello报文机制来检测故障。本文通过实例,介绍如何用BFD技术快速检测网络故障。
BFD技术
BFD(Bidirectional Forwarding Detection,双向转发检测)协议是一个专门用于检测两个转发设备之间故障的网络协议,它是一种双向转发检测机制,提供一种轻负载、快速检测两台邻接路由器之间转发路径连通状态的方法,可以为网络链路提供毫秒级的快速检测。它类似于常见动态路由协议中的“Hello”报文,在和邻居间所建立的会话通道上周期性发送检测报文,如果在定义的时间内没有收到对端的检测报文,则认为在这条双向通道的某个部分发生了故障。因此,BFD技术通过与上层路由协议联动,可以协商邻居通过BFD技术快速检测到转发路径的链路故障,以此实现路由的快速收敛,加快启用备份转发路径,确保业务的高可靠性。
BFD报文采用UDP封装,提供的检测机制与所应用的接口介质类型、封装格式、以及关联的上层协议如OSPF、BGP等无关。检测的链路不仅是物理链路,甚至还包括隧道技术等在内的逻辑链路。BFD是双向联动探测行为,两端都要启用,它应用在三层接口上,但交换机不允许在三层聚合端口下进行配置。
BFD工作原理
BFD技术在两台网络设备中建立会话,用来检测网络设备间的双向转发路径,为上层应用服务。BFD技术本身没有发现邻居的能力,而是靠被服务的上层应用通知其邻居信息以建立会话。会话建立后会周期性地快速发送BFD报文,如果在检测时间内没有收到BFD报文,则认为该双向转发路径发生了故障,通过快速发送检测故障消息给正在运行的上层协议,通知被服务的上层应用进行相应的处理,以此来触发路由器重新计算路由表,大大减少整个网络的收敛时间。
图1 BFD会话建立流程图
图2 BFD故障发现处理流程图
1. BFD与OSPF建立会话工作过程
假设上层运行的是OSPF路由协议,两台三层交换机之间由一台交换机实现相连,那么BFD与OSPF建立会话工作过程如图1所示。
(1)OSPF通过自己的Hello机制发现邻居并建立连接。
(2)OSPF在建立邻居关系后,将邻居信息通告给BFD。
(3)BFD根据收到的邻居信息建立会话。
2. 链路故障检测
当会话建立后,BFD开始进行链路故障检测,如果检测到链路出现故障,就迅速做出反应(如图2)。
(1)三层交换机B和二层交换机之间链路出现故障。
(2)三层交换机A和三层交换机B之间的BFD会话快速检测到链路故障,BFD会话状态变为Down。
(3)BFD通知本地OSPF进程BFD邻居不可达。
(4)本地OSPF进程中断OSPF邻居关系,路由信息快速收敛,如果存在备份转发路径,启用备份路径。
BFD会话建立模式
1.主动模式
在建立会话前,不管是否收到对端发来的建立BFD会话控制报文,都会主动发送建立BFD会话控制报文。
2.被动模式
在建立对话前,不会主动发送建立BFD会话的控制报文,直到收到对端发送来建立BFD会话的控制报文。
BFD检测模式
1.异步模式
网络设备之间相互周期性地发送BFD控制报文,如果某个设备在规定的检测时间内没有收到对端发来的BFD控制报文,就宣布会话状态为Down。
2.查询模式
假定每个设备都有一个独立的方法用来确认连接到其他系统,这样,一旦BFD会话建立起来,设备停止发送BFD控制报文,除非某个设备需要显式地验证连接性,设备才发送一个BFD控制包。如果在检测时间内没有收到返回的报文,就认为会话Down,如果收到对端的回应报文,表示转发路径正常。
3.回声功能
建立会话的一端周期性发送BFD回声报文,对端不对此报文进行处理,而只将此报文转发再发回给发送端。如果发送端在检测周期内连续几个回声报文都没有接收到,会话就被宣布为Down。采用回声报文的检测功能,不需要远端设备的控制面参与,报文通过远端设备的转发面转回,减少了延迟,相对于发送控制报文可以更快的检测到故障。
BFD回声功能可以和上面两种检测模式一起使用。如果在异步模式下启用回声功能,可以大大减少控制报文的发送,因为检测工作由回声功能完成。如果在查询模式下启用回声功能,在会话建立后可以完全取消发送控制报文。但是必须注意BFD会话双方同时启用回声功能,否则回声功能将不生效。此外,回声报文只能用来检测直连网段的链路状态,而BFD控制报文还能检测非直连网段的链路状态。
图3 BFD与静态路由直连网段联动
BFD与静态路由直连网段联动
如图3所示,路由器RA分别连接到两台交换机,形成两条链路连接到路由器RB,通过配置静态路由访问RB上的网段。这里希望让交换机SA作为主链路,当SA不可用情况下,使用浮动静态路由技术,切换到交换机SB备用链路。假设SA和RB中间链路通信中断,由于本端路由器RA无法检测到静态路由的下一跳是否可达,导致静态路由无法收敛,备用链路无法生效,通信出现故障。此时需要在路由器上使用BFD协议作为链路探测协议,开启静态路由和BFD联动来解决该问题,它可以检测出中间网络的中断,并及时切换到备份线路,从而保证网络正常通信。
注:这里使用的设备为锐捷RSR20系列路由器,系统版本为10.3(5b6)p2。
路由器RA的BFD与静态路由联动配置:
路由器RB的BFD与静态路由联动配置
查看路由表,可以看到路由器RA默认使用主链路转发。
在RB上关闭fa0/0接口,模拟交换机SA到RB上的链路故障;然后在RA上再次查看路由表,确认转发路径已经切换到SB上。
同时RA上出现有BFD邻居会话状态关闭的提示,当RB上fa0/0接口恢复正常后,路由器RA又会自动选择到主链路上转发数据。
BFD与OSPF动态路由联动
图4 BFD与OSPF动态路由联动
如图4所示,路由器RA和RB通过二层交换机互连,通过运行OSPF路由协议来建立路由,同时通过在双方接口上关联BFD应用,在RB和二层交换机之间链路发生故障后,BFD能够快速检测并通告OSPF协议,触发协议快速收敛。
路由器RA的BFD与OSPF动态路由联动部分配置
路由器RB的BFD与OSPF动态路由联动部分配置
此时,在路由器RA上通过show bfd neighbers确认BFD邻居状态。
在RA上可以查看OSPF动态路由协议学习到的网段信息。
当交换机和RB上的链路断开后,RA上学习到的OSPF动态路由信息会很快删除,实现了网络路由信息的快速收敛。而如果没有开启BFD功能的话,RA上通过OSPF学习到的相关网段信息仍然存在,直到OSPF协议规定的广播型网络中40秒dead周期到达后,路由信息才会清除。