BGP詳解2

四、BGP路由決策

BGP的RIB包括三部分:

* Adj-RIBs-In:存儲了從對等體學習到的路由理新中未經處理的路由信息,這些包含在Adj-RIBs-In中的路由被認爲是可行路由。

* Loc-RIB:包含了BGP發言者對Adj-RIBs-In中的路由應用本地策略之後選定的路由

* Adj-RIBs-Out:包含了BGP發言者向對等體宣告路由。

BGP有三個部分既可以是3個不同的數據庫,也可以是利用指針來區分不同部分的單一數據庫。BGP路由決策通過對Adj-RIBs-In中的路由應用本地路由策略,且向Loc-RIB 和Adj-RIBs-Out中輸入選定或修改的路由進行路由選擇。其有三個階段。

第一階段:計算每條可行路由的優先級

第二階段:從所有可用路由中爲特定目的地選出最佳路由,並將其安裝到Loc-RIB中。

第三階段:將相應的路由加入到Adj-RIBs-Out中,以便向對等體進行宣告。

以下爲BGP選路原則的13條:

(1)weight

cisco私有的參數。本地有效。缺省條件下,本地始發的路徑具有相同的WEIGHT值(即32768),所有其他的路徑的weight值爲0。越大越優選。影響路由器的出站流量。

(2)local-preference

本地優先級,可以在本AS和大聯盟內傳遞。越大越優先。影響路由器的出站流量。默認情況下,local-preference爲100。

(3)本地起源

路由器本地始發的路徑優先。在BGP的轉發表裏顯示爲0.0.0.0。依次降低的優先級順序是:default-originate(針對每個鄰居配置)、default-informaiton-originate(針對每種地址簇配置)、network、redistribute、aggregate-address。

(4)as-path

評估as-path的長度,as-path列表最短的路徑優先。

聚合後繼承明細路由的屬性,在大括號裏面的as-path在計算長度時,只算一個。在聯盟內小括號裏面的AS號,在選路時,不計算到as-path長度裏面。

(5)起源代碼

評估路由的origin code屬性,有3個i<e&lt;*。i代表用network將IGP引入BGP的,或者是聚合等路由,e代表EGP,*代表重分佈進BGP的路由。i爲0,e爲1,*爲3。越小越優。

(6)MED

metric傳遞不能傳出AS。例外:始發路由器可以metric傳給鄰居,可以是IBGP/EBGP,但是EBGP再傳不出去。

MED相當於IGP路由的metric值,越小越優先。

(7)EBGP優於IBGP

這裏EBGP>聯盟內的EBGP&gt;IBGP。

(8)最近的IGP鄰居

這裏是指peer的更新源在我的路由表裏顯示,哪個最近哪個最優。

OSPF是否考慮O、OIA、OE1、OE2*只看cost不看O/OIA/OE。

(9)如果配置了maximum-path[ibgp]n,如果存在多條等價的路徑,會插入多條路徑。

BGP默認maximum-path=1,只能有一條最優路徑,但可以通過命令來改變,如果沒有IBGP參數,默認只能做EBGP的負載均衡。做負載均衡還有一個條件,就是上面的8條都比不出哪條最優的情況下,纔有可能出現負載均衡。

做了BGP的負載均衡後,在BGP的轉發表裏還是一個最優,但在路由表裏可以出現2個下一跳。

(10)最老的

與本端最早建立鄰居關係的peer,被優選。因爲它最穩定。但一般不考慮,會跳過這個繼續往下選。

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

啓用了bgp bestpath compare-routerid,多條路徑具有相同的router-id,因爲這些路由都是從同一臺路由器接收過來的;當前沒有最佳路徑。缺乏當前最佳路徑的例子發生在正在通告最佳路徑的鄰居失效的時候。

(11)最低的ROUTER-ID

BGP優選來自具有最低的路由器ID的BGP路由器的路由。Router-id是路由器上最高的IP地址,並且優選環回口。也可以通過bgp router-id命令靜態的設定路由器ID。如果路徑包含RR屬性,那麼在路徑選擇過程中,就用originator-id來替代路由器ID。

(12)多跳路徑的始發路由器ID相同,那麼選擇CLUSTER_LIST長度短的,因爲每經過一個RR,cluster-list會加上這個RR的router-id

如果多條路徑的始發router-id相同,那麼BGP將優選cluster-list長度最短的路徑。這種情況僅僅出現在BGP RR的環境下。

(13)BGP優選來自於最低的鄰居地址的路徑。是BGP的neighbor配置中的那個地址,如果是環回口,則看環回口地址的高低。

BGP優選來自於最低的鄰居地址的路徑。這是BGP的neighbor配置中所使用的IP地址,並且它對應於與本地路由器建立TCP連接的遠端對等體。

五、路由翻動(route flaps)和路由懲罰(route dampening)

路由翻動產生的原因有很多種比如:鏈路不穩定、路由器接口故障、ISP工程施工、管理員錯誤配置和錯誤故障檢查等等都能造成路由翻動,由於路由翻動會造成每臺路由器重新計算路由,從而消耗了大量的網絡帶寬和路由器的CPU資源。

BGP鄰居的flaping

clip_image008[4]

當R1與R2兩臺路由器運行IGP協議,並且建立EBGP的鄰居關係,用環回口建立鄰居關係。這時假如R1、R2將他們的更新源通告進了BGP,然後通過BGP傳遞給對方,這時由於從EBGP學到的路由的AD爲20,大於IGP的默認AD,這時會產生鄰居的flaping現象。

這時show ip bgp summary可以看到每經過60秒BGP table version is 1, main routing table version 1會改變一次。BGP轉發表裏變化了多少次。

用debug ip bgp、debug ip bgp update來查看BGP的flaping。

解決方法:

(1)EBGP建鄰居時不要將環回口引入BGP。

(2)Network + backdoor

BGP路由下一跳的flaping

clip_image010[4]

R1、R2、R3因爲屬於同一個AS,所以運行一個IGP,R2-R4,R3-R5之間的鏈路並沒有通告進IGP中。R1、R2、R3 IBGP對等體關係,R3在指R1時,打了neighbor 1.1.1.1 next-hop-self;R4、R2 ,R5、R3 ,R4、R5爲EBGP對等體關係,它們都拿直連接口建立鄰居關係。

這時R4將它的環回口4.4.4.0/24和R2-R4的直連網絡24.0.0.0/24引入BGP,這時在R1上就會產生路由下一跳flaping的現象。這時show ip bgp summary可以看到每經過60秒BGP table version is 1, main routing table version 1會改變一次。

解決方法:

(1)靜態路由(R1上靜態路由)

(2)在IBGP鄰居所處的IGP中宣告

(3)將與EBGP直連的網絡重分佈進IGP

(4)neighbor x.x.x.x next-hop-self(R2指R1時輸入)

路由懲罰(route dampening)由RFC2439描述,它主要由以下三個目的:

* 提供了一種機制,以減少由於不穩定路由引起的路由器處理負載

* 防止持續的路由抖動

* 增強了路由的穩定性,但不犧牲表現良好的(well-behaved)路由的收斂時間。

ROUTER BG 1

BG DAMP 15 750 2000 60 ---- 針對所有的路由。

BG DAMP ROUTE-MAP XXX

ROUTE-MAP XXX

MATIP ADD PREFIS XX

SET DAM 15 750 2000 60 ---DEFAULT

IP PREFIX XX PERMIT 1.1.1.0/24

SH IP BG 1.1.1.0

SH IP BG DAM PARA

Dampening爲每一條前綴維護了一個路由抖動的歷史記錄。Dampening算法包含以下幾個參數:

* 歷史記錄――――當一條路由flaping後,改路由就會被分配一個懲罰值,並且它的懲罰狀態被設置爲history。

* 懲罰值(penalty)――――路由每flaping一次,這個懲罰值就會增加。默認的路由flaping懲罰值爲1000。如果只有路由屬性發生了變化,那麼懲罰值爲500。這個值是硬件編碼的。

* 抑制門限(suppress limit)――――如果懲罰值超過了抑制門限,改路由將被懲罰或dampen。路由狀態將由history轉變爲damp狀態。默認值的抑制門限是2000,它可以被設置。

* 懲罰狀態(damp state)――――當路由處於懲罰狀態時,路由器在最佳路徑選擇中將不考慮這條路徑,因此也不會把這條前綴通告給它的對等體。

* 半衰期(half life)――――在一半的生命週期的時間內,路由的懲罰值將被減少,半衰期的缺省值是15分鐘。路由的懲罰值每5秒鐘減少一次。半衰期的值可以被設置。

* 重用門限(reuse limit)――――路由的懲罰值不斷的遞減。當懲罰值降到重用門限以下時,改路由將不再被抑制。缺省的重用門限爲750。路由器每10秒鐘檢查一次那些不需要被抑制的前綴。重用門限時可以被配置的。當懲罰值達到了重用門限的一半時,這條前綴的歷史記錄(history)將被清除,以便更有效率的使用內存。

* 最大抑制門限/最大抑制時間――――如果路由在短時間內表現出極端的不穩定性,然後又穩定下來,那麼累計的懲罰值可能會導致這條路由在過長的時間裏一直處於懲罰狀態。這就是設置最大抑制門限的基本目的。如果路由表現出連續的不穩定性,那麼懲罰值就停留在它的上限上,使得路由保持在懲罰狀態。最大抑制門限是用公式計算出來的。最大抑制時間爲一條路由停留在懲罰狀態的最長時間。默認爲60分鐘(半衰期的4倍)可以配置。

n 最大抑制門限=重用門限×2(最大抑制時間÷半衰期)

n 由於最大抑制門限爲公式算出來的,所以有可能最大抑制門限≤抑制門限,當這種情況發生時,dampening的設置是沒有效果的。如重用門限=750,抑制門限=3000,半衰期=30分鐘,最大抑制時間=60分鐘。按照這樣的配置,算出來的最大抑制門限爲3000,

n 與抑制門限一樣,因爲必須超過抑制門限,才能對路由進行dampening,所以這時dampening的設置沒有效果。

clip_image012[4]

BGP的dampening僅僅影響EBGP的路由。Dampening是基於每條路徑的路由而操作的。如果一條前綴具有兩條路徑,並且其中一條被懲罰了,那麼另一條前綴仍然是可用的,可以通告給BGP對等體。

命令:

bgp dampening [route-map XX] [{Half-life reuse-limit suppress-limit Maximum-time }]

如果掛了route-map,那麼就在route-map裏面匹配特定EBGP路由,來設置dampening值。

檢查命令:

show ip protocol

sh ip bgp dampening *

dampened-paths 只顯示(清除)被抑制的路由。

flap-statistics 顯示(清除)所有出現擺動的路由以及該路由出現擺動的次數。

parameters Display details of configured dampening parameters

show ip bgp neighbors 1.1.1.1 dampened-routes

show ip bgp neighbors 1.1.1.1 flap-statistics

六、路由反射器

由於IBGP的水平分割問題,所以IBGP需要Full Mesh。由於整個IBGP full mesh的話,需要建的session數爲n*(n-1)/2。不具有擴展性。所以產生兩種解決方法,路由反射器是其中一種,而另一種則是聯邦。

路由反射器是被配置爲允許它把通過IBGP所獲悉的路由通告到其他IBGP對等體的路由器,路由器反射器與其他路由器有部分IBGP對等關係,這些路由器被稱爲客戶。客戶間的對等是不需要的,因爲路由反射器將在客戶間傳遞通告。 如下圖所示。

clip_image014[4]

其優點:減少AS內BGP鄰居關係的數量,從而減少了TCP連接數;在AS內可以有多個路由反射器,即是爲了冗餘也是爲了分成組,以進一步減少所需IBGP會話的數量。路由反射器的路由器可以與非路由反射器的路由器共存,所以配置更簡單。

RFC1966中定義了3條RR用來決定要宣告哪條路由的規則,具體使用時取決於路由是如何學習到的。

* 如果路由學習自非客戶IBGP對等體,則僅反射給客戶路由器。

* 如果路由學習自某客戶,則反射給所有非客戶和客戶路由器(發起該路由的客戶除外)。

* 如果路由學習自EBGP對等體,則反射給所有非客戶和客戶路由器

路由反射器的客戶並不知道自己是客戶。客戶和非客戶經過路由反射器反射的路由更新將會帶上cluster-list和originator,可用於IBGP防環。Cluster-id默認爲路由反射器自己的router-id,可以通過命令bgp cluster-id 1.1.1.1來修改,cluster-id爲32位的值,可以寫成點分十進制,也可以寫成十進制數;originator爲IBGP內起源路由器的router-id。路由反射器是IBGP的特性,出了IBGP後,路由反射器所有的特性消失(即路由攜帶的cluster-list和originator全部消失)。

neighbor 1.1.1.1 route-reflector-client

可以通過這條命令來將IBGP的peer 1.1.1.1變爲自己的客戶。建議對每個IBGP鄰居都打上。

當路由反射器的客戶full mesh時,可以用no bgp client-to-client reflection禁止客戶到客戶的路由反射。可以減少路由更新。

如下圖爲路由反射器的基本配置。

clip_image016[4]

clip_image018[4]

七、BGP聯邦

由於IBGP的水平分割問題,所以IBGP需要full mesh。由於整個IBGP full mesh的話,需要建的session數爲n*(n-1)/2。不具有擴展性。所以產生兩種解決方法,聯邦是其中一種。

聯邦既有EBGP的特性,又有IBGP的特性。

聯盟是另一種控制大量IBGP對等體的方法,它就是一個被細分爲一組子自治系統(稱爲成員自治系統)的AS。如下圖所示。

clip_image020[4]

聯盟增加了兩種類型的AS_PATH屬性

AS_CONFED_SEQUENCE:一個去往特定目的地所經路徑上的有序AS號列表,其用法與AS_SEQUENCE完全一樣,區別在於該列表中的AS號屬於本地聯盟中的自治系統。

AS_CONFED_SET:一個去往特定目的地所經路徑上的無序AS號列表,其用法與AS_SET完全一樣,區別在於該列表中的AS號屬於本地聯盟中的自治系統。

由於AS_PATH發生被用於成員自治系統之間,因而保留了環路預防功能。將Update消息發送給聯盟之外的對等體時,將從AS_PATH屬性中剝離AS_CONFED_SEQUENCE和AS_CONFED_SET信息,而將聯盟ID附加到AS_PATH中。

Local_preference和MED可以在聯邦內傳遞。聯盟內的小AS號,在as-path裏顯示在小括號裏,在as-path計算長度時,不被考慮。下一跳在聯邦內傳遞不會改變。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章