百科解釋
BGP(Border Gateway Protocol,邊界網(wǎng)關協(xié)議)是用來連接Internet上的獨立系統(tǒng)的路由選擇協(xié)議。它是Internet工程任務組制定的一個加強的、完善的、可伸縮的協(xié)議。BGP4支持CIDR尋址方案,該方案增加了Internet上的可用IP地址數(shù)量。BGP是為取代最初的外部網(wǎng)關協(xié)議EGP設計的。它也被認為是一個路徑矢量協(xié)議。
BGP(Border GatewayProtocol)是一種在自治系統(tǒng)之間動態(tài)交換路由信息的路由協(xié)議。一個自治系統(tǒng)的經典定義是在一個管理機構控制之下的一組路由器,它使用IGP和普通度量值向其他自治系統(tǒng)轉發(fā)報文。
在BGP中使用自治系統(tǒng)這個術語是為了強調這樣一個事實:一個自治系統(tǒng)的管理對于其他自治系統(tǒng)而言是提供一個統(tǒng)一的內部選路計劃,它為那些通過它可以到達的網(wǎng)絡提供了一個一致的描述。
BGP,邊界網(wǎng)關協(xié)議,是自主網(wǎng)絡系統(tǒng)中網(wǎng)關之間交換器路由信息的協(xié)議。邊界網(wǎng)關協(xié)議常常應用于互聯(lián)網(wǎng)的網(wǎng)關之間。路由表包含已知路由器的列表、路由器能夠達到的地址以及到達每個路由器的路徑的跳數(shù)。
使用邊界網(wǎng)關協(xié)議的主機一般也使用傳輸控制協(xié)議(TCP)。當網(wǎng)絡檢測到某臺主機發(fā)出變化時,就會發(fā)送新的路由表。BGP-4,邊界網(wǎng)關協(xié)議的最新版本,允許網(wǎng)絡管理員在策略描述下配置跳數(shù)的規(guī)格。
BGP是目前應用在因特網(wǎng)上的IP網(wǎng)絡互聯(lián)協(xié)議,為運營商之間的互聯(lián)提供了穩(wěn)定而安全的路由協(xié)議,具有豐富的路由控制機制。為了更好地控制路由策略,當前大部分的運營商均將BGP部署到骨干路由器。隨著網(wǎng)絡的不斷擴展、路由器數(shù)目的增多以及路由信息條目的激增,解決BGP的擴展性問題變得越來越重要。
目前BGP的擴展性面臨如下幾個問題。
(1)I-BGP的Full-Mesh問題>
BGP路由協(xié)議分為I-BGP和E-BGP兩個部分。I-BGP用于自治域內的路由器之間,E-BGP用于自治域間的路由器之間。為了防止產生環(huán)回路由,BGP協(xié)議要求一個路由器通過I-BGP學到的路由,不再向其他I-BGP鄰居廣播,所以一個自治域內所有參加I-BGP協(xié)議的路由器都要與其他路由器建立會話,從而保證路由信息能夠正確地廣播到每一個路由器。依照這個原則,一個自治域內總的I-BGP會話數(shù)為N×(N-1)/2 (N為運行I-BGP的路由器數(shù)),當N不斷增大時,這個數(shù)字會大得驚人:如100臺路由器,則會話數(shù)為4950.這對網(wǎng)絡設備而言是個非常大的負擔,而且還將使網(wǎng)絡的管理與配置變得異常復雜。而骨干網(wǎng)通常由大量的運行I-BGP的路由器組成,因此,這個問題是否能夠解決,直接影響到網(wǎng)絡規(guī)模的大小。
(2)更改路由策略時路由振蕩的問題
BGP屬于增量更新的路由協(xié)議,當有新的路由要發(fā)布時,路由器會向鄰居發(fā)送Update信息,而如果要刪除某條路由時,就會發(fā)送Withdraw信息。BGP路由的Flap的定義是:當一條路由在被收回(Withdraw)后,又被廣播(Update)出來,視為一次Flap.由于任何一條路由的收回和更新都會導致一臺路由器整個路由表重新計算,因此當Flap的情況比較多時,對路由器設備的負載將產生巨大的壓力。根據(jù)筆者在實際工作中的經驗,一般情況下,一臺高端路由器在計算BGP路由的時候,CPU的負載基本上在80%~90%左右,有時甚至達到100%,占用了幾乎所有的CPU資源。雖然目前大部分的高端路由器都將路由計算的模塊與轉發(fā)模塊分布在不同的硬件上,來減少主CPU忙導致的路由器性能下降的問題,但是路由表的頻繁變化和更新,對整個設備的運行還是有一定的影響的,而且這樣的計算會隨著路由的收回或廣播,繼續(xù)向自治域內部擴展,使內部的路由器產生同樣的問題。
(3)其他需要考慮的問題
除了上面的兩個問題會導致對路由器資源過量消耗之外,還有其他的一些因素,如路由的數(shù)目、BGP路由表的大小和路由計算的方式等,同樣也會影響路由器的性能。
另外,網(wǎng)絡越大,路由條目越多,配置和管理的工作也就越復雜,這就需要在網(wǎng)絡設計的時候盡量簡化配置,降低管理人員的工作強度,避免人為原因造成故障。
2 如何解決制約BGP擴展性的問題
針對以上問題,介紹一些相關的解決方法。
(1)解決I-BGP會話數(shù)瓶頸的方法
上面提到的I-BGP的會話數(shù)過多的問題,可以采取兩種辦法來解決:
1)聯(lián)盟的方法(Confederations)
聯(lián)盟的工作原理是:將原來一個自治域的網(wǎng)絡分成多個子自治域,通過Confederations id將原AS號配置到每個路由器上。這樣有兩個好處:一是可以保留原有的I-BGP屬性,包括Local Preference、MED和NEXT_HOP;二是能在Confederations的功能中自動實現(xiàn),無需管理員在網(wǎng)絡的出口處配置過濾內部AS號信息的操作。
2)路由反射器(Route-Reflector)
采用路由反射器是目前應用最廣泛的方法,較之前面聯(lián)盟的方法,具有更好的擴展性。路由反射器的工作原理是:將一個自治域內的路由器分成幾個 Cluster,每個Cluster由Reflector和Client組成。Reflector之間形成Full Mesh,運行常規(guī)的I-BGP;Client只與Reflector運行I-BGP,對于Client來說,Reflector只是普通的鄰居而已, Reflector則扮演了路由集散地的角色,將從其他Reflector學到的I-BGP路由轉發(fā)給Client,同時,將從Client學到的I- BGP路由轉發(fā)給Cluster內的其他Clients和Cluster外的其他Reflector,再借由Reflectors廣播到其所在的 Cluster.在實際的網(wǎng)絡中,為了提高冗余度,通常一個Client與多個Reflector建立鄰居關系,而且不局限于Client所在 Cluster的Reflector.
由此可見,Client上的I-BGP會話數(shù)一般為1~2個,與聯(lián)盟的方法相比,只要Reflector的性能足夠高,Cluster就可以做得很大,而Client的負載不會隨Cluster的變化有太大的變化。對于前一種方法,由于一個子自治域的所有路由器還是要做到Full Mesh,所以最低性能的路由器決定了一個子自治域的大。欢酚煞瓷淦鞣▌t通常是一個或多個最高性能的路由器決定Cluster的大小,因此,具有更好的網(wǎng)絡擴展性能。
另外,一個Reflector也可以成為另外一個Reflector的Client,形成層級結構,這特別適用于按照分層結構建設的網(wǎng)絡,可以很容易地把平面的網(wǎng)絡管理演變?yōu)榉謱庸芾怼?BR> 當然,在使用路由反射器的時候,也有一些需要注意的地方,比如:Reflector并不是純粹的轉發(fā)路由,所有收到的路由在Reflector上同樣要經過最優(yōu)計算,然后將優(yōu)選路由向外廣播,所以Reflector的選擇要依據(jù)網(wǎng)絡結構而定,盡量使I-BGP鄰居關系與實際的電路連接關系相對應。
(2)控制路由振蕩
目前,控制Route Flap主要采取Damping的方法:一個BGP路由器對收到的E-BGP路由設定Penalty值,每一次路由Flap都會使該路由的Penalty 值增大,而路由穩(wěn)定時,Penalty值會隨時間而減。划擯enalty值超過預設的抑制限制時,該路由就不再被廣播,而當Penalty減小至低于重用限制時,該路由才會被重新向外廣播。這種方法主要是針對E-BGP鄰居而言的。這樣,當一個網(wǎng)絡內部發(fā)生路由振蕩時,與之相連的其他網(wǎng)絡通過 Damping可以有效地防御對各自網(wǎng)絡的影響。
在網(wǎng)絡維護中,經常會遇到這樣的情況:寧愿一條電路中斷一段時間,也不希望它在不停地震蕩。因為中斷一段時間后,只要電路恢復,網(wǎng)絡流量也會隨之恢復;與此相反,振蕩的電路恢復后,需要等待一段時間才能恢復正常的流量(其他網(wǎng)絡都在抑制振蕩的路由)。Damping則可以有效地保證因特網(wǎng)的穩(wěn)定,但同時也會導致一些故障的延時恢復。
當前的設備基本都支持Damping的功能,而且提供可以配置的參數(shù)來精細控制Damping.一般情況下,設備提供的缺省配置能夠滿足大多數(shù)網(wǎng)絡的需求,如果確有特殊需要,則一定要經過仔細計算,否則,不是沒有效果,就是把別人的路由抑制后很長時間不能恢復。
(3)Peer Group的應用
在實際的網(wǎng)絡中,有一種非常普遍的現(xiàn)象,即一個路由器會有多個屬于一類的BGP Peer.這里的“屬于一類”是指BGP的策略相同或類似,當Peer比較多時,BGP的配置會變得臃腫,同時,路由器的負載也會加重,因為一旦有路由的更新,路由器需要針對每個Peer做一次策略計算(雖然策略都相同)。另外,應用Peer Group還有一個好處,就是降低了對路由器設備的資源消耗,因為路由器對同一Group更新路由時,由于使用相同策略,因此只進行一次路由計算,從而大大減少了占用CPU的時間。
在實際的網(wǎng)絡維護中,即使當同一類的Peer很少時,一般也建議采用Peer Group的方式,因為這樣具有很好的擴展性。Peer Group不但適用于I-BGP的Peer,也適用于E-BGP的Peer.
(4)關于route refresh的措施
骨干網(wǎng)絡維護中,經常會遇到修改BGP策略的情況,如更新某個Peer的as-path限制列表,在配置修改后需要使其生效,以前的做法是中斷當前的BGP會話,然后重新建立,命令如下:
clear ip bgp x.x.x.x
這么做主要是因為路由器在收到對方的BGP路由表后,先進行策略運算,然后將最優(yōu)路由存儲在本機的BGP路由表中,而不是把原始的路由統(tǒng)統(tǒng)保存。當策略改變時,必須重新建立連接來獲得對方的全部路由,然后利用新策略再次計算。這種方式的弊端顯而易見,如網(wǎng)絡阻斷、大量消耗路由器的CPU資源等。
解決這個問題目前通常采用兩種方法:一種方法是設法保存原始的BGP路由,這樣,重新計算時就不需要重傳了;另外一種方法是在啟用新策略的時候,在不中斷BGP會話的前提下,向對方請求重發(fā)全部BGP路由表。
第一種方法是利用軟件配置實現(xiàn)的,配置的命令如下:
neighbor 1.1.1.1 soft-reconfiguration inbound
在啟用新策略的時候輸入命令:
clear ip bgp 1.1.1.1 soft [in|out]
這樣,所有的原始BGP路由就會被存儲在另外一張路由表里面,在修改策略的時候,通過對這張路由表進行運算,就可以得到最優(yōu)的BGP路由表,這樣對路由產生的資源消耗較;而且有這樣一張原始的路由表,可以在修改策略后、正式啟用之前使用命令來檢查策略修改后的效果。但這種方法需要額外的內存資源來存儲路由表。
第二種方法是由路由器設備的BGP 能力(BGP Capabilities)決定的,也就是系統(tǒng)軟件本身內置的功能模塊。在建立BGP會話的時候,這個參數(shù)通過BGP OPEN在兩個路由器間進行交換。一個設備是否支持BGP Refresh Capabilites,可以用命令下列來檢查:
show ip bgp n x.x.x.x
如果參與BGP的兩個路由器都具備這個功能,那么不需要任何配置,當執(zhí)行clear ip bgp n x.x.x.x in 時,本端BGP進程不會中斷BGP會話,而是向對端請求重發(fā)全部的BGP路由表。相對于第一種方法,這種方法的好處是可以節(jié)省內存資源,缺點是網(wǎng)絡管理員無法了解對方發(fā)過來的原始路由,而且重發(fā)了全部路由表,效率上也沒有第一種方法高。目前骨干網(wǎng)內的設備基本上都支持這個功能。
3 總結
以上對BGP擴展性相關的幾個問題和相關的措施進行了論述,在實際的應用中還需要根據(jù)具體情況來部署。但是總的思路和原則都是一樣的,即一方面要降低設備的資源消耗,另外一方面要簡化維護管理,從硬件、軟件兩方面來提高網(wǎng)絡的擴展性。