集团站切换校区

验证码已发送,请查收短信

复制成功
微信号:togogoi
添加微信好友, 详细了解课程
已复制成功,如果自动跳转微信失败,请前往微信添加好友
打开微信
图标

业界新闻

当前位置:首页 > >业界新闻 > >

什么是路由黑洞

发布时间: 2022-02-11 10:02:56

两台BGP路由器之间无需直连也可建立对等体关系,只要它们具备IP连通性并且可以建立TCP连接即可。BGP的这个特点使得路由的传递更加灵活,然而稍有不慎,这个特性也可能带来一个麻烦,例如路由黑洞。


以图1为例,R1、R2、R3及R7均是BGP路由器,并且按照图示建立BGP对等体关系。AS 34567内已经部署了OSPF,使得AS内部的路由器能够获知到达该AS内各个网段的路由信息。R4、R5及R6并不运行BGP,只运行OSPF,得益于AS34567内运行的OSPF,R3及R7实现了IP连通性(R3及R7之间并没有直连的物理链路),并且建立起了IBGP对等体关系。




图1 BGP环境中路由黑洞的产生背景


现在R1将AS 100内的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这条来自AS 100的路由并将其加载到自己的路由表中。


现在R2收到一个去往1.0.0.0/8的数据包,它查询路由表后发现到达该目的地的下一跳为R7,于是将数据包转发给R7。R7收到这个数据包后也进行路由表查询,结果发现到达该目的地的下一跳为R3,然而R3并非它的直连路由器,它意识到下一跳路由器处于一个远端网段,因此它将继续在自己的路由表中查询到达R3的路由(也即递归查询)。由于AS 34567内已经运行了OSPF,R7发现可以通过OSPF路由到达R3,而且下一跳是R4(假设当网络正常时,R7选择经R4到达R3)。如此一来R7意识到要将数据包送达1.0.0.0/8,需先将其转发给R4。


当R4收到这个发往1.0.0.0/8的数据包时,它将在自己的路由表中查询到达该目的网段的路由,由于该路由是在BGP中被通告的(AS 34567内运行的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路由同步。同步规则主要用于规避BGP路由黑洞问题。


还是以图1为例,如果R7激活了BGP同步,那么当它收到IBGP对等体R3通告的1.0.0.0/8路由时,缺省是不会使用该路由的,当然也不会将其通告给EBGP对等体R2,只有当R7又从IGP协议(例如AS 34567中运行的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的数据包顺利地转发到目的地,可行的办法有几种。例如第一个办法是在AS 34567内的所有路由器上都运行BGP,也就是让R4、R5及R6也运行BGP。


然而由于IBGP水平分割规则的存在,我们将不得不在AS34567内实现IBGP对等体关系全互联,从而保证BGP路由不会丢失,此时需关闭设备上的BGP同步规则。如果AS34567内的路由器数量特别大,那么IBGP全互联的组网会给设备带来沉重的负担,而且该网络的可扩展性也将受到制约。此时路由反射器及联邦会是两个不错的解决方案。


第二个办法是R3将BGP路由引入AS 34567中的OSPF,从而让OSPF也能够获知到达1.0.0.0/8的路由。这样对于R7而言这条路由也就满足了同步规则~既从IBGP对等体学到,又从IGP协议获知,而R4、R5及R6也能够通过OSPF发现到达1.0.0.0/8的路由,因此路由黑洞的问题也就迎刃而解了。


当然在R3上将BGP路由引入OSPF的操作需要非常谨慎地执行,因为BGP承载的路由信息往往是巨大的,如果不做任何限制地直接将BGP路由引入一个IGP协议,带来的影响会很大。基于上述分析,这种办法并非在所有场景中都适用。


第三个办法是采用MPLS。MPLS(Multi-Protocol Label Switching,多协议标签交换)是一种标签交换技术,简单地说,就是在一个报文的IP头部之前、数据帧头部之后插入一个标签头部,由于IP头部“躲藏”在标签头部之后,因此在数据从源被转发到目的地的过程中,沿途的网络设备只需根据标签头部中的标签进行选路,如此一来即使转发设备没有到达目的网络的路由也不会影响数据转发,因为此时它们是基于标签信息对报文进行选路及转发的,而不是基于目的IP地址。


综上所述,解决BGP路由黑洞问题的方案很多,而且都比较成熟,在诸多成熟方案可供选择的情况下,依然激活同步规则也就显得没有意义了,因此在华为数通产品上,BGP同步规则缺省是被关闭的。

上一篇: Open报文

下一篇: IBGP水平分割规则

在线咨询 ×

您好,请问有什么可以帮您?我们将竭诚提供最优质服务!