在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有所认识和故障排查,这里一定是要掌握而不是了解)选路原则。
该文档会逐一对每个属性进行验证.力求能达到让我自己在心里有数对这些概念。
Local_Pref属性详解:
Local_pref用来通告路由的优先程度,仅仅在IBGP对等体之间交换,不通告给其他的AS.也就是说只在本AS内生效.当BGP的路由器通过不同的IBGP对等体得到目的的地址相同但下一跳不同的多条路由的时候(也就是说不同的IBGP邻居通告过来相同的目的路由,存在多跳的情况下),在cisco中除了weight属性之后,就是Local_Pref属性最优先了。Local_Pref属性值和weight一样,越高越优先。
从应用场合上线来看看weight和Local_Pref的区别:
Local_Pref和weight也有所不同,weight使用的情况是一个ASBR分别连接两个不同AS的ASBR.本地路由器作为本AS的唯一出口,当存在多条路径的时候在本地设置优先级weight权重,权重大得优先。weight只是在本地路由器上有效。
而Local_pref只是当一个IBGP路由器从另外两个IBGP邻居那里获得了有相同目的网段的路由以后,如果没有设置weight的话(默认在初始路由器的weight为32768,而在其他任何路由器的weight都为0),那么这个时候就看这两条路由送过来时带的Local_Pref的属性值,哪个大,那么哪个路由优先,从而写到路由表中作为最优路由,还有一个次优路由在数据库中,等主用出现问题的时候,次优路由生效。
Local_Pref总结:
只用于IBGP邻居之间,只是AS内部。
默认100.可选范围是:0-4294967295.
show ip bgp. 可以看得到LocPrf.
只在IBGP peer间进行通告.告知如何离开本地的AS.是走A离开好呢,还是走B离开好呢?
这个值越大越高.越高越优先.BGP不是根据带宽来的,而是根据策略来的。
这是一个出站策略。
还有一点需要提出,标准访问列表,既可以对路由层面的前缀进行匹配,也可以匹配数据转发层面的.
而扩展访问列表只能匹配上数据转发层面的数据包,要想对路由层面的路由前缀进行匹配需要用标准访问控制列表。
还有在博客http://361531.blog.51cto.com/351531/701272中,曾经提到,weight是一个入站策略,所以在配置的时候如是是用route-map的话应该用入方向:
neigbor x.x.x.x route-map xxx in
这里用route-map的话,一定是对IBGP的out方向应用才会生效。因为Local_pref就是一个出站策略。
下面用实验来验证一下LP的原理,上图:
R2在AS 65520中,R1/R3/R4在AS 65500中,R3会通过R1还有R4这两个ASBR同时学到双份的50.50.50.50/100.100.100.100/150.150.150.150/200.200.200.200,最后要达到的效果就是,在R3上面,从R1学到的50.50.50.50和100.100.100.100的Local_pref=300.而在R3上面从R4学到的150.150.150.150和200.200.200.200的LP=300.那么最后达到的效果就是,50和100走的路径是R2-R1-R3, 150和200走的路径是R2-R4-R3.
R1的配置:
R4上的配置为:
最后在R3上面我们可以验证一下是否四条路由走两条路径,并且需要核查Local_pref.
这里我们已经可以看到通过R1和R4通告过来的路由都分别打上了不同的Local_pref值,越大越优先。
所以路由两条的下一跳是R1,还有两条的下一跳是R4.
最后我们在R3上面进行一下traceroute,最后验证一下路由的走向: