该文档涉及的命令有:
bgp always-compare-med
bgp bestpath as-path ignore
bgp bestpath med missing-as-worst
3-1 BGP always-compare-med
命令的含义和产生的原因:
根据bgp的选路原则我们都知道,比较到第六步的时候,就是比MED,哪个的MED小,就走哪条路径。
但是比较med是又限制的。通常情况下,BGP是不会比较接收自不同的自治系统的MED值,也就是说,如果相同的目的路由从对端相同的AS的不同的ASBR传递过来的,那么就会比较MED,否则的话,是不会比较MED而直接跳到第七步:EBGP>IBGP.然后再接着比下去而会忽略MED属性的比较.
用命令注释来解释这个命令就是:
Router(config-bgp)#bgp a?
always-compare-med Allow comparing MED from different AS neighbors//允许比较来自不同AS邻居的MED值
下面这个实验来验证了这一特性,也说明了命令bgp always-compare-med的用法.
首先通过分析:
这里可以看到,从R2传递到R3的到193.16.1.0/24的路由携带了MED=100,而R4传递到R3的到193.16.1.0/24的路由携带了MED=200.
那么R3上面bgp的数据库至少有2个到R1目的网段为193.16.1.0/24的路由。
在R3上面:
193.16.1.0/24-R2:weight=0,LP=100,next-hop 172.17.1.2(非全0),AS-path=100,200,起源属性=i,MED=100
193.16.1.0/24-R4:weight=0,LP=100,next-hop 10.1.1.2 (非全0),AS-path=100,400,起源属性=i,MED=200
今天要验证的命令就是要说明一个问题,来自不同的AS对于MED这个属性bgp是不会比较也没有可比性的.
如果按照上面的分析结果,对于R3来说最优的路由到达193.16.1.0/24的路由应该是:193.16.1.0/24.
在R3上面的配置为:
但是实际结果呢?
这里对于R3来说,这里并没有选择下一跳为172.17.1.2 携带MED=100的。而是直接开始比较第八个原则,宣告路由器的router-id,哪个小哪个优先。这里可以看到两个邻居的router-id,一个为172.17.1.2,一个为10.1.1.2,系统直接选择了10.1.1.2这个router-id小的作为best路由。
这也就是之前说的为什么不同AS宣告过来的MED是没有可比性的,因为默认bgp就不会去比较不同AS宣告过来的MED,而会忽略这个属性直接比较下一个去。
现在在路由器R3上面配置修改为:
最后清一下bgp *,我们现在可以看到,用了这个命令以后,bgp系统才会开始比较MED属性,并且按照我们的意愿去选择正确的路径:
最后在BGP-4命令与配置手册上还提示到:
如果使用了命令bgp always-compare-med的命令,则会比较所有路径的MED值,如果确需比较所有路径的MED,请再AS中的每一台BGP路由器上配置该命令.按照我的理解这个命令是本地有效的。所以需要在同AS的所有路由事情该命令,否则没有事情的路由器仍然会忽略MED.
3-2 bgp bestpath as-path ignore
命令功能:做出最佳路径决策时,忽略AS路径(As-path)的属性.
拓扑图依旧用以前的。
在R3上面:
193.16.1.0/24-R2:weight=0,LP=100,next-hop 172.17.1.2(非全0),AS-path=100,200,起源属性=i,MED=200
193.16.1.0/24-R4:weight=0,LP=100,next-hop 10.1.1.2 (非全0),AS-path=600.700.800.100,400,起源属性=i,MED=200
如果是这样的比较,显然应该选择193.16.1.0/24-R2作为最优的路由。
现在先把环境搭建起来,一会再用命令bgp best-path as-path inore来忽略AS-path.
当换件搭建好以后,R2的相关配置为:
R4的配置为:
最后在R3上面,我们可以看到.因为AS-path是比较原则的第4步,而MED是比较原则的第六步,所以AS号少的路由优先.
193.16.1.0/24-R2:weight=0,LP=100,next-hop 172.17.1.2(非全0),AS-path=100,200,起源属性=i,MED=200
193.16.1.0/24-R4:weight=0,LP=100,next-hop 10.1.1.2 (非全0),AS-path=400.600.700.800.100,起源属性=i,MED=100
最终优的路由一定是193.16.1.0/24-R2,因为AS-path的计数器在这里只有2,而下面的有5.
现在修改R3的配置,在R3上面加上命令使路由器忽略比较AS-path的过程:
呵呵,最后我突然发现当前的IOS不支持这个命令,不知道是否已经把这个命令给忽略了。
但是我在迈普的设备找到了这个命令,有空的时候在我们公司自己的产品上验证一下:
这个实验只有以后有机会再进行验证了,各位同学在敲的时候一定要注意版本,呵呵。
3-3 BGP MED missing-as-worst
命令的含义和产生的原因:
如果本端从EBGP邻居收到前缀未设置MED值的bgp路由,BGP路由器会将该值设置为默认的0,但是如果使用了bgp med missing-as-worst以后,本地bgp路由器会以4294967294为未设置MED值的前缀附值。
其实我觉得用起来还是比较方便,这样只需要给优先的路由用route-map进行赋值,其他的都由本地路由器来处理.
首先,根据拓扑图,当R3上的配置只是建立2个EBGP邻居的时候,得到的答案应该是这样的:
这个时候从172.17.1.2 R2学来的路由是没有设置任何MED的,所以为空。
当将R3的bgp进程下面加上命令:
再到R3上面来看一下结果:
从R2学来的路由的Metric因为本地收到的时候并没有在MED中看到有任何值,所以加上了最大的MED.
这就是这个命令的用途.