拓扑

实验01 BGP Synchronization - 图1

  • 感觉这个“BGP Synchronization” 准确的说法应该是 BGP Synchronization Limitation,即满足Sync 之后才能继续传递,不满足就不会继续传递
  • 这个Sync 并不是动词

步骤

  1. 配置R2、R3、R4 接口IP
  2. 在R2 和 R4 上配置 BGP
  1. router bgp 65200
  2. bgp log-neighbor-changes
  3. neighbor 10.23.1.1 remote-as 65200
  1. 查看状态,此时State 是 IDLE,表示正在尝试发起连接,而TCP无法建立

实验01 BGP Synchronization - 图2

  1. TCP建立连接的前提是路由可达,R2不知道怎么到达R4,反过来R4 也不知道怎么到达R2。路由表里只有直连路由

实验01 BGP Synchronization - 图3

  1. 现在我们模拟1个IGP,在R2到R4 之间开启OSPF

实验01 BGP Synchronization - 图4

  1. 此时再看BGP状态,已经成功建立,但是没有收到路由,PfxRcd 为0

实验01 BGP Synchronization - 图5

  1. 在R4 上将10.45.1.0 网络通过BGP宣告。这条路由会被加载进Local RIB以及 ADJ-RIB-OUT表。然后在R2 的RIB表也能看到这条路由
    1. R4(config-router)#network 10.45.1.0 mask 255.255.255.0

实验01 BGP Synchronization - 图6

实验01 BGP Synchronization - 图7

  1. 同时这条路由也被加载进R2的Route Table,因为BGP Sync默认是关闭的,不管IGP是否有学习到这条路由。注意此时R3 仍然没有去往10.45.1.0 的路由,而且此时在R2 上也是无法ping通 10.45.1.0 —— 在R2 上形成了路由黑洞
    1. 此时如果R1 上也开启BGP,这条路由还会继续传递给R1

实验01 BGP Synchronization - 图8

  1. 我们在R2 上开启 BGP Sync,开启之后,R2会看通过BGP学到的路由,是否也有通过IGP学到。结果当然是没有,所以R2的Sync 会失败,R2就不会把这个只通过BGP学到的路由加载进路由表
    1. 这个截图下半部分有些问题,过滤OSPF路由 —— 但不影响结果和结论

实验01 BGP Synchronization - 图9

  1. 确认R2的路由表没有10.45.1.0的路由。此时R2 就不会称为路由黑洞
    1. clear ip route * 触发重建

实验01 BGP Synchronization - 图10

  1. 另外查看具体的 BGP 路由条目,可以明确看到当前状态
    1. show ip bgp ipv4 unicast 10.45.1.0

实验01 BGP Synchronization - 图11

  1. 那如何解决R2 到达R4 的问题。最简单的就是在R4上通过OSPF 把10.45.1.0 宣告。 执行后回到R2,查看BGP路由条目,发现当前状态变成了 sync。BGP 和 IGP 都有学到这条路由。
    1. 同时注意到图中的输出信息有个RIB-failure,表示BGP无法将路由加载到路由表

实验01 BGP Synchronization - 图12

  1. 但是在这个实验里,上面这个操作又引入了1个新问题。可以看到R2 上去往10.45.1.0 是走OSPF。

实验01 BGP Synchronization - 图13

  1. 结合上一步出现的RIB-failure,可以看到具体原因:Higher admin distance —— iBGP的AD是200,而OSPF 是110 ,所以AD小的优先,只有OSPF进入到路由表
    1. show ip bgp ipv4 unicast rib-failure

实验01 BGP Synchronization - 图14

  1. 进一步的疑问,既然BGP Sync 可以避免网络黑洞,为什么默认关闭? —— 因为还需要把其他网络重分布到 iBGP网络中,这种重分布会引入一些不必要的麻烦