一、BGP的选路原则七:对于来自同一AS的路由,优选MED值最低的路由。
对于MED我们需要考虑如下3点:
1、默认值
- 缺省情况下是:0,通过network注入的时候值为0,通过import引入的时候分两种情况:如果是IGP,BGP中引入IGP那么BGP条目它的MED值就是IGP的Cost值;如果是RIP,BGP中引入RIP那么BGP条目它的MED值就是RIP的跳数值。
2、大小(越大越优先、还是越小越优先)
- MED值越小越优先
3、传播范围(AS内部还是AS之间)
- 相邻的两个AS之间
二、实验拓扑
三、实验过程
1、R1和R2建立EBGP邻居关系,R2分别和R1、R10 建立EBGP邻居关系,配置省略
2、R2和R4建立IBGP邻居关系,配置省略
3、R4分别和R5、R6建立EBGP邻居关系,配置省略
4、R7分别和R5、R6建立IBGP邻居关系,配置省略
5、保证所有BGP路由下一跳可达、配置省略。
6、在R1上的BGP中创建环回口100和200,分别配置IP地址:100.100.100.100/32、200.200.200.200/32,并通过network命令注入到BGP中,配置省略。
- 观察1:在R1上查看通过network注入的两条BGP路由的MED值,此时本地的MED值为:0
- 观察2:在R2上查看通过network注入的两条BGP路由的MED值,此时本地的MED值为:0,因为R1和R2是直接相邻的两个EBGP邻居,所以R1通过network注入的路由携带了MED值为0,会传递给R2,不改变MED值。
- 操作1:在R2上创建环回口101,地址:101.101.101.101/32,并注入到BGP中,配置省略。
- 观察3:分别在R4和R5上查看BGP路由信息,此时因为R2和R4同属一个AS内,所以R2注入到BGP中的路由携带MED值会传递给R4,因为R4和R5属于两个AS,R4在传递给R5的时候会剥离所传递路由的MED值。所以在R5上看到BGP路由的MED值为空。
- 思考1:如果在R4上将BGP路由101.101.101.101/32传递给R5的时候设置一个MED值,那个这个BGP路由所携带的MED值就会被R5收到,R5也会传递给本AS内所有的IBGP对等体,但是如果R9后面存在其他的AS,则R9传递BGP路由给其他AS的时候不会携带MED值。
- 操作2:在R2上引入IGP路由,把OSPF路由引入到BGP中,配置省略。通过直连学习到的路由MED值都为0,通过下一跳学习到的路由的MED值为OSPF的cost值。分别在R4和R5上观察BGP路由的MED值,此时发现,同样R4在传递给R5的时候不会携带MED值。
操作3:清除掉R2上BGP中引入的IGP路由,在R4上引入IGP路由,配置省略。此时R4在把BGP路由传递给R5的时候就会携带MED值。
操作4:清除掉上一步的配置,在R2上的BGP中修改引入路由的MED值为100,并引入OSPF,命令如下,
[~AR2]bgp 200 [~AR2-bgp]default med 100 [*AR2-bgp]import-route ospf 100 [*AR2-bgp]commit
观察4:在R1上查看BGP路由表信息,此时发现会携带R2BGP中配置的默认MED值,此时的R2配置的默认MED值只有在传递给EBGP邻居的时候生效,分别观察R4和R5。
- 操作5:在R4的BGP中引入OSPF,配置默认MED值为200,配置省略。观察R2和R6的BGP路由表信息,配置的默认MED值只对EBGP邻居生效。
- 观察5:此时R5会将收到的携带MED值的BGP路由传递给本AS内其他的IGBP对等体,分别在R6和R7上查看。当然在传出本AS后,进入其他AS的时候会剥离MED值。
- 操作6:清除掉所以引入操作和默认MED值恢复BGP初始状态,此时观察R7上BGP路由表信息
- 操作7:通过策略修改R4将BGP路由100.100.100.100/32传递给R6的时候MED值为100,让R7学习到该条目时走下一跳10.1.6.6。
ip ip-prefix 100 index 10 permit 100.100.100.100 32 # route-policy 100 permit node 1 if-match ip-prefix 100 apply cost 100 route-policy 100 permit node 1000 # bgp 200 peer 10.0.45.5 route-policy 100 export
- 观察5:在R7上观察BGP路由表信息,此时R7去往100.100.100.100/32就会走下一跳10.1.6.6,选路的原因是因为MED值
四、问题
如图:在RTC上为什么不一定会选择通往RTA的链路(MED值较小)作为主链路去往目标网段192.10.0.0/16?
- 原因:路由器收到两条以上去往同一目携带的有不同的MED值的的路由时候,要想选择MED值较小的作为主链路,必须要求这两条去往同一目的的携带不同MED值的路由来自同一个AS,必须是相邻的AS,不同的AS不计算,忽略MED值。如图所示RTC去往192.10.0.0/16路由来自不同的AS,分别是AS500和AS600,此时选路不依据路由条目的MED值进行选路。
- 缺省情况下,不允许比较来自不同AS邻居的路由信息的MED值。但是我们可以通过命令compare-different-as-med命令来允许比较来自不同自治系统的另据的路由的MED值。不过,除非能够确认不同自治系统采用了同样的IGP和路由选择方式,否则不要使用此命令。
评论区