Print

BFD定时器协商及取消路由协议联动的影

2026-09-11 发表

组网及说明

某局点设备通过OSPF或BGP建立邻居关系,并关联BFD进行链路故障快速检测。本案例涉及BFD控制报文异步模式下的定时器协商,以及取消BFD与路由协议联动后的状态变化。

告警信息

问题描述

设备型号:S12508G-AF

版本:R7634P10H12

计划调整BFD检测参数及协议联动配置,需要明确以下事项:

  1. BFD参数中提到的“300ms”表示报文发送间隔还是故障检测时间。
  2. 在OSPF或BGP邻居已正常建立的情况下,取消BFD联动是否会导致邻居震荡,以及可能产生何种告警。
  3. 仅修改一端的BFD定时器参数是否会引起会话震荡,协商结果是否统一以检测时间较长的一端为准。

过程分析



1. 核对发送间隔与检测时间的含义

首先查阅BFD定时器协商资料,并将“300ms”的含义提交研发确认。研发反馈,所讨论的数值指两端协商后的报文发送周期,应与故障检测时间区分。

BFD参数如何协商? 

要理解风险,需要先了解BFD的实际检测时间是如何算出来的。BFD会话的检测时间并非由单端配置直接决定,而是由双方参数协商得出。

以你提到的3 * 100ms为例,它对应三个配置:min-transmit-interval(最小发送间隔)、min-receive-interval(最小接收间隔)和detect-multiplier(检测倍数)。

协商规则如下:

1.      本地实际发送间隔 = max(本地 min-transmit-interval, 对端 min-receive-interval)

2.      本地实际检测时间 = 本地 detect-multiplier × 对端实际发送间隔

这意味着,如果你只修改了一端的参数,对端的检测时间计算基础(即你端的实际发送间隔)会随之改变,最终双方的检测时间会重新协商到一个新的共同值

修改一端会发生什么? 
2. 分析单端修改参数时的协商过程

假设初始状态:两端均为 min-tx=100ms, min-rx=100ms, multiplier=3,此时双方检测时间均为 300ms

场景一:将一端的间隔改为 300ms(即3*300ms

·    修改端 (A) 配置min-tx=300, min-rx=300, multiplier=3

·    未修改端 (B) 配置min-tx=100, min-rx=100, multiplier=3

·    协商后结果

A 的实际发送间隔 = max(300, 100) = 300ms

B 的实际发送间隔 = max(100, 300) = 300ms

A 的检测时间 = 3 × 300ms = 900ms

B 的检测时间 = 3 × 300ms = 900ms

·    结果:双方检测时间同步延长至 900ms,会话不会因参数不匹配而震荡

场景二:仅将一端的倍数改为 5(即5*100ms

·    修改端 (A) 配置min-tx=100, min-rx=100, multiplier=5

·    未修改端 (B) 配置min-tx=100, min-rx=100, multiplier=3

·    协商后结果

实际发送间隔双方仍为 100ms(因 max(100,100)=100

A 的检测时间 = 5 × 100ms = 500ms

B 的检测时间 = 3 × 100ms = 300ms

·    结果:双方使用了不同的检测时间500ms vs 300ms),但这本身是合法的,BFD协议允许两端检测时间不对称。

震荡的风险在哪里? 

尽管协商机制能保证最终状态稳定,但风险存在于参数修改生效的瞬间

当你在一端修改配置后,该端会立即尝试使用新参数发送BFD控制报文,并可能通过 Poll Sequence 向对端请求参数确认。在对端收到并响应这个协商请求之前,存在一个短暂的参数不一致窗口

如果在这个窗口期内,由于新参数导致发送间隔临时变长,而对端仍沿用旧的、较短的检测时间,就可能出现误判超时。例如,将间隔从100ms改为300ms的瞬间,对端可能仍在按300ms的检测时间等待,而你端已经变为每300ms才发送一次,对端可能在刚过300ms未收到报文时就判定会话 Down,从而引发一次短暂的震荡(Flap

H3C官方文档也明确提示:修改定时器参数时,需要确保对端已同步调整检测时间或发送间隔,否则可能导致检测定时器错误超时。

建议操作方式 

为避免修改过程中可能出现的短暂震荡,最稳妥的做法是两端同步修改,或在修改前评估中断的容忍度。

如果必须单端修改,建议:

1.      选择维护窗口:在业务允许短暂中断的时间段内进行。

2.      优先放宽参数:如果目的是延长检测时间,先修改检测倍数(detect-multiplier),再修改间隔(min-tx/min-rx),可以降低超时风险。

3.       监控会话状态:修改后使用 display bfd session 命令密切观察会话状态是否稳定。 

 

解决方法

  1. 按协商结果确认检测时间。 区分配置的最小发送、接收间隔与实际检测时间,结合双方参数计算,避免将“发送周期300ms”直接理解为“300ms故障检测”。
  2. 按需求取消协议联动。 在链路及路由邻居正常的前提下,取消OSPF或BGP对BFD的关联不会因此引起邻居震荡。操作后分别检查BFD会话与路由邻居状态,避免将BFD状态变化直接判断为路由中断。
  3. 分步调整BFD参数。 如需放宽检测时间,可先调整检测倍数,确认状态稳定后再调整发送、接收间隔。应注意本端通告的检测倍数影响对端检测时间;若需同时放宽两个方向,应分别核对两端参数。
  4. 调整后核查会话状态。 使用display bfd session检查BFD会话,并结合所关联的OSPF或BGP邻居状态及日志,确认参数调整结果。