BFD 的工作原理
BFD(双向转发检测)做的事情很简单:两端按约定的间隔互发短小的控制报文,在约定时间内收不到就判定链路失效,并通知绑定的协议联动处理。它的价值在于把故障检测从路由协议的秒级等待降到毫秒级——BGP 默认要等 Hold Timer 到期(常为 180 秒)才发现邻居失效,OSPF 也要等 Hello 超时,而 BFD 能在几百毫秒内给出结论。代价是每个会话都要占用检测资源,检测间隔越短开销越大,因此通常在关键链路上按需启用而不是全网打开。
基本信息
| 报文 | UDP 3784(单跳)、4784(多跳) |
|---|---|
| 工作模式 | 异步模式按间隔互发,超时判失效 |
| 检测参数 | 发送间隔、接收间隔、检测倍数三者决定超时 |
| 典型配置 | 300 毫秒间隔乘 3 倍,约 900 毫秒判失效 |
| 联动对象 | BGP、OSPF、IS-IS、静态路由、VRRP 等 |
| 查看 | show bfd neighbors details(Cisco) |
典型使用场景
- 核心链路承载语音或交易业务:需要毫秒级切换而不是秒级收敛
- BGP 邻居之间:避免长时间等待 Hold Timer 造成流量黑洞
- 冗余路径切换:与静态路由或 IGP 联动实现快速倒换
- 链路质量不稳定:用 BFD 快速确认是否真断,而非依赖应用层超时
- 对接第三方设备前:确认对端是否支持 BFD 及可配置的最短间隔
配置与验证
配置与验证
# Cisco:接口启用 BFD,再让 BGP 邻居联动
interface GigabitEthernet0/0
bfd interval 300 min_rx 300 multiplier 3
router bgp 65001
neighbor 203.0.113.2 fall-over bfd
# 查看会话状态与参数
show bfd neighbors details
# 抓包确认报文是否双向到达
tcpdump -ni eth0 udp port 3784 -c 10
# 华为侧对照
display bfd session all检测时延对照
| 机制 | 典型检测时间 | 特点 |
|---|---|---|
| BGP Hold Timer | 默认 180 秒 | 无需额外配置,但慢 |
| OSPF Hello 超时 | 40 秒量级 | 与 Hello 间隔相关 |
| BFD 300x3 | 约 0.9 秒 | 兼顾速度与开销 |
| BFD 50x3 | 约 0.15 秒 | 开销大,需评估设备能力 |
| 链路层信号 | 毫秒级 | 仅覆盖本地链路,不覆盖中间路径 |
两端参数不一致时按较大值协商:本端要求 50 毫秒而对端只支持 300 毫秒,实际生效的多是较慢的那个,验收时要看会话实际参数而非配置文件。
检测间隔设得过小会在链路抖动时频繁判定失效,引发路由反复震荡;广域网建议从 300 毫秒起步实测再收紧。