首先我们先要清楚什么样的路径不能参与比较,也就是无效的,如果它满足下面这些任意一个条件,那它就是无效的:
1 路径的下一跳不可达。
2 路径未同步,但同步功能被启用了。
3 路径被入境BGP策略所拒绝,并且路由器配置了入境温和重置(soft reset )。当配置了soft reset后,即使被BGP策略拒绝的路由也会保存在RIB中。
4 路由被惩罚(dampened)
只要一条路径不符合上面那些条件,那它就是有效的,就可以被列入最佳路径的候选者中。下面我们就来说明BGP最佳路径选择的步骤。
注意写ROUTE-MAP的时候一定要另外写一条空的条目 防止deny any的出现
―――――――――――――――――――――――――――――――――――――――
当前,cisco路径选择有13步。按照顺序每一步都依次进行评估直到找到一条最佳路径为止。
1 WEIGHT值最高的路径优先。WEIGHT是CISCO专有的参数,且只对配置该参数的本地路由器有效,不能传递。缺省条件下,本地始发的路径具有相同的WEIGHT值(32768),所有其它的路径的WEIGHT值为0。
想让某条路由在自己的路由表中优先,妄图直接修改weight的话 就在neighbour 加入一条neighbour xxxx weight 100 那么这个邻居传过来的路由直接改了,这样就可以直接保证它的优先级。
2 LOCAL-PREF值(本地优先级)。CISCO IOS中,LOCAL-PREF缺省值为100。该属性只能在本AS内传递。
事实上如果你要影响一条路由本地路由器的选路,那么用route-map做in的策略,如果用out方向的策略,那么会影响本AS内部这个路由的local-prefence,导致做策略的那个路由器会成为优化的路径。
3 基于始发地(origination)评估路由,路由器本地始发的路径优先。依次降低的优先级顺序是:default-originate(针对每个邻居配置), default-information-originate(针对每种地址簇配置),network , redistribute , aggregate-address 。
4 评估AS-PATH的长度,AS-PATH列表最短的路径优先。但可以通过配置 bgp bestpath as-path ignore (隐藏命令)来忽略这一步。
5 评估路由的origin属性,origin属性值最低的路由优先。IGP:origin值=0;
EGP:origin值=1;INCOMPLETE:origin值=3
6 评估MED。MED值最小的路径胜出。该属性可以传递出AS。缺省条件下,只有在两条路径的第一个AS相同的情况下才会进行比较。如果配置了:bgp always-compare-med,那么对于所有路径都将比较MED,而不考虑它们是否来自于同一个AS。
比较一下MED跟LOCAL-PRE属性:
local属性影响的时候多个路径到达同一个目的,在目的上做的选路:
例如上图192.168.4.0在R1-R2上优化后有两条路径到达R3,这个时候可以再R3上做in方向的路由,影响R3的选路。
如果是MED属性有些不同的,MED是到达邻居的AS有两个路径的时候,告诉邻居AS如何选择路径,它影响的是邻居AS内的路径选择:
例如上面R2-R3优化了192.168.1.0/24这条路由后可以通过OUT方向的route-map来告诉R1如何到达AS23内这个路由。这个属性只是影响相邻的AS不能传递.并且注意MED值是越小越优化。
此外,这种情况只是限于R2跟R3是同一个AS的情况,如果R2,R3分别属于不同的AS,那么你想在R1上选择的话需要在R1的BGP进程下敲入:always-compare-med 才可以!
7 EBGP路径优先于IBGP路径。
8 BGP优先选择到BGP下一跳的IGP度量最低的路径。
9 如果配置了maximum-paths[ibgp]n, n在2-6之间,并且存在多条等价成本的路径,那么BGP会在IP路由选择表中插入最多n条接收到的路径。这就激活了BGP多路径负载分担特性。如果没有使用可选关键字ibgp,则多路径特性就仅仅应用于ebgp路径。当不激活这一选项时,它的缺省值为1。
10 当两条路径都是外部路径时,BGP将优先选择最先收到的路径(最老的路径)。
11 BGP优先选择来自于最低的路由器ID的BGP路由器的路由。
12 如果多条路径的始发路由器ID或路由器ID相同,那么BGP将优选CLUSTER-LIST长度最短的路径。
13 BGP优选来自于最低的邻居地址的路径。