关键词:BGP、同步规则、Synchronization、iBGP、IGP、历史演进、no-synchronization

第86篇:BGP 同步规则(历史与现状)

一、引言

BGP 同步规则(Synchronization Rule)是 BGP 协议早期版本中的一项重要规则,它规定:如果 BGP 路由器从 iBGP Peer 学到一条路由,只有当这条路由同时也存在于 IGP(或静态路由)中时,才能将其安装到 IP 路由表中并用于数据转发。

随着网络架构的演进,同步规则已成为历史。现代 BGP 实现默认关闭同步规则,且在较新的设备中已不再支持开启。但在理解 BGP 与 IGP 的交互关系、以及排查遗留网络问题时,同步规则的历史仍然具有重要的教育意义。

二、核心概念

2.1 同步规则的定义

同步规则:BGP 路由器从 iBGP Peer 学到的路由,只有在 IGP 中也存在相同的路由(或存在静态路由)时,才被标记为有效(Valid)并安装到 IP 路由表中。

同步规则表达式:
BGP路由有效 = (从eBGP学到) OR (从iBGP学到 AND IGP中也存在)

关键点:同步规则只对 iBGP 路由生效,eBGP 路由不受此限制。

2.2 同步规则的设计初衷

同步规则解决的核心问题:AS 内部非 BGP 路由器的转发能力。

同步规则的设计初衷 - 图示

问题场景详解:

  1. R1 通过 eBGP 学到外部路由(如 8.8.8.8/32),通过 iBGP 传递给 R2
  2. 客户端的流量到达 R3(核心 P 路由器,不运行 BGP)
  3. R3 需要转发到达 8.8.8.8 的流量,但 R3 的 BGP 表为空(不运行 BGP)
  4. 如果 IGP(OSPF/IS-IS)中也没有 8.8.8.8 的路由,R3 只能使用默认路由或丢弃报文
  5. 如果 R3 使用默认路由将流量发给 R1,但 R1 可能认为该流量应从 R2 发出(因为 R1 的 BGP 最佳路径指向 R2 方向),导致流量绕路甚至黑洞

同步规则的解决方案:要求 iBGP 路由必须在 IGP 中也存在,确保 AS 内所有路由器(包括非 BGP 路由器)都有转发该路由的能力。

2.3 同步规则的问题

虽然同步规则的初衷是好的,但在实际部署中带来了严重问题:

问题 说明 影响
IGP 路由膨胀 所有 BGP 路由都需要重分发到 IGP IGP 路由表从几千条膨胀到数万条
SPF 计算频繁 外部路由变化触发 IGP LSA 泛洪 所有路由器频繁重算 SPF,CPU 飙升
收敛缓慢 IGP 的 SPF 计算比 BGP 决策更慢 外部路由变化需要等待 IGP 收敛
配置复杂 需要维护 BGP 到 IGP 的双向重分发 容易出现路由环路和震荡
内存压力 低端路由器无法承载海量 IGP 路由 设备内存溢出或崩溃

三、技术细节

3.1 同步规则的演进历史

时期 状态 标准/规范 说明
BGP-2/BGP-3 时期 强制开启 RFC 1105 同步规则是 BGP 的基本要求
早期 BGP-4 默认开启 RFC 1771 同步规则默认生效
1999 年 可选关闭 RFC 2796 引入 no-synchronization 命令
2006 年 默认关闭 RFC 4273 同步规则默认禁用
现代实现 默认关闭,不可重新开启 RFC 4273 同步规则已成为历史概念

3.2 现代 BGP 如何替代同步规则的功能

现代网络通过以下架构设计消除了对同步规则的依赖:

方案 说明 适用场景
全 BGP 部署 AS 内所有路由器都运行 BGP(iBGP) 小型网络
路由反射器 通过 RR 简化 iBGP 部署,所有路由器参与 iBGP 运营商骨干网
MPLS 核心 核心 P 路由器使用 MPLS 标签转发,不需要 IP 路由查找 大规模骨干网
默认路由引导 核心路由器仅维护默认路由指向 PE 企业网、接入网
策略路由 在核心路由器上使用策略路由将特定流量引导到 PE 特殊场景

现代 BGP 如何替代同步规则的功能 - 图示

3.3 华为设备上的同步规则配置

# 查看同步规则状态(现代设备默认关闭)
display bgp peer
  Synchronization: Disabled    # 现代VRP版本显示

# 老版本VRP关闭同步规则
bgp 100
 no synchronization    # 关闭同步规则(老版本)

# 现代VRP版本
# synchronization      # 此命令已废弃,不再支持开启同步规则
# 同步规则在VRP R20及以后版本中默认关闭且不可重新开启

四、实战配置/案例分析

4.1 案例分析:遗留网络中的同步问题

故障背景:某老旧企业网络中,核心交换机运行老版本 VRP,默认开启了同步规则。当从 iBGP Peer 学到外部路由后,这些路由未被安装到 IP 路由表,导致核心交换机无法转发外部流量。

排查:

  1. 检查 BGP 路由状态:
display bgp routing-table
  Network          NextHop            MED  LocPrf  Path/Ogn
  >  8.8.8.8/32    2.2.2.2             0     100   200i
  # 注意:只有>表示Valid,没有*表示Best
  # 同步规则开启时,iBGP路由如果没有对应IGP路由,不被选为Best
  1. 检查 IGP 中是否有对应路由:
display ospf routing
  # OSPF路由表中不存在8.8.8.8/32
  # 因此同步规则不满足,BGP路由不被安装到IP路由表
  1. 检查 IP 路由表:
display ip routing-table 8.8.8.8
  # 无匹配路由!
  # 根因:同步规则阻止了iBGP路由的安装
  1. 解决方案:
# 方案1:关闭同步规则(推荐)
[R] bgp 100
[R-bgp] no synchronization

# 方案2:将BGP路由重分发到IGP(不推荐,导致IGP膨胀)
ospf 1
 import-route bgp

# 方案3:在核心配置默认路由指向PE(推荐)
ip route-static 0.0.0.0 0.0.0.0 2.2.2.2

4.2 案例分析:IGP 路由膨胀事故

场景:某省运营商网络开启了 BGP 到 IGP 的重分发以维持同步规则,OSPF 路由表从 500 条内部路由膨胀到 85000 条。

影响: - OSPF LSDB 体积从几 MB 膨胀到数百 MB - 每台 OSPF 路由器的 CPU 利用率在 LSA 更新时达到 90%+ - 低端接入路由器的内存溢出,设备频繁重启 - SPF 计算时间从毫秒级延长到数十秒

解决过程:

  1. 分区域关闭同步规则,从边缘向核心逐步推进
  2. 在 PE 路由器上关闭同步规则
  3. 逐步取消 BGP 到 OSPF 的重分发
  4. 在核心 P 路由器上配置默认路由指向 PE
  5. 最终 OSPF 路由表恢复到 500 条,CPU 利用率恢复正常
# 在PE上关闭同步规则并取消BGP到OSPF重分发
[R-PE] bgp 100
[R-PE-bgp] no synchronization

[R-PE] ospf 1
[R-PE-ospf-1] undo import-route bgp

# 在核心P上配置默认路由
[R-P] ip route-static 0.0.0.0 0.0.0.0 pe1-ip preference 5

4.3 案例分析:何时仍需关注同步概念

虽然同步规则已默认关闭,但在以下场景中仍需关注类似的概念:

  1. 混合 IGP/BGP 网络:部分路由器运行 BGP,部分不运行,需要确保非 BGP 路由器的转发能力
  2. MPLS 未部署:在纯 IP 转发的核心网络中,P 路由器需要 IP 路由才能转发
  3. 故障排查:当 BGP 路由未被安装到 IP 路由表时,检查是否为同步规则(老设备)或 Next_Hop 不可达(现代设备)

五、总结

时期 同步规则状态 推荐做法 现代替代方案
早期 BGP(1990年代) 必须开启 BGP路由重分发到IGP -
过渡期(2000年代) 可关闭 逐步升级网络架构 MPLS核心/全BGP部署
现代 BGP(2010年代至今) 默认关闭,不可开启 无需关注 默认路由/MPLS标签/全BGP
现代替代方案 原理 适用场景
MPLS 标签转发 P路由器通过标签转发,不需要IP路由 运营商骨干网
默认路由引导 P路由器配置默认路由指向PE 企业网/接入网
全BGP部署 所有路由器运行BGP,iBGP传递路由 中小型网络
路由反射器 RR简化iBGP全互联,所有路由器参与BGP 大规模运营商网络

思考

  1. BGP 同步规则的初衷是保护 AS 内非 BGP 路由器的转发能力。为什么在现代网络中这个需求不再重要?哪些技术演进替代了同步规则的作用?
  2. 将 BGP 路由重分发到 IGP 以维持同步会带来什么问题?为什么现代网络极力避免这种做法?
  3. 如果在一个 AS 内既有运行 BGP 的路由器也有不运行 BGP 的路由器,不启用同步规则的情况下如何保证流量正确转发?

下篇预告:第87篇:IBGP 全互联要求与路由反射器(RR)