邊界網關協議

邊界網關協議

自治系統的路由協議
邊界網關協議(BGP)是運行于 TCP 上的一種自治系統的路由協議。 BGP 是唯一一個用來處理像因特網大小的網絡的協議,也是唯一能夠妥善處理好不相關路由域間的多路連接的協議。 BGP 構建在 EGP 的經驗之上。 BGP 系統的主要功能是和其他的 BGP 系統交換網絡可達信息。網絡可達信息包括列出的自治系統(AS)的信息。這些信息有效地構造了 AS 互聯的拓撲圖并由此清除了路由環路,同時在 AS 級别上可實施策略決策。[1]
  • 中文名:邊界網關協議
  • 外文名:Border Gateway Protocol
  • 類型:外部網關協議EGP
  • 英文簡稱:BGP

釋義

(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的結構和功能

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

由于可能與不同的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消息類型及狀态轉換

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在進行路由通告的時候,需要遵循以下原則:

多條路徑時,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屬性

路由器發送關于目标網絡的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)分組,用來發送檢測到的差錯  

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

報文結構

BGP的報文結構如下所示  

标記

長度

類型

報文數據(變長)

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連接終止通信。

BGP MCE

MCE概述

MCE 功能是Multi-CE 的簡稱,具有MCE 功能的網絡設備可以在BGP/MPLS VPN 組網應用中承擔多個VPN 實例的CE 功能,減少用戶網絡設備的投入。

工作原理

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

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

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

如右圖所示,左側私網内有兩個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 進行路由的傳播。

上一篇:PPI

下一篇:賓得K7

相關詞條

相關搜索

其它詞條