IP骨幹網中的BGP路由協議擴展性詳細介紹

  BGP是目前應用在因特網上的IP網絡互聯協議,爲運營商之間的互聯提供了穩定而安全的路由協議,具有豐富的路由控制機制。

  爲了更好地控制路由策略,當前大部分的運營商均將BGP部署到骨幹路由器。隨着網絡的不斷擴展、路由器數目的增多以及路由信息條目的激增,解決BGP的擴展性問題變得越來越重要。目前BGP的擴展性面臨如下幾個問題。

  (1)I-BGP的Full-Mesh問題

  BGP路由協議分爲I-BGP和E-BGP兩個部分。I-BGP用於自治域內的路由器之間,E-BGP用於自治域間的路由器之間。爲了防止產生環迴路由,BGP協議要求一個路由器通過I-BGP學到的路由,不再向其他I-BGP鄰居廣播,所以一個自治域內所有參加I-BGP協議的路由器都要與其他路由器建立會話,從而保證路由信息能夠正確地廣播到每一個路由器。依照這個原則,一個自治域內總的I-BGP會話數爲N×(N-1)/2(N爲運行I-BGP的路由器數),當N不斷增大時,這個數字會大得驚人:如100臺路由器,則會話數爲4950。這對網絡設備而言是個非常大的負擔,而且還將使網絡的管理與配置變得異常複雜。而骨幹網通常由大量的運行I-BGP的路由器組成,因此,這個問題是否能夠解決,直接影響到網絡規模的大小。

  (2)更改路由策略時路由振盪的問題

  BGP屬於增量更新的路由協議,當有新的路由要發佈時,路由器會向鄰居發送Update信息,而如果要刪除某條路由時,就會發送Withdraw信息。BGP路由的Flap的定義是:當一條路由在被收回(Withdraw)後,又被廣播(Update)出來,視爲一次Flap。由於任何一條路由的收回和更新都會導致一臺路由器整個路由表重新計算,因此當Flap的情況比較多時,對路由器設備的負載將產生巨大的壓力。根據筆者在實際工作中的經驗,一般情況下,一臺高端路由器在計算BGP路由的時候,CPU的負載基本上在80%~90%左右,有時甚至達到100%,佔用了幾乎所有的CPU資源。雖然目前大部分的高端路由器都將路由計算的模塊與轉發模塊分佈在不同的硬件上,來減少主CPU忙導致的路由器性能下降的問題,但是路由表的頻繁變化和更新,對整個設備的運行還是有一定的影響的,而且這樣的計算會隨着路由的收回或廣播,繼續向自治域內部擴展,使內部的路由器產生同樣的問題。

  (3)其他需要考慮的問題

  除了上面的兩個問題會導致對路由器資源過量消耗之外,還有其他的一些因素,如路由的數目、BGP路由表的大小和路由計算的方式等,同樣也會影響路由器的性能。

  另外,網絡越大,路由條目越多,配置和管理的工作也就越複雜,這就需要在網絡設計的時候儘量簡化配置,降低管理人員的工作強度,避免人爲原因造成故障。

  2 如何解決制約BGP擴展性的問題

  針對以上問題,介紹一些相關的解決方法。

  (1)解決I-BGP會話數瓶頸的方法

  上面提到的I-BGP的會話數過多的問題,可以採取兩種辦法來解決:

  1)聯盟的方法(Confederations)

  聯盟的工作原理是:將原來一個自治域的網絡分成多個子自治域,通過Confederationsid將原AS號配置到每個路由器上。這樣有兩個好處:一是可以保留原有的I-BGP屬性,包括LocalPreference、MED和NEXT_HOP;二是能在Confederations的功能中自動實現,無需管理員在網絡的出口處配置過濾內部AS號信息的操作。

  2)路由反射器(Route-Reflector)

  採用路由反射器是目前應用最廣泛的方法,較之前面聯盟的方法,具有更好的擴展性。路由反射器的工作原理是:將一個自治域內的路由器分成幾個Cluster,每個Cluster由Reflector和Client組成。Reflector之間形成FullMesh,運行常規的I-BGP;Client只與Reflector運行I-BGP,對於Client來說,Reflector只是普通的鄰居而已,Reflector則扮演了路由集散地的角色,將從其他Reflector學到的I-BGP路由轉發給Client,同時,將從Client學到的I-BGP路由轉發給Cluster內的其他Clients和Cluster外的其他Reflector,再借由Reflectors廣播到其所在的Cluster。在實際的網絡中,爲了提高冗餘度,通常一個Client與多個Reflector建立鄰居關係,而且不侷限於Client所在Cluster的Reflector。

  由此可見,Client上的I-BGP會話數一般爲1~2個,與聯盟的方法相比,只要Reflector的性能足夠高,Cluster就可以做得很大,而Client的負載不會隨Cluster的變化有太大的變化。對於前一種方法,由於一個子自治域的所有路由器還是要做到FullMesh,所以最低性能的路由器決定了一個子自治域的大小;而路由反射器法則通常是一個或多個最高性能的路由器決定Cluster的大小,因此,具有更好的網絡擴展性能。

  另外,一個Reflector也可以成爲另外一個Reflector的Client,形成層級結構,這特別適用於按照分層結構建設的網絡,可以很容易地把平面的網絡管理演變爲分層管理。

  當然,在使用路由反射器的時候,也有一些需要注意的地方,比如:Reflector並不是純粹的轉發路由,所有收到的路由在Reflector上同樣要經過最優計算,然後將優選路由向外廣播,所以Reflector的選擇要依據網絡結構而定,儘量使I-BGP鄰居關係與實際的電路連接關係相對應。

  (2)控制路由振盪

  目前,控制RouteFlap主要採取Damping的方法:一個BGP路由器對收到的E-BGP路由設定Penalty值,每一次路由Flap都會使該路由的Penalty值增大,而路由穩定時,Penalty值會隨時間而減小;當Penalty值超過預設的抑制限制時,該路由就不再被廣播,而當Penalty減小至低於重用限制時,該路由纔會被重新向外廣播。這種方法主要是針對E-BGP鄰居而言的。這樣,當一個網絡內部發生路由振盪時,與之相連的其他網絡通過Damping可以有效地防禦對各自網絡的影響。

  在網絡維護中,經常會遇到這樣的情況:寧願一條電路中斷一段時間,也不希望它在不停地震盪。因爲中斷一段時間後,只要電路恢復,網絡流量也會隨之恢復;與此相反,振盪的電路恢復後,需要等待一段時間才能恢復正常的流量(其他網絡都在抑制振盪的路由)。Damping則可以有效地保證因特網的穩定,但同時也會導致一些故障的延時恢復。

  當前的設備基本都支持Damping的功能,而且提供可以配置的參數來精細控制Damping。一般情況下,設備提供的缺省配置能夠滿足大多數網絡的需求,如果確有特殊需要,則一定要經過仔細計算,否則,不是沒有效果,就是把別人的路由抑制後很長時間不能恢復。

  (3)Peer Group的應用

  在實際的網絡中,有一種非常普遍的現象,即一個路由器會有多個屬於一類的BGPPeer。這裏的“屬於一類”是指BGP的策略相同或類似,當Peer比較多時,BGP的配置會變得臃腫,同時,路由器的負載也會加重,因爲一旦有路由的更新,路由器需要針對每個Peer做一次策略計算(雖然策略都相同)。另外,應用PeerGroup還有一個好處,就是降低了對路由器設備的資源消耗,因爲路由器對同一Group更新路由時,由於使用相同策略,因此只進行一次路由計算,從而大大減少了佔用CPU的時間。

  在實際的網絡維護中,即使當同一類的Peer很少時,一般也建議採用PeerGroup的方式,因爲這樣具有很好的擴展性。PeerGroup不但適用於I-BGP的Peer,也適用於E-BGP的Peer。

  (4)關於routerefresh的措施

  骨幹網絡維護中,經常會遇到修改BGP策略的情況,如更新某個Peer的as-path限制列表,在配置修改後需要使其生效,以前的做法是中斷當前的BGP會話,然後重新建立,命令如下:

  clear ip bgp x.x.x.x

  這麼做主要是因爲路由器在收到對方的BGP路由表後,先進行策略運算,然後將最優路由存儲在本機的BGP路由表中,而不是把原始的路由統統保存。當策略改變時,必須重新建立連接來獲得對方的全部路由,然後利用新策略再次計算。這種方式的弊端顯而易見,如網絡阻斷、大量消耗路由器的CPU資源等。

  解決這個問題目前通常採用兩種方法:一種方法是設法保存原始的BGP路由,這樣,重新計算時就不需要重傳了;另外一種方法是在啓用新策略的時候,在不中斷BGP會話的前提下,向對方請求重發全部BGP路由表。

  第一種方法是利用軟件配置實現的,配置的命令如下:

  neighbor 1.1.1.1 soft-reconfiguration inbound

  在啓用新策略的時候輸入命令:

  clear ip bgp 1.1.1.1 soft [in|out]

  這樣,所有的原始BGP路由就會被存儲在另外一張路由表裏面,在修改策略的時候,通過對這張路由表進行運算,就可以得到最優的BGP路由表,這樣對路由產生的資源消耗較小;而且有這樣一張原始的路由表,可以在修改策略後、正式啓用之前使用命令來檢查策略修改後的效果。但這種方法需要額外的內存資源來存儲路由表。

  第二種方法是由路由器設備的BGP能力(BGPCapabilities)決定的,也就是系統軟件本身內置的功能模塊。在建立BGP會話的時候,這個參數通過BGPOPEN在兩個路由器間進行交換。一個設備是否支持BGP Refresh Capabilites,可以用命令下列來檢查:

  show ip bgp n x.x.x.x

  如果參與BGP的兩個路由器都具備這個功能,那麼不需要任何配置,當執行clear ip bgp n x.x.x.x in 時,本端BGP進程不會中斷BGP會話,而是向對端請求重發全部的BGP路由表。相對於第一種方法,這種方法的好處是可以節省內存資源,缺點是網絡管理員無法瞭解對方發過來的原始路由,而且重發了全部路由表,效率上也沒有第一種方法高。目前骨幹網內的設備基本上都支持這個功能。

  3 總結

  以上對BGP擴展性相關的幾個問題和相關的措施進行了論述,在實際的應用中還需要根據具體情況來部署。但是總的思路和原則都是一樣的,即一方面要降低設備的資源消耗,另外一方面要簡化維護管理,從硬件、軟件兩方面來提高網絡的擴展性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章