首页/网络/BGP 与广域网速查/BGP 定时器:Keepalive 与 Hold 调整
广域网排障60 条

BGP 定时器:Keepalive 与 Hold 调整

Keepalive 默认 60 秒、Hold 默认 180 秒:Hold 到期未收到任何报文即断连;广域网上调可容忍抖动,下调加快检测但更敏感。

BGP 与广域网速查网络更新于 2026-10-13

Keepalive 与 Hold 的关系

BGP 邻居建立后靠报文存活:Keepalive 定时器决定本端多久发一次保活,Hold 定时器决定多久收不到任何报文就判定邻居失效并断连,默认分别是 60 秒与 180 秒。两者的关系可以理解为「心跳频率」与「多久没心跳算死亡」。协商时取两端 Hold 的较小值,而 Keepalive 通常不应超过 Hold 的三分之一。实际调优要克制:把 Hold 调小能加快故障发现,但广域网上一次丢包或设备短暂卡顿就可能误判断连,全表重收敛的代价远大于等待时间;真正需要毫秒级检测时应该用 BFD,而不是把定时器压到极限。

基本信息

默认值Keepalive 60 秒,Hold 180 秒
协商规则Hold 取两端较小值,Keepalive 按本端配置发送
约束关系Keepalive 一般不超过 Hold 的三分之一
Cisco 命令neighbor x.x.x.x timers <keepalive> <hold>
华为命令peer x.x.x.x timer keepalive <秒> hold <秒>
查看show ip bgp neighbors 中的 hold time 与 uptime

典型使用场景

  • 广域网链路抖动频繁:评估是否需要放宽 Hold 减少误断
  • 需要更快故障检测:优先引入 BFD,而不是把 Hold 压到几十秒
  • 两端定时器差异较大:确认实际生效值是否与设计一致
  • 排障时判断断连原因:对比断连时间点与 Hold 到期时间
  • 验收记录:把生效的定时器值写进隧道或邻居资产表

调整与验证

调整与验证
# Cisco:设置 keepalive 与 hold
router bgp 65001
 neighbor 203.0.113.2 timers 10 30
# 华为:对应参数命名不同
# peer 203.0.113.2 timer keepalive 10 hold 30
! 验证实际生效的值
show ip bgp neighbors 203.0.113.2 | include hold time|keepalive
# 断连后确认原因是否与定时器相关
show log | include BGP|Hold

参数影响对照

调整方向收益代价
Hold 调小故障发现更快丢包或卡顿即断连,全表重收敛
Hold 调大容忍链路抖动故障发现变慢,可能长时间黑洞
Keepalive 调小链路活跃度提高报文与 CPU 开销上升
改用 BFD毫秒级检测且与协议解耦增加会话资源,需两端支持
两端配置不同时按较小 Hold 生效:本端写 90 而对端写 180,实际按 90 计时;验收要以实际生效值为准,而不是配置文件里的数字。
大规模邻居场景下把 Keepalive 调小会成倍增加报文量,需要评估控制面 CPU 与链路开销。

易错点

  • 为加快收敛把 Hold 调到极小值:一次抖动就导致邻居断连与全表重收敛,损失远大于收益
  • 以为 Keepalive 等于检测手段:真正判定失效的是 Hold 到期,两者作用不能混用
  • 调定时器未确认两端生效值:实际按对端配置计时,排障时时间线对不上
  • 临时调完忘记或忘记记录:下次故障时基线不明,无法判断参数是否为原因
  • 在已经部署 BFD 的链路上再压小 Hold:双重敏感机制叠加,抖动时被放大成双重告警

数据来源与参考

  • RFC 4271: BGP 定时器
  • Cisco: BGP timers 配置
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌