BGP协议

BGP基本概念
IGP协议要求需要建立邻居关系的两台路由器必须是直连的,然而BGP则不大相同。BGP的对等体关系并不要求设备必须直连,BGP采用TVP作为传输层协议,两台路由器只要具备IP连通性,并且能够顺利地基于179端口建立连接,就可以建立BGP对等体关系,因此BGP的对等体关系是可以跨设备建立的。BGP有两种对等体关系,一种的EBGP,另一种IBGP。
1.BGP对等体
EBGP对等体关系(External BGP Peer)
如果建立对等体关系的两台BGP路由器位于不通的AS,那么他们之间的关系被称为EBGP对等体关系
AS_Patch是每条BGP路由都会携带的属性,它描述了一条BGP路由在传递过程中所经历的AS的号码,路由通告给自己的IBGP对等体时,路由的AS_Path不发生变化。AS_Patch的长队会影响路由器对BGP路径的优选,同一路由,路径短的优先。
另外,路由在EBGP对等体之间传递时,AS_Path还用于防止出现路由环路。
通常情况下,EBGP对等体关系必须基于直连接口建立,之所以要设定这样的规则,是因为缺省情况下,EBGP对等体之间发送的BGP协议报文的TTL值为1,这使得这些协议报文只能够被传送1跳。当然,在某些特殊的场景中我们可能需要在两台非直连的路由器之间建立EBGP对等体关系,那么就需要修改EBGP对等体的跳数限制,通过这个操作来修改协议报文中的TTL值。

IBGP对等体关系(Internal BGP Peer)
如果建立对等体关系的两台BGP路由器位于相同的AS,那么他们之间的关系被称为IBGP对等体关系。
BGP路由在IBGP对等体之间传递时,AS_Path不会发生改变

2.IBGP水平分割
AS_Path属性可以防止BGP路由在EBGP对等体之间传递时发生环路,然而当路由在IBGP对等体之间传递时,AS_Path属性的值是不会发生改变的,也就是说当BGP路由在一个AS内传递时,是无法依赖AS_Path提供的防环能力的,那么此时路由环路就有可能发生,IBGP水平分割规则就是用于解决这个问题的。
BGP规定,当路由器从一个IBGP对等体学习到某条BGP路由时,它将不能再把这条路由通告给任何IBGP对等体,这就是IBGP水平分割规则。

IBGP水平分割规则是一个非常重要的设计,它可以在极大程度上规避AS内BGP路由传递时可能应发的路由环路问题。然而在某些场景中,它也会带来多个IBGP路由器直接无法同步路由(可以使用对等体全互联等方法解决)、路由黑洞的问题。
3.路由黑洞问题及BGP规则
在这里插入图片描述
R1、R2、R3及R7均是BGP路由器,并且按照图示建立BGP对等体关系。AS34567内已经部署了OSPF,使得AS内部的路由器能够获知到达该AS内各个网段的路由信息。R4、R5及R6并不运行BGP,只运行OSPF,得益于AS34567内运行的OSPF,R3及R7实现了IP连通性(R3及R7之间并没有直连的物理链路),并且建立起了IBGP对等体关系。
现在R1将AS100内的1.0.0.0/8路由发布到了BGP,然后将这条路由通告给了R3,而R3则将这条BGP路由通过IBGP连接直接通告给了R7(假设R3在将改BGP路由通告给R7时,告知了R7需要经自己到达该路由所指向的目的地,为了达到这个目的,R3将改BGP路由的Next_Hop属性值设置为它自己的地址),R7再将其通告给R2,最终R2能够通过BGP学习到1.0.0.0/8这条来自AS100的路由并将其加载到自己的路由表中。
现在R2收到一个去往1.0.0.0/8的数据包,它查下路由表后发现到达该目的地的下一跳为R7,于是将数据包转发给R7。R7收到这个数据包后也进行路由表查询,结果发现达到该目的地的下一跳为R3,然而R3并非它的直连路由器,它意识到下一条路由器处于一个远端网段,因此它将继续在自己的路由表中查询达到R3的路由(也即递归查询)。由于AS34567内已经运行了OSPF,R7发现可以通过OSPF路由达到R3,而且下一跳是R4(假设当网络正常时,R7选择经R4到达R3)。如此一来R7意识到要将数据包送达1.0.0.0/8,需先将其转发给R4。
当R4收到这个发往1.0.0.0/8的数据包时,它将在自己的路由表中查询到达该目的网段的路由,由于该路由是在BGP中被通告的(AS34567内运行的OSPF并不知晓到达这个目的网段的路由),而R4恰恰没有运行BGP,至此在R4上出现了路由黑洞,发往这个目的的网段的数据包在R4这里被丢弃。同样的问题也可能发生在R6上,当R4发生故障时,R7将会把到达1.0.0.0/8的报文转发给R6,而后者同样存在路由黑洞的问题。
为了规避路由黑洞的问题,BGP引入了同步规则(BGP Synchronization)。所谓的BGP同步规则指的是:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步。
如果R7激活了BGP同步,那么当它收到IBGP对等体R3通告的1.0.0.0/8路由时,缺省是不会使用该路由的,当然也不会将其通告给EBGP对等体R2,只有当R7又从IGP协议(例如AS34567中运行的OSPF)学习到1.0.0.0/8路由时,或则R7拥有到达1.0.0.0/8的静态路由时,它才会使用这条BGP路由,并且将该BGP路由通告给R2。此时R7的"想法”是:我现在已经通过BGP学习到去往1.0.0.0/8的路由,而我的路由表里又存在到达该目的网段的OSPF路由,这样看来网络中的设备应该都运行了OSPF,并且也都通过OSPF发现了到达该目的网段的路由,那么如果我将到达该目的网段的数据包转发出去,这些数据包应该是可以被转发到目的地的,因此我可以放心地使用该BGP路由并且将其通告给我的EBGP对等体了。
路由通告
本案例中,要将R2发往1.0.0.0/8的数据包顺利地转发到目的地,可行的办法有几种:第一个办法是在AS34567内的所有路由器上都运行BGP,也就是让R4,R5及R6也运行BGP。然而由于IBGP水平分割规则的存在,我们将不得不在AS34567内实现IBGP对等体关系全互联,从而保证BGP路由不会丢失,此时需要关闭身上的BGP同步规则。如果AS内的路由器量特别大,那么IBGP全互联的组网会给设备带来沉重的负担,而且该网络的可扩展性也将受到制约。此时路由反射器及联邦会是两个不错的解决方案。
第二个办法是R3将BGP路由引入AS34567中的OSPF,从而让OSPF也能够获知到达1.0.0.0/8的路由。这样对于R7而言这条路由也就满足了同步规则,既从IBGP对等体学到,又从IGP协议获知,而R4、R5及R6也能够通过OSPF发现到达1.0.0.0/8的路由,因此路由黑洞的问题也就迎刃而解了。
4.路由通告
BGP路由在对等之间交互时,主要存在以下几个原则:
当一台路由器发现了多条可到达同一个目的网段的BGP路由时,改路由器会通过一个路由选择进程在这些路由中选择一条最优的路由。通常情况下,路由器只将最优的路由加载到路由表中使用(激活了负载分担功能的情况除外),而且只会将最优的路由通告给BGP对等体。
当一台路由器从自己的IBGP对等体学习到BGP路由时,它不会将这些路由通告给其他IBGP对等体–IBGP的水平分割规则使然。
当一台路由器从自己的IBGP对等体学习到BGP路由时,如果BGP同步被激活,则路由器只有从IGP协议也学习到相应的路由时,才会将这些
BGP 路由通告给EBGP对等体;如果BGP同步被关闭,则即使没有从IGP协议学习到相应的路由,它也会将这些BGP路由通告给EBGP对等体。\华为路由器缺省关闭BGP同步规则
要强调的是,以上讨论的所有情况,前提均是BGP路由的next-hop属性所天聪的下一跳地址可达
5.bao

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值