27 BFD(Bidirectional Forwarding Detection)
随着网络应用的广泛部署,网络发生故障极大可能导致业务异常。为了减小链路、设备故障对业
务的影响,提高网络的可靠性,网络设备需要尽快检测到与相邻设备间的通信故障,以便及时采
取措施,保证业务正常进行
BFD(Bidirectional Forwarding Detection)
BFD(Bidirectional Forwarding Detection,双向转发检测)提供了一个通用的、标准化的、介质无关和协议无关的快速故障检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状态。
BFD是一个简单的“Hello”协议。两个系统之间建立BFD会话通道,并周期性发送BFD检测报文,如果某个系统在规定的时间内没有收到对端的检测报文,则认为该通道的某个部分发生了故障。
BFD报文结构
BFD检测是通过维护在两个系统之间建立的BFD会话来实现的,系统通过发送BFD报文建立会话。BFD控制报文根据场景不同封装不同,报文结构由强制部分和可选的认证字段组成。
Sta:BFD本地状态。
Detect Mult:检测超时倍数,用于检测方计算检测超时时间。
My Discriminator:BFD会话连接本地标识符(Local Discriminator)发送系统产生的一个唯一的、非0鉴别值,用来区分一个系统的多个BFD会话
Your Discriminator:BFD会话连接远端标识符(Remote Discriminator) 。从远端系统接收到的鉴别值,这个域直接返回接收到的“My Discriminator”,如果不知道这个值就返回0。
Desired Min TX Interval:本地支持的最小BFD报文发送间隔。
Required Min RX Interval:本地支持的最小BFD报文接收间隔。
Required Min Echo RX Interval:本地支持的最小Echo报文接收间隔,单位为微秒(如果本地不支持Echo功能,则设置0)。
BFD会话建立
BFD会话的建立有两种方式,即静态建立BFD会话和动态建立BFD会话。BFD通过控制报文中的本地标识符和远端标识符区分不同的会话。静态和动态创建BFD会话的主要区别在于Local Discriminator和RemoteDiscriminator的配置方式不同。
BFD会话状态
BFD会话有四种状态:Down、Init、Up和AdminDown。会话状态变化通过BFD报文的State字段传递,系统根据自己本地的会话状态和接收到的对端BFD报文驱动状态改变,如左下图所示。BFD状态机的建立和拆除都采用三次握手机制,如右下图所示,以确保两端系统都能知道状态的变化。
BFD检测模式
BFD的检测机制:两个系统建立BFD会话,并沿它们之间的路径周期性发送BFD控制报文,如果一方在既定的时间内没有收到BFD控制报文,则认为路径上发生了故障。BFD的检测模式有异步模式和查询模式两种。
异步模式
系统之间相互周期性地发送BFD控制包,如果某个系统在检测时间内没有收到对端发来的BFD控制报文,就宣布会话为Down。
查询模式
在需要验证连接性的情况下,系统连续发送多个BFD控制包,如果在检测时间内没有收到返回的报文就宣布会话为Down。
BFD检测时间
BFD会话检测时长由TX(Desired Min TX Interval),RX(Required Min RX Interval),DM(Detect Multi)三个参数决定。BFD报文的实际发送时间间隔,实际接受时间间隔由BFD会话协商决定。
本地BFD报文实际发送时间间隔=MAX { 本地配置的发送时间间隔,对端配置的接收时间间隔 }
本地BFD报文实际接收时间间隔=MAX { 对端配置的发送时间间隔,本地配置的接收时间间隔 }
本地BFD报文实际检测时间:
异步模式:本地BFD报文实际检测时间=本地BFD报文实际接收时间间隔×对端配置的BFD检测倍数
查询模式:本地BFD报文实际检测时间 = 本地BFD报文实际接收时间间隔×本端配置的BFD检测倍数
BFD Echo功能
BFD Echo功能也称为BFD回声功能,是由本地发送BFD Echo报文,远端系统将报文环回的一种检测机制
在两台直接相连的设备中,其中一台设备支持BFD功能(R1);另一台设备不支持BFD功能(R2),只支持基本的网络层转发。为了能够快速的检测这两台设备之间的故障,可以在支持BFD功能的设备上创建单臂回声功能的BFD会话。支持BFD功能的设备主动发起回声请求功能,不支持BFD功能的设备接收到该报文后直接将其环回,从而实现转发链路的连通性检测功能。
联动功能简介
联动功能由检测模块、Track和应用模块三部分组成。
静态路由与BFD联动
静态路由自身没有检测机制,如果静态路由存在冗余路径,通过静态路由与BFD联动,当主用路径故障时,实现静态路由的快速切换 。
静态路由与BFD联动应用广泛,如下图中R1是园区网的出口路由器,R1通过两条链路分别连接ISP1和ISP2,正常情况下默认路由经过的链路为指向ISP1的链路,当通往ISP1的链路出现故障的时候,BFD会话能够快速感知,并通知路由器将流量切换到指向ISP2的链路。
OSPF与BFD联动 (1)
OSPF在未绑定BFD的情况下,链路故障检测时间由协议Hello机制决定,通常是秒级。通过绑定BFD,可以实现毫秒级故障检测。BFD与OSPF联动就是将BFD和OSPF协议关联起来, BFD将链路故障的快速检测结果告知OSPF协议。
OSPF通过自己的Hello机制发现邻居并建立连接。OSPF在建立了新的邻居关系后,将邻居信息(包括
目的地址和源地址等)通告给BFD。BFD根据收到的邻居信息建立会话,会话建立以后,BFD开始检测链路故障。当R1和R2之间链路出现故障,BFD首先快速检测到链路故障,BFD会话状态变为Down并通知R1。R1处理邻居Down事件,通知本地OSPF进程邻居不可达,重新进行路由计算,选择通过R3到达R4。
BFD配置命令
创建BFD会话绑定信息,并进入BFD会话视图。
[Huawei] bfd session-name bind peer-ip ip-address [ vpn-instance vpn-name ] interface interface-type interface-number
创建静态标识符自协商BFD会话
[Huawei] bfd session-name bind peer-ip ip-address [ vpn-instance vpn-name ] interface interface-type interface-number [ source-ip ip-address ] auto
创建单臂Echo功能的BFD会话
[Huawei] bfd session-name bind peer-ip ip-address [ vpn-instance vpn-name ] interface interface-type interface-number [ source-ip ip-address ] one-arm-echo
配置BFD会话的本地标识符
[Huawei-bfd-session-test] discriminator local discr-value
配置BFD会话的远端标识符
[Huawei-bfd-session-test] discriminator remote discr-value
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix