邊界閘道器協議(BGP)是運行於 TCP 上的一種自治系統的路由協議。 BGP 是唯一一個用來處理像因特網大小的網路的協議,也是唯一能夠妥善處理好不相關路由域間的多路連線的協議。 BGP 構建在 EGP 的經驗之上。 BGP 系統的主要功能是和其他的 BGP 系統交換網路可達資訊。網路可達資訊包括列出的自治系統(AS)的資訊。這些資訊有效地構造了 AS 互聯的拓樸圖並由此清除了路由環路,同時在 AS 級別上可實施策略決策。
中文名
邊界閘道器協議
外文名
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)[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訊息型別及狀態轉換
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路由器,在這種情況下,屬性被標記為部分的。
(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的報文結構如下所示[1]
標記
長度
報文資料(變長)
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]
程式碼
說明
1
OPEN
初始化對等路由器間的通訊
2
UPDATE
更新:通告或撤銷路由
3
NOTIFICATION
對不正確BGP報文的通知
展開全部
(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 進行路由的傳播。
邊界閘道器協議(BGP)是運行於 TCP 上的一種自治系統的路由協議。 BGP 是唯一一個用來處理像因特網大小的網路的協議,也是唯一能夠妥善處理好不相關路由域間的多路連線的協議。 BGP 構建在 EGP 的經驗之上。 BGP 系統的主要功能是和其他的 BGP 系統交換網路可達資訊。網路可達資訊包括列出的自治系統(AS)的資訊。這些資訊有效地構造了 AS 互聯的拓樸圖並由此清除了路由環路,同時在 AS 級別上可實施策略決策。
中文名
邊界閘道器協議
外文名
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)[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訊息型別及狀態轉換
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路由器,在這種情況下,屬性被標記為部分的。
(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的報文結構如下所示[1]
標記
長度
型別
報文資料(變長)
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]
程式碼
型別
說明
1
OPEN
初始化對等路由器間的通訊
2
UPDATE
更新:通告或撤銷路由
3
NOTIFICATION
對不正確BGP報文的通知
展開全部
(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 進行路由的傳播。