在一个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丢弃掉,从而形成黑洞。
BGP同步可以避免不必要的黑洞,所谓BGP同步是指BGP路由器必须与IGP同步,AS内的路由器不仅要通过BGP学习到此路由,而且要从IGP协议学习到该路由才会将该路由通告给eBGP邻居。
如果同步开启,R2将路由传递给R4,而R4从iBGP对等体学到了该路由,在把这条路由通告给eBGP邻居之前,该路由器需要验证内部的可达性。首先检查该目标前缀,了解通往下一跳路由器的路由是否存在;然后检查IGP中是否存在该目标前缀。只有满足以上条件,R4才会将路由通告给eBGP邻居,反之将不会通告该路由。
通常情况下,要想让 IGP 协议同时学习到BGP 中的路由,就需要使用路由引入&#x