【網(wǎng)絡(luò)工程師路由篇】BGP基礎(chǔ)概念

BGP概述

BGP的協(xié)議特征

BGP報(bào)文

BGP對(duì)等體類型

有兩種BGP鄰居關(guān)系:

BGP的路徑矢量特征

IBGP水平分割

同步規(guī)則及中轉(zhuǎn)AS內(nèi)的IBGP互聯(lián)問題

BGP路由通告規(guī)則概述

BGP概述

IGP也即內(nèi)部網(wǎng)關(guān)路由協(xié)議,典型代表有OSPF、IS-IS等。IGP工作的“著眼點(diǎn)”在AS(自治系統(tǒng))內(nèi)部,它的主要職責(zé)就是負(fù)責(zé)AS內(nèi)的路由發(fā)現(xiàn)和快速收斂,而且其承載的路由前綴就是本AS內(nèi)的前綴。

這里先介紹一下AS的概念,AS(Autonomous system,自治系統(tǒng))指的是在同一個(gè)組織或機(jī)構(gòu)管理下、使用相同策略的設(shè)備的集合。我們可以簡(jiǎn)單的將AS理解為一個(gè)獨(dú)立的機(jī)構(gòu)或者企業(yè)——例如中國(guó)聯(lián)通——所管理的網(wǎng)絡(luò)。另一個(gè)AS的例子是一家大型企業(yè)的網(wǎng)絡(luò),在網(wǎng)絡(luò)的規(guī)劃上將全球各個(gè)區(qū)域劃分為一個(gè)個(gè)AS:

中國(guó)區(qū)是一個(gè)AS,南美區(qū)是一個(gè)AS以此類推。

不同的AS通過AS號(hào)區(qū)分,AS號(hào)取值范圍1-65535,其中64512-65535是私有AS號(hào),在私有網(wǎng)絡(luò)可隨意使用。IANA負(fù)責(zé)AS號(hào)的分發(fā),如果要使用公有AS號(hào),則需要向IANA申請(qǐng)。BGP(Border Gateway Protocol,邊界網(wǎng)關(guān)協(xié)議),是一種距離矢量路由協(xié)議,嚴(yán)格的說應(yīng)該叫路徑矢量路由協(xié)議,主要用于在AS之間傳遞路由信息,適用于大規(guī)模的網(wǎng)絡(luò)環(huán)境,Internet的骨干網(wǎng)絡(luò)正是得益于BGP才能承載如此大批量的路由前綴??偟膩碚f,無論是內(nèi)部網(wǎng)關(guān)路由協(xié)議,或者外部網(wǎng)關(guān)路由協(xié)議,最終的目的都是為了實(shí)現(xiàn)路由的互通,從而最終實(shí)現(xiàn)數(shù)據(jù)的互通。

BGP的協(xié)議特征

BGP在傳輸層使用TCP以確保可靠傳輸,所使用的TCP目的端口號(hào)為179

BGP會(huì)在需要交換路由的路由器之間建立TCP連接,這些路由器被稱為BGP對(duì)等體,也叫BGP鄰居。有兩種BGP鄰居關(guān)系:EBGP鄰居關(guān)系,以及IBGP鄰居關(guān)系。

BGP的鄰居關(guān)系可以跨路由器建立,而不像OSPF及RIP那樣,必須要求直連。

BGP對(duì)等體在鄰居關(guān)系建立時(shí)交換整個(gè)BGP路由表。

在鄰居關(guān)系建立完成后,BGP路由器只發(fā)送增量更新或觸發(fā)更新(不會(huì)周期性更新)。

BGP具有豐富的路徑屬性和強(qiáng)大的策略工具。

BGP能夠承載大批量的路由前綴,用于大規(guī)模的網(wǎng)絡(luò)中。

BGP報(bào)文

加入交流群696283186獲取更多實(shí)驗(yàn)詳細(xì)配置

BGP報(bào)文是被承載在TCP報(bào)文之上的,使用端口號(hào)179。共有五種報(bào)文:

報(bào)文名稱作用是什么什么時(shí)候發(fā)包

OPEN協(xié)商BGP鄰居的各項(xiàng)參數(shù),建立鄰居關(guān)系通過TCP建立BGP連接,發(fā)送open報(bào)文

UPDATE進(jìn)行路由信息的交換連接建立后,有路由需要發(fā)送或路由變化時(shí),發(fā)送UPDATE通告對(duì)端路由信息

NOTIFICATION報(bào)告錯(cuò)誤,中止鄰居關(guān)系當(dāng)BGP在運(yùn)行中發(fā)現(xiàn)錯(cuò)誤時(shí),要發(fā)送NOTIFICATION報(bào)文通告BGP對(duì)端

KEEPALIVE維持鄰居關(guān)系定時(shí)發(fā)送KEEPALIVE報(bào)文以保持BGP鄰居關(guān)系的有效性

Route-refresh為保證網(wǎng)絡(luò)穩(wěn)定,觸發(fā)更新路由的機(jī)制當(dāng)路由策略發(fā)生變化時(shí),觸發(fā)請(qǐng)求鄰居重新通告路由

BGP對(duì)等體類型

運(yùn)行BGP的路由器被稱為BGP speaker。BGP路由器之間要交互BGP路由,前提是要建立正常的BGP鄰居關(guān)系。要建立正確的BGP鄰居關(guān)系,首先BGP對(duì)等體之間要先建立TCP連接,由于BGP是承載在TCP之上的,因此BGP沒有“鄰居必須直連”的限制。

有兩種BGP鄰居關(guān)系:

EBGP鄰居(External BGP peer):

位于不同AS的BGP路由器之間的BGP鄰居關(guān)系

在上圖中,R1、R2、R3屬于一個(gè)AS,AS號(hào)為100;R4屬于另一個(gè)AS,AS號(hào)為200。由于R3及R4分別屬于兩個(gè)不同的AS,因此它們之間建立的BGP鄰居關(guān)系就是EBGP鄰居關(guān)系。

要建立eBGP鄰接關(guān)系必須至少滿足兩個(gè)條件:

1)兩個(gè)eBGP鄰居所屬AS號(hào)不同;

2)Peer命令所指定的IP地址要路由可達(dá),并且兩者之間TCP連接能夠建立。

IBGP鄰居關(guān)系(Internal BGP peer):

位于相同AS的BGP路由器之間的BGP鄰接關(guān)系

在上圖中,在AS100內(nèi),R1、R2、R3運(yùn)行了一個(gè)IGP,也就是OSPF,運(yùn)行OSPF的目的是為了讓AS內(nèi)的路由能夠打通。另一方面,R1與R3之間建立一個(gè)BGP鄰居關(guān)系,由于R1及R3同屬一個(gè)AS,因此它們之間建立的BGP連接是IBGP的鄰居關(guān)系。

值得注意的是,R2并沒有運(yùn)行BGP,R1-R3之間并非直連,這在BGP中是被允許的,因?yàn)锽GP是被承載在TCP之上的。

建立IBGP鄰接關(guān)系,必須至少滿足兩個(gè)條件:

1)兩個(gè)IBGP鄰居所屬AS號(hào)相同;

2)Peer命令所指定的IP地址要路由可達(dá),并且TCP連接能夠建立。

不同的BGP鄰居關(guān)系,對(duì)路由的操作是有明顯區(qū)別的。

BGP的路徑矢量特征

加入交流群696283186獲取更多實(shí)驗(yàn)詳細(xì)配置

BGP是一個(gè)路徑矢量路由協(xié)議。在某些層面上,它與RIP非常相似,在BGP鄰居之間互相更新的是路由表,BGP路由同樣有距離的概念,只不過這里的距離,與RIP的所謂跳數(shù)是完全不同的。

BGP在將路由更新給鄰居時(shí),會(huì)給每條路由粘附許多路徑屬性(Path Attribute)。BGP定義了豐富的路徑屬性,使得BGP對(duì)路由的操控及策略部署變得異常的靈活。每條BGP路由都攜帶了若干路徑屬性,路徑屬性是BGP的一個(gè)非常重要的基本概念,可以理解是為用于描述每條路由的特征的一系列屬性值。就好像一個(gè)人,有身高、體重、年齡等這么一些屬性。其中一個(gè)非常重要的路徑屬性就是AS_PATH,稱為AS列表,它用于描述一條路由經(jīng)過的AS號(hào)。每條BGP路由都必須攜帶AS_PATH屬性。

相比于IGP著眼于AS內(nèi),BGP的“心胸”可就開闊得多了,在BGP眼里,一跳,就是一個(gè)AS。在上圖中,AS500內(nèi)有條路由10.1.1.0/24,這條路由被AS500的邊界路由器(在圖中未畫出)通告給了EBGP鄰居R1及R3。在路由傳出AS500的時(shí)候,邊界路由器會(huì)將路由的AS_PATH屬性值設(shè)置為500。現(xiàn)在R1收到了這條路由,它又將路由通告給了自己的IBGP鄰居R2,由于這條路由沒有被傳出AS100,因此AS_PATH沒有發(fā)生改變,值依然為500。接下去R2將路由通告給了EBGP鄰居R5,由于這時(shí)路由要傳出AS,因此R2為路由的AS_PATH插入一個(gè)值為100的號(hào)碼(也就是本地AS號(hào),在列表的前面插入),這樣一來R2傳遞給R5的BGP路由10.1.1.0/24中,AS_PATH屬性值就變成了100,500,這是一個(gè)AS的列表,當(dāng)R5收到這條路由時(shí),它就知道,我要去往10.1.1.0/24,是需要先到AS100,然后再到AS500,只需要經(jīng)過2跳AS。

另一方面,R5也從R4收到了關(guān)于10.1.1.0/24的BGP路由更新,AS_PATH為300 200 500,R5就知道,從AS300也能到達(dá)10.1.1.0/24,不過需要經(jīng)過3跳AS。

AS_PATH在BGP中是非常重要的路徑屬性。一方面能夠用來作為BGP路由優(yōu)選的依據(jù),另一方面可用于在AS之間防止路由環(huán)路的發(fā)生。例如在上圖中,R5同時(shí)收到兩條到達(dá)10.1.1.0/24的路由,在不考慮其他因素的情況下,R5會(huì)優(yōu)選AS_PATH更短的路由,因?yàn)椤熬嚯x的AS跳數(shù)”更少,所以最終優(yōu)選從R2走。另外,10.1.1.0/24被AS500的邊界路由器通告給R1后,完全有可能從R2-R5-R4-R3再通告回來,這就形成了路由環(huán)路,慶幸的是有AS_PATH這個(gè)路徑屬性。如果AS500的邊界路由器發(fā)現(xiàn),EBGP鄰居R3通告給它的路由的AS_PATH屬性值里出現(xiàn)了自己的AS號(hào),它就認(rèn)為出現(xiàn)了環(huán)路,因此將忽略這個(gè)路由更新。

IBGP水平分割

在AS之間,BGP的路由防環(huán)很大程度上是通過AS_PATH實(shí)現(xiàn)的,而AS_PATH僅僅在路由離開AS才會(huì)被更改,因此在AS內(nèi),IBGP路由就沒有EBGP路由那樣的防環(huán)能力了,這就是為什么我們需要“IBGP水平分割”:為了防止路由環(huán)路的出現(xiàn),BGP路由器不會(huì)將自己從IBGP鄰居學(xué)習(xí)過來的路由再通告給其他IBGP鄰居。IBGP水平分割在華為網(wǎng)絡(luò)設(shè)備上默認(rèn)已經(jīng)開啟。

IBGP水平分割加上AS_PATH路徑屬性,能夠在極大程度上解決BGP的路由環(huán)路問題,但是,在某些環(huán)境中,IBGP水平分割也帶來一些問題。

在上圖中:路由器A屬于AS65101、路由器BCDE屬于AS65102、路由器F屬于AS65103;AB,EF之間建立EBGP鄰居關(guān)系;BC,CE,BD,DE之間建立IBGP鄰居關(guān)系;

現(xiàn)在F路由器將一條路由通過BGP更新給了E,E從EBGP鄰居學(xué)習(xí)到這條路由后,會(huì)將其通告給C,而C從自己的IBGP鄰居E那學(xué)習(xí)到這條路由后,根據(jù)iBGP水平分割規(guī)則,它不能再將該路由通告給自己的IBGP鄰居B了,因此B路由器無法學(xué)習(xí)到去往AS65103的路由。這就是IBGP水平分割帶來的問題。

那么,為了規(guī)避這個(gè)問題,我們就不得不在AS65102內(nèi)建立IBGP全互聯(lián),也就是BCDE四臺(tái)路由器兩兩都建立IBGP鄰居關(guān)系。這種方法在路由器數(shù)量較少的時(shí)候尚且可行,可是如果數(shù)量很多,路由器就將會(huì)因?yàn)樾枰S護(hù)過多的BGP鄰居關(guān)系而導(dǎo)致性能下降。為了解決這個(gè)問題,BGP設(shè)計(jì)了兩個(gè)機(jī)制:路由反射器,以及聯(lián)邦,這在后文中討論。

同步規(guī)則及中轉(zhuǎn)AS內(nèi)的IBGP互聯(lián)問題

在上圖所示的網(wǎng)絡(luò)中:

路由器A屬于AS65101;路由器BCDE屬于AS65102;路由器F屬于AS65103;

BCDE運(yùn)行OSPF,打通AS65102內(nèi)的路由;

BE路由器運(yùn)行BGP,兩者之間建立IBGP鄰居關(guān)系;CD路由器不運(yùn)行BGP。

A上有個(gè)直連網(wǎng)段1.1.1.0/24,A將到達(dá)該網(wǎng)段的路由注入BGP,并且將路由通告給B,B又會(huì)將其通告給IBGP鄰居E(這個(gè)傳遞過程其實(shí)是B將BGP報(bào)文放置于IP包內(nèi)經(jīng)過C或D最終傳遞給E,對(duì)于CD而言,這些數(shù)據(jù)包都是普通IP包,目的地址是E,因此直接轉(zhuǎn)發(fā)不查看)。

最終E將1.1.1.0/24路由傳遞到了F。然而,雖然F能通告BGP學(xué)習(xí)到這條路由,但是當(dāng)有數(shù)據(jù)前往1.1.1.0/24時(shí),F(xiàn)將數(shù)據(jù)包丟給下一跳E,而E發(fā)現(xiàn)1.1.1.0/24路由的下一跳是B,B并非直連,因此需遞歸得到其前往B的下一跳,到B的下一跳是D或C(通過OSPF得知),于是E將數(shù)據(jù)包丟給D或C,而C和D是并不知道如何到達(dá)1.1.1.0/24的(它們只運(yùn)行了OSPF,沒有運(yùn)行BGP),于是它們將數(shù)據(jù)包丟棄,至此形成了路由黑洞。

【BGP同步規(guī)則的概念】BGP路由器從IBGP鄰居學(xué)到一條路由后,是不啟用的(不優(yōu)選的),也不會(huì)將其通告給EBGP鄰居,除非它再次從IGP學(xué)習(xí)到相同的路由,才會(huì)啟用并通告給EBGP鄰居。這是為了防止出現(xiàn)上面所描述的路由黑洞問題。

回到上文的場(chǎng)景,為了規(guī)避路由黑洞問題,可以考慮在B、E上,將BGP路由重發(fā)布進(jìn)OSPF,這樣一來B、E就都能從BGP,以及IGP學(xué)習(xí)到路由,從而形成同步(如下圖所示)。但這么做后果是不可預(yù)估的,畢竟BGP承載的路由條目是相當(dāng)巨大的。

另一個(gè)解決方案是AS內(nèi)路由器都運(yùn)行BGP,并實(shí)現(xiàn)IBGP全互聯(lián),那么該AS內(nèi)的路由器就都能獲得BGP路由,如此即可解決路由黑洞問題。但是這個(gè)方法有個(gè)缺陷,即如果設(shè)備數(shù)量太多,管理這些IBGP的鄰接關(guān)系將會(huì)是個(gè)挑戰(zhàn),并且設(shè)備的負(fù)擔(dān)也較大。此時(shí)可以使用BGP聯(lián)邦或者路由反射器技術(shù)。

綜上所述,我們可以通過多種手段解決路由黑洞問題,因此BGP同步規(guī)則也就不再有必要了。實(shí)際上這是一個(gè)很老舊的特性,華為路由器缺省時(shí)關(guān)閉了BGP同步規(guī)則。因此當(dāng)BGP路由器從IBGP鄰居學(xué)習(xí)到一條路由時(shí),該路由器無需再?gòu)腎GP再次學(xué)習(xí)到相同路由,可以直接將該BGP路由通告給EBGP鄰居。

BGP路由通告規(guī)則概述

BGP路由器會(huì)將其發(fā)現(xiàn)的BGP路由存儲(chǔ)在BGP路由表中。當(dāng)?shù)竭_(dá)同一個(gè)目的地存在多條BGP路徑時(shí),路由器會(huì)將這些路徑(路由)都存儲(chǔ)在BGP路由表中,但是,到達(dá)每一個(gè)目的網(wǎng)絡(luò),路由器只會(huì)選取最優(yōu)(Best)的路由來使用,并將該BGP路由加載到全局路由表中(在沒有激活路由負(fù)載分擔(dān)的情況下)。

BGP路由器只把自己使用的、最優(yōu)的路由通告給其他鄰居。

BGP路由器會(huì)將其從EBGP鄰居學(xué)習(xí)到的路由通告給所有BGP鄰居(包括EBGP和IBGP鄰居)。

BGP路由器不會(huì)將其從IBGP鄰居學(xué)習(xí)到的路由通告給它的IBGP鄰居(IBGP水平分割;存在路由反射器的情況除外)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容