BFD简介
双向转发检测BFD(Bidirectional Forwarding Detection)用于快速检测系统之间的通信故障,并在出现故障时通知上层应用。
为了减小设备故障对业务的影响、提高网络的可靠性,设备需要能够尽快检测到与相邻设备间的通信故障,以便能够及时采取措施,从而保证业务继续进行。
现有的故障检测方法主要包括以下几种:
- 硬件检测:硬件检测的优点是可以很快发现故障,但并不是所有介质都能提供硬件检测。
- 慢Hello机制:通常采用路由协议中的Hello报文机制。这种机制检测到故障所需时间为秒级。对于高速数据传输,超过1秒的检测时间将导致大量数据丢失。并且,这种机制依赖于路由协议,在小型三层网络中,如果没有部署路由协议,则无法使用路由协议的Hello报文机制来检测故障。
- 其他检测机制:不同的协议有时会提供专用的检测机制,但在特性间互联互通时,这样的专用检测机制通常难以应用于多个特性。
BFD提供了一个与介质和协议无关的快速故障检测机制。具有以下优点:
- 对网络设备间任意类型的双向转发路径提供快速、轻负荷的故障检测。
- 用单一的机制对任何介质、任何协议层进行实时检测,并支持不同的检测时间与开销。
设备支持的BFD特性:
设备支持的BFD特性主要包括:BFD会话建立、BFD检测模式、单跳和多跳检测、静态标识符自协商BFD、单臂回声功能、联动功能和动态改变BFD参数。
BFD会话建立:
BFD通过控制报文中的本地标识符(Local Discriminator)和远端标识符(Remote Discriminator)区分不同的会话。按照本地标识符和远端标识符创建方式的差异,设备支持以下BFD会话类型:
- 手工指定标识符的静态BFD会话必须手工指定BFD会话的本地标识符和远端标识符。如果本端采用手工指定标识符,则对端也必须手工指定标识符。
- 标识符自协商的静态BFD会话如果对端设备采用动态BFD,而本端设备既要与之互通,又要能够实现BFD检测静态路由,必须配置静态标识符自协商BFD,此时无需指定本地标识符和远端标识符。如果本端采用静态标识符自协商,则对端既可以配置静态标识符自协商,也可以配置动态BFD。
- 协议触发的动态BFD会话动态分配本端标识符和自学习远端标识符,无需指定本地标识符和远端标识符。
BFD检测模式:
设备采用BFD异步检测模式。
各设备间按照协商好的周期发送BFD控制报文,如果某个设备在检测时间内没有收到对端发来的报文,则将BFD会话的状态置为Down。
单跳检测和多跳检测:
单跳检测指检测两台三层直连设备间转发链路的连通性。
多跳检测指检测两台三层非直连设备间任意路径的连通性,这些路径可能跨越很多跳,也可能在某些部分重叠。
静态标识符自协商BFD:
如果对端设备采用动态BFD,而本端设备既要与之互通,又要能够实现BFD检测静态路由,必须配置静态标识符自协商BFD。
单臂回声功能:
在两台直接相连的设备中,其中一台设备支持BFD功能,另一台设备不支持BFD功能。为了能够快速的检测这两台设备之间的故障,可以在支持BFD功能的设备上创建单臂回声功能的BFD会话。支持BFD功能的设备主动发起回声请求功能,不支持BFD功能的设备接收到该报文后直接将其环回,从而实现转发链路的连通性检测功能。
注:单臂回声功能只适用于单跳BFD会话中。
联动功能:
在实际组网中,BFD通常会和其他的协议联合使用,服务于上层应用,比如:BFD和OSPF联动。缺省情况下,OSPF发送Hello报文的时间间隔为10秒钟,设备能感知到邻居故障的时间最小也是秒级。在高速的网络环境中,这将导致报文大量丢失。BFD联动OSPF可以更快的发现邻接方面出现的故障,并及时通知OSPF重新计算相关路由以便正确指导报文的转发。
设备支持BFD和OSPF联动、BFD和IS-IS联动、BFD和BGP联动、BFD和静态路由联动、BFD和PIM联动、BFD和EFM联动以及BFD和VRRP联动。
BFD与接口状态联动:
当直连链路中间存在传输设备时,与接口本身的链路协议故障检测机制相比,BFD能够更快地检测到链路故障。另外对于Eth-Trunk或VLANIF等逻辑接口来说,链路协议状态是由其成员接口的链路协议状态决定的。
因此,为了将BFD检测结果更快地通告到应用程序,在设备接口管理模块中,为每个接口增加了一个属性,即BFD状态,指的是与该接口绑定的BFD会话的状态,系统根据接口的链路状态、协议状态和BFD状态决定接口的状态,并将结果通告给应用程序。
BFD会话状态与接口状态联动功能是指当BFD会话的状态变化时,直接修改接口的BFD状态。
- 当BFD会话状态变为Down时,与其绑定的接口的BFD状态变为Down,然后将接口状态通告给接口上的应用。
- 当BFD会话的状态变为Up时,与其绑定的接口的BFD状态变为Up。
该功能针对绑定出接口且使用缺省组播地址进行检测的单跳BFD会话。
BFD报文格式
BFD控制报文封装在UDP报文中传送,对于单跳检测其UDP目的端口号为3784,对于多跳检测其UDP目的端口号为4784或3784。
BFD控制报文根据场景不同封装不同。BFD控制报文包括两部分:强制部分和可选的认证字段。不同的认证类型,认证字段的格式不同。
BFD控制报文强制部分的格式如下:
字段解释:
字段 | 长度 | 含义 |
---|---|---|
Version (Vers) | 3 bits | BFD协议版本号,目前为1。 |
Diagnostic (Diag) | 5 bits | 诊断字,标明本地BFD系统最近一次会话状态发生变化的原因,取值及含义: 0 – No Diagnostic ; 1 – Control Detection Time Expired ;2 – Echo Function Failed ; 3 – Neighbor Signaled Session Down ; 4 – Forwarding Plane Reset; 5 – Path Down; 6 – Concatenated Path Down ; 7 – Administratively Down; 8 – Reverse Concatenated Path Down; 9-31 – Reserved for future use |
State (Sta) | 2 bits | BFD本地状态。0 – AdminDown; 1 – Down; 2 – Init; 3 – Up |
Poll (P) | 1 bit | 参数发生改变时,发送方在BFD报文中置该标志,接收方必须立即响应该报文。1:表示发送系统请求进行连接确认,或者发送请求参数改变的确认。0:表示发送系统不请求确认。 |
Final (F) | 1 bit | 响应P标志置位的回应报文中必须将F标志置位。1:表示发送系统响应一个接收到P比特为1的BFD包。0:表示发送系统不响应一个P比特为1的包。 |
Control Plane Independent (C) | 1 bit | 转发/控制分离标志,一旦置位,控制平面的变化不影响BFD检测,如:控制平面为IS-IS,当IS-IS重启/GR时,BFD可以继续监测链路状态。1:表示发送系统的BFD实现不依赖于它的控制平面。即,BFD报文在转发平面传输,即使控制平面失效,BFD仍然能够起作用。0:表示BFD报文在控制平面传输。 |
Authentication Present (A) | 1 bit | 认证标识,置1代表会话需要进行验证。 |
Demand (D) | 1 bit | 查询请求,置位代表发送方期望采用查询模式对链路进行监测。1:表示发送系统希望工作在查询模式。0:表示发送系统不希望、或不能工作在查询模式。 |
Multipoint (M) | 1 bit | 为BFD将来支持点对多点扩展而设的预留位。 |
Detect Mult | 8 bits | 检测超时倍数,用于检测方计算检测超时时间。查询模式:采用本地检测倍数。异步模式:采用对端检测倍数。 |
Length | 8 bits | 报文长度,单位为字节。 |
My Discriminator | 32 bits | BFD会话连接本地标识符。发送系统产生的一个唯一的、非0鉴别值,用来区分一个系统的多个BFD会话。 |
Your Discriminator | 32 bits | BFD会话连接远端标识符。从远端系统接收到的鉴别值,这个域直接返回接收到的“My Discriminator”,如果不知道这个值就返回0。 |
Desired Min TX Interval | 32 bits | 本地支持的最小BFD报文发送间隔,单位为微秒。 |
Required Min RX Interval | 32 bits | 本地支持的最小BFD报文接收间隔,单位为微秒。 |
Required Min Echo RX Interval | 32 bits | 本地支持的最小Echo报文接收间隔,单位为微秒(如果本地不支持Echo功能,则设置0)。 |
BFD报文抓包示例:
配置BFD
配置VLANIF接口BFD单跳检测:
在两台交换机之间配置VLANif接口实现三层互通,配置BFD实现链路故障的快速检测。
配置文件:
配置BFD多跳检测:
AR1和AR3为非直连设备,通过配置静态路由互通。在AR1和RAR3上分别配置BFD会话,实现AR1到AR3间多跳路径的检测。
配置文件:
BFD会话状态:
配置BFD单臂回声功能:
AR4支持BFD功能,而AR5不支持,所以在AR4上配置BFD单臂回声功能,实现链路故障的快速检测。
配置文件: