BFD

在BGP(边界网关协议)的网络世界里,BFD(Bidirectional Forwarding Detection,双向转发检测) 就像是一个“毫秒级的哨兵”。

BGP 自身基于TCP协议,虽然可靠,但感知链路故障的速度非常慢(默认Keepalive时间通常是 60 秒,Hold 时间是 180 秒)。在高速网络中,中断3分钟简直是灾难。

1. 核心作用

简单来说,BFD的作用就是”故障减速,收敛加速“。

  • 极速检测: BGP无法感知物理链路微小的抖动或非直连链路的中断,而BFD可以在毫秒级(通常是 10-50ms)检测到转发路径的故障。
  • 联动收敛: 一旦 BFD 发现链路断了,它会立刻“捅”一下 BGP。BGP 收到通知后,无需等待计时器超时,直接切断邻居关系并开始重新计算路径。
  • 降低丢包: 故障切换时间从“分钟级”缩短到“秒级”甚至更短,极大提升了业务的稳定性。

2. 工作原理

BFD的逻辑非常纯粹:快速握手,超时报警。

2.1. 建立机制

  1. 协议联动: BGP邻居建立后,通过配置触发BFD。BGP会将邻居的IP等信息告诉BFD模块。
  2. 会话协商: 两个路由器之间开始发送 BFD 控制报文(通常是 UDP 端口 3784)。它们会协商发送间隔(Desired Min TX Interval)和检测倍数(Detect Mult)。

2.2. 检测过程

  • 持续心跳: 双方按照协商的时间间隔不停地互相发包。
  • 故障判定: 如果在 检测时间 = 发送间隔 × 检测倍数 内没有收到对方的回应,BFD 就认为链路已经失效。

2.3. 联动BGP的流程

当故障发生时,会触发以下链式反应:

  1. BFD 发现故障: 停止接收到心跳包。
  2. 状态通告: BFD模块立即通知本地 BGP 进程:“邻居不可达了!”
  3. BGP 断开: BGP立即将邻居状态置为 Down,并拆除对应的邻居关系。
  4. 路由重选: BGP从路由表中撤销通过该邻居学习到的路由,并切换到备份路径。

3. 为什么不直接调低BGP计时器?

你可能会问:“我把 BGP Keepalive 改成 1 秒不行吗?”

  • CPU 压力: BGP 是应用层协议,处理报文需要消耗较多 CPU 资源。频繁收发 Keepalive 会让 CPU 压力山大。
  • BFD 的优势: BFD 足够轻量,许多高端路由器甚至可以将 BFD 交给硬件(线卡)处理,不占用主CPU。这使得它可以在不影响系统性能的前提下,实现极高频率的检测。

4. 关键参数对比

特性 BGP 标准计时器 BGP 联动 BFD
故障检测时间 180 秒 (默认) < 1 秒 (通常为毫秒级)
检测开销 较高 (应用层处理) 极低 (通常硬件加速)
可靠性 慢速、粗放 快速、精准

评论