且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《OSPF和IS-IS详解》一2.4 理解内部BGP

更新时间:2022-09-19 22:47:55

本节书摘来异步社区《OSPF和IS-IS详解》一书中的第2章,第2.4节,作者: 【美】Jeff Doyle 译者: 孙余强 责编: 傅道坤,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.4 理解内部BGP

BGP设计与实现
BGP被设计用来在Internet上的一系列自治系统之间提供无环路的路径。确保无环拓扑的机制就是AS_PATH属性。考虑图2-2,其中3个自治系统相互连接。如果AS 65000中的路由器R1通告一条前缀给AS 65001中的R3,那么在它发送前缀给R3时,它会把65000添加到这条前缀的AS_PATH列表前面。如果同样的前缀再次被AS 65000收到,那么边界BGP宣告者就会拒绝它,这是因为它在AS_PATH属性中检测到了环路。

继续考虑图2-2,假设R3需要向AS 65002中的R7传播前缀,那么这里有几种选择来完成这项任务。


《OSPF和IS-IS详解》一2.4 理解内部BGP

一种方法是让R3把所有的BGP前缀重分布到IGP中,IGP把它们通告给R4、R5和R6。接着,让R5和R6把这些前缀重分布回BGP,并把它们分别通告给各自的eBGP邻居——R7和R8。但是,这种策略有一些问题。

IGP不是被设计用来处理这里可能包含的路由数量的。完全的Internet表已经超过了10万条前缀。很多IGP需要周期性地刷新前缀信息,这会进一步导致网络的不稳定和额外的系统资源消耗,并且给常规的路由选择更新带来显著的带宽需求。前缀数量的增长导致发生路由抖动(route flapping)的可能性更大,路由抖动会引起严重的稳定性和收敛性问题。

BGP信息被重分布进IGP后会丢失所有的BGP属性,包括AS_PATH属性。AS_PATH属性的丢失破坏了BGP环路防止机制。例如,当前缀在R4上被重分布回BGP时,同样的这条前缀也会被发送回R2,因为AS_PATH属性中只包含65001。重分布也会导致任何策略属性的丢失,这些策略属性是为BGP学到的前缀所设置的。

比较明智的选择是使用内部BGP(internal BGP,iBGP)。当R3通过iBGP把前缀通告给R5时,R3不会在AS_PATH中添加自己的AS号。事实上,如果更新来自于iBGP对等体,Cisco IOS甚至不检查AS_PATH环路。如果没有这个额外的AS_PATH信息,路由选择信息环路就会在iBGP域中形成。

如果允许R3把前缀通告给R5,但是不允许R5把它从iBGP学到的前缀通告给其他iBGP对等体,例如,R4和R6,那么就可以避免环路。但是,这样的解决办法需要所有的iBGP宣告者全连接(fully meshed)。例如,R3需要与R4、R5以及R6建立iBGP对等会话。在iBGP宣告者数目很大的自治系统中,全连接会带来扩展性的问题。这个问题的解决办法涉及第7章讲述的路由反射和联盟。

使用iBGP传送前缀信息会带来其他一些小问题。如果BGP能够传送所有的前缀,那么还需要IGP吗?

IGP肯定是需要的。图2-2中,R3并不与R6直连。如果没有某种形式的路由选择信息存在,那么R3如何与R6建立iBGP会话呢?答案就是让IGP为自治系统内部提供基础的路由可达性信息。内部BGP从未被设计成在没有IGP的情况下使用,而是与IGP配合使用。iBGP路由通常需要IGP来递归解析。表2-1说明了iBGP与IGP的一些不同之处。


《OSPF和IS-IS详解》一2.4 理解内部BGP

在比较了iBGP和IGP之间的不同之处后,理解iBGP和eBGP之间的不同之处也是很重要的(见表2-2)。


《OSPF和IS-IS详解》一2.4 理解内部BGP