BGP中的环路和次优路径问题

一、路由引入造成的环路

在这里插入图片描述
场景描述:
如图所示,R1将100.1.1.0 通告进BGP,且传递给AS 200,R2 与R4建立iBGP邻居,R4从iBGP学习到该路由,R4将iBGP引入进IGP,此时,R3访问100.1.1.0 时将会出现环路。。

具体原因:
由于R3没有运行BGP,只能通过IGP学习到该路由,R4 将BGP引入到IGP,R3将会从R4学习到该路由,如果R3访问100.1.1.0,下一跳数据包将会交给R4。而R4从iBGP中学到该路由,下一跳为R2,但是R4需要通过R3才能到达R2,因此数据包会再次经过R3,故而形成环路。

解决方式1:
改变AS 200的物理拓扑,将R2和R4直接相连,形成AS内三角形的组网,如下图所示,R4到达100.1.1.0 将会直接经过R2到达,不会造成环路。
在这里插入图片描述
解决方法2:
如图所示,在R2上引入路由,R3访问100.1.1.0 时则会直接经过R2访问,不会造成环路。
在这里插入图片描述

二、聚合路由引起的环路问题

在这里插入图片描述
场景描述:
如上图所示,AS 100 中通告了三条网段分别为172.16. 1.0/24、172.16.2.0/24、172.16.3.0/24, 为了减少AS 200的路由数量,在R2上进行了手动聚合,但没有携带AS-SET关键字。假设聚合时不生成指向NULL 0的路由条目,将会带来环路问题,具体过程如下所述。

问题分析:
由于没有携带AS-SET 关键字,该聚合路由被重新通告进R1,对于R1来说,明细路由来自于本地IGP (通告进OSPF),聚合路由来自于R2、R1,BGP聚合路由和明细路由都出现在IP路由表中。IGP收敛速度比BGP快,如果R1上OSPF中的明细路由消失了,R1没有了明细路由,此时,如果R1要访问一个明细地址,将会匹配到聚合路由,会将数据包发送给R2,而R2是通过BGP从R1学到的这些明细路由,但是由于BGP的收敛速度慢,R2 的BGP表无变化。数据包将再次指向R1,至此,将会出现短暂环路。

解决方法:
实际上BGP生成聚合路由时,将会在IP路由表中自动形成一条指向NULL 0接口的路由聚合条目。如果R1有了这条指向NULL 0的聚合路由,那么R1匹配到该路由条目时将会直接丢弃掉,从而避免环路。

三、默认路由注入造成的次优路径

BGP中的默认路由下放:
当对等体的BGP路由表中的多条路由都只是由本端发送时,可以在本端配置向对等体发送缺省路由功能。配置向对等体发送缺省路由功能后,无论本端的路由表中是否存在缺省路由,都向对等体发布一条下一跳地址为本地地址的缺省路由,从而很大程度地减少网络路由数量,节省对等体的内存资源与网络资源。
在这里插入图片描述

实验:
在这里插入图片描述

场景描述:
如图所示,AS 100中的路由器R1与R2和R3是eBGP邻居,R1分别向R2和R3发布默认路由,R2和R3为OSPF域中的ASBR路由器,分别向该域中有条件地发布默认路由(当ASBR的路由表中存在默认路由才向OSPF发布)。

问题分析:
假设R1与R2之间的链路出现故障,R2则收不到eBGP发布进来的默认路由,而R3从OSPF发布的默认路由被R2接收到,此时R2将会把该默认路由放进路由表,下一跳指向R4。但是如果R1与R2的链路恢复以后,R1通过eBGP向R2发布的默认路由也是不会注入到R2的路由表的,原因在于eBGP的路由优先级为255,而OSPF默认路由优先级为150(LSA5),因此R2也不会将eBGP的默认路由放进路由表,这样会造成R2选择一条次优路径,如果匹配到默认路由时将会沿着R4-R3-R1。

解决方法:
修改R2的路由优先级,将BGP的优先级改得更小(要小于OSPF的150),让BGP的默认路由出现在路由表中。

整理资料来源:《HCIE路由交换学习指南》

猜你喜欢

转载自blog.csdn.net/tushanpeipei/article/details/112793737