首页 > 技术文章 > BGP选路原则

chia 2017-03-30 09:28 原文

BGP的选路原则:前提(路由的下一跳可达、关闭同步、路由没有被惩罚、前缀没有被入境路由策略拒绝
 
1:比较cost pre-bestpath extcommunity属性(越小越优先)。带有cost pre-bestpath属性的优于不带有该属性的路由,如果多条路由都带有该属性,那么id小的优先,如果id值相同,那么value值小的优先。该属性只能在IBGP Peer之间传递。
 
2:weight先比较管理权重(越大越优先),这个参数本地有效。虽然Weight属性是Cisco私有的,但是很多厂商也是内置该属性(但无法显示及修改),这样就保证了本地始发的路由是最优先的,因为本地始发路由的Weight为32768,从其他BGP Peer学习过来的路由的Weight为0.
 
3:local-pref本地首选项(越大越优先),这个参数在本AS内传递。Local Preference属性只能在IBGP Peer之间传递,如果在EBGP Peer之间收到的路由的路径属性中携带了Local Preference,则会触发Notifacation报文,造成会话中断。没有LOCAL_PREF的路径被认为具有使用bgp默认local-preference命令设置的值,如果没有命令配置则默认值为100。
 
4:路由器本地始发的路径优先。本地始发的路径特点是next-hop为0.0.0.0,weight为32768。可以使用不同的方式比如network或redistribute等,那么这些方式之间是存在优先顺序的原则:network>redistribute>aggregate,但该原则是不会作为BGP路由选路策略的。
 
5:有AIGP属性的路由优于没有该属性的路由,如果都携带AIGP属性那么该值小的优先
 
6:具有最短AS-path路径(就是AS-PATH中AS最少的优先)的路由优先。但是可以配置bgp bestpath as-path ignore来忽略这一步。注意:在做聚合路由时,使用as-set后产生的AS-Path列表中的{}里的AS号长度只算一个AS号的长度而在联盟内的AS-Path列表中的()的AS号长度不做计算依据(AS_CONFED_SEQUENCE 和 AS_CONFED_SET)!不同方向的route-map对于插入的AS号的位置是不同的。
 
7:比较origin属性,具有最低origin源码。三种不同的Origin属性的优先顺序:IGP>EGP>incomplete,Origin属性会一直在BGP路由中携带。很少使用设置Origin属性作为BGP路由选路策略。
 
8:评估MED(MED值最小的路径胜出)。默认情况下,只比较来自同一AS的BGP路由的MED值【就是AS-sequence中第一个AS相同才比较,任何联盟子自治系统都被忽略(换句话说,任何前面的 AS_CONFED_SEQUENCE 都会被忽略。)
  命令bgp always-compare-med对于所有路径都比较MED,不考虑他们是否来自同一个AS。如果使用了这个选项要在AS内都这么配置(避免路由选择环路)。(任何开头为as-confed-sequence的都被忽略比较MED值,如果配置了bgp always-compare-med那么会进行比较(比较所有仅包含 AS_CONFED_SEQUENCE 的路径的 MED。))。
       如果接收的路由没有MED(没有MED属性而并非收到的MED为0),那么就把它的MED视为0,如果打上bgp bestpath med missing-as-worst那么就把它度量指定为4294967294(最大值),主要是用来考虑对旧标准的兼容。
       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值。如果一条路径包含了任何外部自制系统,那么就不进行比较。
 
9:EBGP优于IBGP;EBGP优于联邦EBGP(联邦eBGP和联邦iBGP不具有可比性,不比较。因为联邦ebgp和联邦ibgp都被看做内部路径没有差别)。如果都是EBGP对等体收到的条目或者都是从IBGP对等体收到的条目或者分别从联邦EBGP和联邦IBGP对等体收到的条目则继续向下一步进行。(包含 AS_CONFED_SEQUENCE 和 AS_CONFED_SET 的路径对于联盟来说是本地的。 因此,这些路径被视为内部路径。 )
 
10:BGP优先选择到下一跳IGP度量值最低的路径。(不管都是EBGPpeer还是都是IBGPpeer还是分别是联邦EBGP和联邦IBGP都比较这一步)
 
11:比较cost igp extcommunity属性(越小越优先带有cost igp属性的优于不带有该属性的路由,如果多条路由都带有该属性,那么id小的优先,如果id值相同,那么value值小的优先。该属性只能在IBGP Peer之间传递。
 
12:当前面的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)。
 
13:当多条都是从EBGP收到的路由时(外部路径时,联邦EBGP对等体不算,因为是内部路径),BGP优先使用最先收到的路由条目(最老的路径,在BGP表中顺序从下到上=从老到新)。这能最小化路由抖动,因为较新的路径不会取代较旧的路径,即使较新的路径将是基于下一个决策标准的首选路径。(仅ebgp路由)
如果有如下任何一个条件,则跳过该步骤:
  • 如果BGP进程下使用bgp bestpath compare-routerid命令,则忽略本原则,跳到第12条选路原则;
  • 当多条路由具有相同的router-id时也忽略本原则;
  • 当前没有当前最佳路由时,也忽略本原则,例如提供最佳路径的邻居down掉
 
14:BGP优选具有最低的router-id的路由。如果路径包含RR属性,那么在路径选择过程中就用originator-id来取代router-id进行比较(就是originator-id之间进行比较 或 originator与router-id比较)。
 
15:如果router-id或orginator-id相同,那么BGP优选cluster-list长度最短的路径,如果没有cluster-list那么长度为0,也就是没有cluster-list的路由优先。这种情况只出现在RR的环境中。(IOS-XR中15优于14)
 
16:首选来自于最低邻居地址(neighbor后指定的邻居地址)的路径,越小越优先。这个地址是在BGP对等体上配置并使用的地址,这个地址是本地对等体路由器在其上配置TCP邻居并与远端对等体建立连接时采用的地址。
 
 

推荐阅读