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

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

2.3 两种机制对比
| 特性 | Soft Reconfiguration | Route Refresh |
|---|---|---|
| 标准要求 | 厂商私有实现 | RFC 2918 标准 |
| 对端要求 | 无 | 需支持 Route Refresh |
| 内存占用 | 高(需缓存原始路由) | 低 |
| 方向 | Inbound(入向) | 仅 Inbound(请求对端重发入向路由) |
| 配置方式 | 需预先配置 | 动态触发 |
三、技术细节
3.1 Soft Reconfiguration 的工作机制
Inbound 软复位流程:
- 预先配置
soft-reconfiguration inbound,设备缓存对端发送的所有原始路由 - 修改入向策略后,执行
reset bgp peer x.x.x.x soft inbound - 设备从缓存中取出原始路由,使用新策略重新处理
- 更新 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 路由,恢复正常状态 |

四、实战配置/案例分析
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. 策略变更前先备份当前策略,以便快速回退
思考
- Soft Reconfiguration 需要预先配置并缓存原始路由,Route Refresh 不需要。为什么 Route Refresh 能在不缓存的情况下完成相同的功能?
- 执行软复位时,BGP 路由表会经历怎样的变化过程?是否会出现路由短暂丢失?
- Graceful Restart 依赖对端保留 Stale 路由,如果对端不支持 GR 或 GR 超时,会发生什么?
下篇预告:第96篇:BGP 前缀限制与安全防护