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
鄰居並與遠端對等體建立連接時采用的地址。