釋義,簡介,BGP的結構和功能,特點,BGP訊息類型及狀態轉換,BGP路由通告原則,BGP屬性,協定結構,報文結構,報文類型,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的結構和功能
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路由器。
(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 進行路由的傳播。