網(wǎng)絡(luò)支架BGP協(xié)議詳解
1.概述
因特網(wǎng),在20世紀(jì)60年代末,作為一個(gè)實(shí)驗(yàn),開始于DARPA(美國國防部的高級(jí)研究項(xiàng)目管理局)。隨著研究機(jī)構(gòu)、學(xué)院和政府加入,形成了最早的ARPANET.后來,美國國家科學(xué)基金會(huì)又開發(fā)了NSFNET(1995年4月停用)。發(fā)展到現(xiàn)在,因特網(wǎng)成為了由商業(yè)提供者運(yùn)營的的更分散的體系。而下一代因特網(wǎng)(NGI)的計(jì)劃已于1997年10月啟動(dòng),目前已推出的主要方案有Internet2,Abilene等。
出于管理和擴(kuò)展的目的,因特網(wǎng)可以被分割成許多不同的自治系統(tǒng)(AutonomousSystem)。換句話說,因特網(wǎng)是由自治系統(tǒng)匯集而成的。
BGPv4(BordergatewayprotocolVersion4)——邊緣網(wǎng)關(guān)協(xié)議(定義于RFC1771),是現(xiàn)行因特網(wǎng)的實(shí)施標(biāo)準(zhǔn),就是用來連接自治系統(tǒng),實(shí)現(xiàn)自治系統(tǒng)間的路由選擇功能的。
2.IGP與EGP
所有的路由選擇協(xié)議可以被分成IGP和EGP兩種。要了解IGP和EGP的概念,應(yīng)該首先了解自治系統(tǒng)(AS)的概念。傳統(tǒng)的AS定義(RFC1771):AS是同一個(gè)技術(shù)管理下的一組路由器,它們使用一種內(nèi)部網(wǎng)關(guān)協(xié)議和一致的度量尺度來對數(shù)據(jù)包進(jìn)行AS內(nèi)部的路由,而使用外部網(wǎng)關(guān)協(xié)議來對發(fā)向其它AS的數(shù)據(jù)包進(jìn)行路由選擇。發(fā)展到現(xiàn)在,已經(jīng)允許并且時(shí)常采用在一個(gè)自治系統(tǒng)AS中使用多個(gè)內(nèi)部網(wǎng)關(guān)協(xié)議,甚至多個(gè)路由選擇的度量標(biāo)準(zhǔn)。所以,現(xiàn)在的自治系統(tǒng)被擴(kuò)展的定義為:共享同一路由選擇策略的一組路由器。
IGP(Interiorgatewayprotocols)——內(nèi)部網(wǎng)關(guān)協(xié)議,定義為在一個(gè)自治系統(tǒng)內(nèi)部使用的路由協(xié)議(包括動(dòng)態(tài)路由協(xié)議和靜態(tài)路由)。IGP的功能是完成數(shù)據(jù)包在AS內(nèi)部的路由選擇,或者說,是講述數(shù)據(jù)包如何穿過本地AS的。RIPv1&v2,IGRP,EIGRP,OSPF,ISIS都是典型的IGP.
EGP(Exteriorgatewayprotocols)——外部網(wǎng)關(guān)協(xié)議,定義為在多個(gè)自治系統(tǒng)之間使用的路由協(xié)議。它主要完成數(shù)據(jù)包在AS間的路由選擇,或者說,講述數(shù)據(jù)包為了到達(dá)目的IP,需要通過哪些AS.BGP4就是一種EGP.
IGP只作用于本地AS內(nèi)部,而對其他AS一無所知。它負(fù)責(zé)將數(shù)據(jù)包發(fā)到主機(jī)所在的網(wǎng)段(segment)。EGP作用于各AS之間,它只了解AS的整體結(jié)構(gòu),而不了解各個(gè)AS內(nèi)部的拓?fù)浣Y(jié)構(gòu)。它只負(fù)責(zé)將數(shù)據(jù)包發(fā)到相應(yīng)的AS中,余下的工作便交給IGP來做。
每個(gè)自治系統(tǒng)AS都有唯一的標(biāo)識(shí),稱為AS號(hào)(ASnumber),由IANA(InternetAssignedNumbersAuthority)來授權(quán)分配。這是一個(gè)16位的二進(jìn)制數(shù),范圍為1~65535,其中65412~65535為AS專用組(RFC2270)。
3.BGP-4的基本概念
BGP-4是典型的外部網(wǎng)關(guān)協(xié)議,是現(xiàn)行的因特網(wǎng)實(shí)施標(biāo)準(zhǔn)。它完成了在自治系統(tǒng)AS間的路由選擇??梢哉f,BGP協(xié)議是現(xiàn)代整個(gè)網(wǎng)絡(luò)的支架。
BGP-4在RFC1771中作出了規(guī)定,并且還涉及其他很多的RFC文檔。在這一新版本中,BGP開始支持CIDR(Classlessinterdomainsrouting)和AS路徑聚合(Aggregation),這種新屬性的加入,可以減緩BGP表中條目的增長速度。
圖一
BGP協(xié)議是一種距離矢量(Distancevector)的路由協(xié)議,但是比起RIP等典型的距離矢量協(xié)議,又有很多增強(qiáng)的性能。BGP使用TCP作為傳輸協(xié)議,使用端口號(hào)179.在通信時(shí),要先建立TCP會(huì)話,這樣數(shù)據(jù)傳輸?shù)目煽啃跃陀蒚CP協(xié)議來保證,而在BGP的協(xié)議中就不用再使用差錯(cuò)控制和重傳的機(jī)制,從而簡化了復(fù)雜的程度。另外,BGP使用增量的、觸發(fā)性的路由更新,而不是一般的距離矢量協(xié)議的整個(gè)路由表的、周期性的更新,這樣節(jié)省了更新所占用的帶寬。BGP還使用“保留”信號(hào)(Keepalive)來監(jiān)視TCP會(huì)話的連接。而且,BGP還有多種衡量路由路徑的度量標(biāo)準(zhǔn)(稱為路由屬性),可以更加準(zhǔn)確的判斷出***的路徑。
與傳統(tǒng)的內(nèi)部路由協(xié)議相比,BGP還有一個(gè)有趣的特性,就是使用BGP的路由器之間,可以被未使用BGP的路由器隔開。這是因?yàn)锽GP在獨(dú)立的內(nèi)部路由協(xié)議之上工作,所以通過BGP會(huì)話連接的路由器能被多個(gè)運(yùn)行內(nèi)部路由協(xié)議的路由器分開。
建立了BGP會(huì)話連接的路由器被稱作對等體(peersorneighbors),對等體的連接有兩種模式:IBGP(InternalBGP)和EBGP(ExternalBGP)。IBGP是指單個(gè)AS內(nèi)部的路由器之間的BGP連接,而EBGP則是指AS之間的路由器建立BGP會(huì)話。
圖二
前面已經(jīng)提到,BGP是用來完成AS之間的路由選擇的,所以對于BGP來說,每一個(gè)AS都是一個(gè)原子的跳度。那么,IBGP又起什么樣的作用呢?IBGP是用來在AS內(nèi)部完成BGP更新信息的交換。雖然這種功能也可以由“再分布”(Redistribution)技術(shù)來完成——將EBGP傳送來的其他AS的路由“再分布”到IGP中,然后將其“再分布”到EBGP傳送到其他AS.但是相比之下,IBGP提供了更高的擴(kuò)展性、靈活性和管理的有效性。比如,IBGP提供了選擇本地AS外出點(diǎn)的方式。
IBGP的功能是維護(hù)AS內(nèi)部連通性。BGP規(guī)定,一個(gè)IBGP的路由器不能將來自另一IBGP路由器的路由發(fā)送給第三方IBGP路由器。這也可以理解為通常所說的Split-horizon規(guī)則。當(dāng)路由器通過EBGP接收到更新信息時(shí),它會(huì)對這個(gè)更新信息進(jìn)行處理,并發(fā)送到所有的IBGP及余下的EBGP對等體;而當(dāng)路由器從IBGP接收到更新信息時(shí),它會(huì)對其進(jìn)行處理并僅通過EBGP傳送,而不會(huì)向IBGP傳送。所以,在AS中,BGP路由器必須要通過IBGP會(huì)話建立完全連接的網(wǎng)狀連接,以此來保持BGP的連通性。如果沒有在物理上實(shí)現(xiàn)全網(wǎng)狀(fullmeshed)的連接,就會(huì)出現(xiàn)連通性上的問題。
AS在BGP看來是一個(gè)整體,AS內(nèi)部的BGP路由器都必須將相同的路由信息發(fā)送給邊界的EBGP路由器。路由信息在通過IBGP鏈路時(shí)不會(huì)發(fā)生改變,只有通過EBGP鏈路時(shí),路由信息才會(huì)發(fā)生變化。在AS內(nèi)部,通過IBGP連接的路由器都有相同的BGP路由表(BGP路由表(BGPRoutingTable)用于存放BGP路由信息,不同于IGP路由表,兩個(gè)表之間的信息可以通過“再分布”(Redistribution)技術(shù)進(jìn)行交換)。
4.BGP的路由選擇
BGP的消息報(bào)頭由三個(gè)部分組成:標(biāo)記、長度和類型。標(biāo)記段占16個(gè)字節(jié),用于安全檢測和同步檢測;長度段占2個(gè)字節(jié),標(biāo)明整個(gè)BGP消息的長度;類型段占一個(gè)字節(jié),標(biāo)明消息的類型。報(bào)頭的后面可以不接數(shù)據(jù)部分,如Keepalive消息。
BGP消息有四種類型:OPEN,UPDATE,NOTIFICATION和KEEPALIVE,分別用于建立BGP連接,更新路由信息,差錯(cuò)控制和檢測可到達(dá)性。
OPEN消息是在建立TCP連接后,向?qū)Ψ桨l(fā)出的***條消息,它包括版本號(hào)、各自所在AS的號(hào)碼(ASNumber)、BGP標(biāo)識(shí)符(BGPIdentifier)、協(xié)議參數(shù)、會(huì)話保持時(shí)間(Holdtimer)以及可選參數(shù)、可選參數(shù)長度。其中,BGP標(biāo)識(shí)符用來標(biāo)識(shí)本地路由器,在連接的所有路由器中應(yīng)該是唯一的。這個(gè)標(biāo)識(shí)符一般都使用接口上的***的IP地址(常常使用loopback接口來防止地址失效)。而會(huì)話保持時(shí)間,是指在收到相繼的Keepalive或者Update信號(hào)之間的***間隔時(shí)間。如果超過這個(gè)時(shí)間路由器仍然沒有收到信號(hào),就會(huì)認(rèn)為對應(yīng)的連接中斷了。如果把這個(gè)保持時(shí)間的值設(shè)為0,那么表示認(rèn)為連接永遠(yuǎn)存在。UPDATE消息由不可到達(dá)路由(WithdrawnRoute)、路由屬性(RouteAttributes)和網(wǎng)絡(luò)層可到達(dá)性(NetworkLayerReachabilityInformation—NLRI)組成。
BGP路由屬性是BGP路由的核心概念。它是一組參數(shù),在UPDATE消息中被發(fā)給連接對等體。這些參數(shù)記錄了BGP路由信息,用于選擇和過濾路由。它可以被看作選擇路由的度量尺度(metric)。路由屬性被分為四類:公認(rèn)強(qiáng)制(Well-knownmandatoryattributes)、公認(rèn)自由選擇(Well-knowndiscretionaryattributes)、可選傳遞(Optionaltransitiveattributes)和可選非傳遞(Optionalnontransitiveattributes)。公認(rèn)的(Well-known)屬性對于所有的BGP路由器來說都是可辨別的;每個(gè)UPDATE消息中都必須包含強(qiáng)制(mandatory)屬性,而自由選擇的(discretionary)屬性則是可選的,可包括也可不包括。對于可選的(Optional)屬性,不是所有的BGP工具都支持它。當(dāng)BGP不支持這個(gè)屬性時(shí),如果這個(gè)屬性是過渡性的(transitive),則會(huì)被接受并傳給其他的BGP對等體;如果這個(gè)屬性是非傳遞性的(nontransitive),則被忽略,不傳給其他對等體。
在技術(shù)文檔RFC1771定義了1~7號(hào)的BGP路由屬性,依次是:1,ORIGIN(產(chǎn)生該路由信息的AS);2,AS_PATH(包已通過的AS集或序列);3,NEXT_HOP(要到達(dá)該目的下一跳的IP地址,IBGP連接不會(huì)改變從EBGP發(fā)來的NEXT_HOP);4,MULTI_EXIT_DISC(本地路由器使用,區(qū)別到其他AS的多個(gè)出口);5,LOCAL-PREF(在本地AS內(nèi)傳播,標(biāo)明各路徑的優(yōu)先級(jí));6,ATOMIC_AGGREGATE;7,AGGREGATOR.RFC1997還定義了8,COMMUNITY.其中,1、2號(hào)屬性是公認(rèn)強(qiáng)制;3、5、6是公認(rèn)可選;7、8是可選過渡;4是可選非過渡。這些屬性在路由的選擇中,考慮的優(yōu)先級(jí)是不同的,僅就這8個(gè)屬性來說,其中優(yōu)先級(jí)***的是LOCAL-PREF,接下來是ORIGIN和AS_PATH.
BGP所使用到的路由屬性并不僅僅是這8個(gè),其他的具體內(nèi)容可以參閱RFC文檔(RFC1771、1996、1997、1966、1863、2283)。
網(wǎng)絡(luò)層可到達(dá)性(NLRI)包含了<長度,前綴>這樣的二維數(shù)組,使用CIDR(ClasslessInterdomainRouting)技術(shù),來聚合路由,以減緩BGP表的增長速度。
BGP工作流程如下:首先,在要建立BGP會(huì)話的路由器之間建立TCP會(huì)話連接,然后通過交換OPEN信息來確定連接參數(shù),如運(yùn)行版本等。建立對等體連接關(guān)系后,最開始的路由信息交換將包括所有的BGP路由,也就是交換BGP表中所有的條目。初始化交換完成以后,只有當(dāng)路由條目發(fā)生改變或者失效的時(shí)候,才會(huì)發(fā)出增量的觸發(fā)性的路由更新。所謂增量,就是指并不交換整個(gè)BGP表,而只更新發(fā)生變化的路由條目;而觸發(fā)性,則是指只有在路由表發(fā)生變化時(shí)才更新路由信息,而并不發(fā)出周期性的路由更新。比起傳統(tǒng)的全路由表的定期更新,這種增量觸發(fā)的更新大大節(jié)省了帶寬。路由更新都是由UPDATE消息來完成。UPDATE包含了發(fā)送者可到達(dá)的目的列表和路由屬性。當(dāng)沒有路由更新傳送時(shí),BGP會(huì)話用KEEPALIVE消息來驗(yàn)證連接的可用性。由于KEEPALIVE包很小,這也可以大量節(jié)省帶寬。在協(xié)商發(fā)生錯(cuò)誤時(shí),BGP會(huì)向雙方發(fā)送NOTIFICATION消息來通知錯(cuò)誤。
5.BGP與IGP的互操作
BGP路由表是獨(dú)立于IGP路由表的,但是這兩個(gè)表之間可以進(jìn)行信息的交換,這就是前面提到的“再分布”技術(shù)(Redistribution)。
信息的交換有兩個(gè)方向:從BGP注入IGP,以及從IGP注入BGP.前者是將AS外部的路由信息傳給AS內(nèi)部的路由器,而后者是將AS內(nèi)部的路由信息傳到外部網(wǎng)絡(luò),這也是路由更新的來源。
把路由信息從BGP注入IGP涉及到一個(gè)重要概念——同步(Synchronization)。同步規(guī)則,是指當(dāng)一個(gè)AS為另一個(gè)AS提供了過渡服務(wù)時(shí),只有當(dāng)本地AS內(nèi)部所有的路由器都通過IGP的路由信息的傳播收到這條路由信息以后,BGP才能向外發(fā)送這條路由信息。當(dāng)路由器從IBGP收到一條路由更新信息時(shí),在轉(zhuǎn)發(fā)給其他EBGP對等體轉(zhuǎn)之前,路由器會(huì)對同步性進(jìn)行驗(yàn)證。只有IGP認(rèn)識(shí)這個(gè)更新的目的時(shí)(即IGP路由表中有相應(yīng)的條目),路由器才會(huì)將其通過EBGP轉(zhuǎn)發(fā);否則,路由器不會(huì)轉(zhuǎn)發(fā)該更新信息。
同步規(guī)則的主要目的是為了保證AS內(nèi)部的連通性,防止路由循環(huán)的黑洞。但是在實(shí)際的應(yīng)用中,一般都會(huì)將同步功能禁用,而使用AS內(nèi)IBGP的全網(wǎng)狀連接結(jié)構(gòu)來保證連通性,這樣即可以避免向IGP中注入大量BGP路由,加快路由器處理速度,又可以保證數(shù)據(jù)包不丟失。要安全的禁用同步,需要滿足以下兩個(gè)條件之一:1,所處的AS是單口的,或者說是末端AS(StubAS)――即是指只有一個(gè)點(diǎn)與外界網(wǎng)絡(luò)連接。2,雖然所處的AS是過渡型的(指一個(gè)AS可以通過本地AS,與第三方AS建立連接的),但是在AS內(nèi)部的所有路由器都運(yùn)行BGP.第2種情況是很常見的,因?yàn)锳S內(nèi)所有的路由器都有BGP信息,所以IGP只需要為本地AS傳送路由信息。大部分的網(wǎng)絡(luò)設(shè)備在實(shí)現(xiàn)BGP時(shí),都提供了禁用同步的開關(guān)。
將IGP路由信息注入BGP,是路由更新的來源。它直接影響到因特網(wǎng)的路由穩(wěn)定性。信息注入有兩種方式:動(dòng)態(tài)和靜態(tài)。
動(dòng)態(tài)注入又分為完全注入和選擇性注入。完全動(dòng)態(tài)注入是指將所有的IGP路由再分布(Redistribution)到BGP中。這種方式的優(yōu)點(diǎn)是配置簡單,但是可控性弱,效率低。選擇性的動(dòng)態(tài)注入則是將IGP路由表中的一部分路由信息注入BGP(如使用CiscoIOS中的network子命令)。這種方式會(huì)先驗(yàn)證地址及掩碼,大大增強(qiáng)了可控性,提高了效率,可以防止錯(cuò)誤的路由信息注入。
但是無論哪種動(dòng)態(tài)注入方式,都會(huì)造成路由的不穩(wěn)定。因?yàn)閯?dòng)態(tài)注入完全依賴于IGP信息,當(dāng)IGP路由發(fā)生路由波動(dòng)時(shí),不可避免的會(huì)影響到BGP的路由更新。這種路由的不穩(wěn)定會(huì)發(fā)出大量的更新信息,浪費(fèi)大量的帶寬。對于這種缺陷,可以使用在邊界處使用路由衰減和聚合(BGP4的新增特性CIDR)來改善。
靜態(tài)注入就可以有效解決路由不穩(wěn)定的問題。它是將靜態(tài)路由的條目注入到BGP中去。靜態(tài)路由存在于IGP路由表中。由于靜態(tài)路由條目是人為的加入的,不會(huì)受到IGP波動(dòng)的影響,所以很穩(wěn)定。它的穩(wěn)定性防止了路由波動(dòng)引起的反復(fù)更新。但是,靜態(tài)注入也會(huì)產(chǎn)生數(shù)據(jù)流阻塞等問題。
所以,在選擇注入方式時(shí),需要根據(jù)網(wǎng)絡(luò)的實(shí)際狀況來作出選擇。
BGP還提供選擇不同路由策略(Policy)的方法來控制BGP更新信息的數(shù)據(jù)流。具體的說,可以改變管理距離(Administrativedistance)來確定使用哪一個(gè)路由協(xié)議的更新信息;可以使用BGP過濾(如routemaps)來控制更新數(shù)據(jù)流;還可以用CIDR和地址聚合來改變更新信息;也可以使用路由反射器(RouteReflectors)來改變路由更新信息的轉(zhuǎn)發(fā)方式,從而改變對BGP內(nèi)部網(wǎng)絡(luò)的物理拓?fù)涞娜W(wǎng)狀要求。
6.針對大型網(wǎng)絡(luò)的擴(kuò)展特性
前面已經(jīng)提到,由于IBGP的Split-horizon特性,為了保證連續(xù)性,就必須在AS內(nèi)實(shí)現(xiàn)全網(wǎng)狀的(fullmeshed)連接。但是,對于一個(gè)X個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)來說,全網(wǎng)狀的拓?fù)湟螅ǎ╔-1)X/2)個(gè)連接。當(dāng)X的值很大的時(shí)候,就會(huì)帶來過多的花費(fèi),以及龐大的配置任務(wù)。這是很不經(jīng)濟(jì)和低效的。
為了減少對IBGP鏈路的要求,在RFC1966、RFC1965中,分別提出了路由反射器(RouteReflection)和聯(lián)盟(Confederations)技術(shù)。
路由器可以配置成路由反射器,路由反射器允許將一個(gè)IBGP傳來的BGP路由傳到另一個(gè)IBGP鏈路上。這樣就緩解了對全網(wǎng)狀拓?fù)涞男枨?。但是并不是所有情況下,路由反射器都是一種***選擇,因?yàn)檫@樣會(huì)加大作為反射器的路由器的系統(tǒng)開銷,從而減慢處理速度,甚至造成數(shù)據(jù)丟失。而且,如果路由反射器出現(xiàn)問題,那么所有的連接都會(huì)被中斷。為了防止中斷出現(xiàn),增加冗余度,一般可以配置多個(gè)路由反射器。
圖三
聯(lián)盟則是將AS再劃分成子AS(subAS),在subAS中運(yùn)行IBGP,使用全網(wǎng)狀結(jié)構(gòu);而在subAS之間使用EBGP,這樣也可減少對IBGP連接的需求。聯(lián)盟同樣也存在缺陷,如路由選擇等。所以和路由反射器一樣,一般只在存在很多IBGP連接時(shí)才會(huì)使用聯(lián)盟技術(shù)。
7.BGP的使用
BGP的功能是在各AS之間完成路由選擇。它主要用于ISP(InternetServiceProvider)之間的連接和數(shù)據(jù)交換。
但是,并不是所有情況下BGP都適用。使用BGP會(huì)大大增加路由器的開銷,并且大大增加規(guī)劃和配置的復(fù)雜性。所以,使用BGP協(xié)議需要先做好需求分析。
一般來說,如果本地的AS與多個(gè)外界AS建立了連接,并且有數(shù)據(jù)流從外部AS通過本地AS到達(dá)第三方的AS,那么可以考慮使用BGP來控制數(shù)據(jù)流。
如果本地AS與外界只有一個(gè)連接(通常說的stubAS),而且并不需要對數(shù)據(jù)流進(jìn)行嚴(yán)格控制,那就不必使用BGP協(xié)議,而可以簡單的使用靜態(tài)路由(Staticroute)來完成與外部AS的數(shù)據(jù)交換。另外,硬件和線路的原因也會(huì)影響到BGP的選擇。如前所說,使用BGP會(huì)加大路由器的開銷,并且BGP路由表也需要很大的存儲(chǔ)空間,所以當(dāng)路由器的CPU或者存儲(chǔ)空間有限時(shí),或者帶寬太小時(shí),不宜使用BGP路由協(xié)議。
8.總結(jié)
BGP的主要功能是連接各個(gè)AS,提供AS之間的信息交換。各個(gè)BGP系統(tǒng)之間交換路由信息,來保證得到一個(gè)無環(huán)路的路由結(jié)構(gòu)。BGP還提供了在AS的水平上的路由策略的選擇方式,以優(yōu)化路由選擇。
作為整個(gè)互聯(lián)網(wǎng)的整體支架,BGP提供了一個(gè)功能強(qiáng)大的連接AS的工具,但是它在使用中也存在一定的局限性,所以在決定使用之前一定要作認(rèn)真分析,以確定是否使用BGP以及具體實(shí)施方案。
【編輯推薦】