邊界網關協議(BGP)是運行于TCP上的一種自治系統的路由協議。BGP是唯一一個用來處理像因特網大小的網絡的協議,也是唯一能夠妥善處理好不相關路由域間的多路連接的協議。BGP構建在EGP的經驗之上。BGP系統的主要功能是和其他的BGP系統交換網絡可達信息。網絡可達信息包括列出的自治系統(AS)的信息。這些信息有效地構造了AS互聯的拓樸圖并由此清除了路由環路,同時在AS級別上可實施策略決策。
釋義
(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)。在互聯網操作系統(思科?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屬性
路由器發送關于目標網絡的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(簇列表):此屬性顯示了采用的反射路徑。
協議結構
馬克筆16bytes Length(2bytes)Type(1byte)
Marker–信息包含信息接收端可預測值。
Length–包含協議頭的信息長度。
Type–信息類型。信息可能是:Open、Update、Notification、Keepalive。
打開(Open)分組,用來與相鄰的另一個BGP發言人建立聯系。
更新(Update)分組,用來發送某一路由的信息,以及列出多條要撤銷的路由。
保活(Keepalive)分組,用來確認打開分組和周期性地證實鄰站關系。
通知(Notification)分組,用來發送檢測到的差錯在傳輸協議連接建立之后,各端發送的第一個信息是OPEN信息。如果OPEN信息可以接收,會返回發送確認OPEN信息KEEPALIVE信息。一旦OPEN信息獲得確認,UPDATE、KEEPALIVE NOTIFICATION信息進行相互交換。
報文結構
BGP的報文結構如下所示
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)報文
當兩個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連接終止通信。
BGPMCE
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創建各自的路由轉發表,并使用VLAN2接口與VPN1進行綁定、VLAN3與VPN2進行綁定。在接收路由信息時,MCE設備根據接收接口的編號,即可判斷該路由信息的來源,并將其維護到對應VPN的路由轉發表中。同時,在PE1上也需要將連接MCE的接口與VPN進行綁定,綁定的方式與MCE設備一致。MCE與PE1之間通過Trunk鏈路連接,并允許VLAN2和VLAN3的報文攜帶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進行路由的傳播。
參考資料 >
邊界網關協議,邊界網關協議內容有哪些?.電子發燒友網.2016-11-10