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
(没有
MED
属性而并非收到的
MED
为
0
),那么
就把它的度量指定为
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
值。如果一条路径包含了任何外部自制系统,那么就不进行比较。
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
邻居并与远端对等体建立连接时采用的地址。
