0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

吃透BGP,永遠(yuǎn)繞不開(kāi)這些基礎(chǔ)概述,看完再也不怕BGP了!

jf_HnAzBl9o ? 來(lái)源:網(wǎng)絡(luò)工程師筆記 ? 2023-11-13 16:07 ? 次閱讀

總有人在私信里抱怨,BGP實(shí)在是太難了!

一是這玩意兒本來(lái)就很復(fù)雜,需要處理大量的路由信息和復(fù)雜的算法;再一個(gè)是需要你有一定的實(shí)戰(zhàn)經(jīng)驗(yàn)才能深入理解運(yùn)作。

88ec92be-81c2-11ee-939d-92fbcf53809c.png

雖然BGP確實(shí)有一定難度,但你總得先從技術(shù)理論開(kāi)始吃透它吧?

學(xué)習(xí)掌握了BGP,對(duì)工作中提高網(wǎng)絡(luò)性能、增強(qiáng)網(wǎng)絡(luò)穩(wěn)定性以及安全性等等多方面,都挺關(guān)鍵的。

想吃透BGP,繞不開(kāi)我今天要說(shuō)的這些基礎(chǔ)概述和實(shí)例!

01

基礎(chǔ)概述

說(shuō)BGP之前,我們先從計(jì)算機(jī)網(wǎng)絡(luò)的基礎(chǔ)開(kāi)始說(shuō)起。

當(dāng)前所使用的計(jì)算機(jī)網(wǎng)絡(luò)中,一個(gè)網(wǎng)絡(luò)通常用一個(gè)IP網(wǎng)段來(lái)表示。

要將所有網(wǎng)絡(luò)連接起來(lái),并且要通信,就需要將這些IP網(wǎng)段連接起來(lái),讓每個(gè)IP網(wǎng)段都知道其它IP網(wǎng)段的信息,就可以實(shí)現(xiàn)全網(wǎng)通信。

將網(wǎng)絡(luò)與網(wǎng)絡(luò)連接起來(lái)的設(shè)備都是路由器,只要網(wǎng)絡(luò)中每一臺(tái)路由器都得知所有的IP網(wǎng)段信息,就可以為全網(wǎng)提供數(shù)據(jù)轉(zhuǎn)發(fā)。

如果某一臺(tái)路由器不能得知所有的IP網(wǎng)段信息,也就表示這臺(tái)路由器所連接的網(wǎng)絡(luò)不能與其他網(wǎng)段通信。

為了幫助路由器獲得全網(wǎng)IP網(wǎng)段信息,因此路由協(xié)議工作在路由器與路由器之間,讓網(wǎng)絡(luò)中每一臺(tái)路由器都擁有全網(wǎng)完整的路由信息,從而實(shí)現(xiàn)全網(wǎng)可達(dá)。

從上可以看出,路由協(xié)議在路由器之間傳遞路由信息,是保證網(wǎng)絡(luò)通信的基礎(chǔ)。

如果路由器協(xié)議傳遞了錯(cuò)誤的路由信息,或者沒(méi)有傳遞路由信息,將導(dǎo)致某些網(wǎng)絡(luò)通信的中斷,所以路由協(xié)議從一臺(tái)路由收到路由更新后,必須毫不保留地傳遞給其它路由器。

而當(dāng)一個(gè)網(wǎng)絡(luò)失效后,也必須告知其它路由器該網(wǎng)段不可達(dá),需要將相應(yīng)路由器刪除。

當(dāng)全網(wǎng)每一臺(tái)路由器都需要擁有所有的路由信息,并且完全一致時(shí),這種狀態(tài)被稱為收斂狀態(tài),一個(gè)網(wǎng)絡(luò)只有在收斂狀態(tài)時(shí),才能保證全網(wǎng)可達(dá)。

而當(dāng)今所使用的龐大的互聯(lián)網(wǎng),是由數(shù)萬(wàn)臺(tái)路由器連接起來(lái)的。

如果每一臺(tái)路由器都擁有互聯(lián)網(wǎng)中的每一條路由信息,那么就意味著每一臺(tái)路由器都將擁有數(shù)十萬(wàn)甚至數(shù)百萬(wàn)條路由條目,這個(gè)數(shù)量是驚人的。

但是由于路由協(xié)議的特征以及互聯(lián)網(wǎng)全網(wǎng)通信的需求,就必須讓互聯(lián)網(wǎng)中每一臺(tái)路由器將自己的路由信息與其它路由器互換,使整個(gè)互聯(lián)網(wǎng)的達(dá)到收斂狀態(tài)。

雖然這是鐵定的要求,但是請(qǐng)仔細(xì)想一下,這是萬(wàn)萬(wàn)不可能的。

因?yàn)橐粋€(gè)擁有數(shù)萬(wàn)臺(tái)路由器組建起來(lái)的超大型網(wǎng)絡(luò),永遠(yuǎn)不可能達(dá)到收斂狀態(tài)。

當(dāng)某個(gè)網(wǎng)絡(luò)斷開(kāi)時(shí),先得知的路由器需要將這個(gè)信息告知給其它所有路由器,因?yàn)樾畔⑹且慌_(tái)傳一臺(tái)傳過(guò)去的,所以一個(gè)網(wǎng)絡(luò)斷開(kāi)的信息要讓數(shù)萬(wàn)臺(tái)路由器都知道,這需要很長(zhǎng)的時(shí)間。

并且可能在這個(gè)信息還沒(méi)有傳遍整個(gè)網(wǎng)絡(luò)時(shí),這個(gè)之前中斷的網(wǎng)絡(luò)就恢復(fù)了正常。

那么這時(shí),先知道的路由器又要重新向網(wǎng)絡(luò)中通告該網(wǎng)段恢復(fù)正常的信息。

如此一來(lái),互聯(lián)網(wǎng)中不斷變化的網(wǎng)絡(luò),會(huì)讓所有路由器不停地傳遞路由信息,結(jié)果是導(dǎo)致網(wǎng)絡(luò)中路由信息的不一致,也將導(dǎo)致龐大的路由更新影響所有路由器的性能。

因此,互聯(lián)網(wǎng)中,一個(gè)網(wǎng)絡(luò)的中斷與恢復(fù),實(shí)在沒(méi)有必須通告給數(shù)以萬(wàn)計(jì)的路由器。

而網(wǎng)絡(luò)的信息,必須向其它路由器通告。

那么,一臺(tái)路由器的路由信息,既然沒(méi)有必須向網(wǎng)絡(luò)中每一臺(tái)路由器通告,它究竟該通告給哪些路由器呢?

或者換句話說(shuō),它的路由更新通告的范圍究竟有多大呢?

基于以上種種原因,所以我們將–臺(tái)路由器的路由更新限制在一定的范圍內(nèi),也只有這樣,一個(gè)被劃分為更小范圍的網(wǎng)絡(luò),才能達(dá)到收斂狀態(tài)。

所以現(xiàn)實(shí)情況是,我們的互聯(lián)網(wǎng)被劃分成了一個(gè)一個(gè)更小范圍的網(wǎng)絡(luò)。

任何一臺(tái)路由器的路由更新,被限制在這個(gè)特定的范圍內(nèi),而這個(gè)特定的范圍,就是你應(yīng)該知道的被稱為自治系統(tǒng)的網(wǎng)絡(luò)范圍,即autonomous system (AS)。

互聯(lián)網(wǎng)中路由協(xié)議的更新只應(yīng)該在一一個(gè)AS內(nèi)部傳遞。

但是互聯(lián)網(wǎng)是需要全網(wǎng)通信的,所以必須讓每一個(gè)AS都能夠獲得其它AS的路由信息才行。

因此,路由協(xié)議被定義為兩種截然不同的種類,即只在一一個(gè)AS內(nèi)部更新的路由協(xié)議,稱為Interior Gateway Protocol(IGP) 。

以及在AS 與AS之間更新的路由協(xié)議,稱為 Border Gateway Protocol (BGP)。

需要更多的解釋,將互聯(lián)網(wǎng)劃分成多個(gè)AS,目的并不僅僅是將路由協(xié)議的更新限制在特定的范圍內(nèi);

還有一個(gè)重要的原因是,將互聯(lián)網(wǎng)劃分成若千個(gè)小范圍的網(wǎng)絡(luò)后,那么這每一個(gè)小網(wǎng)絡(luò)就可以單獨(dú)定義各自的路由策略與安全策略,并且這樣不需要干擾其它AS,也不受其它AS干擾。

比如網(wǎng)絡(luò)中若干的ISP,這些ISP對(duì)自己的網(wǎng)絡(luò)需要制定自己的策略,又需要讓這些策略保持私有性而不與其它ISP互相干擾,所以劃分AS,幫他們實(shí)現(xiàn)了這個(gè)目的。

只能在一個(gè)AS內(nèi)部傳遞更新的IGP路由協(xié)議有RIP, EIGRP, OSPF, IS-IS, 可以在AS之間傳遞更新的路由協(xié)議目前只有BGP。

但是有個(gè)特別之處是,EIGRP 也使用了AS的概念來(lái)工作。

運(yùn)行EIGRP的網(wǎng)絡(luò)也會(huì)被劃分成多個(gè)AS,雖然默認(rèn)情況下,EIGRP不能在AS與AS之間更新路由信息,但是EIGRP也可以實(shí)現(xiàn)AS之間的路由更新。

需要說(shuō)明的是,EIGRP概念中的AS與BGP的AS并無(wú)任何關(guān)聯(lián),它們之間沒(méi)有任何共同操作性。

真正的AS是指BGP的AS,而EIGRP不管有什么樣的AS特征,它永遠(yuǎn)被限制在BGP的單一AS之中。

02

BGP AS

對(duì)于BGP的AS號(hào)碼的分配,是由Internet Assigned Number Authority(IANA)機(jī)構(gòu)來(lái)統(tǒng)一規(guī)劃和分配的。

IOS中運(yùn)行的BGP,目前最多支持4字節(jié)長(zhǎng)度的AS號(hào)碼,但并不表示所有AS號(hào)碼都能任意配置。

在2009年1月之后,(IANA)決定使用4字節(jié)長(zhǎng)度AS范圍是65535-4294967295。

當(dāng)前,通常還是使用2字節(jié)長(zhǎng)度的AS,也就是1-65535,所以不對(duì)4字節(jié)的AS號(hào)碼做太多討論。

因?yàn)锽GP是使用在互聯(lián)網(wǎng)之中的,互聯(lián)網(wǎng)由多個(gè)BGP AS域組成,所以互聯(lián)網(wǎng)中不能出現(xiàn)AS號(hào)碼相同的域。

如果一臺(tái)路由器要接入互聯(lián)網(wǎng)并運(yùn)行BGP,那么必須向IANA申請(qǐng)合法的AS號(hào)碼。

為了考慮到某些大型企業(yè)需要使用BGP與ISP對(duì)接,而又沒(méi)有足夠的AS號(hào)碼用來(lái)給企業(yè)用戶,所以將AS號(hào)碼劃分為公有AS和私有AS。

公有AS的范圍是1-64511,私有AS范圍是64512-65534。

公有AS只能用于互聯(lián)網(wǎng),并且全球唯一,不可重復(fù),而私有AS可以在得不到合法AS的企業(yè)網(wǎng)絡(luò)使用,可以重復(fù)。

很顯然,因?yàn)樗接蠥S可以被多個(gè)企業(yè)網(wǎng)絡(luò)重復(fù)使用,所以這些私有AS不允許傳入互聯(lián)網(wǎng),ISP在企業(yè)用戶邊緣,需要過(guò)濾掉帶有私有AS號(hào)碼的路由條目。

03

BGP 鄰居

如果你在自己的PC上從某個(gè)FTP服務(wù)器下載文件,那么你的PC只要和FTP服務(wù)器是通暢的即可。

也就是說(shuō)你的PC只要ping得通FTP服務(wù)器就行,不管距離有多遠(yuǎn),因?yàn)椴豢赡軓腇TP服務(wù)器上下載文件的PC都與之是直接連在一起的。

PC從FTP服務(wù)器下載文件時(shí),使用的是TCP傳輸,當(dāng)數(shù)據(jù)在中途出現(xiàn)丟包時(shí),被丟棄的數(shù)據(jù)包能夠得到重新傳遞,從而保證下載的文件是完整的。

由于BGP運(yùn)行在整個(gè)互聯(lián)網(wǎng),傳遞著數(shù)量龐大的路由信息,因此需要讓BGP路由器之間的路由傳遞具有高可靠性和高準(zhǔn)確性;

所以BGP路由器之間的數(shù)據(jù)傳輸使用了TCP協(xié)議,端口號(hào)為179,并且指的是會(huì)話目標(biāo)端口號(hào)為179,而會(huì)話的目標(biāo)端口號(hào)為179,而會(huì)話源端口號(hào)是隨機(jī)的。

正因?yàn)锽GP使用了TCP協(xié)議傳遞,所以兩臺(tái)運(yùn)行BGP的路由器只要通信正常,也就是說(shuō)只要ping得通,而不管路由器之間的距離有多遠(yuǎn),都能形成BGP鄰居,從而互換路由信息。

一個(gè)配置BGP進(jìn)程的路由器只能稱為BGP-Speaker,當(dāng)和其它運(yùn)行了BGP的路由器形成鄰居之后,就被稱為BGP-Peer。

如果一個(gè)網(wǎng)絡(luò)中的多臺(tái)路由器都運(yùn)行OSPF之后,那么這些路由器會(huì)在相應(yīng)網(wǎng)段去主動(dòng)發(fā)現(xiàn)OSPF鄰居,并主動(dòng)和對(duì)對(duì)方形成OSPF鄰居。

而一個(gè)路由器運(yùn)行BGP后并不會(huì)主動(dòng)去發(fā)現(xiàn)和尋找其它BGP鄰居,BGP的鄰居必須手工指定。

BGP和其它路由協(xié)議一樣,傳遞的是網(wǎng)絡(luò)層協(xié)議,如IP協(xié)議,除此之外,BGP還能夠傳遞除IP協(xié)議之外的其它網(wǎng)絡(luò)層協(xié)議,能夠傳遞的協(xié)議如下:

!!IP Version 4 (IPv4) IP Version 6 (IPv6)
Virtual Private Netwoks version 4 (VPNv4)
Connectiononless Network Service (CLNS)
Layer 2 VPN(L2VPN)

這些協(xié)議都被為 address family,配置時(shí),需要進(jìn)入相應(yīng)的協(xié)議 address family 模式,而IPv4除外。

所有命令在address family 中獨(dú)立配置,獨(dú)立生效,并且都擁有獨(dú)立的數(shù)據(jù)庫(kù)。

正常的BGP配置模式被稱為NLRI模式中配置,在NLRI模式中配置的參數(shù)只對(duì)IPv4單播生效。

IOS支持四個(gè)AFI模式,為IPv4,IPv6,CLNS,VPNv4,并且IPv4和IPv6還有單播和組播之分。

思科路由器運(yùn)行的BGP為version4,一臺(tái)路由器只能運(yùn)行一個(gè)BGP進(jìn)程,并且整臺(tái)路由器只能屬于一個(gè)AS;

但是一臺(tái)路由器可以承載多個(gè)address Family,而一個(gè)支持多個(gè)address family 的BGP和一個(gè)不支持的可以正常通信,但這也僅限于IPv4。

一臺(tái)BGP路由器運(yùn)行在一個(gè)單一的AS內(nèi),在和其它BGP路由器建立鄰居時(shí),如果對(duì)方路由器和自己屬于相同AS,則鄰居關(guān)系為 Internal BGP(iBGP),如果屬于不同AS,則鄰居關(guān)系為external BGP (eBGP)。

BGP要求eBGP鄰居必須直連,而iBGP鄰居可以任意距離,但這些都是可以改變的。

在BGP形成鄰居后,開(kāi)始會(huì)交換所有路由信息,但是之后都采用增量更新,也就是只有在路由有變化時(shí)才更新,并且只更新有變化的路由。

BGP建立鄰居后,開(kāi)始后,會(huì)通過(guò)相互發(fā)送類似hello包的數(shù)據(jù)來(lái)維持鄰居關(guān)系,這個(gè)數(shù)據(jù)包稱為Keepalive,便認(rèn)為鄰居丟失,則斷開(kāi)與鄰居的連接。

BGP之間建立鄰居,需要經(jīng)歷如下幾個(gè)過(guò)程:

Idle——BGP 進(jìn)程被啟動(dòng)或被重置,這個(gè)狀態(tài)是等待開(kāi)始,比如等于指定一個(gè)BGPpeer,當(dāng)收到TCP連接請(qǐng)求后,便初始化另外一個(gè)事件,當(dāng)路由器或peer重置,都會(huì)回到idle狀態(tài)。

Connect——檢測(cè)到有peer要嘗試建立TCP連接。

Active——嘗試和對(duì)方peer建立TCP連接,如有故障,則回到idle狀態(tài)。

OpenSent——TCP 連接已經(jīng)建立,BGP發(fā)送了一個(gè)0PEN消息給對(duì)方peer,然后切換到OpenSent狀態(tài),如果失敗,則切換到Active狀態(tài)。

OpenReceive——收到對(duì)方peer的OPEN消息,并等待keepalive消息,如果收到keepalive,則轉(zhuǎn)到Establ ished狀態(tài),如果收到notification,則回到idle狀態(tài),比如錯(cuò)誤或配置改變,都會(huì)發(fā)送notification而回到idle狀態(tài)。

Established——從對(duì)端peer收到子keepalive,并開(kāi)始交換數(shù)據(jù),收到keepalive后,holdtimer都會(huì)被重置,如果收到notification,就回到idle 狀態(tài)。

05

BGP 更新源

BGP并不能主動(dòng)在網(wǎng)絡(luò)中尋找鄰居,必須手工指定BGP鄰居的地址,那么BGP才會(huì)將數(shù)據(jù)包發(fā)往指定的地址來(lái)請(qǐng)求建立鄰居。

與此同時(shí),BGP發(fā)出的請(qǐng)求數(shù)據(jù)包除了寫明目標(biāo)IP地址外,還要寫上自己的IP地址,即BGP源地址。

路由器自己產(chǎn)生流量后從接口發(fā)出時(shí),流量從哪個(gè)接口被發(fā)出,那么這些數(shù)據(jù)包的源IP地址就是哪個(gè)接口的地址。

因此當(dāng)BGP發(fā)出數(shù)據(jù)包尋找鄰居時(shí),這些數(shù)據(jù)包從那些接口被發(fā)出,那么BGP源IP地址就是哪個(gè)接口的地址。

要兩臺(tái)BGP路由器要正常建立鄰居,必須雙方路由器都相互指定鄰居,相互發(fā)送數(shù)據(jù)包才行。

當(dāng)一臺(tái)BGP路由器收到建立鄰居的請(qǐng)求后,如果發(fā)現(xiàn)數(shù)據(jù)包的目標(biāo)IP不是自己的BGP源地址。

那么就拒絕該連接的請(qǐng)求后,只有當(dāng)請(qǐng)求數(shù)據(jù)包的目標(biāo)與自己的BGP源地址相同時(shí),才可建立BGP鄰居。

需要注意的是,這個(gè)條件只在兩個(gè)鄰居之間,任意一個(gè)鄰居滿足條件即可,并不需要雙方都滿足;

也就是說(shuō)一方收到的數(shù)據(jù)包目標(biāo)IP與自己的BGP源地址相同即可;

另一方收到的數(shù)據(jù)包目標(biāo)IP與它的BGP源地址不同也沒(méi)關(guān)系,只要單方面符合條件就行,但我們通常都將BGP兩端的源與目標(biāo)保持一致。

BGP 的源地址是可以隨意更改的,但只能是路由器上的接口地址。如下圖:

892c0232-81c2-11ee-939d-92fbcf53809c.png

在上圖中,R1與R2之間有兩條鏈路。

當(dāng)配置BGP鄰居時(shí),如果R1指定鄰居地址為12. 1.1.2, R2指定鄰居地址為12. 1.1.1。

那么在建立鄰居過(guò)程中,R1 將請(qǐng)求數(shù)據(jù)包從接口F0/0發(fā)出,數(shù)據(jù)包的目標(biāo)IP為12. 1. 1.2, BGP 源地址為F0/0的接口地址12. 1.1.1。

當(dāng)R2將請(qǐng)求數(shù)據(jù)包從接口F0/0發(fā)出時(shí),數(shù)據(jù)包的目標(biāo)IP為12.1. 1.1, BGP 源地址為F0/0的接口地址12. 1.1.2。

由于R1發(fā)出的數(shù)據(jù)包目標(biāo)IP12. 1.1.2與R2的BGP源地址12. 1. 1.2完全相同,所以最終能夠正常建立BGP鄰居。

R1在檢測(cè)地址時(shí),R2的目標(biāo)IP與R1的源也完全相同,通常我們都保證雙方一致。

當(dāng)R1與R2之間的直連接口F0/0中斷后,如果雙方將數(shù)據(jù)包從S0/0發(fā)出,那么R1的源地址就是10. 1. 1.1, R2的源地址就是20. 1.1.2;

由此可以看出,雙方發(fā)出的數(shù)據(jù)包的目標(biāo)IP都與對(duì)方的源地址不符,所以無(wú)法建立BGP鄰居。

雖然在上面的網(wǎng)絡(luò)環(huán)境中,雙方路由器之間都擁有多條鏈路,在中斷某條鏈路之間,仍然可以通信,但是這并不能保證BGP鄰居的永久連接。

為了使擁有多條鏈路的BGP鄰居之間永遠(yuǎn)保持連接,考慮到路由器的loopback口在設(shè)備正常工作的情況下,不會(huì)像物理接口那樣出現(xiàn)中斷,所以建議在BGP鄰居之間使用loopback 接口的地址來(lái)建立TCP連接。

當(dāng)指定鄰居時(shí),不再將鄰居的地址指定為對(duì)方物理接口地址,而改為指定對(duì)方的loopback地址。

這樣一來(lái),既然物理接口中斷,只要還有通暢的鏈路,那么BGP鄰居仍然可以保持連接。

在將BGP鄰居地址指定為對(duì)方loopback地址時(shí),為了使數(shù)據(jù)包的目標(biāo)IP與對(duì)方的BGP源地址相同,所以鄰居也要將BGP源地址更改為自己的loopback接口地址,從而使得雙方正常建立BGP連接。

在上圖中,當(dāng)R1指定鄰居地址為2.2.2.2,BGP 源地址為1.1.1.1, 而R2指定鄰居地址為1.1.1.1, BGP源地址為2.2.2.2,這樣一來(lái),雙方的目標(biāo)IP都與對(duì)方的BGP源地址相同。

所以可以正常建立鄰居,并且在雙方鏈路中,任何一條鏈路斷開(kāi),都不影響鄰居的會(huì)話,BGP 的連接仍然保持而不會(huì)中斷,實(shí)現(xiàn)了連接的冗余性和穩(wěn)定性。

06

BGP TTL

BGP的路由可能會(huì)從一個(gè)AS發(fā)往另外一個(gè)AS,從而穿越多個(gè)AS。

但是由于運(yùn)行BGP的網(wǎng)絡(luò)會(huì)是一個(gè)很大的網(wǎng)絡(luò),路由從一個(gè)AS被發(fā)出,可能在經(jīng)過(guò)轉(zhuǎn)發(fā)之后,又回到了開(kāi)始的AS之中,形成路由環(huán)路。

所以出于防止環(huán)路的目的考慮,BGP 在將路由發(fā)往其它AS時(shí),也就是發(fā)給eBGP鄰居時(shí),需要在路由中寫上自己的AS號(hào)碼。

下一個(gè) AS收到路由后,再發(fā)給其它AS時(shí),除了保留之前的AS號(hào)碼之外,也要添加上自己的AS號(hào)碼。

這樣寫在路由中的AS被稱為AS -path,如果BGP收到的路由的AS_ PATH中包含自己的AS號(hào)碼,就認(rèn)為路由被發(fā)了回來(lái),以此斷定出現(xiàn)了路由環(huán)路,就會(huì)丟棄收到的路由。

BGP只有在將路由發(fā)給eBGP時(shí),才會(huì)在AS- path中添加自己的AS號(hào)碼,而在發(fā)給iBGP時(shí),是不會(huì)添加AS號(hào)碼的。

因?yàn)閕BGP鄰居在同一個(gè)AS中,即使要添加,AS 號(hào)碼全是一樣的,所以沒(méi)有必要。

894d1f80-81c2-11ee-939d-92fbcf53809c.png

在上圖中,當(dāng)路由穿越各個(gè)AS時(shí),所有發(fā)給eBGP鄰居的路由,都會(huì)在AS-path中添加自己的AS,自己的AS總是添加在AS-path的前面。

例如:

一條路由從AS10被發(fā)往AS 20,則AS-path為“10”,當(dāng)AS 20 將路由發(fā)往AS 30時(shí),添加上自己的AS號(hào)碼20之后,AS- path變成“20, 10”,當(dāng)AS 30將路由發(fā)往AS 50時(shí),AS 50收到的路由的AS-path為“30, 20, 10”。

當(dāng)AS 30將路由發(fā)給AS 40, AS 40再將路由發(fā)給AS 10時(shí),路由的AS- path為“40, 30,20, 10”;

由于AS 10 在收到路由后,發(fā)現(xiàn)AS- path中包含自己的AS號(hào)碼10,所以認(rèn)為出現(xiàn)環(huán)路,便丟棄收到的所有路由。

在IGP協(xié)議中,我們將路由協(xié)議分成兩大類:距離矢量路由協(xié)議和鏈路狀態(tài)路由協(xié)議,而B(niǎo)GP被劃分為路徑矢量路由協(xié)議(path-vector routing) ,路徑矢量算法結(jié)合了距離矢量特性與AS- path防環(huán)特性。

因?yàn)锽GP在將路由發(fā)給eBGP鄰居時(shí),會(huì)將自己的AS號(hào)碼添加到AS- path中,所以可以以此來(lái)防止環(huán)路。

而在將路由發(fā)給iBGP時(shí),是不會(huì)往AS -path添加AS號(hào)碼的,因此在iBGP之間傳遞路由時(shí),沒(méi)有防止環(huán)路的機(jī)制。

考慮到為iBGP之間的路由傳遞也加入防環(huán)機(jī)制,因而強(qiáng)制將BGP路由在AS內(nèi)部只傳一跳。

具體操作為:

一臺(tái)BGP路由器從eBGP鄰居收到路由,發(fā)給iBGP鄰居之后,iBGP鄰居收到后就不能再傳給其它任何iBGP鄰居,只能傳遞給eBGP鄰居。

此規(guī)則被多數(shù)人稱為BGP的水平分割,就是一臺(tái)BGP路由器從iBGP鄰居收到的路由,不能傳遞給其它iBGP 鄰居,只能傳給eBGP鄰居。如下圖:

896d6f38-81c2-11ee-939d-92fbcf53809c.png

在上圖中,當(dāng)R1從eBGP鄰居R6那里收到路由后,可以發(fā)給任何iBGP鄰居,包括R3和R4。

當(dāng)R3從iBGP鄰居R1那里收到路由后,不可以轉(zhuǎn)發(fā)給任何iBGP鄰居,只可以轉(zhuǎn)發(fā)給eBGP鄰居,所以R3從R1收到路由后,只能轉(zhuǎn)發(fā)給eBGP鄰居R5。

由于R3和R4從R1收到路由后,都不可以轉(zhuǎn)發(fā)給iBGP鄰居R2。

在上圖環(huán)境中,終造成R2無(wú)法接收任何路由,要讓R2收到路由,建議在R1與R2之間再建立一條BGP會(huì)話。

所以如此一來(lái),在同一個(gè)AS中,要將路由全網(wǎng)傳遞,就需要在iBGP鄰居之間配置全互聯(lián),最終AS 20內(nèi)的鄰居關(guān)系如下圖:

898f70f6-81c2-11ee-939d-92fbcf53809c.png

在AS內(nèi)部,除了建立全互聯(lián)的iBGP鄰居關(guān)系外,還可以通過(guò)BGP Reflector (BGP反射器)和BGP Confederation(BGP聯(lián)邦)的方式來(lái)實(shí)現(xiàn)路由全網(wǎng)傳遞,將在后續(xù)介紹。

07

BGP路由表

當(dāng)路由器之間建立BGP鄰居之后,就可以相互交換BGP路由。

一臺(tái)運(yùn)行了BGP協(xié)議的路由器,會(huì)將BGP得到的路由與普通路由分開(kāi)存放,所以BGP路由器會(huì)同時(shí)擁有兩張路由器:

一張是存放普通路由的路由表,被稱為IGP路由表。

就是平時(shí)我們使用命令show ip route 看到的路由表,IGP 路由表的路由信息只能從IGP協(xié)議和手工配置獲得,并且只能傳遞給IGP協(xié)議。

另外一張就是運(yùn)行BGP之后創(chuàng)建的路由表,稱為BGP路由表。

需要通過(guò)命令show ip bgp才能查看,BGP路由表的路由信息只能傳遞給BGP協(xié)議,如果兩臺(tái)BGP鄰居的BGP路由表為空,就不會(huì)有任何路由傳遞。

在初始狀態(tài)下,BGP 的路由表為空,沒(méi)有任何路由,要讓BGP傳遞相應(yīng)的 路由,只能先將該路由導(dǎo)入BGP路由表,之后才能在BGP鄰居之間傳遞。

默認(rèn)情況下,任何路由都不會(huì)自動(dòng)進(jìn)入BGP路由表,BGP路由表的路由獲得有多種方式:

可以從BGP鄰居獲得,也可以手工將IGP路由導(dǎo)入BGP路由表,還可以將其它路由重分布進(jìn)BGP。

只要BGP的路由不是從鄰居學(xué)習(xí)到的而是手工導(dǎo)入的,那么這樣的路由被稱為BGP本地路由。

因?yàn)锽GP的鄰居類型分為兩種:

eBGP和iBGP,所以BGP路由的AD值也有區(qū)分,如果BGP的路由是從eBGP學(xué)習(xí)到的,AD值為20。

可以發(fā)現(xiàn),從eBGP鄰居學(xué)習(xí)到的路由,將優(yōu)于任何IGP協(xié)議:從iBGP學(xué)習(xí)到的路由的AD值為200,同樣可以發(fā)現(xiàn),此類路由的優(yōu)先級(jí)低于任何IGP協(xié)議。

BGP 除了以上兩種AD值之外,如果BGP 路由是從本地手工導(dǎo)入的,即BGP本地路由,則BGP本地路由的AD值為200,與iBGP路由的AD值相同,優(yōu)先級(jí)低于任何IGP協(xié)議。

如果某一條相同的路由同時(shí)從eBGP和iBGP以及本地路由學(xué)習(xí)到,那么究竟哪條路由會(huì)被選擇為最優(yōu)路徑呢?

路由的AD值并不一定會(huì)影響到路徑選擇,因?yàn)锽GP并不會(huì)在一開(kāi)始,就通過(guò)比較AD值來(lái)選擇最優(yōu)路徑。

08

BGP 同步

BGP鄰居之間的通信與交流運(yùn)行在TCP的基礎(chǔ)上,在兩個(gè)節(jié)點(diǎn)之間,只要網(wǎng)絡(luò)是通的,就能夠建立TCP。

網(wǎng)絡(luò)的連通,可以是任何IGP路由協(xié)議,甚至是靜態(tài)路由,總之,只要網(wǎng)絡(luò)是通的,TCP 連接就一定能夠建立起來(lái)。

只要讓兩臺(tái)路由器之間連通,保證TCP能夠正常連接,就能夠保證BCP的通信。

在一個(gè)AS中,除了需要建立BGP連接之外,同時(shí)還需要運(yùn)行FGP協(xié)議。

其中運(yùn)行BGP的目的是為了在大型網(wǎng)絡(luò)中傳遞龐大的路由表或路由信息,而運(yùn)行IGP協(xié)議的目的可想而知,并不是為了傳遞龐大的路由信息;

在AS中運(yùn)行IGP的根本目的是為了讓BGP路由器之間能夠建立TCP連接,從而為BGP的通信服務(wù)。

因此可以看出,BGP 就像是 一輛運(yùn)貨的卡車,BGP 的路由就是卡車要運(yùn)的貨,而IGP協(xié)議就是為了在站與站之間鋪平道路,如果沒(méi)有IGP去讓道路連通,那么BGP就無(wú)法在站與站之間運(yùn)送貨物。

因?yàn)锽GP在建立鄰居時(shí),BGP的源地址可以是任意地址,這些地址可以不是直連的,只要是能通信的,能建立TCP連接即可。

當(dāng)BGP在向鄰居發(fā)送流量時(shí),只要將流量發(fā)往鄰居的對(duì)端地址,因?yàn)猷従拥牡刂凡⒉灰欢ㄊ侵边B的,所以要找到去往鄰居地址的路徑,可能需要查詢IGP路由表,因?yàn)镮GP為BGP的通信與連接提供了保證。

由此可見(jiàn),BGP 要將數(shù)據(jù)發(fā)給鄰居,BGP 在查詢?nèi)ネ従拥穆窂綍r(shí),采用的是遞歸查詢,BGP 查詢?nèi)ネ従拥倪^(guò)程中,可能要多次查詢IGP路由表;

只要在IGP路由表中找到了去往鄰居地址的相應(yīng)路徑或相應(yīng)下一跳,那么就會(huì)將數(shù)據(jù)發(fā)給這個(gè)下一跳。

在上圖的網(wǎng)絡(luò)中,R1與R4建立eBGP連接,R3與R5建立eBGP連接,而R1與R3建立iBGP連接。

在R1與R3建立iBGP連接時(shí),R1通過(guò)目標(biāo)地址3.3.3.3找到鄰居R3, R1的BGP源地址為1.1.1.1, 而R3也通過(guò)目標(biāo)地址1. 1. 1.1找到鄰居R1,R3的BGP源地址為3.3.3.3;

為了讓1.1. 1.1和3.3. 3.3能夠正常通信,從而建立TCP連接,R1、R2、R3之間啟用了IGP協(xié)議0SPF, OSPF的目的只是為了使1.1.1.1能夠與3.3.3.3通信,并不傳遞AS中龐大的路由信息。

當(dāng)AS 10中的R4將網(wǎng)段10. 1.1.0/24通告給AS 20中的R1后,因?yàn)镽1與R3之間是iBGP鄰居,所以R1將路由10.1.1.0/24傳遞給R3,最終R3將路由10.1.1.0/24傳遞給AS30中的R5。

當(dāng)R5將目的地為10.1.1.0/24的流量發(fā)給R3時(shí),R3在查詢路由表后得知,去往10.1. 1. 0/24的數(shù)據(jù)包需要發(fā)給iBGP鄰居1.1.1.1才能夠到達(dá);

于是R3便執(zhí)行遞歸查詢,查詢?nèi)绾稳ネ?.1.1.1,正因?yàn)镽1與R3之間的通信是靠OSPF提供的,所以R3得知去往1.1.1.1必須將數(shù)據(jù)包交給R2;

即給下一跳23.1.1.2,因?yàn)镽2只運(yùn)行了OSPF為BGP服務(wù),所以R2沒(méi)有BGP的路由10. 1.1.0/24,當(dāng)R2發(fā)現(xiàn)數(shù)據(jù)包的目標(biāo)地址為10. 1. 1. 0/24后,只能將數(shù)據(jù)包全部丟棄,這就類似于路由黑洞。

89b1a0fe-81c2-11ee-939d-92fbcf53809c.png

從以上情況中可以看出,當(dāng)BGP從iBGP收到路由時(shí),因?yàn)猷従又g可能跨越了多臺(tái)IGP路由器。

所以BGP在將數(shù)據(jù)包發(fā)往目的地時(shí),通常會(huì)發(fā)給一臺(tái)只運(yùn)行了 IGP的路由器,而只運(yùn)行IGP的路由器并沒(méi)有BGP的路由,因而最終導(dǎo)致數(shù)據(jù)包丟失,造成路由黑洞。

要杜絕此類問(wèn)題的發(fā)生,其實(shí)答案很明了,就是讓AS中只運(yùn)行IGP的路由器同時(shí)也擁有BGP的路由表即可。

由于以上原因,在BGP路由傳遞中,有以下一條規(guī)則:當(dāng)BGP要將從iBGP鄰居學(xué)習(xí)到的路由信息傳遞給其它鄰居之前(這個(gè)鄰居通常是eBGP鄰居),這些路由必須在IGP路由表中也能學(xué)到,否則認(rèn)為此路由無(wú)效而不能發(fā)給其它鄰居。

此規(guī)則稱為iBGP與IGP路由同步。

在上圖環(huán)境中,在R3將從iBGP鄰居R1學(xué)習(xí)到的路由傳遞給eBGP鄰居R5之前,必須確定這條路由在自己的IGP路由表中也存在,否則不使用該路由。

要查看路由在IGP路由表中是否存在,使用命令show ip route 即可。

注意,只有從iBGP鄰居學(xué)習(xí)到的路由,才受iBGP與IGP路由同步規(guī)則的限制,如果路由是從eBGP鄰居學(xué)習(xí)到的,則不受此規(guī)則限制,并且此規(guī)則可以手工開(kāi)啟或關(guān)閉。

BGP同步默認(rèn)是開(kāi)啟的,在IOS 12.2(8)T 以及之后的版本默認(rèn)都是關(guān)閉的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4587

    瀏覽量

    92500
  • 路由器
    +關(guān)注

    關(guān)注

    22

    文章

    3693

    瀏覽量

    113426
  • BGP
    BGP
    +關(guān)注

    關(guān)注

    0

    文章

    83

    瀏覽量

    15305

原文標(biāo)題:吃透BGP,永遠(yuǎn)繞不開(kāi)這些基礎(chǔ)概述,看完再也不怕BGP了!

文章出處:【微信號(hào):網(wǎng)絡(luò)工程師筆記,微信公眾號(hào):網(wǎng)絡(luò)工程師筆記】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    bgp配置實(shí)例講解 如何配置Cilium和BGP協(xié)同工作

    ? 背景 官方提供多篇文檔說(shuō)明如何配置 Cilium 和 BGP 協(xié)同工作,本文主要對(duì)以下部分功能進(jìn)行驗(yàn)證: Using BIRD to run BGP[1] Using kube-router
    的頭像 發(fā)表于 08-15 09:15 ?1955次閱讀
    <b class='flag-5'>bgp</b>配置實(shí)例講解 如何配置Cilium和<b class='flag-5'>BGP</b>協(xié)同工作

    BGP硬核筆記分享

    BGP——邊界網(wǎng)關(guān)路由協(xié)議,是一種基于策略的路徑矢量路由協(xié)議(可以理解為距離矢量型協(xié)議的升級(jí)版),BGP在確定最佳路徑時(shí)考慮的不是速度,而是讓AS能夠根據(jù)多種BGP屬性來(lái)控制數(shù)據(jù)流的傳輸。
    的頭像 發(fā)表于 12-11 09:15 ?708次閱讀
    <b class='flag-5'>BGP</b>硬核筆記分享

    測(cè)量BGP傳遞時(shí)間

    測(cè)量BGP傳遞時(shí)間
    發(fā)表于 07-22 08:46

    測(cè)量BGP傳遞時(shí)間

    測(cè)量BGP傳遞時(shí)間
    發(fā)表于 07-22 10:06

    動(dòng)態(tài)BGP與靜態(tài)BGP的區(qū)別

    動(dòng)態(tài)BGP與靜態(tài)BGP的區(qū)別 動(dòng)態(tài)BGP與靜態(tài)BGP的區(qū)別 1.靜態(tài)BGP功能簡(jiǎn)單,其帶寬功能,可以實(shí)現(xiàn)多網(wǎng)接入,但路徑上只有通向幾大運(yùn)營(yíng)商
    發(fā)表于 12-01 16:55

    BGP協(xié)議的路由選擇原則

    BGP(Border Gateway Protocol)是一種自治系統(tǒng)間的動(dòng)態(tài)路由發(fā)現(xiàn)協(xié)議,目前在互聯(lián)網(wǎng)中使用非常廣泛,BGP協(xié)議有非常豐富的屬性,路由選擇的過(guò)程也相對(duì)復(fù)雜。在使用CISCO設(shè)備的網(wǎng)絡(luò)中BGP路由協(xié)議按以下的規(guī)則
    發(fā)表于 01-24 09:52 ?3174次閱讀

    基于BGP協(xié)議屬性的路由策略

    BGP 作為一種廣泛使用的邊界網(wǎng)關(guān)路由協(xié)議從設(shè)計(jì)上提供強(qiáng)大的路由過(guò)濾能力與一般的訪問(wèn)列表ACL 不同的是基于BGP屬性的路由過(guò)濾是通過(guò)對(duì)路由屬性的控制或修改來(lái)完成的因此更具靈
    發(fā)表于 07-07 15:31 ?11次下載
    基于<b class='flag-5'>BGP</b>協(xié)議屬性的路由策略

    bgp路由協(xié)議的路由屬性_BGP路由協(xié)議的優(yōu)勢(shì)

    BGP最新的版本是BGP第4版本(BGP4),它是在RFC4271中定義的;一個(gè)路由器只能屬于一個(gè)AS。AS的范圍從1-65535(64512-65535是私有AS號(hào)),RFC1930提供
    發(fā)表于 08-20 15:00 ?3725次閱讀
    <b class='flag-5'>bgp</b>路由協(xié)議的路由屬性_<b class='flag-5'>BGP</b>路由協(xié)議的優(yōu)勢(shì)

    什么是BGP高防,BGP高防的優(yōu)勢(shì)是什么

    什么是BGP高防?BGP全稱是Border Gateway Protocol,即邊界網(wǎng)關(guān)協(xié)議,是用來(lái)連接Internet上的獨(dú)立系統(tǒng)的路由選擇協(xié)議。
    發(fā)表于 12-28 11:22 ?1061次閱讀

    動(dòng)態(tài)BGP是什么,如何判定它的真假

    一、什么叫動(dòng)態(tài)BGP: 中國(guó)電信 、中國(guó)聯(lián)通、中國(guó)移動(dòng)和一些擁有AS自治域的大型民營(yíng)IDC運(yùn)營(yíng)商可以通過(guò)BGP協(xié)議來(lái)實(shí)現(xiàn)多線互聯(lián),這個(gè)唯一能夠妥善處理不相關(guān)路由域間的多路連接的邊界網(wǎng)關(guān)協(xié)議,是運(yùn)行于
    發(fā)表于 04-18 09:47 ?1186次閱讀

    BGP路由優(yōu)選規(guī)則的深入了解

      一臺(tái)BGP路由器有可能學(xué)習(xí)到關(guān)于同一個(gè)目的路由前綴的多條BGP路徑,當(dāng)這些BGP路徑都是valid有效時(shí),路由器將如何優(yōu)選呢?BGP的眾
    的頭像 發(fā)表于 11-14 09:54 ?3438次閱讀

    跟大家聊聊BGP與OSPF

    BGP和OSPF是兩種最常見(jiàn)的路由協(xié)議,BGP在大型網(wǎng)絡(luò)中具有動(dòng)態(tài)路由優(yōu)勢(shì),而OSPF具有更高效的路徑選擇和收斂速度。
    的頭像 發(fā)表于 01-30 11:56 ?3632次閱讀

    BGP知識(shí)點(diǎn)總結(jié)

    該路由同時(shí)作為與其他BGP鄰居建立鄰居關(guān)系時(shí)的底層路由,那么這條BGP路由將不優(yōu),不能傳遞也不能加表
    的頭像 發(fā)表于 04-10 10:42 ?1416次閱讀

    實(shí)用的單片機(jī)接反電路,再也不怕電源接反了

    實(shí)用的單片機(jī)接反電路,再也不怕電源接反了
    的頭像 發(fā)表于 10-17 17:32 ?983次閱讀
    實(shí)用的單片機(jī)接反電路,<b class='flag-5'>再也不怕</b>電源接反了

    華為路由器BGP基礎(chǔ)配置實(shí)驗(yàn)記錄

    配置BGP的前提是要保證各個(gè)自治區(qū)域的路由均可達(dá),所以要首先在AS 2 配置OSPF使AS 2 通暢,然后再配置BGP。由于BGP的路由黑洞問(wèn)題,需要在BGP路由經(jīng)過(guò)的所有路由器上配置
    發(fā)表于 01-06 10:07 ?870次閱讀
    華為路由器<b class='flag-5'>BGP</b>基礎(chǔ)配置實(shí)驗(yàn)記錄