天天看點

邊界網關協定BGP

邊界網關協定(BGP)是運作于 TCP 上的一種

​​自治系統​​的 ​

​路由協定​​。 BGP 是唯一一個用來處理像網際網路大小的網絡的協定,也是唯一能夠妥善處理好不相關 ​

​路由域​​間的多路連接配接的協定。 BGP 建構在 EGP 的經驗之上。 BGP 系統的主要功能是和其他的 BGP 系統交換網絡可達資訊。網絡可達資訊包括列出的 ​

​自治系統​​(AS)的資訊。這些資訊有效地構造了 AS 互聯的拓樸圖并由此清除了 ​

​路由環路​​,同時在 AS 級别上可實施政策決策。

中文名

邊界網關協定

外文名

Border Gateway Protocol

類    型

外部網關協定EGP

簡    稱

BGP

1 ​​釋義​​

2 ​​簡介​​

▪ ​​BGP的結構和功能​​

▪ ​​特點​​

3 ​​BGP消息類型及狀态轉換​​

4 ​​BGP路由通告原則​​

5 ​​BGP屬性​​

6 ​​協定結構​​

▪ ​​封包結構​​

▪ ​​封包類型​​

7 ​​BGP MCE​​

▪ ​​MCE概述​​

▪ ​​工作原理​​

(BGP/BGP4:Border Gateway Protocol,邊界網關協定)

BGP-4 提供了一套新的機制以支援

​​無類域間路由​​。這些機制包括支援 ​

​網絡字首​​的通告、取消 BGP 網絡中 “ 類 ” 的概念。 BGP-4 也引入機制支援 ​

​路由聚合​​,包括  ​

​AS​​ 路徑的集合。這些改變為提議的 ​

​超網​​方案提供了支援。BGP-4 采用了路由向量路由協定,在配置BGP時,每一個自治系統的管理者要選擇至少一個路由器作為該自治系統的“BGP發言人”。

1989年釋出了主要的外部網關協定:邊界路由協定(BGP),新版本BGP-4 是在1995年釋出的。

BGP路由選擇協定執行中使用4種分組:打開分組(open)、更新分組(update)、存活分組(keepalive)、通告分組(notification)。

BGP用于在不同的自治系統(AS)之間交換路由資訊。當兩個AS需要交換路由資訊時,每個AS都必須指定一個運作BGP的節點,來代表AS與其他的AS交換路由資訊。這個節點可以是一個主機。但通常是路由器來執行BGP。兩個AS中利用BGP交換資訊的路由器也被稱為邊界網關(Border Gateway)或邊界路由器(Border Router)

[1]

由于可能與不同的AS相連,在一個AS内部可能存在多個運作BGP的邊界路由器。同一個自治系統(AS)中的兩個或多個對等實體之間運作的BGP 被稱為 IBGP(Internal/Interior BGP)。歸屬不同的AS的對等實體之間運作的BGP稱為EBGP (External/Exterior BGP)。在AS邊界上與其他AS交換資訊的路由器被稱作邊界路由器(border/edge router)。在網際網路作業系統(Cisco IOS)中,IBGP通告的路由的距離為200,優先級比EBGP和任何内部網關協定(IGP)通告的路由都低。其他的路由器實作中,優先級順序也是EBGP高于IGP,而IGP又高于IBGP。

BGP屬于外部網關路由協定,可以實作自治系統間無環路的域間路由。BGP是溝通Internet廣域網的主用路由協定,例如不同省份、不同國家之間的路由大多要依靠BGP協定。BGP可分為IBGP(Internal BGP)和EBGP(External BGP)。BGP的鄰居關系(或稱通信對端/對等實體)是通過人工配置實作的,對等實體之間通過TCP(端口179)會話互動資料。BGP路由器會周期地發送19位元組的保持存活keep-alive消息來維護連接配接(預設周期為30秒)。在路由協定中,隻有BGP使用TCP作為傳輸層協定。

IETF先後為BGP制定了多個建議,分别為:

RFC 4271:目前正使用的BGP協定版本,稱之為BGP4。

RFC 1654:BGP4協定的第一個規範。

RFC 1105、RFC 1163、RFC 1267、RFC1771:BGP4之前的BGP版本。

BGP屬于外部或域間路由協定。BGP的主要目标是為處于不同AS中的路由器之間進行路由資訊通信提供保障。BGP既不是純粹的矢量距離協定,也不是純粹的鍊路狀态協定,通常被稱為通路向量路由協定。這是因為BGP在釋出到一個目的網絡的可達性的同時,包含了在IP分組到達目的網絡過程中所必須經過的AS的清單。通路向量資訊時十分有用的,因為隻要簡單地查找一下BGP路由更新的AS編号就能有效地避免環路的出現。BGP對網絡拓撲結構沒有限制,其特點包括:

(1)實作自治系統間通信,傳播網絡的可達資訊。BGP 是一個外部網關協定,允許一個AS與另一個AS進行通信。BGP允許一個AS向其他AS通告其内部的網絡的可達性資訊,或者是通過該AS可達的其他網絡的路由資訊。同時,AS也能夠從另一個AS中了解這些資訊。與距離向量選路協定類似,BGP為每個目的網絡提供的是下一跳(next-hop)結點的資訊。

(2)多個BGP路由器之間的協調。如果在一個自治系統内部有多個路由器分别使用BGP與其他自治系統中對等路由器進行通信,BGP可以協調者一系列路由器,使這些路由器保持路由資訊的一緻性。

(3)BGP支援基于政策的選路(policy-base routing)。一般的距離向量選路協定确切通告本地選路中的路由。而BGP則可以實作由本地管理者選擇的政策。BGP路由器可以為域内和域間的網絡可達性配置不同的政策。

(4)可靠的傳輸。BGP路由資訊的傳輸采用了可靠地TCP協定。

(5)路徑資訊。在BGP通告目的網絡的可達性資訊時,處理指定目的網絡的下一跳資訊之外,通告中還包括了通路向量(path vector),即去往該目的網絡時需要經過的AS的清單,使接受者能夠了解去往目的網絡的通路資訊。

(6)增量更新。BGP不需要再所有路由更新封包中傳送完整的路由資料庫資訊,隻需要在啟動時交換一次完整資訊。後續的路由更新封包隻通告網絡的變化資訊。這種網絡變化的資訊稱為增量(delta)。

(7)BGP支援無類型編制(CIDR)及VLSM方式。通告的所有網絡都以網絡字首加子網路遮罩的方式表示。

(8)路由聚集。BGP允許發送方把路由資訊聚集在一起,用一個條目來表示多個相關的目的網絡,以節約網絡帶寬。

(9)BGP還允許接收方對封包進行鑒别和認證,以驗證發送方的身份。

BGP使用如下四種消息類型:

Open消息:Open消息是TCP連接配接建立後發送的第一個消息,用于建立BGP對等體之間的連接配接關系。

Keepalive消息:BGP會周期性地向對等體發出Keepalive消息,用來保持連接配接的有效性。

Update消息:Update消息用于在對等體之間交換路由資訊。它既可以釋出可達路由資訊,也可以撤銷不可達路由資訊。

Notification消息:當BGP檢測到錯誤狀态時,就向對等體發出Notification消息,之後BGP連接配接會立即中斷。

BGP鄰居建立中的狀态和過程如下:

空閑(Idle):為初始狀态,當協定激活後開始初始化,複位計時器,并發起第一個TCP連接配接,并開始傾聽遠端對等體所發起的連接配接,同時轉向Connect狀态。。

連接配接(Connect):開始TCP連接配接并等待TCP連接配接成功的消息。如果TCP連接配接成功,則進入OpenSent狀态;如果TCP連接配接失敗,進入Active狀态。

行動(Active):BGP總是試圖建立TCP連接配接,若連接配接計時器逾時,則退回到Connect狀态,TCP連接配接成功就轉為Open sent狀态。

OPEN發送(Open sent):TCP連接配接已建立,自己已發送第一個OPEN封包,等待接收對方的Open封包,并對封包進行檢查,若發現錯誤則發送Notification消息封包并退回到Idle狀态。若檢查無誤則發送Keepalive消息封包,Keepalive計時器開始計時,并轉為Open confirm狀态。

OPEN證明(Open confirm):BGP等待Keepalive封包,同時複位保持計時器。如果收到了Keepalive封包,就轉為Established狀态,鄰居關系協商完成。如果系統收到一條更新或Keepalive消息,它将重新啟動保持計時器;如果收到Notification消息,BGP就退回到空閑狀态。

已建立(Established):即建立了鄰居(對等體)關系,路由器将和鄰居交換Update封包,同時複位保持計時器。

BGP在進行路由通告的時候,需要遵循以下原則:

多條路徑時,BGP Speaker隻選最優的給自己使用(負載均衡和FRR除外)。

BGP Speaker隻把自己使用的路由(最優路由)通告給相鄰體。

BGP Speaker從EBGP獲得的路由會向自己所有BGP相鄰體通告(包括EBGP和IBGP)。

BGP Speaker從IBGP獲得的路由不向自己的IBGP相鄰體通告(反射器除外)。

BGP Speaker從IBGP獲得的路由是否通告給自己的EBGP相鄰體要根據IGP和BGP同步的情況來決定。

當收到對端的refresh封包并且本端鄰居支援refresh能力,BGP Speaker将把自己所 有BGP路由通告給對等體。

GR過程中,主備倒換方在GR結束時BGP Speaker會把自己所有BGP路由通告給對等體。

路由器發送關于目标網絡的BGP更新消息,更新的路徑成本被稱為路徑屬性。屬性可以是公認的或可選的、強制的或自由決定的、傳遞的或非傳遞的。屬性也可以是部分的。并非組織的和有組合的都是合法的,路徑屬性分為4類:

公認必遵、公認自決、可選過渡、可選非過渡。

公認屬性:

是公認所有BGP實作都必須識别的屬性,這些屬性被傳遞給BGP鄰居。

公認強制屬性必須出現在路由描述中,公認自由決定屬性可以不出現在路由描述中。

可選屬性:

非公認屬性被稱為可選的,可選屬性可以是傳遞的或非傳遞的。

可選屬性不要求所有的BGP實作都支援。

對于不支援的可選傳遞屬性,路由器将其原封不動的傳遞給其他BGP路由器,在這種情況下,屬性被标記為部分的。

對于可選非傳遞屬性,路由器必須将其删除,而不将其傳遞給其他BGP路由器。

(1)公認必遵(Well-Known Mandatory)

ORIGIN(起源):這個屬性說明了源路由是怎樣放到BGP表中的。有三個可能的源IGP,EGP,以及INCOMPLETE.路由器在多個路由選擇的進行中使用這個資訊。路由器選擇具有最低ORIGIN類型的路徑。

AS_PATH(AS路徑):指出包含在UPDATE封包中的路由資訊所經過的自治系統的序列。

Next_HOP(下一跳)聲明路由器所獲得的BGP路由的下一跳,對EBGP會話來說,下一跳就是通告該路由的鄰居路由器的源位址。

(2)公認自決(Well-Known Discretionary)

LOCAL_PREF(本地優先級):本地優先級屬性是用于告訴自治系統内的路由器在有多條路徑的時候,怎樣離開自治系統。本地優先級越高,路由優先級越高。

ATOMIC_AGGREGATE(原子聚合):原子聚合屬性指出已被丢失了的資訊。

(3)可選過渡(Optional Transitive)

AGGREGATOR(聚合者):此屬性标明了實施路由聚合的BGP路由器ID和聚合路由的路由器的AS号。

COMMUNITY(團體):此屬性指共享一個公共屬性的一組路由器。

(4)可選非過渡(Optional Nontransitive)

MED(多出口區分):該屬性通知AS以外的路由器采用哪一條路徑到達AS,它也被認為是路由的外部度量,低MED值表示高的優先級。

ORIGINATOR_ID(起源ID):路由反射器會附加到這個屬性上,它攜帶本AS路由器的路由器ID,用以防止環路。

CLUSTER_LIST(簇清單):此屬性顯示了采用的反射路徑。

Marker (16 bytes) Length (2 bytes) Type (1 byte)

Marker – 資訊包含資訊接收端可預測值。

Length – 包含協定頭的資訊長度。

Type –資訊類型。資訊可能是:Open、Update、Notification、Keepalive。

打開(Open)分組,用來與相鄰的另一個BGP發言人建立聯系

更新(Update)分組,用來發送某一路由的資訊,以及列出多條要撤銷的路由

保活(Keepalive)分組,用來确認打開分組和周期性地證明鄰站關系

通知(Notification)分組,用來發送檢測到的差錯

[2]

​​傳輸協定​​連接配接建立之後,各端發送的第一個資訊是 OPEN 資訊。如果 OPEN 資訊可以接收,會傳回發送确認 OPEN 資訊的 KEEPALIVE 資訊。一旦 OPEN 資訊獲得确認,UPDATE、KEEPALIVE 和 NOTIFICATION 資訊進行互相交換。

BGP的封包結構如下所示

<col>

标記

長度

類型

封包資料(變長)

16位元組 2位元組 1位元組

BGP的封包分成封包與封包資料兩部分,其中,BGP封包資料根據不同的封包類型有所不同,封包頭由以下3個字段構成:

(1)标記(Marker)字段。标記字段由16個位元組構成。标記字段的值是一個通信雙方(對等路由器) 都可認可的位元組串,雙方都統一使用改制來辨別一個合法的BGP封包的開始。通常,标記字段用于承載鑒别資訊。對于通信雙方,在任何情況下标記的值都必須保持一緻。标記字段用于封包接收的同步。由于BGP封包用過TCP來簡化,而TCP 協定是一個無結構的流(stream)傳輸協定。在TCP協定上部位高層提供資料流的結構識别,是以也無法為BGP辨別兩個封包之間的邊界。由于傳輸協定不指定封包邊界,是以,為了確定發送方和接收方的封包邊界準確定持同步,BGO要求在每個封包的開頭放置了一個雙方已知的序列,接收方通過該序列來檢驗封包頭的正确性。

(2)封包長度,16比特,制定了以位元組為機關計算的封包總長度。最小的封包為19i節,最大允許封包長度為4096位元組。

(3)封包類型,1位元組,指出封包所屬的類型。

BGP的路由更新消息一BGP封包形式在路由器間交換,BGP為了實作其功能定義了4種封包類型。

代碼

說明

1

OPEN

初始化對等路由器間的通信

2

UPDATE

更新:通告或撤銷路由

3

NOTIFICATION

對不正确BGP封包的通知

4

KEEPALIVE

測試與對等路由器的連接配接性

(1)打開(OPEN)封包

當兩個BGP對等路由器之間建立以一個TCP連接配接以後,就分别發送一個打開封包,聲明各自的自治系統号,并确定其他操作參數。

路由器接受到來自對等路由器的OPEN 封包時,BGP将發送一個KEEPALIVE封包。在路由器之間交換選路資訊之前,通信雙方都必須發送一個OPEN封包,并接受一個KEEPALIVE封包。KEEPALIVE封包可以用作對OPEN封包的确認。

(2)更新(UPDATE)封包

對等的BGP路由器之間建立了TCP連接配接,并成功接收到對OPEN封包的KEEPALIVE确定封包,對等路由器之間就可以使用路由更新消息封包來通告網絡的可達性資訊。通告的的内容可以是新的可達的目的網絡,也可以是通告撤銷原來的某些目的網絡的可達性。

(3)保持激活(KEEPALIVE)封包

保持激活封包用于在兩個BGP對等路由器之間定期測試網絡連接配接性,并證明對等路由器的正常工作。由于TCP協定本身沒有提供自動的連接配接狀态的通知機制,對等路由器之間定制交換KEEPALIVE封包可以使BGP實體能夠檢測TCP連接配接是否工作正常。保持激活封包僅包含标準的BGP封包頭(類型4),封包長度為19位元組。

(4)通知(NOTIFICATION)封包

BGP在發現錯誤時(或需要進行控制時),可以利用通知封包來通知對等路由器。一旦通知封包,路由器檢測來檢查到了出現的錯誤,BGP就會向對等路由器發送一個通知封包,然後關閉TCP連接配接終止通信。

MCE 功能是Multi-CE 的簡稱,具有MCE 功能的網絡裝置可以在BGP/MPLS VPN 組網應用中承擔多個VPN 執行個體的CE 功能,減少使用者網絡裝置的投入。

BGP/MPLS VPN以隧道的方式解決了在公網中傳送私網資料的問題,但傳統的BGP/MPLS VPN架構要求每個VPN執行個體單獨使用一個CE與PE相連,如圖 所示。

邊界網關協定BGP

​​

随着使用者業務的不斷細化和安全需求的提高,很多情況下一個私有網絡内的使用者需要劃分成多個VPN,不同VPN 使用者間的業務需要完全隔離。此時,為每個VPN 單獨配置一台CE 将加大使用者的裝置開支和維護成本;而多個VPN 共用一台CE,使用同一個路由表項,又無法保證資料的安全性。使用MCE 功能,可以有效解決多VPN 網絡帶來的使用者資料安全與網絡成本之間的沖突,它使用CE 裝置本身的VLAN 接口編号與網絡内的VPN 進行綁定,并為每個VPN 建立和維護獨立的路由轉發表(Multi-VRF)。這樣不但能夠隔離私網内不同VPN 的封包轉發路徑,而且通過與PE 間的配合,也能夠将每個VPN 的路由正确釋出至對端PE,保證VPN封包在公網内的傳輸。

下面舉例介紹MCE對多個VPN的路由表項進行維護,并與PE互動VPN路由的過程:

邊界網關協定BGP

如右圖所示,左側私網内有兩個VPN站點:VPN1 和VPN2,分别通過MCE裝置接入MPLS骨幹網,其中VPN1 和VPN2 的使用者,需要分别與遠端VPN1使用者和VPN2 使用者建立VPN隧道。通過配置MCE 功能,可以在MCE 裝置上為VPN1 和VPN2 建立各自的路由轉發表,并使用VLAN 2 接口與VPN1 進行綁定、VLAN 3 與VPN2 進行綁定。在接收路由資訊時,MCE 裝置根據接收接口的編号,即可判斷該路由資訊的來源,并将其維護到對應VPN 的路由轉發表中。同時,在PE1 上也需要将連接配接MCE 的接口與VPN 進行綁定,綁定的方式與MCE 裝置一緻。MCE與PE1 之間通過Trunk 鍊路連接配接,并允許VLAN 2 和VLAN 3 的封包攜帶VLAN Tag 傳輸,進而使PE1 在接收時可以根據封包所屬VLAN 判别該封包屬于哪一個VPN,将封包在指定的隧道内傳輸。

MCE 裝置是如何将多個VPN 執行個體的私網路由資訊準确傳播到PE 裝置?這包括兩部分:MCE與VPN站點的路由資訊交換,MCE與PE之間的路由資訊交換。這些路由資訊的交換都有很多種方法,如靜态路由、RIP、OSPF、ISIS、BGP路由協定。如果使用BGP路由協定來實作路由資訊交換,則就是使用BGP MCE功能,是以BGP MCE功能就是BGP協定支援VRF,能夠實作VRF下BGP路由資訊的交換。需要在MCE 上為每個VRF 執行個體配置BGP 對等體,并引入相應VPN 内的IGP 路由資訊。由于各個VPN 間正常情況下是處在不同的AS 内,是以使用EBGP 進行路由的傳播。

[3]

▪ ​​協定​​

▪ ​​協定參考模型​​

▪ ​​協定控制資訊​​

▪ ​​協定轉換​​

▪ ​​開放系統互連​​

▪ ​​協定轉換器​​

▪ ​​實體層​​

▪ ​​表示層​​

▪ ​​開放系統互連參考模型​​

▪ ​​應用層​​

▪ ​​會話層​​

▪ ​​網絡層​​

▪ ​​傳送層​​

▪ ​​資料鍊路層​​

▪ ​​檔案傳送協定​​

▪ ​​通用路由封裝​​

▪ ​​分組資料協定​​

▪ ​​使用者資料報協定​​

▪ ​​傳輸控制協定​​

▪ ​​IPv6協定​​

▪ ​​IPv4協定​​

▪ ​​網際網路協定​​

▪ ​​鍊路協定​​

▪ ​​接入協定​​

▪ ​​選路協定​​

▪ ​​應用協定​​

▪ ​​超文本傳送協定​​

▪ ​​點到點協定​​

▪ ​​隧道協定​​

▪ ​​點到點隧道協定​​

▪ ​​位址解析協定​​

▪ ​​網絡位址轉換​​