在IGP时代我们都知道,比如说ospf,链路状态协议,在进行路由选择的时候,比的是链路的耗费,哪条链路耗费小则会更优先,如果两个链路耗费是一样的,那么就做负载均衡。
实际上就2个原则成就了ospf---最短路径优先的工作原理。
那如果在BGP中,有多条路由可以到达目的的时候,应当如何进行选择呢?哪一条路径是比较优先的呢?
来看看这11个属性的优先级,加深记忆,最好能熟练的背下来:
1 HIGHEST WEIGHT--cisco私有属性
2 HIGHEST LOCAL PRERENCE -----公认必尊well-known mandatory
3 ROUTE ORIGINATED BY THE ROUTER NEXT HOP=0.0.0.0 * -----公认必尊well-known mandatory
4 SHORTEST AS PATH * -----公认必尊well-known mandatory
5 LOWEST ORIGINATED IGP>EGP>INCOMPLETE * -----公认必尊well-known mandatory
6 LOWEST MED
7 EBGP PATH OVER IBGP PATH
8 PREFER THE PATH THROGH THE CLOSEST IGP NEIGHBOR
9 RREFER OLDEST ROUTER FOR EBGP PATH
10 PREFER THE PATH WITH THE LOWEST NEIGHBOR BGP ROUTER ID
11 BGP LOWEST ROUTER ID
12 MINIMUM CLASTER LIST LENGTH
在bgp中,除了有一大堆原理需要深刻理解以外,选路原则是重中之重。一定需要掌握(要想对bgp有所认识和故障排查,这里一定是要掌握而不是了解)选路原则。
该文档会逐一对每个属性进行验证.力求能达到让我自己在心里有数对这些概念。
Weight属性详解:
weight只具有本地意义 他不能被路由器传递只在本路由其上有效,还有他是思科的私有属性!他是一个之影响自己不影响别人属性!!而在cisco中,weight属性的优先级是最高的.在其他厂商中,从Local_pref属性开始。
BGP 的weight属性是一个本地属性。权重这个属性是在路由器本地配置的,不会传播给其他任何路由器.如果有多条前往同一个目的路由器,那么将会选择权重高地路由优先。
如果路由产生的始发路由器,对于weight属性默认会设置为32768.其他路由的权重默认为0.
首先,R1在AS 100中,R2/R3/R4在AS200中,R1到R4的loopback1和loopback2有两条路径可以走,分别是下一跳为R2和下一跳为R3.
现在要求做两个实验,分别是R1到R4的两个loopback下一跳都是R2,还有就是R1到R4的两个loopback下一跳都是R3。通过设置bgp的weight属性来进行路由的选择.
实验一,关于路由器R4的路由10.10.10.10/20.20.20.20是通过R2还有R3同时传递给R1的,需求:R1到R4的两个环回口路径要走红色的路径,下一跳是R2 172.16.1.2的路径。
在R1上配置命令:neighbor x.x.x.x weight xxx
其实这样是最简单的配置,这样就保证了所有从R2学到的路由对于R1来说的权重都是200.从R4学到的路由的权重都是100,200>100,所以要走路径:R1->R2->R4
最后在R1上面clear ip bgp *,等邻居up起来以后,再看一下路径进行验证:
对于走另外一条路径,只需要将配置稍加修改,将邻居R3的weight设置为200,将邻居R2的weight设置为100,那么就可以实现走另外一条路径了。这里就不再赘述了。
命令neighbor x.x.x.x weight xxx配置方法是种最简单的方式,但是它并不能精确地针对某条路由实现weight值的改变,实际上当将某个邻居的weight设置好以后,那么这个邻居通告过来的所有路由都会被本地路由器加上相同的weigh权重,有点一刀切的感觉。不能改变,家长制,一言堂.
而route-map恰恰弥补了这个缺点,它们的灵活性是neighbor weight所远远不及的。
下面还是相同的拓扑图,但是这次的需求是,R1到R4的10.10.10.10,走的路径是R1->R2->R4.
R2到R4的20.20.20.20,走的路径是R1->R3->R4.
完全是针对路由进行设置不同的weight权重。
如果要做到上述要求,需在R1上面做如下配置:
其实这些配置的意思就是:
在R1上从邻居172.16.1.2学到的路由10.10.10.0/24,设置为weight为65535,而其他的路由设置weight为32768.
在R1上从邻居172.16.4.2学到的路由20.20.20.0/24,设置为weight为65535,而其他的路由设置weight为32768.
那么最后在R1上面得到的结果应该是:
10.10.10.10 next-hop 172.16.1.2 weight=65535
20.20.20.20 next-hop 172.16.1.2 weight=32768
20.20.20.20 next-hop 172.16.4.2 weight=65535
10.10.10.10 next-hop 172.16.4.2 weight=32768
下面我们来验证一下是否如上面推测的结果一致:
还有一点是需要注意的,就是weight属性只是本地有效,所以在调用route-map的时候,只能用in的方向,用out方向是无效的,因为这个属性不会传递到邻居去的。
这里已经显示了route-map是多么的灵活了,如果仅仅用命令neighbor x.x.x.x wight的话,根本就做不到对路由的区分.
所以对于不同的环境还需要灵活的运用这些选路的策略。