BGP4+協(xié)議及一致性測試
——
下一代互聯(lián)網(wǎng)將以IPv6為核心技術(shù),IPv6網(wǎng)絡(luò)的形成是一個漸進的發(fā)展過程,這個過程的第一步是穿過IPv4網(wǎng)絡(luò)的“海洋”連接各個IPv6實驗網(wǎng)“孤島”,第二步是在IPv6商業(yè)網(wǎng)絡(luò)逐步建立的情況下,實現(xiàn)不同運營商IPv6網(wǎng)絡(luò)的互聯(lián),同時實現(xiàn)運營商網(wǎng)絡(luò)內(nèi)部不同IPv6自治域之間的互聯(lián),通過逐步的互聯(lián)使網(wǎng)絡(luò)的規(guī)模不斷擴大,最終形成統(tǒng)一的IPv6大網(wǎng)。
支持IPv6的邊界網(wǎng)關(guān)協(xié)議(BGP4+)是支持上述幾種互聯(lián)方式的唯一的IPv6域間路由協(xié)議,對于實現(xiàn)IPv6網(wǎng)的互聯(lián)互通、完成IPv4到IPv6網(wǎng)絡(luò)技術(shù)的平穩(wěn)過渡起著非常關(guān)鍵的作用。BGP4+是對BGP4協(xié)議的擴展,沿用了RFC1771中規(guī)定的BGP4的基本消息格式,增加了RFC2858規(guī)定的用于傳送IPv6路由信息的擴展屬性,并按照RFC1771中的規(guī)定對所有IPv6路由進行處理,同時支持RFC1966、RFC1997等協(xié)議中規(guī)定的BGP路由反射、BGP聯(lián)盟等擴展功能。
建立BGP4+會話連接的兩個路由器可以位于一個自治域內(nèi),也可以位于不同的自治域邊界上,前者構(gòu)成了兩個IBGP4+對等體,后者構(gòu)成了兩個EBGP4+對等體。兩個BGP4+對等體之間使用TCP協(xié)議建立傳輸層的連接,本地監(jiān)聽TCP的179端口,在TCP連接之上傳送BGP4+協(xié)議消息。
BGP4+協(xié)議的內(nèi)容包含三方面的規(guī)定:一是消息傳送規(guī)程的規(guī)定,二是路由處理方面的規(guī)定,三是消息格式的規(guī)定。下文將就這三方面的規(guī)定做簡要介紹。此外,由于BGP4+在IPv6網(wǎng)的發(fā)展階段有獨特的重要作用,對IP路由器進行BGP4+協(xié)議一致性檢驗是非常必要和重要的,因此本文對一致性測試的內(nèi)容也將做簡要說明。
二 通信規(guī)程
BGP4+規(guī)定了一個簡單而高效的通信規(guī)程,主要包括連接的建立、保持和斷開方面的規(guī)定。
BGP4+對等體向?qū)Χ税l(fā)送OPEN消息,其中包含協(xié)議版本號、連接保持時間、本地的路由器標識符、認證信息等,對端如果接受這些參數(shù),就回復(fù)KEEPALIVE消息確認連接的建立。
BGP4+會話連接成功地建立之后,路由器可以將需要建立或刪除的路由信息通過UPDATE消息傳送到對端。如果沒有路由信息需要傳送,路由器要定期向?qū)Χ税l(fā)送KEEPALIVE消息,以便保持連接的激活狀態(tài)。
對端路由器收到UPDATE消息后,如果認為路由信息正確,則在完成本地的路由處理后向其他BGP4+對等體轉(zhuǎn)發(fā)路由信息;如果認為路由信息有錯,則回復(fù)一個NOTIFICATION消息報告錯誤狀態(tài)。
BGP4+會話連接的斷開存在兩種情況,一種是在超過了一個規(guī)定的時間后,在既沒收到路由也沒收到KEEPALIVE消息的情況下自動斷開連接;還有一種情況是在收到NOTIFICATION消息后斷開連接,終止BGP4+會話關(guān)系。
三 路由處理規(guī)程
由于路由信息均通過UPDATE消息傳送,因此路由處理方面的規(guī)定主要是針對UPDATE消息進行的處理。從下文UPDATE消息的格式上可以看出,隨路由一同傳來的還有路由的屬性,包括路由的來源、經(jīng)過的自治域、路由的本地優(yōu)先級、權(quán)值等信息,根據(jù)這些信息確定路由的有效性,決定是否向本地路由庫中添加路由或刪除某個路由、是否向其他BGP4+對等體轉(zhuǎn)發(fā)路由以及如何轉(zhuǎn)發(fā),隨后完成一系列相關(guān)動作。路由處理上主要包括下列功能:
1.路由轉(zhuǎn)發(fā)
路由器收到UPDATE消息后,如果確認路由有效,則在本地的路由表中增加或刪除相應(yīng)路由,同時將路由信息向其他BGP4+對等體轉(zhuǎn)發(fā)。如果收到的路由信息來自EBGP4+對等體,則要向其他所有EBGP4+對等體和自治域內(nèi)的所有的IBGP4+對等體轉(zhuǎn)發(fā)路由;如果路由來自IBGP4+對等體,則向所有EBGP4+對等體轉(zhuǎn)發(fā)路由,不把路由轉(zhuǎn)發(fā)給自治域內(nèi)的其他任何IBGP4+對等體。
2.路由選擇
如果路由器收到了兩個不同的BGP4+對等體發(fā)來的同一條路由,就要選擇其中的一條做為本地路由并向其他對等體轉(zhuǎn)發(fā),路由選擇遵循如下幾條主要原則
?。?)外部對等體發(fā)來的路由優(yōu)于內(nèi)部對等體發(fā)來的路由;
?。?)對于從外部對等體收到的路由,優(yōu)先選擇MULTI-EXIT-DISC值低的路由(應(yīng)注意此時兩條路由應(yīng)來自同一個外部自治域,否則不具備可比較性);
?。?)對于所有從內(nèi)部對等體收到的路由,優(yōu)先選擇LOCAL-PREF值高的路由;
?。?)能夠根據(jù)預(yù)先設(shè)置的策略優(yōu)先選擇某個路由;
(5)在所有可比較條件均相同的情況下,根據(jù)BGP4+標識符打破平局,選擇BGP4+標識符值低的路由。
3.重疊路由處理
如果路由器收到了兩個不同的BGP4+對等體發(fā)來的兩條重疊路由,通常要選擇更精確(more specific)的路由,即地址前綴更長的路由。
4.路由聚合
路由器收到兩個不同的BGP4+對等體發(fā)來的兩條路由后,如果發(fā)現(xiàn)兩條路由可以聚合,則要將他們聚合起來轉(zhuǎn)發(fā)給第三方,同時要在UPDATE消息中對聚合的路由正確地賦予ORIGIN、AS_PATH等路由屬性字段的值。
5.路由傳送流量控制
路由器既要傳送BGP4+等控制信息,又要傳送用戶IP業(yè)務(wù)流,兩類數(shù)據(jù)的傳送和處理是共享線路帶寬和節(jié)點設(shè)備資源的,控制信息的過多傳送會影響用戶IP業(yè)務(wù)的質(zhì)量,因此BGP4+中規(guī)定了路由傳送的流量控制策略,設(shè)置了若干個計時器,保證建立路由的UPDATE消息的傳送會間隔一定時間,同時保證刪除路由的UPDATE消息立即傳送,不受時間間隔約束。
6.路由反射
BGP4+協(xié)議要求IBGP4+對等體收到來自其他自治域的路由消息后,要轉(zhuǎn)發(fā)給本自治域內(nèi)的所有IBGP4+對等體,這就意味著IGBP4+對等體之間要建立全網(wǎng)狀的連接,這對網(wǎng)絡(luò)的擴展顯然是不利的。因此,RFC1966中規(guī)定了一個擴展的功能,即將IBGP4+對等體分成若干組,每組選一個路由器做為反射路由器(RR),其他路由器為客戶(Client)。
協(xié)議規(guī)定,RR之間建立網(wǎng)狀連接,組與組之間路由的轉(zhuǎn)發(fā)要通過RR;在組內(nèi),以RR為核心建立星型連接,client之間路由的傳遞要通過RR轉(zhuǎn)發(fā),組內(nèi)這種路由信息的傳送方式被形象地比喻為“反射“。通過這種方式保證了路由信息送達所有的IBGP4+對等體,同時避免了所有IBGP4+對等體的全網(wǎng)狀連接。RFC1966對主要的處理功能進行了規(guī)定。
7.BGP聯(lián)盟
解決IBGP4+自治域內(nèi)所有對等體全網(wǎng)狀互連的另一個方式是使用BGP聯(lián)盟,即將一個自治域劃分為若干子域,使自治域成為多個子域構(gòu)成的聯(lián)盟。子域內(nèi)部的對等體可進行網(wǎng)狀互聯(lián),子域之間不需要網(wǎng)狀互聯(lián)。聯(lián)盟對外使用一個統(tǒng)一的AS號,對內(nèi)為每個子域分配了內(nèi)部的AS號。同時,在BGP消息中還規(guī)定了一個COMMUNITIES屬性,利用這個屬性的值來控制路由信息傳播的范圍。RFC1997對相關(guān)的路由處理功能進行了規(guī)定。
四 消息格式
BGP消息分為四類,即OPEN、UPDATE、KEEPALIVE和NOTIFICATION,消息功能分別如下
(1)Open:用于請求建立BGP4+會話連接;
?。?)Update:用于傳送建立或刪除路由的信息;
(3)Notification:在出現(xiàn)路由差錯時向?qū)Χ税l(fā)送通知,同時將出錯原因告知對端;
(4)Keepalive:為保持激活狀態(tài)而傳送的消息,此外建立連接時做Open消息的響應(yīng)。
四類消息采用通用的BGP4+消息格式,消息由標簽(marker)、消息長度、消息類型、消息體四個部分構(gòu)成,前三個部分構(gòu)成了BGP4+消息的通用消息頭。
BGP4+通用消息頭中,各個字段的功能如下:
(1) Marker – 包含信息接收端可預(yù)測值,例如認證信息;
?。?) Length – 以字節(jié)為單位的包括消息頭在內(nèi)的消息總長度;
?。?) Type – 消息類型代碼。“1”為Open消息,“2”為UPDATE消息,“3”為NOTIFICATION消息,“4”為KEEPALIVE。
1.Open消息格式
OPEN消息用于發(fā)起建立BGP會話連接
Open消息中各個字段的功能如下:
(1) ersion :指明發(fā)端路由器使用的協(xié)議版本號;
?。?) My Autonomous System :指明發(fā)端路由器的本地AS號;
?。?) Hold Time :發(fā)端路由器建議的保持激活時間;
?。?) BGP Identifier :發(fā)端路由器的標識符;
?。?) OptParmLen :指明以字節(jié)為單位的可選參數(shù)字段的長度;
?。?) Optional Parameters :其中包含一些可選參數(shù),例如認證信息等。
2.UPDATE消息格式
BGP4+協(xié)議中所有的路由信息都是通過UPDATE消息傳送的。
UPDATE消息中各個字段的功能如下:
(1)不可達路由長度:指明刪除路由字段的長度,以字節(jié)為單位;
(2)刪除路由:其中包含若干需要刪除的IPv4路由的地址前綴,如果單純傳送IPv6路由,這一字段可以為空;
?。?)路徑屬性總長度:指明路徑屬性字段的長度,以字節(jié)為單位;
?。?)路徑屬性:其中包含與路由相關(guān)的參數(shù)以及IPv6路由信息;
?。?)網(wǎng)絡(luò)層可達信息:其中包含若干需要建立的IPv4路由的地址前綴,如果單純傳送IPv6路由,這一字段可以為空。
BGP4+是對BGP4協(xié)議的擴展,不使用BGP4定義的刪除路由和網(wǎng)絡(luò)層可達信息字段來傳送路由,IPv6路由及相關(guān)的參數(shù)均通過路徑屬性中的字段來傳送。路徑屬性字段中的主要子字段及其功能如下:
?。?)ORIGIN:指明路由的來源,來自自治域內(nèi)、自治域外,或通過其他途徑得到;
?。?)AS_PATH:路由經(jīng)過的自治域的列表;
?。?)NEXT_HOP:IPv4路由的下一跳地址,如果單純傳送IPv6路由,此字段可以為空;
(4)MULT_EXIT_DISC(MED):來自自治域外的路由的權(quán)值,進行路由選擇時,MED值較低的路由被優(yōu)先選擇;
(5)LOCAL_PREF:本自治域內(nèi)路由的優(yōu)選等級,進行路由選擇時,此值較高的路由被優(yōu)先選擇;
?。?)ATOMIC_AGGREGATE:如果路由器選擇了一個較低精確度(less specific)的路由,而不是選擇較高精確度的路由,則傳送路由時用這一屬性通知其他路由器;
?。?)MP_REACH_NLRI:其中包含若干個需要建立的IPv6路由的地址前綴及其下一跳地址;
(8)MP_UNREACH_NLRI:其中包含若干個需要刪除的IPV6路由的地址前綴。
3.NOTIFICATION消息格式
Notification消息主要用于發(fā)送差錯通知。
消息中各個字段的功能如下:
?。?)Error Code : 錯誤類型代碼;
?。?)Error Subcode :某種錯誤類型下具體的出錯原因的代碼;
?。?)Data :包含與出錯類型有關(guān)的診斷用信息,例如,如果收端路由器發(fā)現(xiàn)UPDATE消息中的某個屬性類型錯誤,會將該屬性的類型、長度和值復(fù)制到Data字段中傳送給發(fā)端路由器。
BGP4+中規(guī)定的錯誤類型有如下六種:
?。?)消息頭錯誤 :消息頭中的差錯包括marker字段出現(xiàn)錯誤值、Type字段出現(xiàn)未定義的消息類型值、Length字段的值有錯等等;
?。?)Open消息錯誤 :指Open消息中出現(xiàn)了不可識別的協(xié)議版本號、AS號、路由器標識符、不可接受的計時器值等等;
?。?)Update消息錯誤:指UPDATE消息中出現(xiàn)了屬性格式錯誤、屬性值不可識別或不合理、缺少了某些必備屬性等情況;
?。?)保持激活計時器超時 :指在規(guī)定的保持激活時間范圍內(nèi)沒收到對端路由器發(fā)來的Keepalive消息;
?。?)有限狀態(tài)機錯誤:指路由器發(fā)現(xiàn)的本地的某些故障狀態(tài),此時路由器會主動用Notification消息向?qū)Χ税l(fā)送錯誤通知;
(6)終止(Cease):路由器在沒有任何故障的情況下,主動向?qū)Χ税l(fā)送錯誤類型為Cease的Notification消息,用于斷開連接。
4.KEEPALIVE消息格式
Keepalive消息用于保持兩個路由器BGP4+會話連接的激活狀態(tài)。該消息只有消息頭,沒有消息體。路由器上有兩個計時器的值與保持激活有關(guān),即keepalive計時器和Hold Time計時器。KeepAlive計時器的缺省值為30秒,發(fā)端路由器在沒有任何消息需要發(fā)送的情況下,必須每隔30秒向?qū)Χ税l(fā)送一次keepalive消息,以便保持會話連接的激活狀態(tài);Hold Time計時器的缺省值為90秒,收端路由器如果超過90秒還未收到對端發(fā)來的keepalive消息,則發(fā)送Notification消息斷開連接。
將BGP4+協(xié)議對消息格式的規(guī)定與對通信規(guī)程、路由處理規(guī)程的規(guī)定相結(jié)合,我們可以清楚地看出BGP4+協(xié)議的概況。
五 協(xié)議一致性測試
路由器進行BGP4+的協(xié)議一致性測試,是為了檢驗不同廠商開發(fā)的IPv6路由器支持BGP4+協(xié)議的準確性,判斷路由器完成的各種處理功能是否符合國際標準的規(guī)定。主要包括下列測試內(nèi)容:
(1)連接建立功能測試:檢驗路由器建立BGP4+會話連接的能力;
(2)UPDATE消息格式一致性測試:檢驗傳送路由信息的UPDATE消息的格式是否符合BGP4+協(xié)議的規(guī)定;
(3)UPDATE消息處理功能測試:檢驗路由器是否能對UPDATE消息進行正確的處理,完成防止不合理路由的擴散、防止路由循環(huán)、正確處理路由權(quán)值及選路策略信息等方面的功能;
?。?)路由處理功能測試:檢驗路由器建立、刪除、分發(fā)、轉(zhuǎn)發(fā)路由以及路由選擇、路由聚合、路由傳送流量控制等方面的功能是否符合協(xié)議的規(guī)定;
?。?)差錯處理功能測試:檢驗路由器在發(fā)現(xiàn)各種路由信息差錯時,能正確地向?qū)Χ税l(fā)送NOTIFICATION消息,以便對端了解出錯原因并斷開連接;
(6)路由反射功能測試:檢驗路由器是否支持路由反射功能,客戶間的路由是否能夠以反射的方式通過RR轉(zhuǎn)發(fā),自治域內(nèi)路由是否能到達每個IBGP4+對等體;
?。?)COMMUNITY屬性處理功能測試:檢驗路由器是否能支持BGP聯(lián)盟并有效地控制路由信息的傳播范圍。
六 結(jié)束語
目前國內(nèi)6Tnet、Cernet2、IPv6-CJ等實驗網(wǎng)絡(luò)已經(jīng)建成,中國移動、中國網(wǎng)通等運營商參與的CNGI工程也已經(jīng)展開,國內(nèi)IPv6商用網(wǎng)投入了建設(shè),國際上韓國和日本也推出了自己的IPv6商用網(wǎng)。隨著IPv6技術(shù)的逐步推廣,BGP4+協(xié)議的應(yīng)用也會越來越廣泛。
鑒于BGP4+協(xié)議對于IPv6網(wǎng)絡(luò)的互聯(lián)互通以及IPv4向IPv6技術(shù)的平穩(wěn)過渡具有關(guān)鍵作用,信產(chǎn)部電信研究院標準研究所制定了《支持IPv6的路由協(xié)議測試方法——邊界網(wǎng)關(guān)協(xié)議(BGP4+)》行業(yè)標準,用于檢驗IPv6路由器支持BGP4+協(xié)議的能力。該行標規(guī)定的測試方法已經(jīng)用于國內(nèi)一些實驗網(wǎng)、商用網(wǎng)的組網(wǎng)設(shè)備選型測試以及信產(chǎn)部的IPv6路由器入網(wǎng)檢驗工作中。
評論