BGP是一个路径矢量路由协议,它的工做就是在自主系统间交换路由信息,以便发现访问互联网某处数据的最有效路径。如何选择最佳路径进行路由?思科无边界网络为咱们揭示了BGP的14条选路原则:redis
BGP的选路原则:前提(路由的下一跳可达、关闭同步、路由没有被惩罚、前缀没有被入境路由策略拒绝),具体原则以下:网络
1:weight先比较管理权重(越大越优先),这个参数本地有效。虽然Weight属性是Cisco私有的,可是不少厂商也是内置该属性(但没法显示及修改),这样就保证了本地始发的路由是最优先的,由于本地始发路由的Weight为32768,从其余BGP Peer学习过来的路由的Weight为0.负载均衡
2:local-pref本地首选项(越大越优先),这个参数在本AS内传递。Local Preference属性只能在IBGP Peer之间传递,若是在EBGP Peer之间收到的路由的路径属性中携带了Local Preference,则会触发Notifacation报文,形成会话中断。ide
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号的位置是不一样的。router
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那么会进行比较)。ip
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对等体。