前言:
BFD(Bidirectional Forwarding Detection)提供了一个通用的、标准化的、介质无关和协议无关的快速故障检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状态
BFD概述:(单臂回声)
现代网络对可用性要求的越来越高,如云计算、在线服务、实时通信等应用要求网络中断时间控制在毫秒级,传统检测机制难以达标
传统故障检测机制的局限性:
动态路由协议速度慢 如OSPF的默认Hello间隔为10秒 无法满足实时业务需求
冗余协议延迟高 VRRP默认检测时间为3秒,在需要毫秒级切换的场景(如5G核心网)中仍显不足
静态路由本身没有故障检查机制
复杂网络拓扑,在复杂的网络结构中需要快速故障感知,而非仅依赖物理链路状态
协议依赖性强 各协议(如BGP)自行实现检测逻辑,缺乏统一、轻量的跨协议检测方案
随着技术的增强,对网络的可用性要求也会更高,于是便诞生BFD等支持微秒级报文处理的协议
BFD(Bidirectional Forwarding Detection) 是一种轻量级、快速检测网络链路或路径故障的协议,广泛应用于高可用性网络环境,可显著提升动态路由协议(如OSPF、BGP)或冗余协议(如VRRP、HSRP)的故障收敛速度
BFD是一个简单的”Hello“协议。两个系统之间建立BFD会话通道,并周期性发送BFD检测报文,如果某个系统在规定的时间内没有收到对端的检测报文,则认为该通道的某个部分发生了故障
BFD检测是通过维护在两个系统之间建立的BFD会话来实现的,系统通过发送BFD报文建立会话
BFD会话
BFD会话的建立有两种方式,即静态建立BFD会话和动态建立BFD会话,分别适用于不同场景,核心区别在于本地和远端标识符的配置方式和管理方式
静态BFD会话
定义与特点
手动配置:
- 管理员在两端设备上显式指定会话参数(如本地标识符、远端标识符、检测地址等)
适用场景:
- 网络拓扑稳定,链路端点固定(如企业专线、核心路由器间直连)
- 需要独立于上层协议(如OSPF/BGP)的BFD检测(如直接监控物理链路)
优点:
- 参数完全可控,避免自动协商的不确定性
- 不依赖上层协议,检测逻辑独立
缺点:
- 配置繁琐,维护成本高(尤其是大规模网络)
- 对端信息变更需手动调整,灵活性差
标识符匹配:
-
本端的remote discriminator (远端标识符)必须等于对端的localremote discriminator
(本地标识符)
,否则会话无法建立
动态BFD会话
定义与特点
自动触发:
- 由上层协议(如OSPF、BGP、VRRP)动态创建BFD会话,参数通过协议交互自动生成
适用场景:
- 动态路由环境(如OSPF邻居关系自动建立)
- 需要与协议状态联动的场景(如BGP邻居故障快速感知)
优点:
- 自动化程度高,减少手动配置工作量
- 随协议状态动态调整(如OSPF邻居断开后自动删除BFD会话)
缺点:
- 依赖上层协议的稳定性与兼容性
- 参数由协议自动协商,灵活性较低
标识符分配:
-
本地标识符由系统动态分配
-
远端标识符通过对端的BFD协议交互获取
BFD会话状态和建立
BFD会话状态有四种:Down(不转发流量,尝试建立会话),Init(持续发送 Init 状态报文,等待对端回复Up和Init,超时回复则返回Down),Up(周期性发送 Up 状态报文,维持会话活性)和AdminDown(收到任何非AdminDown报文均不响应)
一
1. 异步模式建立顺序
-
初始状态:两端均为 Down
一端发起:
-
设备A发送状态为 Init 的控制报文(携带本地参数)
对端响应:
-
设备B收到 Init 报文后,状态变为 Init,并回复 Init 报文
状态升级:
-
设备A收到设备B的 Init 报文后,状态变为 Up,并发送 Up 报文
-
设备B收到设备A的 Up 报文后,状态也变为 Up
-
会话维持:双方周期性发送 Up 状态报文,超时未收到则降级为 Down
2. 故障触发流程
链路故障:
- 设备A未收到设备B的报文,超时时间(Detect Multiplier × RX Interval)到期
- BFD报文实际发送时间间隔,实际接受时间间隔由BFD会话协商决定
状态降级:
- 设备A状态从 Up 降为 Down,并发送 Down 报文
手动关闭会话:
- 管理员将设备A状态设为 AdminDown,设备A发送 AdminDown 报文
- 设备B收到后,状态降为 Down,停止检测
重新启用会话:
- 管理员恢复设备A状态为 Down,重新触发会话建立流程
二
查询模式
-
工作原理:仅在需要时(如链路状态可疑时)发送控制报文,常态下不发送心跳报文
-
触发条件:
-
设备主动发起查询请求(Poll序列)
-
对端必须立即响应(Final报文),否则判定故障
-
BFD Echo功能
-
BFD Echo功能也被称为BFD的回声功能,是由本地发送BFD Echo报文,远端系统将报文环回的一种机制
-
在两台相连的设备(R1和R2)中(回声必须是在两个相连的设备中才能使用),一台设备(R1)支持BFD的功能,另一台(R2)不支持,为了检测这两台设备通信的连通性,则需要在支持BFD功能的设备上配置BFD回声功能,简单来说就是R1向发送R2发送的目的IP地址为自己本身接口的IP地址,R2收到后,发现接收到的地址,发现就是R1的地址,于是直接环回
-
发送端周期性发送回声报文,若在超时时间内未收到环回报文,判定链路故障
联动功能:
- 联动功能由检测模块(如 BFD)、Track和应用模块(如VRRP OSPF 静态路由 接口备份)组成
- 静态路由本身没有故障检查机制,如果静态路由存在冗余路径,通过静态路由与BFD联动, 当主用路径故障时,实现静态路由的快速切换
- OSPF在未绑定BFD的情况下,链路故障检测时间由协议Hello机制决定,通常为秒级。通过绑定BFD,可以实现毫秒级的故障检测
- 只有将BFD与应用进行绑定联动才能真正发挥作用
BFD的配置
开启BFD | BFD enable | |
在第一次创建静态BFD会话时,必须绑定对端IP和本端相应接口,且创建后不能修改,如果修改只能删除,重建 |
bfd <session-name>(BFD会话名称) bind peer-ip <对端IP> interface <本地接口> |
bfd bfd1 bind peer-ip 10.1.1.2 interface GigabitEthernet0/0/1 |
创建多跳BFD会话 | bfd <session-name>(BFD会话名称) bind peer-ip <对端IP>
多跳BFD只需要指定对端IP |
bfd bfd2 bind peer-ip 192.168.1.1 source-ip 192.168.1.2 |
配置BFD的本地标识符 |
discriminator local 后接值 |
discriminator local 100 |
配置BFD的远端标识符 |
discriminator remote 后接值 |
discriminator remote 200 |
创建BFD Echo |
指定对端ip和本端出接口,后面加上one-arm-echo参数 |
bfd one-arm(名称) bind peer-ip 10.0.1.2 interface GigabitEthernet0/0/0 one-arm-echo |
与OSPF绑定时 |
所有ospf接口使能bfd |
bfd all-interfaces enable |
配置最小发送(tx)和接收(rx)间隔为100毫秒 |
bfd all-interfaces min-tx-interval 100 min-rx-interval 100 |