BGP是一个路径矢量路由协议,它的工作就是在自主系统间交换路由信息,以便发现访问互联网某处数据的最有效路径。如何选择最佳路径进行路由?思科无边界网络为我们揭示了BGP的14条选路原则:
BGP的选路原则:前提(路由的下一跳可达、关闭同步、路由没有被惩罚、前缀没有被入境路由策略拒绝),具体原则如下:
1:weight先比较管理权重(越大越优先),这个参数本地有效。虽然Weight属性是Cisco私有的,但是很多厂商也是内置该属性(但无法显示及修改),这样就保证了本地始发的路由是最优先的,因为本地始发路由的Weight为32768,从其他BGP Peer学习过来的路由的Weight为0.
2:local-pref本地首选项(越大越优先),这个参数在本AS内传递。Local Preference属性只能在IBGP Peer之间传递,如果在EBGP Peer之间收到的路由的路径属性中携带了Local Preference,则会触发Notifacation报文,造成会话中断。
3:路由器本地始发的路径优先。本地始发的路径特点是next-hop为0.0.0.0,weight为32768。可以使用不同的方式比如network或redistribute等,那么这些方式之间是存在优先顺序的原则:network>redistribute>aggregate,但该原则是不会作为BGP路由选路策略的。
4:具有最短AS-path路径(就是AS-PATH中AS最少的优先)的路由优先。但是可以配置bgp bestpath as-path ignore来忽略这一步。注意:在做聚合路由时,使用as-set后产生的AS-Path列表中的{}里的AS号长度只算一个AS号的长度;而在联盟内的AS-Path列表中的()的AS号长度不做计算依据!不同方向的route-map对于插入的AS号的位置是不同的。
5:比较origin属性,具有最低origin源码。三种不同的Origin属性的优先顺序:IGP>EGP>incomplete,Origin属性会一直在BGP路由中携带。很少使用设置Origin属性作为BGP路由选路策略。
6:评估MED(MED值最小的路径胜出)。默认情况下,只比较来自同一AS的BGP路由的MED值(就是AS-sequence中第一个AS相同才比较)。命令bgp always-compare-med对于所有路径都比较MED,不考虑他们是否来自同一个AS。如果使用了这个选项要在AS内都这么配置(避免路由选择环路)。(任何开头为as-confed-sequence的都被忽略比较MED值,如果配置了bgp always-compare-med那么会进行比较)。
MED备注:Cisco建议在所有新网络部署中均启用bgp deterministic-med命令。对于现有的网络,必须同时在所有路由器上部署此命令,或者逐步部署此命令,但要注意避免可能出现的内部 BGP (iBGP) 路由环路。当BGP收到多个通往特定目标的路由时,它会按收到路由的相反顺序列出它们(从最新到最旧).然后,BGP 按以下顺序成对比较路由:从最新的条目开始,并向最旧的条目移动(从列表顶部开始,向下移动)。 例如,将 entry1 与 entry2 进行比较。 随后,将这两个中的较好者与 entry3 进行比较,依此类推。当启用bgp deterministic-med命令时,会打乱这个顺序将来自同一个自治系统的路由分组到一起,然后比较每一组的最佳条目。Show ip bgp 可以看出效果。
如果激活了bgp bestpath med confed命令只有AS-Confed-sequence的路径才比较MED值。如果一条路径包含了任何外部自制系统,那么就不进行比较。
7:EBGP优于IBGP;EBGP优于联邦EBGP(联邦eBGP和联邦iBGP不具有可比性,不比较。因为联邦ebgp和联邦ibgp都被看做内部路径没有差别)。如果都是EBGP对等体收到的条目或者都是从IBGP对等体收到的条目或者分别从联邦EBGP和联邦IBGP对等体收到的条目则继续向下一步进行。
8:BGP优先选择到下一跳IGP度量值最低的路径。(不管都是EBGPpeer还是都是IBGPpeer还是分别是联邦EBGP和联邦IBGP都比较这一步)
9:当前面的8条选路原则都无法优选出最优路由时,并且在BGP进程下面配置了maximum-paths [ibgp] <1-16>,那么将执行等价负载均衡,如果没有ibgp关键字,那么只会对EBGP对等体收到的路由执行等价负载均衡,如果不配置maximum-paths那么将进行到下一条选路原则。
不管是IBGP还是EBGP受到的路由要实现负载均衡必须as-path完全相同,包含as-set的和联邦子AS的也必须完全相同,也就是()和{}里面也要完全相同,如果有联邦EBGP对等体和联邦IBGP对等体收到的路由他们两个之间不可以负载均衡。
负载均衡show ip bgp x.x.x.x明细才可以看到,有multipath标记的都会装入路由表(show ip route)。
10:当多条都是从EBGP收到的路由时(外部路径时,联邦EBGP对等体不算,因为是内部路径),BGP优先使用最先收到的路由条目(最老的路径)。这能最小化路由抖动。如果BGP进程下使用bgp bestpath compare-routerid命令,则忽略本原则,跳到第11条选路原则;当多条路由具有相同的router-id时也忽略本原则,当没有当前最佳路由时,也忽略本原则,例如提供最佳路径的邻居down掉。(仅ebgp路由)
11:BGP优选具有最低的router-id的路由。如果路径包含RR属性,那么在路径选择过程中就用originator-id来代替router-id进行比较(就是originator-id之间进行比较)。
12:如果orginator-id相同,那么BGP优选cluster-list长度最短的路径。这种情况只出现在RR的环境中。
13:首选来自于最低邻居地址(neighbor后指定的邻居地址)的路径,越小越优先。这个地址是在BGP对等体上配置并使用的地址,这个地址是本地对等体路由器在其上配置TCP邻居并与远端对等体建立连接时采用的地址。
14:BGP自定义路径选择过程:BGP Cost Community(BGP成本团体)的扩展团体属性提供了自定义最佳路径选择过程的方式。这个自动路径选择过程插入在BGP13条选路原则的第8条之后(优先到下一跳IGP-cost最低的路径),首选成本值最低的路径。但是可以使用bgp bestpath cost-community ignore来忽略这一步操作,配置时要在AS内或联邦内统一配置,这样可以避免出现路由选择环路。
成本团体设置子句使用cost communityID(成本团体ID编号0到255)和cost number(成本编号值0到4,294,967,295)进行了配置。先比cost number后比较cost communityID,都是越低越优先.对于未用成本编号值专门配置的路径,将指定默认成本编号值为2,147,483,647。 此值是0和4,294,967,295之间的中央点。这个属性传递给邻居时要有send-community命令.
这个团体属性为非传递的扩展团体属性。会传递给IBGP和联邦IBGP和EBGP对等体,不会传递给EBGP对等体。