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對等體。