01. BFD简介
双向转发检测BFD(英文全称:Bidirectional Forwarding Detection),BFD是一个简单的Hello协议,通过在两个系统之间建立BFD会话连接,并且周期性发送检测报文,当某个规定时间没有接收到对端系统的检测报文,会话断开,说明链路或者设备出现故障。
该网络协议用于检测两转发点之间的故障情况,检测时间能达到毫秒级别,能够快速实现链路检测,从而保证网络通信和业务的连续性。
02. BFD的产生
一般的网络故障检测方法有硬件检测和路由协议的Hello报文检测,硬件检测的优点是能够快速发现故障,缺点是不是所有的系统都支持硬件检测,而Hello报文检测的检测时间较长,基本在秒级别,当网络中的数据流量过大时,秒级别的检测时间也会导致大量的数据丢失,而客户需要网络能快速感知到故障,从而快速切换恢复网络业务,BFD的出现为此提供了一种解决方案。
03. 故障问题示例:
动态路由故障检测:R1和R2两台路由器建立OSPF邻居关系,当交换机SW1和SW2之间的链路出现故障,R1和R2两台路由器无法快速感知故障。
静态路由故障检测:在R1路由器上配置默认路由访问internet,路由下一跳指向SW1,当SW1与R2之间链路出现故障,R1无法快速感知故障。
04. BFD的优点:
1、对相邻通道通信提供负担小、快速的检测。
2、用单一的机制,对任何协议层进行检测。
05. BFD的报文结构
BFD报文格式分为强制部分和可选部分。
强制部分
可选部分
06. BFD会话建立
BFD的会话建立分为静态建立和动态建立,而区分不同BFD会话主要是通报文中的本地标识符(Local Discriminator)和远端标识符(Remote Discriminator)。
静态BFD会话建立,通过手工配置BFD会话参数,包含本地标识符和远端标识符,然后下发BFD会话建立请求。
动态BFD会话建立,触发动态创建BFD会话时,系统会为BFD报文中本端标识符分配相应值,然后将远端标识符值置为0向对端发送,进行会话协商,当一端接收到BFD报文中远端标识符为0时,会判断是否与本地BFD会话匹配,如果匹配,则学习BFD报文中的本地标识符的值,从而获取远端标识符。
07. BFD检测模式
BFD的检测模式分为查询模式和异步查询模式。
查询模式:根据需求系统连续发送多个BFD控制报文,在检测时间内没有接收到对端的BFD报文回应,BFD会话断开。
异步模式:系统之间周期性发送BFD控制报文,在某个检测时间内没有接收到对端的BFD控制报文,BFD会话断开。
08. BFD回声功能
BFD echo报文
两台直连的的设备,一台支持BFD功能,另一台不支持BFD功能,但支持基本的网络层转发,这时为了能快速检测故障,支持BFD功能的设备可以使用BFD回声功能,向对端发送BFD echo报文,不支持BFD功能的设备收到该报文会直接环回,支持BFD功能的设备收到该报文则会主动发起回声请求,从而实现故障检测。
09. BFD应用
静态路由本身没有检测机制,当存在冗余路由时,通过与BFD联动,主路由出现故障时,能够快速切换到备路由。
如图,R1访问R2的回环接口默认通过SW1,当R1与SW1之间链路出现故障或者SW1设备出现故障,R1能够快速感知,从而快速切换路径经SW2去访问R2的环回接口。
如图,SW1和SW2运行VRRP协议,虚拟出网关192.168.1.254,并在SW1和SW2之间运行BFD协议,通过BFD快速检测链路故障或设备故障,当主设备出现故障时,备设备能够快速感知,迅速成为主设备,保证流量持续。