关键词:BGP、软复位、路由刷新、Soft Reconfiguration、Route Refresh、Graceful Restart、策略变更

第95篇:BGP 软复位与路由刷新

一、引言

当 BGP 路由策略发生变化时(如 route-policy、prefix-list、community-filter 等),如何让新的策略生效?最粗暴的方法是重置 BGP 会话(reset bgp peer),但这会导致 BGP 邻接关系中断、路由全部撤销再重新学习,产生明显的业务中断。

BGP 软复位(Soft Reset)和路由刷新(Route Refresh)机制允许在不中断 BGP 会话的前提下,使新策略平滑生效。理解这两种机制的原理和使用场景,是进行生产环境 BGP 维护的必备技能。

二、核心概念

2.1 BGP 软复位(Soft Reconfiguration)

软复位是华为/思科设备实现的一种本地功能。它在重置策略前,预先缓存对端发送的原始路由(未加策略过滤),当策略变更后,使用缓存的原始路由重新应用新策略。

BGP 软复位(Soft Reconfiguration) - 图示

2.2 BGP 路由刷新(Route Refresh)

Route Refresh 是 BGP 标准能力(RFC 2918)。通过向对端发送 Route Refresh 消息,请求对端重新发送路由。不需要预先缓存原始路由,但对端也必须支持 Route Refresh。

BGP 路由刷新(Route Refresh) - 图示

2.3 两种机制对比

特性 Soft Reconfiguration Route Refresh
标准要求 厂商私有实现 RFC 2918 标准
对端要求 无 需支持 Route Refresh
内存占用 高(需缓存原始路由) 低
方向 Inbound(入向) 仅 Inbound(请求对端重发入向路由)
配置方式 需预先配置 动态触发

三、技术细节

3.1 Soft Reconfiguration 的工作机制

Inbound 软复位流程:

  1. 预先配置 soft-reconfiguration inbound,设备缓存对端发送的所有原始路由
  2. 修改入向策略后,执行 reset bgp peer x.x.x.x soft inbound
  3. 设备从缓存中取出原始路由,使用新策略重新处理
  4. 更新 BGP 表并生成新的 BGP Update 通告给其他对等体

内存开销: - 每路由约占用 200-500 字节额外内存(取决于属性数量) - 对于拥有数万条路由的 PE 路由器,可能占用数 MB 到数十 MB

3.2 Route Refresh 的工作机制

注意:Route Refresh 不是 BGP 标准四种报文(Open=1、Update=3、Keepalive=4、Notification=6)之一,而是通过能力协商扩展的消息类型(Message Type=5),在 Open 报文中通过 Capability Code 4(RFC 2918)协商启用。

Route Refresh 消息格式:

字段 长度 说明
Message Type 1 字节 值为 5(Route Refresh,扩展消息类型)
Address Family 2 字节 地址族(AFI)
Next Protocol 2 字节 下一层协议(SAFI)
Reserved 1 字节 保留字段
Direction 1 字节 0 = 请求对端重发

方向说明: - Route Refresh 仅用于 Inbound 方向:本地设备向对端发送 Route Refresh 消息,请求对端重新发送路由更新,本地设备再使用新策略处理这些入向路由。 - Outbound 方向策略变更不需要 Route Refresh,直接通过本地 soft outbound 复位即可(本地重新处理 BGP 表后发送新的 Update)。

关键行为: - 发送 Route Refresh 后,对端会重新发送该地址族的所有路由 - 发送方使用修改后的策略重新处理这些路由 - 对端不需要做任何特殊配置(现代设备默认支持 Route Refresh)

3.3 Outbound 策略变更处理

Outbound(出向)策略变更的处理相对简单,因为本地路由器掌握要发送的数据:

# Outbound 软复位(两种机制都适用)
reset bgp peer 203.0.113.1 soft outbound
# 本地使用新策略重新处理 BGP 表,生成新的 Update 发送给对端

Outbound 软复位不需要缓存原始路由,因为路由数据在本地 BGP 表中。

3.4 Graceful Restart(优雅重启)

Graceful Restart(GR,RFC 4724)用于路由器重启或 BGP 进程重启时的路由保持:

阶段 行为
重启前 BGP Speaker 向对端发送 Graceful Restart 通知
重启中 对端保留该 Speaker 的 BGP 路由,标记为 Stale
重启后 Speaker 重新建立 BGP 会话,对端验证路由一致性
完成后 清理 Stale 路由,恢复正常状态

Graceful Restart(优雅重启) - 图示

四、实战配置/案例分析

4.1 场景一:Soft Reconfiguration 配置与使用

需求:修改入向 route-policy 后,不中断 BGP 会话使新策略生效。

# === 步骤1:预先配置软复位缓存 ===
bgp 100
 peer 203.0.113.1 as-number 200
 peer 203.0.113.1 soft-reconfiguration inbound
# 此命令使设备缓存对端发送的所有原始路由

# === 步骤2:修改策略 ===
# 假设修改了 route-policy INBOUND-POLICY 的内容
route-policy INBOUND-POLICY permit node 10
 if-match ip-address prefix-list NEW-PREFIX
 apply local-preference 150

# === 步骤3:执行软复位 ===
reset bgp peer 203.0.113.1 soft inbound
# 设备从缓存中取出原始路由,用新策略重新处理

# === 验证 ===
display bgp peer 203.0.113.1
# 确认会话状态仍为 Established(未中断)
display bgp routing-table peer 203.0.113.1
# 确认路由的 LOCAL_PREF 已按新策略更新

4.2 场景二:Route Refresh 配置与使用

# === 步骤1:确认对端支持 Route Refresh ===
display bgp peer 203.0.113.1
# 查看 capabilities 中是否有 Route Refresh

# === 步骤2:修改策略 ===
route-policy INBOUND-POLICY permit node 10
 if-match community-filter NEW-COMM
 apply local-preference 200

# === 步骤3:触发 Route Refresh ===
reset bgp peer 203.0.113.1 soft inbound
# 设备向对端发送 Route Refresh 消息
# 对端重新发送路由
# 设备使用新策略处理

# === 验证 ===
display bgp peer 203.0.113.1 received-routes
# 确认收到的路由数量无变化
display bgp routing-table local
# 确认路由属性按新策略更新

4.3 故障案例:软复位后路由数量减少

故障现象:执行软复位后,BGP 路由表中的路由数量明显减少。

排查步骤:

# 步骤1:检查策略变更内容
display current-configuration configuration route-policy INBOUND-POLICY
# 确认新策略是否有 deny 节点导致路由被过滤

# 步骤2:对比软复位前后的路由数量
display bgp peer 203.0.113.1
# 关注 Received 和 Accepted 路由数
# Received = 对端发送的总数
# Accepted = 通过策略过滤后被接受的数
# 如果 Received 减少,说明对端发生了变化
# 如果 Accepted 减少但 Received 不变,说明策略过滤

# 步骤3:检查策略节点
route-policy INBOUND-POLICY permit node 10
# 确认是否有隐式 deny(最后一个节点没有 permit all)

常见根因:

根因 说明 解决
策略缺少默认放行 route-policy 最后一个节点为 deny 或无默认 permit 添加 permit node xxx 作为默认放行
prefix-list 变更 新的 prefix-list 匹配范围缩小 检查 prefix-list 配置
对端路由变化 对端的路由表在软复位期间发生了变化 检查对端 BGP 表

4.4 Graceful Restart 配置

# === 启用 BGP Graceful Restart ===
bgp 100
 graceful-restart
# 启用本端的 GR 能力

# === 配置 GR 相关参数 ===
bgp 100
 graceful-restart
 graceful-restart restart-time 120
 graceful-restart stale-route-time 360
# restart-time: 本地重启的最大时间(秒)
# stale-route-time: 对端保留 Stale 路由的时间(秒)

五、总结

机制 方向 对端要求 内存开销 适用场景
Soft Reconfiguration Inbound 无 高 所有设备兼容
Route Refresh Inbound 需支持 低 现代设备推荐
Outbound 软复位 Outbound 无 无 出向策略变更
Graceful Restart 双向 需支持 中 路由器/进程重启

最佳实践建议: 1. 优先使用 Route Refresh(标准能力,低内存开销) 2. 对于不支持 Route Refresh 的旧设备,使用 Soft Reconfiguration 3. Outbound 策略变更直接使用 soft outbound 复位 4. 生产环境部署 Graceful Restart,降低重启影响 5. 策略变更前先备份当前策略,以便快速回退

思考

  1. Soft Reconfiguration 需要预先配置并缓存原始路由,Route Refresh 不需要。为什么 Route Refresh 能在不缓存的情况下完成相同的功能?
  2. 执行软复位时,BGP 路由表会经历怎样的变化过程?是否会出现路由短暂丢失?
  3. Graceful Restart 依赖对端保留 Stale 路由,如果对端不支持 GR 或 GR 超时,会发生什么?

下篇预告:第96篇:BGP 前缀限制与安全防护