Border Gateway Protocol(BGP)边界网关协议(二)

上一篇文章中我们介绍了什么是BGP,iBGP与eBGP的区别,什么是BGP Peers。同样还介绍了在配置
BGP时的一些技巧和方法,比如为什么要使用Loopback地址,为什么要使用next-hop,以及如何宣告
路由等等。本篇我们来介绍一下BGP是如何做Best Path选择的,也就是说BGP选择最佳路径的方法,
这是BGP配置中最为重要的一部分,当一个BGP路由器收到很多条关于同一个目的地的路由时,通常
BGP只会选择一条最好的路径来使用。而选择的方法有很多种,但基本都是通过比较每条BGP路由当中
不同的属性来进行选择。在比较这些属性之前,BGP会先检查以下3个属性,符合这3个条件的路由才
会进入比较程序,不符合条件的路由则在这时就被淘汰掉了。 ● Next-hop-address所在的Network必需是可达的,也就是存在于路由器的路由表之中。 ● As-Path不包含路由器自身的AS编号,这是为了防止产生Loop。 ● 如果开启了Synchronization,则必须符合,可以参考上一篇里的介绍。 下面我们以下图中的拓扑为例,来分类介绍一下BGP如何比较每一个属性来选出最佳路径。如下图我
们有4个AS,R1、R2和R3位于AS200,其它几个都单独位于一个AS,我们假设所有基本配置已经配置
完成,包括IP地址,BGP Peer都设定完毕。R2与R1以及R2与R3之间是iBGP连接并且配置了
Next-hop-self,R2还配置了Route Reflector,R5把Loopback0的5.5.5.0/24网络通过network命令
发布出来。
一、比较Weight值
1、在比较Weight值时,选择较大的值,Weight是本地路由器对自己的Peer的权重值,谁的Weight值
大就用谁提供的路由条目。需要注意的是Weight是思科独有的一个属性,在其它品牌的设备上没有此
属性,但会有类似的属性。所以在上图中我们假设所有设备都是Cisco设备。 2、所有配置完成以后,我们先在R2上看一下BGP路由表,可以看到有2条路径,Weight值都是0,BGP
选择了下一跳为172.16.2.1这条路径为最佳路径,也就是经过AS100和AS300到达5.5.5.0网络。默认
情况下Weight值都是0,所以这里Weight值相同,BGP就会去比较其它属性来选择最佳路径。
3、下面我们来更改一下Weight值,我们知道在比较Weight值时较大的值胜出,所以基于上图的状态
我们将下一跳为172.16.3.3的路径的Weight值改大。可以使用如下命令: neighbor <ip> weight <default weight>
4、我们将weight值改为了1000,更改完以后需要使用clear ip bgp *命令去reset一下Peer。才会使
改动生效。然后查看BGP路由表,如下图可以看到现在R2上到达5.5.5.0/24的最佳路径变成了下一跳为
172.16.3.3这条路径。这条路径的Weight值为1000,比另一条大,所以此路径变为Best Path。也只有
这条路径会被R2发布给其它Peer。
5、有一点需要注意,Weight值是一个只适用于路由器本地的属性值,所以Weight值并不会跟随路由发
布到其它路由器,比如这时我们查看一下R1的BGP路由表,可以看到在R1上面两个Weight值仍然是0,
并且R1按自己的方式来选择最挂路径。
二、比较Local Preference
1、如何Weight值相同,此时通过比较Weight值就无法选出最佳路径,这时BGP路由器要去比较的下
一个值就是Local Preference值,同样是较大的值胜出。一条路由的Local Preference较大的话,
它就是整个AS对于该目的地的出口。如下图,我们先将Weight值改成一样,再来调整Local Prefer
ence值。所有通过iBGP Peer传递的路由,其Local Preference默认值都是100。
2、现在我们在R3上把从R6传来的5.5.5.0/24这条路由的Local Preference值设置为500。可以通过
Route-map来进行配置。配置完成后同样记得Reset一下Peer。
3、由于Local Preference是整个AS的事件,所以这个属性会传递到iBGP Peer,修改完成后我们在R2
上查看BGP Route,可以看到经过R6这的这条路由的Local Preference值已经变为500,并且BGP选择
了这条路径做为最佳路径。
三、Locally Originated
本机原生是指由本机使用指令Network、Aggregate-address生成或由本机把IGP Router 
Redistribute到BGP的路由,比从其它Neighbor收回来的路由要好。 四、比较AS Path 1、AS Path是到达目的地网段所要经过的AS,BGP认为AS Path越短越好,所以在比较AS Path时,路径
较短的会胜出。如下图我们将Weight值和LocPrf都改成相同。然后再来调整AS Path来改变最佳路径。
2、如上图,当前使用的最挂路径是第一条路径,也就是下一跳为172.16.2.1这条路径。如果现在我
们将这条路径的AS Path变长,那么BGP在重新选路时就会选择第二条路径做为Best Path。修改AS
Path可能需要在物理上对设备之间的连线进行调整,如果实际条件不允许这样做,我们也可以通过
命令来做这个修改。使用Route Map当中的Prepend可以在AS Path当中强行加入一些AS编号,让AS
Path变长,但注意这个方法只适用于eBGP Peer,iBGP Peer不允许这样修改AS Path。所以根据我
们的实验拓扑,我们在R4上进行此操作。修改完成后Reset一下BGP Peer。
3、需要注意,为了防止出现Loop,在修改AS Path时通常使用AS Path最前面的一个AS编号做为
Prepend的AS。所以这里我们用的是100。在R2上查看BGP路由,可以看到172.16.2.1这条路径的
AS Path变长了,增加了一个Prepend AS:100。所以原本它是最佳路径,经过重新选择,最佳路
径变为下一跳为172.16.3.3这条路径,以为它的AS Path较短。
五、比较Origin Type
1、上一篇我们介绍过Origin的三个值:"i"、"e"和"?",因为"e"已经被淘汰了基本用不到,所以这
里我们主要来看一下"i"和"?"这两个值。"i"表示该路由的来源是IGP、使用network指令或者
Aggregate-address指令。"?"表示该路由是通过redistribute得来的。比较Origin Type选择较小
的值。 2、如下图,在测试之前我们同样先前将前面介绍过的几个属性都配置成一样。此时Best Path是下
一跳为172.16.2.1这条路径。
3、现在我们在R4上加入一条指向5.5.5.0/24的静态路由,然后把它redistribute到BGP中。
4、现在在R2上查看BGP路由表,可以看到第二条路由后面的Origin Type变成了"?"。但由于前面在R4
的配置的静态路由改变了AS Path,所以现在第二条路由地AS Path本身就比第一小短,所以它是最佳
路径。现在我们需要用Prepend AS Path来将其长度变成与第一条一样,从而来证明BGP是会选择"i"
还是会选择"?"。
5、Prepend改好AS Path之后,现在两条路由的AS Path长度是相同的,这时再看BGP选择谁做为最佳
路径。如下图可以看到,BGP选择了Origin Type为"i"的这条路径做为Best Path。由前面的
172.162.1这条路变成了172.16.3.3这条路。也就是说"i"要比"?"小。
六、比较MED值
1、接下来我们来看一下MED值,假设前面介绍的这些属性值都相同,BGP该如何做选择,那么下一个
要进行比较的就是MED(Metric)值。MED就像IGP里面的Metric,它可以传递到其它的AS。Metric值
小的路由会被选为最佳路径。不过需要注意的是,MED要求必需要在AS Path中第一个AS编号相同的时
候才会做出比较,如果AS编号不相同,又要进行比较,可以使用"bgp always-compare-med"指令进行
强制比较。
2、另外我们也可以将AS编号进行修改,注意需要在Peer中的路由上都进行修改,来使两条路径中的
AS编号也完全相同。如下图,我们将拓扑中的AS400也修改为AS400,所以现在两条路径中的AS编号是
相同的。此时最佳路径是172.16.2.1这条路。默认两条路径的MED值都是0。
3、现在我们将172.16.2.1这条路的MED值增大到100。我们在R4上进行操作,可以使用Route Map来
实现。同样需要Reset Peer。
4、MED调整完成后,在R2上查看,可以看到第一条路的Metric变为100,同时最佳路径由原来的
172.16.2.1这条路变成了172.16.3.3这条路。说明BGP选择了Metric较小的这条路。
七、iBGP与eBGP
如果以上所有比较都相同,eBGP的路径会优于iBGP,即使Best Path在这个阶段被选出,BGP仍会跳到
Multipath检查是否需要做Load Sharing,所以如果需要做Multipath,前面从一到六这些属性必须全
部相同。 八、Next-hop的IGP Metric 如果此时还是不能选出最佳路径,则比较到达next-hop的IGP Metric,较小的值胜出,就算Best
Path在这个阶段被选出,BGP扔会跳到Multipath检测是否需要做Load Sharing。 九、Multipath 1、BGP支持的是Unbalanced Load Sharing,可以参考接口的带宽去分配流量。如下图R1有3条路径可
以到达R5,R5通过BGP发布了5.5.5.0/24网络。这里假设所有配置已经完成。
2、默认情况下,Multipath的值为1,也就是不进行Load Sharing。如下图,BGP选择了下一跳为
172.16.2.3的路径为Best Path。
3、使用show ip protocols命令查看BGP的Maximum path为1。
4、现在我们在R1上为BGP配置Multipath,R1有三条路径连接到AS200,所以我们将Multipath值
设置为3。
5、配置完成后,查看BGP路由表。可以看到最佳路径之外的两条路径前面多了一个"m"标记。说明这
两条路径现在是加入到了Multipath当中。Best Path并不会发生改变,路由器只会将Best Path发布
给其它Neighbor。
6、查看现在的流量分布情况,可以看到现在流量是1:1:1平均分布的。
7、现实中可能会遇到链路带宽不一致的问题,比如在我们的拓扑中,R1到R4这条链路是一个
Serial链路,带宽只有1.5M。所以如果按照默认的1:1:1来分配流量显然不合理。所以这里
就要对流量分配进行调整。使用bgp dmzlink-bw让BGP根据链路带宽来自动去分配流量。
8、配置完成后,可以看到现在的流量分配的比例是37:240:240。

发表评论