BGP基础之路由宣告

bgp 路由宣告

参考

  • https://larioy.gst.monster/2020/08/19/wang-luo-xie-yi/bgp/bgp-ji-chu/#BGP%E5%A4%9A%E8%B7%B3%E9%97%B4%E6%8C%87%E5%AE%9A%E6%9B%B4%E6%96%B0%E6%BA%90%E5%BB%BA%E7%AB%8Bbgp%E8%BF%9E%E6%8E%A5

BGP数据库

  1. IP路由表(IP-RIB): 全局路由信息库, 包括所有IP路由信息
  2. BGP路由表(Loc-RIB): BGP路由信息库, 包括本地BGP Speaker(运行了BGP的网络设备)选择的路由信息。存放的是BGP所有的路径信息包括最优的和不是最优的路径路径都存放在这里。 是已经处理过的路由
  3. 邻居表: 对等体邻居清单列表
  4. Adj-RIB-In: 对等体宣告给本地Speaker的未处理的路由信息库, 是对等体发送过来的还未处理过的路由表项
  5. Adj-RIB-Out: 本地Speaker宣告给指定对等体路由信息库,自己要发送哪些路由项给对等体

BGP路由处理数据流

BGP路由处理数据流

初始化拓扑

上面绿色线指的是 OSPF 类型的 IGP 协议

红色虚线是 IBGP pper

EBGP 有红色文字标识

BGP路由通告原则一

  1. 连接一建立established阶段, BGP Speaker将把自己所有BGP路由通告给新对等体(新加入的 peer,会获得所有路由信息)
  2. 多条路径时, BGP Speaker只选最优的给自己使用 (选择最优路径)
  3. BGP Speaker只把自己使用的最优路由通告给对等体。 通过display bgp routing-table展示出来的路由, 最左侧显示为*>,箭头>的为最优的路由, 则只会传递最佳路径给对等体。(传递最优路径)

BGP路由通告原则二

  1. BGP Speaker(R4)从EBGP(R5)获得的路由会向它所有BGP对等体通告(包括EBGP(R6)和IBGP(R2))

    • 从 EBGP 学来的路由信息,会告知所有的 EBGP 和 IBGP
  2. IBGP邻居(一个AS内)在路由通告的时候, 不修改下一跳。 —— 会导致无法顺利传输数据包,因为不改变的下一条不可达

    • 在从EBGP学来的路由在发给IBGP时, 不改变下一跳。 比如下图R4从R5上学习到192.168.1.0/24这条路由, 则R4上就将这个目的地址的下一跳设置为BGP PEER为R5的10.10.5.5(因为是从R5学来的, 回去肯定也是从R5)。

      但是R4发给IBGP(R2)时【通过BGP peer】, 其发的路由下一跳还是10.10.5.5(R2上display bgp routing-table查看), 但是R2是不知道10.10.5.5在哪, 会认为这R4发过来的路由不可用。

      此时需要在R4上加一条配置, 将向IBGP传递学习到的路由的下一跳改成R4自己的BGP PEER 10.10.4.4。 R4上操作,保证IBGP下一跳可达

    • 解决方法:两种修改方法,

      • 将对端发过来的下一跳改成自己: peer xxxx next-hop-local
      • 将IBGP内的路由和EBGP间的静态路由注入到IBGP内部路由协议系统, 不保证来回可通

BGP路由通告原则三

  1. BGP Speaker从IBGP获得的路由不会通告给它的IBGP邻居: 防止环路的产生。

如下图R3和R5从R2学习的R1通告的路由192.168.1.0/24就不会发给R4。

这就要求一个AS内的所有IBGP设备全互联, 如图中的AS200中所有IBGP设备R2/R3/R4/R5要全互联。但是这样就会当AS内的IBGP设备过多时, 一个设备维护TCP连接变得很多。解决方有路由反射器和联盟。

环路解释:

假如会通告给它的IBGP邻居,IBGP间可以传递路由: R2从R1学来的路由就会R2–>R3–>R4–>R5—R2形成环路

【为什么呢?

  • 就是首先 R2 从 R1 学来路由信息,那么在 R2 上此路由的下一跳为 R1

  • 正常情况:接下来 R3 和 R5 会从 R2 学习到此路由,为了顺利传输,R3 和 R5 会记录此路由的下一跳为 R2

    • 若是可以传递,接下来R3 和 R5会将此信息传递给 R4,R4 随便记录一下此路由信息的下一跳为 R3 或 R5 ,这个算正常
  • 环路情况:但 若 R3 和 R5 会从 R2 学习此路由时,R5 丢失了这条信息或没有学到,那么只有 R3 学到,R3 会记录此路由的下一跳为 R2

    • 若是可以传递,R3 会 传递给 R4 ,R4 记录下一跳为 R3

    • R4 会传递给 R5,R5 记录下一跳为 R4

    • R5 会传递个给 R2,R2 记录下一跳为 R5

    • 因此便形成了环,R2–>R3–>R4–>R5—R2

如果一个目的地址是AS100的192.168.1.1的数据包从AS400发到R3且R1与R2间断了, 则出现R3-R2,R2发现R1不通了, 开始走环路R5–>R4–>R3, 这样数据包就出不去了

通告原则3拓扑

BGP路由通告原则四

  1. 下图BGP Speaker(R5)从IBGP(R2)获得的路由是否通告给它的EBGP对等体(R6)要依IGP(AS)和BGP同步的情况来决定。比如R2从R1上学到一条192.168.20.0/24的路由, 然后传递给R5, 此时R5是将这条路由通告给R6就要根据同步情况。

同步理解:

下图R5上运行的IGP协议(OSPF等)是否学习到了192.168.20.0/24这条路由(没有)?

学习到了,则IGP和R2传递过来的BGP一致,是同步的, 此时这条路由会从R5(IBGP)通告给R6(EBGP)。 反之不同步则不会通告。

现在默认关闭同步功能, 只要是最佳路径IBGP都通告给相连的EBGP设备

同步指的是 IGP 协议获得的信息 要和 BGP 协议获得的信息是一致的

可通过display th返回信息如下undo synchronization 即为关闭了同步, 不会将bgp路由发给R6

  • 关闭同步后想要AS实现BGP转发的前提: 同一AS内的所有设备都要运行BGP协议并全互联才行

为什么要同步呢?

  • 因为如下图R2和R5运行BGP协议,关闭同步后想要AS实现BGP转发的前提: 同一AS内的所有设备都要运行BGP协议并全互联才行, 否则BGP在AS内走不通。

  • 实践模拟:

    • 因为默认是关闭同步的, 需要新增加AS加入EBGP连接,获取已有的全量bgp路由信息。
    • 现有环境AS200和AS300通过R5和R6进行EBGP连接, R6上有一条BGP路由192.168.1.0/24并且已经传递到AS200内的IBGP设备R2和R5。 新增一个AS100, 让其和AS200通过R1和R2进行EBGP连接, 此时第一次全量BGP同步R2会将AS300的BGP路由192.168.1.0/24发给AS100的R1。 在R1上新增一个loopback接口13.13.13.1/24并将其路由加入到BGP中, 会发现AS200中IBG设备都有该BGP路由, 由于关闭了同步,该路由不会出现在AS300的R6上(原则体现)。 现在从R1上ping AS300中的192.168.1.1, 在R2的g0/0/0口和g0/0/1口分别抓包, 发现发往R3的数据包没有响应, 其就是因为R3没有BGP路由的原因
拓扑

本文由博客一文多发平台 OpenWrite 发布!

你可能感兴趣的:(BGP基础之路由宣告)