在一个AS内,BGP的邻居可以跨越路由器来建立,这样有可能造成路由黑洞,如下图所示。R1与R2、R4与R5分别建立eBGP邻居,在AS200中,R2仅仅与R4建立iBGP邻居,R3没有配置BGP。假设R1通告一条路由199.100.20.0/24到BGP,并且传递给R2,R2通过iBGP邻居通告给R4,在同步未开启的情况下,R4可以将该路由通告给eBGP邻居R5。此时如果R5要转发数据流到该网段,数据包发送给R4,R4由于从BGP中学习到该路由,查找到达该网段的下一跳地址为R2,但是R2并非直连,需要再次查找IGP路由表,到达R2下一跳为R3。数据包被送到R3,但是R3没有运行BGP,并且在IGP协议中也没有学习到该路由,数据包将会被R3丢弃掉,从而形成黑洞。

ibgp路由黑洞 bgp路由黑洞原理_R3

BGP同步可以避免不必要的黑洞,所谓BGP同步是指BGP路由器必须与IGP同步,AS内的路由器不仅要通过BGP学习到此路由,而且要从IGP协议学习到该路由才会将该路由通告给eBGP邻居。

如果同步开启,R2将路由传递给R4,而R4从iBGP对等体学到了该路由,在把这条路由通告给eBGP邻居之前,该路由器需要验证内部的可达性。首先检查该目标前缀,了解通往下一跳路由器的路由是否存在;然后检查IGP中是否存在该目标前缀。只有满足以上条件,R4才会将路由通告给eBGP邻居,反之将不会通告该路由。

通常情况下,要想让 IGP 协议同时学习到BGP 中的路由,就需要使用路由引入,但是因为BGP承载的路由信息往往是巨大的,如果不做任何限制地直接将BGP路由引入一个IGP协议,将会给AS内路由器带来极大的开销,甚至可能导致设备宕机,这是非常危险的事情。

在华为 VRP 平台中,BGP的同步是默认关闭的,且不能够手动开启。那么解决BGP的路由黑洞问题有以下两种方法:

第一,建立iBGP全互联连接,使每台路由器都能收到路由,保证AS内部的可达性;由于IBGP全互联的组网会给设备带来沉重的负担,而且该网络的可扩展性也将受到制约。此时路由反射器及联邦会是两个不错的解决方案。

第二,使用MPLS VPN技术,在一个报文的IP头部之前、数据帧头部之后插入一个标签头部,由于IP头部“躲藏”在标签头部之后,因此在数据从源被转发到目的地的过程中,沿途的网络设备只需根据标签头部中的标签进行选路,如此一来即使转发设备没有到达目的网络的路由也不会影响数据转发,因为此时它们是基于标签信息对报文进行选路及转发的,而不是基于目的IP地址。