
Hat
译者
⚠️ 注意
如果您发现了错误,欢迎 参与贡献。
💡 摘要 (Powered by OpenAI)
本文介绍了 BFD 协议在 BIRD 中的内部实现,包括单跳/多跳会话的区别、会话状态机、RX/TX 间隔动态协商以及认证支持。
BFD (Bidirectional Forwarding Detection, RFC 5880) 为路由协议(如 OSPF、BGP)提供快速的邻居故障检测。与路由协议内置的 Hello 机制相比,BFD 的检测时间可低至数十毫秒级别。
BFD 本身不发现邻居——BFD 会话由 OSPF、BGP 等其他协议按需请求创建。当会话状态变更时,这些协议被通知并做出相应反应:
OSPF/BGP → 请求创建 BFD 会话 → BFD 模块
↓
OSPF/BGP ← 通知会话状态变更 ← BFD 检测
(断开邻接/重启会话)💡 译者注
BFD 模块的独立性是 BIRD 架构中"关注点分离"的典范。传统上,每个路由协议各自实现故障检测(如 OSPF 的 Hello 间隔和 Dead 间隔),导致检测时间受限于协议自身的定时器粒度。BFD 将故障检测从路由协议中剥离出来成为一个独立模块,任何路由协议都可以"插入"使用。这使得 BFD 可以针对故障检测单独优化,而不受路由协议的定时器约束。
| 类型 | 适用场景 | 实现差异 |
|---|---|---|
| 单跳 (Single-hop) | 直连邻居 | 通过 interface 定义配置,TTL=255 |
| 多跳 (Multi-hop) | 非直连邻居 | 通过 multihop 定义配置,TTL 可配置 |
| 选项 | 默认值 | 说明 |
|---|---|---|
min rx interval | 10 ms | 最小接收间隔:通告给邻居以限制其发送速率 |
min tx interval | 100 ms | 期望发送间隔:控制本地 BFD 控制包发送速率 |
idle tx interval | 1 s | 会话未建立时的降低发送速率 |
multiplier | 5 | 故障检测 = min rx/tx interval × multiplier |
passive | disabled | 被动模式:收到对方 BFD 包后才开始发送 |
💡 译者注
为什么 idle tx interval 默认 1 秒? 在会话未建立时,双方可能还未就间隔参数协商一致。此时以较低速率发送控制包,既降低了不必要的网络负载(特别是多跳场景),又能逐步探测到邻居何时上线。一旦会话建立 (Up),立即切换到 min tx interval(默认 100ms 或更低),实现快速故障检测。

译者
原文作者: <Ondrej Filip>, <Martin Mares>, <Maria Matejka>, <Ondrej Zajicek> 原文链接: https://bird.network.cz/?get_doc&v=20&f=prog-5.html#ss5.2 原文标题: 5.2 Bidirectional Forwarding Detection
遵循协议: CC BY-NC-SA 4.0 译者: hat 翻译时间: 2026-05-01 更新时间: 2026-05-01 本文链接: https://bird.xmsl.dev/docs/developer-guide/5-2-bfd.html