BGP路由器不应该使用或向EBGP邻居通告从IBGP邻居那里学习到的BGP路由信息,除非该路由是本地的或者该路由存在于IGP数据库,即该路由也能从IGP学习到。
同步规则要求BGP库与IGP库同步。这么做是为了使AS内的所有路由器都能达到同步,确保能够转发其它AS因使用该AS通告的路由而发送到该AS的那些数据。BGP同步规则也保证了整个AS中路由信息的一致性,避免了AS内的路由“黑洞”。
下面以图8-11所示的网络环境为例说明同步开启时各BGP路由器的状态。
路由器A和B都运行BGP协议,并形成了IBGP邻居关系。在AS65500中没有运行IGP,路由器A和B上也没有任何静态路由条目。路由器F运行BGP协议,并和路由器B形成了EBGP邻居关系。路由器E运行BGP协议,并和路由器A形成了EBGP邻居关系。路由器A和路由器B共同构成了一条AS65000和AS64500之间的路由信息的转接路径。
路由器F在BGP进程中通告了网络172.16.0.0,在同步开启时,情况如下:
- 路由器F在BGP进程中通告网络172.16.0.0;
- 路由器B从EBGP邻居那里学习到172.16.0.0的路由信息;
- 路由器B把172.16.0.0的路由信息写入BGP库并且使用它,然后把该路由放置在路由表中;
- 路由器B向它的IBGP邻居路由器A通告172.16.0.0的路由信息;
- 路由器A学习到172.16.0.0的路由信息,写入BGP库但并不使用它。因为路由器A并没有从IGP那里学习到该路由信息,即不同步。路由表中也没有到达网络172.16.0.0的路由。
- 路由器A不把172.16.0.0的路由信息通告给它的EBGP邻居——路由器E。
依然使用图7-11所示的环境,当同步关闭时,情况如下:
- 路由器F在BGP进程中通告网络172.16.0.0;
- 路由器B从EBGP邻居那里学习到172.16.0.0的路由信息;
- 路由器B把172.16.0.0的路由信息写入BGP库并且使用它,然后把该路由放置在路由表中;
- 路由器B向它的IBGP邻居路由器A通告172.16.0.0的路由信息;
- 路由器A学习到172.16.0.0的路由信息,写入BGP库但并不使用它。因为路由器A没有可达的下一跳(路由器F的接口地址)。路由表中没有到达网络172.16.0.0的路由。
- 路由器A不把172.16.0.0的路由信息通告给它的EBGP邻居——路由器E。
- 同步开启,BGP和IGP必须同步,且有可达的下一跳(运行了IGP的情况下,一般来说就能保证下一跳可达)。
- 同步关闭,必须有可达的下一跳。
摘自《最新CCNP认证之BSCI宝典》