BGP基礎(chǔ)知識(shí)
今天海翎光電的小編主要介紹一下BGP的相關(guān)基礎(chǔ)知識(shí),文章淺顯易懂,適合對(duì)BGP完全沒(méi)有了解的同學(xué)。
AS(自治系統(tǒng)),由單一的機(jī)構(gòu)或組織所管理的一系列IP網(wǎng)絡(luò)及設(shè)備所構(gòu)成集合。 劃分AS的原因:1.整個(gè)地球上的網(wǎng)絡(luò)范圍太大,單個(gè)網(wǎng)絡(luò)收斂很慢且網(wǎng)絡(luò)延遲大;2.每個(gè)網(wǎng)絡(luò)可能是某個(gè)組織或公司組建的,他們并不想將自己辛苦組建的網(wǎng)絡(luò)交給別人管理,所以需要自治管理 為了方便對(duì)自治系統(tǒng)進(jìn)行管理,給每一個(gè)自治系統(tǒng)設(shè)計(jì)了一個(gè)號(hào),即AS號(hào)。AS號(hào)由16位二進(jìn)制構(gòu)成,取值范圍:0 - 65535,其中1 - 64511號(hào)為公有AS號(hào), 64512 - 65534被設(shè)定為私有AS號(hào)。 因?yàn)閭鹘y(tǒng)的AS號(hào)存在不夠用的情況,所以,目前大部分設(shè)備均支持拓展的AS號(hào),由32位二進(jìn)制構(gòu)成。中國(guó)由于加入互聯(lián)網(wǎng)較晚,所以中國(guó)的AS號(hào)大多都是擴(kuò)展AS號(hào)。
重發(fā)布要求AS間需要有ASBR,ASBR同時(shí)具有兩個(gè)AS的路由信息,通過(guò)ASBR實(shí)現(xiàn)路由共享;而B(niǎo)GP是沒(méi)有ASBR的,由于AS是自治系統(tǒng),如果有ASBR,那這個(gè)ASBR歸誰(shuí)管理?如果只歸一方管理,那他可以通過(guò)路由策略提高自己AS的流量的轉(zhuǎn)發(fā)速度,所以BGP是AS間各出一個(gè)或多個(gè)運(yùn)行BGP的路由器,讓這些運(yùn)行BGP的路由器建立鄰居關(guān)系后交換路由信息。
重發(fā)布在導(dǎo)入路由時(shí)會(huì)洗掉開(kāi)銷(xiāo)值,會(huì)造成選路不佳的問(wèn)題,而B(niǎo)GP具備強(qiáng)大的路由策略,BGP為路由信息設(shè)計(jì)了路徑屬性,通過(guò)屬性進(jìn)行選路,是的選路過(guò)程更加靈活,可控性更高。
BGP協(xié)議是無(wú)類(lèi)別的路徑矢量協(xié)議。無(wú)類(lèi)別即BGP在傳遞路由時(shí)會(huì)攜帶子網(wǎng)掩碼;路徑矢量,不同與距離矢量,路徑矢量是以一個(gè)AS為單位,而距離矢量是以一個(gè)路由為單位,距離矢量是一種路由算法,而BGP不需要計(jì)算路由,它只需將以計(jì)算好的路由傳遞給了鄰居即可。 我們對(duì)IGP(內(nèi)部網(wǎng)關(guān)協(xié)議)和EGP(外部網(wǎng)關(guān)協(xié)議)的要求不同,IGP需要在一個(gè)AS內(nèi)計(jì)算路由,所以我們要求IGP選路佳、收斂快、占用資源少;而EGP不同,EGP協(xié)議只需傳遞AS以計(jì)算好的路由,所以我們對(duì)EGP的可控性、可靠性要求更高。 EGP的追求:可控性:AS之間需要傳遞大量的路由信息,所謂可控,就是可以更方便的干涉選路,更容易做策略,以彌補(bǔ)重發(fā)布的不足。為了保證路由傳遞的可控性,更方便干涉選路,BGP協(xié)議舍棄了開(kāi)銷(xiāo)值,取而代之的是他為路由信息設(shè)計(jì)了很多路徑屬性。可以通過(guò)屬性進(jìn)行選路,是的選路過(guò)程更加靈活,可控性更高。 EGP的追求:可靠性:BGP協(xié)議設(shè)備間需要交互大量的路由條目,但又不能選擇周期更新來(lái)占用鏈路資源,故只能進(jìn)行觸發(fā)更新;又為了保證傳輸?shù)目煽啃裕苯?strong style="margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">選擇TCP協(xié)議作為傳輸層的協(xié)議來(lái)完成數(shù)據(jù)收發(fā),使用的是TCP 179號(hào)端口。但使用TCP協(xié)議通訊也會(huì)造成一些問(wèn)題,傳輸效率降低,只能單播通訊(TCP需要去建立會(huì)話(huà)),占用資源會(huì)加大 ,用TCP之后,便不能通過(guò)廣播或者組播去自動(dòng)發(fā)現(xiàn)鄰居進(jìn)行通信了。 由于BGP依靠TCP協(xié)議傳輸數(shù)據(jù),BGP協(xié)議可以實(shí)現(xiàn)非直連建鄰,非直連建鄰的前提條件是鄰居雙方網(wǎng)絡(luò)可達(dá), BGP的非直連建鄰是建立在IGP的基礎(chǔ)上。 BGP的鄰居更準(zhǔn)確的說(shuō)是BGP的對(duì)等體,我們可以根據(jù)鄰居關(guān)系的建立情況,將BGP的鄰居關(guān)系分為兩種:
因?yàn)镋BGP對(duì)等體之間一般采用直連建鄰的方法,所以,我們將EBGP對(duì)等體之間的數(shù)據(jù)包中的TTL值設(shè)置為1;而IBGP對(duì)等體之間往往需要非直連建鄰,所以,IBGP對(duì)等體之間的數(shù)據(jù)報(bào)中的TTL值我們?cè)O(shè)置為255;當(dāng)然,如果EBGP對(duì)等體之間需要非直連建鄰,則需要手工修改TTL值。 EGP的追求::AS-BY-AS:BGP將一個(gè)AS作為一個(gè)單位來(lái)看待,以一個(gè)AS為一跳,
無(wú)類(lèi)別路徑矢量 -----距離矢量的升級(jí)版—AS–BY–AS 使用單播更新來(lái)發(fā)送所有信息;基于TCP 179端口工作 增量更新,僅觸發(fā)更新,無(wú)周期更新 具有豐富的屬性來(lái)取代IGP中度量進(jìn)行選路,有多個(gè)參數(shù)控制協(xié)議 可以在進(jìn)項(xiàng)和出項(xiàng)對(duì)流量實(shí)施強(qiáng)大的策略,可控性非常強(qiáng)大 默認(rèn)不被用于負(fù)載均衡-----通過(guò)各種選路規(guī)則僅僅產(chǎn)生一條最佳路徑 BGP支持認(rèn)證和聚合(將現(xiàn)有的IP地址合并成較大的、具有更多主機(jī)地址的路由域)
Open包主要用來(lái)建立鄰居關(guān)系,正常進(jìn)收發(fā)一次即可,Open包會(huì)攜帶一些建鄰需要協(xié)商的參數(shù),鄰居互相認(rèn)同對(duì)方的參數(shù)才可以建立鄰居關(guān)系。以下為Open包會(huì)攜帶的一些參數(shù): AS號(hào):在手工建立鄰居關(guān)系需要時(shí)聲明鄰居的AS號(hào)。對(duì)端收到后會(huì)檢查聲明的AS號(hào)是否和本地的AS號(hào)一致,一致才可以建立鄰居關(guān)系。 認(rèn)證:BGP在建鄰時(shí)如果做認(rèn)證的話(huà),需要比對(duì)雙方認(rèn)證口令,不一致則無(wú)法建立鄰居關(guān)系。 Router-ID:主要區(qū)分和標(biāo)定路由器。OPEN報(bào)文中攜帶RID的目的是為了確保雙方的RID不一致。確保其唯一性,如果相同,則無(wú)法正常建立鄰居關(guān)系。
holdtime:保活時(shí)間, 這個(gè)參數(shù)默認(rèn)值為 180S,即180S內(nèi)若收不到對(duì)方發(fā)送的keeplive或者UPdate包則將判定BGP鏈接中斷。雙方建鄰時(shí)攜帶這個(gè)值,但是并不要求必須相同。但是,執(zhí)行時(shí)必須相同,所以,將會(huì)選擇二者中較小的作為執(zhí)行時(shí)間
用來(lái)保活鄰居關(guān)系,默認(rèn)周期1min查詢(xún)鄰居關(guān)系是否存在;實(shí)際保活TCP會(huì)話(huà)。 Keeplive報(bào)文的發(fā)送周期為保活時(shí)間(hold time)的1/3,保活時(shí)間默認(rèn)為180S,則周期發(fā)送時(shí)間默認(rèn)為60S。 KeepLive包還有一個(gè)作用:在收到對(duì)方發(fā)送的OPEN報(bào)文后,臨時(shí)充當(dāng)確認(rèn)包的作用。
TCP本身具有確認(rèn)機(jī)制,可以確保傳輸?shù)目煽啃裕@里的確認(rèn)主要是確認(rèn)OPEN報(bào)文中攜帶的參數(shù),如果認(rèn)同對(duì)方的參數(shù),則將回復(fù)Keeplive包進(jìn)行確認(rèn)。 |
BGP中的更新包,用來(lái)攜帶路由條目,包括目標(biāo)網(wǎng)段,子網(wǎng)掩碼信息以及BGP的各種屬性 在UPdate包中存在撤銷(xiāo)路由字段,我們可以直接將不可達(dá)的路由信息放在該字段下進(jìn)行通告,以達(dá)到傳遞失效信息的目的。而不需要像RIP那樣采用帶毒傳輸?shù)姆绞健?/section>
BGP設(shè)計(jì)的一個(gè)告警機(jī)制,出現(xiàn)錯(cuò)誤數(shù)據(jù)時(shí)收發(fā),當(dāng)BGP檢測(cè)到一個(gè)錯(cuò)誤的時(shí)候,將會(huì)用這個(gè)包進(jìn)行告警,告知對(duì)端錯(cuò)誤點(diǎn)在哪
用于改變路由策略后請(qǐng)求對(duì)等體重新發(fā)送路由信息,前提是對(duì)等體雙方均支持路由刷新
idle狀態(tài):空閑狀態(tài),一旦指定鄰居,就處于idle狀態(tài),然后BGP會(huì)首先檢查指定的IP地址在本地路由表中是否可達(dá),如果可達(dá),則開(kāi)始嘗試建立TCP會(huì)話(huà),進(jìn)入下一個(gè)狀態(tài);如果不可達(dá),則將停留在idle狀態(tài) connect狀態(tài):進(jìn)行TCP會(huì)話(huà)連接的狀態(tài)。如果TCP會(huì)話(huà)建立成功,則進(jìn)入下一個(gè)狀態(tài);如果TCP會(huì)話(huà)建立失敗,則進(jìn)入Active狀態(tài),該狀態(tài)會(huì)反復(fù)嘗試TCP連接,如果嘗試超時(shí),則放棄重連,退回到idle狀態(tài)。
注意:在建立TCP會(huì)話(huà)連接時(shí),雙方都會(huì)嘗試建立連接,一方建立成功,則將創(chuàng)建一個(gè)雙向的TCP會(huì)話(huà)通道;雙方都建立成功,則將會(huì)出現(xiàn)兩個(gè)雙向通道。則需要關(guān)閉一個(gè)TCP通道。后面開(kāi)始發(fā)送OPEN報(bào)文,其中會(huì)攜帶RID,雙方將比較RID,僅保留RID大的一端發(fā)起的TCP連接,RID小的一端發(fā)起的TCP連接通道將被斷開(kāi)。 |
OpenSent:開(kāi)始發(fā)送OPEN報(bào)文,報(bào)文中攜帶建立鄰居關(guān)系所需的參數(shù)。當(dāng)收到對(duì)端發(fā)送的OPEN報(bào)文后,并且報(bào)文里的參數(shù)沒(méi)有問(wèn)題,則將回復(fù)一個(gè)keeplive作為確認(rèn),進(jìn)入下一個(gè)狀態(tài);
OPENConfirm:在該狀態(tài),本段在等待對(duì)端keeplive包,當(dāng)對(duì)端收到本端的Open報(bào)文且確認(rèn)參數(shù)無(wú)誤,發(fā)送keeplive包進(jìn)行確認(rèn)進(jìn)入下一個(gè)狀態(tài)。 Established :建立完成狀態(tài) ,標(biāo)志著對(duì)等體關(guān)系的建立。
配置完成后,鄰居間單播TCP三次握手,目標(biāo)端口179,建立TCP的會(huì)話(huà);之后所有的BGP協(xié)議數(shù)據(jù)包基于該會(huì)話(huà)進(jìn)行傳輸 會(huì)話(huà)建立后,鄰居間正常收發(fā)一次open報(bào)文,并互發(fā)keeplive包進(jìn)行確認(rèn)建立BGP的鄰居關(guān)系,并生成鄰居表 鄰居關(guān)系建立后,默認(rèn)每1min,使用keeplive周期保活鄰居關(guān)系,周期保活TCP會(huì)話(huà) 鄰居關(guān)系建立后,管理員選擇性將本地路由表中通過(guò)任意來(lái)源獲取的路由條目,向BGP協(xié)議中進(jìn)行宣告;使用updata數(shù)據(jù)包進(jìn)行鄰居間路由共享;之后生成BGP表; 本地對(duì)BGP表中的路由進(jìn)行選擇,默認(rèn)將最優(yōu)路徑加載于路由表中(最優(yōu)-僅僅基于BGP的選路規(guī)則,不一定為最佳路徑;BGP默認(rèn)不支持負(fù)載均衡) 若出現(xiàn)錯(cuò)誤信息,鄰居間將使用Notification報(bào)文進(jìn)行報(bào)錯(cuò)操作 收斂完成,僅keeplive周期保活即可,默認(rèn)保活時(shí)間為180S,周期發(fā)送時(shí)間為60S。 若發(fā)生結(jié)構(gòu)突變,則將直接發(fā)送UPdate報(bào)文進(jìn)行觸發(fā)更新。
AS間通過(guò)EBGP對(duì)等體交換路由信息,然后通過(guò)單播將獲取到的路由信息發(fā)送給IBGP對(duì)等體,使AS所有運(yùn)行BGP的設(shè)備擁有了所有AS的路由信息,如下:R3從R1學(xué)到AS100的1.0.0.0/8的路由信息,然后通過(guò)單播傳給R7,R7傳給R2,所有AS內(nèi)運(yùn)行BGP的路由器都學(xué)到了1.0.0.0/8的路由信息
矢量協(xié)議的特點(diǎn)是誰(shuí)發(fā)給我這條路由,我到這條路由就找誰(shuí),如果R7想ping1.0.0.0/8,那R7就會(huì)將ping包發(fā)送給R3,由R3轉(zhuǎn)發(fā)。在R7發(fā)送ping包時(shí),它首先查看路由表查找R3的位置,假設(shè)R7通過(guò)R4找R3,那R7就會(huì)將ping包發(fā)給R4,當(dāng)這個(gè)ping包來(lái)到R4上,R4看二層是找自己的,解封裝看三層,發(fā)現(xiàn)這個(gè)ping包的DIP為1.0.0.0/8網(wǎng)段的,但R4上沒(méi)有運(yùn)行BGP,沒(méi)有收到關(guān)于1.0.0.0/8網(wǎng)段的路由信息,所以R4就會(huì)把這個(gè)ping包丟棄,雖然R7上有1.0.0.0/8的網(wǎng)段路由信息,但無(wú)法與R1通信,這就是BGP的路由黑洞。
BGP的路由黑洞:由于BGP協(xié)議可以非直連建鄰,故可能出現(xiàn)BGP協(xié)議跨越未運(yùn)行BGP協(xié)議的路由器,導(dǎo)致BGP路由傳遞后,顯示控制層面可達(dá),但是,數(shù)據(jù)層面,流量經(jīng)過(guò)未運(yùn)行BGP協(xié)議的路由器時(shí),無(wú)法通過(guò),形成路由黑洞。
AS內(nèi)運(yùn)行BGP的設(shè)備將從BGP重發(fā)布到AS內(nèi)運(yùn)行的IGP協(xié)議里:通過(guò)重發(fā)布將BGP所有路由導(dǎo)入到IGP協(xié)議里,同樣需要AS內(nèi)所有設(shè)備可以承載所有AS的路由信息,同第一條一樣不現(xiàn)實(shí)。 物理、邏輯拓?fù)淙B:直接讓AS內(nèi)運(yùn)行BGP協(xié)議的所有設(shè)備互相連接,使IBGP間通信不需要經(jīng)過(guò)未運(yùn)行BGP協(xié)議的設(shè)備,但由一個(gè)AS地理范圍可能很大,IBGP間距離較遠(yuǎn),所以使用真實(shí)鏈路連接IBGP也不現(xiàn)實(shí),所以我們可以用GRE/MGRE等vpn技術(shù),通過(guò)虛擬鏈路連接IBGP對(duì)等體
MPLS:當(dāng)前工程中主要使用的解決BGP路由黑洞方案,MPLS后續(xù)會(huì)講。
注意:在目前我們的學(xué)習(xí)情況下,我們?cè)谧鯞GP實(shí)驗(yàn)時(shí)都是用第一種方法解決路由黑洞 |
下圖中有三個(gè)AS,其中AS:1的一條路由信息傳給了AS:2,AS:2將這條路由信息傳給AS:3,如果AS:3又將這條路由信息傳回給AS:1且AS:1將這條路由信息加表,就會(huì)導(dǎo)致路由環(huán)路。
BGP協(xié)議在路由條目中有一條專(zhuān)門(mén)記錄所經(jīng)過(guò)的AS編號(hào)的路徑屬性,在上圖中AS:1發(fā)出的路由信息會(huì)攜帶編號(hào)1,AS:2將這條路由信息轉(zhuǎn)發(fā)給R3時(shí),添加編號(hào)2;AS:3將這條路由信息轉(zhuǎn)發(fā)給AS:1時(shí),也會(huì)添加編號(hào)3;最終AS:1收到這條路由信息的AS_PATH屬性記錄了1、2、3,R1發(fā)現(xiàn)該屬性中有自己的編號(hào)則拒絕接受這條路由信息,避免環(huán)路產(chǎn)出。
下圖在AS:64513內(nèi),R2、R3、R4兩兩建鄰,如果R2發(fā)布一條路由信息由R4到R3,再到R2,并且R3轉(zhuǎn)發(fā)給R2的路由信息改變了R2的路由表,則會(huì)形成環(huán)路。
因?yàn)锽GP的AS-BY-AS的特性,導(dǎo)致AS內(nèi)部被認(rèn)為是一個(gè)整體,在默認(rèn)情況下,路由的屬性是不會(huì)發(fā)生變化的,所以,無(wú)法通過(guò)屬性來(lái)進(jìn)行防環(huán)。 IBGP水平分割:當(dāng)一個(gè)路由器從一個(gè)IBGP對(duì)等體出學(xué)習(xí)到某一條BGP路由時(shí),他將不再把這條路由信息通告給其他的IBGP對(duì)等體。
IBGP水平分割可以有效的解決IBGP對(duì)等體之間路由回傳造成的環(huán)路問(wèn)題,但是,也會(huì)引發(fā)路由信息傳遞障礙問(wèn)題。如下圖中,如果R1學(xué)到其他AS的路由信息,它會(huì)將這些路由信息傳遞給R2,但由于IBGP水平分割,R2不能將這些路由信息傳遞給R3,R3就無(wú)法獲取R1收集到的路由信息。
想要避免IBGP水平分割帶來(lái)的問(wèn)題,可以讓所有AS內(nèi)部運(yùn)行BGP的路由器均建立IBGP對(duì)等體關(guān)系, 這種建立全連的IBGP對(duì)等體的方案并不是最佳解決方案,因?yàn)椋?dāng)一個(gè)AS內(nèi)運(yùn)行BGP協(xié)議的路由器數(shù)量較多時(shí),建立全連的鄰居關(guān)系,將造成大量的資源浪費(fèi),并且降低網(wǎng)絡(luò)的可擴(kuò)展性。 BGP存在兩個(gè)技術(shù)專(zhuān)門(mén)用于解決IBGP水平分割帶來(lái)的問(wèn)題:1.路由反射器,2.聯(lián)邦。
啟動(dòng)BGP進(jìn)程,1 指的時(shí)該路由器所在的AS號(hào);因?yàn)橐粋€(gè)路由只能屬于一個(gè)AS中,所以一個(gè)路由器只能啟動(dòng)一個(gè)BGP進(jìn)程
配置RID,BGP要求鄰居間的RID不能相同,可以手工配置,也可以自動(dòng)獲取
1 [r1-bgp]router-id 1.1.1.1 |
-
指定建鄰的IP地址和鄰居所在的AS的編號(hào),指定鄰居IP后,如果該鄰居可達(dá),則嘗試建立TCP會(huì)話(huà)。
1 [r1-bgp]peer 12.0.0.2 as-number 2 -- #鄰居關(guān)系指定是雙向的 |
由于鄰居在收到數(shù)據(jù)包時(shí),會(huì)檢測(cè)該包的源IP和本地指定的鄰居IP是否相同,不同則無(wú)法建鄰。所以一旦使用環(huán)回地址作為建鄰地址,同時(shí)需要修改源IP地址未本地環(huán)回地址。
1 [r1]ip route-static 2.2.2.2 32 12.1.1.2 |
因?yàn)镋BGP對(duì)等體之間一般采用直連建鄰的方法,所以,EBGP對(duì)等體之間的數(shù)據(jù)包中的TTL值設(shè)置為1,這意味著R1只能與R2的g 0/0/0口通信而不能與R2的環(huán)回通信,所以使用EBGP對(duì)等體環(huán)回建鄰時(shí)需要修改數(shù)據(jù)報(bào)的TTL值。