天天看點

《BGP設計與實作》一2.5 路徑決策過程

本節書摘來自異步社群《bgp設計與實作》一書中的第2章,第2.5節,作者【美】randy zhang , micah bartell,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

bgp設計與實作

bgp經過一個複雜的算法來決定最佳路徑并更新bgp rib和ip rib。正如前面所提到的,bgp是一個政策工具。它的重要性通過bgp利用屬性和其他參數來選擇最佳路徑的過程最能說明。

當存在多條到達特定目的地的有效的bgp路徑時,ios将會根據收到它們的相反順序列出這些路徑。也就是說,最新的路徑将被列在最開始,而最老的路徑則被列在末端。在指令show ip bgp的輸出中,最新的路徑被列在最上面,而最老的路徑被列在最下面。對于給定的一個目的地,為了選擇最佳路徑,bgp通常使用順序比較的方法。它指定第一條路徑(最新的路徑)作為目前的最佳路徑,然後比較目前的最佳路徑和清單中的下一條路徑,直到比較到有效路徑清單的末端。例如,bgp順序接收到3條路徑——1、2和3——bgp首先比較路徑3(最後接收到的)和路徑2。接着,得出的最佳路徑再與路徑1(最早接收到的)相比較。這樣,第二次比較得出的最佳路徑就成為到達目的地的最終的最佳路徑。

如果一條路徑滿足下列任一條件,那麼它在最佳路徑選擇過程中就不是有效的候選者:

路徑的下一跳不可達;

路徑未同步,但同步功能被啟用了;

路徑被入境bgp政策所拒絕,并且路由器配置了入境溫和重置(soft reset);

路由被懲罰(dampened)。

目前,cisco ios軟體的路徑選擇有13步(www.cisco.com/warp/customer/459/25.shtml)。每一步都會被順序評估,直到找到一條優選路徑為止:

1.weight是首先考慮的參數。weight值最高的路徑優先。weight是cisco專有的參數,并且對配置這個參數的路由器來說是本地有效的。預設條件下,本地始發的路徑具有相同的weight值(即32768),所有其他的路徑的weight值為0。

2.local_pref值最高的路徑優先。cisco ios軟體中,local_pref的預設值為100。

3.基于始發地(origination)評估路由,路由器本地始發的路徑優先。依次降低的優先級順序是:default-originate(針對每個鄰居配置)、default-information-originate(針對每種位址簇配置)、network、redistribute、aggregate-address。

4.評估as_path的長度,as_path清單最短的路徑優先。但是,可以通過配置bgp bestpath as-path ignore(隐藏的指令)來跳過這一步。

在評估路徑長度時,記住以下要點:

一個as_set被計數為1,而不管“set”中包含多少個自治系統;

as_confed_sequence不包括在as_path長度中。

5.這一步評估路由的origin屬性,origin類型最低的路徑優先。igp低于egp,egp低于incomplete。

6.評估med。med值最小的路徑勝出。預設條件下,隻有在兩條路徑的第一個(鄰近的)as相同的情況下才會進行比較操作;任何聯盟子自治系統都被忽略。換句話說,對于多條路徑,隻有在as_sequence中的第一個as相同的情況下,才會比較med;任何打頭的as_confed_sequence都将被忽略。如果激活了bgp always-compare-med,那麼對于所有路徑都将比較med,而不考慮它們是否來自于同一個as。如果你使用了這個選項,就應該在整個as中都這麼做,以避免路由選擇環路。

注意以下med的更改選項:

note09186a0080094925.shtm1)。如果存在med,那麼這是一種建議的配置。

如果激活了bgp bestpath med-confed,對于所有隻包含as_confed_sequence的路徑來說才比較med,也就是說,這些路徑是始發于本地聯盟的。注意,如果一條路徑包含了任何外部的自治系統,那麼這條路徑就不參與比較,而它的med在聯盟内部被傳遞時不被改變。

如果接收到的路徑沒有med,就把它的度量指定為0,除非激活了bgp bestpath missing- as-worst,在這種情況下,這些路徑的路徑成本被指定為4 294 967 294(最大值)。這主要是考慮到對舊标準的相容性。

7.外部bgp(ebgp)路徑優于内部bgp(ibgp)路徑。包含as_confed_sequence的路徑對于聯盟來說是本地的,是以被看作是内部路徑。在路徑選擇過程中,聯盟外部(confederation external)路徑和聯盟内部(confederation internal)路徑沒有差别。

8.bgp優先選擇到bgp下一跳的igp度量最低的路徑。這一步使得本地拓撲資訊被考慮進去。

9.如果配置了maximum-paths [ibgp]n,這裡的n在2~6之間,并且存在多條等價成本的路徑(對于多條路徑,以上1~6步的比較結果都相同,而且as_path也相同),那麼bgp會在ip路由選擇表中插入最多n條接收到的路徑。這就激活了bgp多路徑負載分擔(multipath load sharing)特性。如果沒有使用可選關鍵字ibgp,那麼多路徑特性就僅僅應用于ebgp路徑,或來自于同一個鄰居as或子as的聯盟外部路徑。當不激活這一選項時,它的預設值為1。

10.當兩條路徑都是外部路徑時,bgp将優先選擇最先收到的路徑(最老的路徑)。這一步能最小化路由抖動,因為新路徑即使在基于另外的決策準則(在第11、12和13步中講述)下是優先的路徑,也不會替代老路徑。

如果以下任一條件為真,這一步将會被忽略:

啟用了bgp bestpath compare-routerid指令;

多條路徑具有相同的路由器id,因為這些路由都是從同一台路由器接收過來的;

目前沒有最佳路徑。缺乏目前最佳路徑的例子發生在正在通告最佳路徑的鄰居失效的時候。

11.bgp優先選擇來自于具有最低的路由器id的bgp路由器的路由。路由器id是路由器上的最高ip位址,并且優選環回位址。也可以通過bgp router-id指令靜态地設定路由器id。如果路徑包含rr屬性,那麼在路徑選擇過程中,就用originator_id來替代路由器id。

12.如果多條路徑的始發路由器id或路由器id相同,那麼bgp将優選cluster_list長度最短的路徑。這種情況僅僅出現在bgp rr的環境中。當一個客戶與其他簇中的rr或客戶形成對等關系時,該客戶可以使用cluster_list長度來選擇最佳路徑。為了采用這一步,客戶必須能感覺rr特定的bgp屬性。

13.bgp優選來自于最低的鄰居位址的路徑。這是bgp的neighbor配置中所使用的ip位址,并且它對應于與本地路由器建立tcp連接配接的遠端對等體。

繼續閱讀