今天给大家介绍BFD的相关内容。本文主要从BFD的背景、原理实现和标识符角度来对BFD的相关内容进行详细的介绍。
一、BFD背景
随着网络应用的广泛部署,网络发生中断后可能对企业业务造成重大影响和相当的损失。为了减小链路和设备故障对业务的影响,提高网络的可靠性。网络设备需要尽快检测到与相邻设备间的通信故障,以便及时采取措施,调整网络转发架构,保证业务正常进行。OSPF、BGP和IS-IS等协议都有自身的Hello包检测机制,当链路或者网络设备出现故障时,Hello的收发会收到影响,因此可以借此察觉到网络中出现的故障。但是,依靠Hello包的检测机制的检测时间在几秒到几十秒之间,对于运营商等网络要求较高的业务场景来说,显然该检测机制不能够满足其业务需求。在现有网络中, 也可以通过硬件的方式,如SDH等手段检测链路故障。但是这种硬件检测的方式并不适用于所有的网络介质。
BFD(Bidirectional Forwarding Detection,双向转发检测)提供了一种通用的标准化的介质无关和协议无关的快速故障检测机制。它可以快速的检测到网络中出现的故障,并且通知与其向关联的路由协议。BFD的故障检测时间可以达到毫秒级,检测时间大概不超过1秒,因此可以很大程度上满足网络故障快速检测的需求。
二、BFD原理和实现
BFD的检测机制是两个系统建立BFD会话,并在他们之间周期性的发送BFD控制报文,如果一方在既定的时间内没有收到对方发送的BFD控制报文,则认为发生了故障。BFD控制报文时UDP报文,端口号3784,BFD报文比较小,因此不会过大的占用网络带宽资源。
BFD在配置时会设置与之联动的路由协议,以OSPF为例,当配置在OSPF上运行BFD进行故障检测时,OSPF邻居首先建立,然后再建立BFD会话,之后在设备之间会发送BFD控制报文。如果链路上发生故障,则BFD会话因为检测能力强,会首先发现网络中的故障,进而会话处于Down状态,之后BFD会“通知”OSPF,进而OSPF邻居关系中断。
三、BFD会话
BFD会话有三种状态,Down、Init、Ip。会话状态变化通过BFD报文中的State字段传递,系统根据自己本地的会话状态和接收到的对端BFD报文而确定自身的状态。
BFD会话建立过程如下所示:
BFD会话的建立采用三次握手的机制,以确保BFD会话建立的可靠性。BFD初始状态为Down,之后会发送Sta为Down的BFD控制报文。当收到对方发送的Sta为Down的BFD控制报文后,将会把自己的状态设置为Init,之后发送Sta为Init的BFD控制报文。当收到对方发送的Sta为Init的BFD控制报文后,BFD会将自己的状态设置为Up。至此BFD会话就成功建立了。
BFD报文如下所示:
BFD会话包括静态BFD会话和动态BFD会话两种。静态BFD会话是指通过命令行手工配置的BFD会话,包括配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求。动态BFD会话是指由应用程序触发创建BFD会话。当应用程序动态触发创建BFD会话时,系统分配属于动态会话标识符的值作为BFD会话的本地标识符,然后向对端发送Remote Discriminator的值为0的BFD控制报文,进行会话协商。当BFD会话的一端收到Remote Discriminator的值为0的BFD控制报文时,判断该报文是否与本地BFD会话状态匹配,如果匹配,则学习接收到的BFD报文中的Local Discriminator 的值,获取远端标识符。
在上面提到的Remote Discriminator和Local Discriminator,是BFD标识符的概念,类似于OSPF建立邻居的Router ID。标识符分为本地标识符(Local Discriminator)和远端标识符(Remote Discriminator),本地标识符用于表示本端设备,远端标识符用来表示对端设备。在配置BFD会话时,本地标识符和远端标识符一定要对应上。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200/article/details/120145655