BGP協議概述


BGP

 一、簡介

  BGP(Border Gateway Protocol,邊界網關協議)是一種AS(Autonomous System,自治系統)之間的動態路由協議。AS是擁有同一選路策略,在同一技術管理部門下運行的一組路由器。

  早期發布的三個版本是BGP-1(RFC 1105)、BGP-2(RFC 1163)和BGP-3(RFC 1267),當前使用版本是BGP-4(RFC 1771,已更新至RFC 4271)。BGP-4作為事實上的Internet外部路由協議標准,被廣泛應用於ISP(Internet Service Provider,因特網服務提供商)之間。

二、特性描述

  • BGP是一種外部網關協議(Exterior Gateway Protocol,EGP),與OSPF、RIP等內部網關協議(Interiro Gateway Protocol,IGP)不同,其着眼點不在於發現計算路由,而在於控制路由的傳播和選擇最佳路由。
  • BGP使用TCP作為其傳輸層協議(端口號179),提高了協議的可靠性。
  • BGP支持CIDR(Classless Inter-Domain Routing,無類別域間路由)。
  • 路由更新時,BGP只發送更新的路由,大大減少了BGP傳播路由所占用的帶寬,適用於在Internet上傳播大量的路由信息。
  • BGP路由通過攜帶AS路徑信息徹底解決路由環路問題。
  • BGP特工了豐富的路由策略,能夠對路由實現靈活的過濾和選擇。
  • BGP易於擴展,能夠適應網絡新的發展。

  發送BGP消息的路由器稱為BGP發言者(BGP Speaker),它接收或產生新的路由信息,並發布(Advertise)給其它BGP發言者。當BGP發言者收到來自其它自治系統的新路由時,如果該路由比當前已知路由更優、或者當前還沒有該路由,它就把這條路由發布給自治系統內所有其它BGP發言者。

  相互交換消息的BGP發言者之間互稱對等體(Peer),若干相關的對等體可以構成對等體組(Peer group)。

   BGP在路由器上以蝦類兩種方式運行:

  • IBGP(Internal BGP):當BGP運行於同一自治系統內部時,被稱為IBGP;
  • EBGP(External BGP):當BGP運行於不同自治系統之間時,稱為EBGP。

三、BGP的消息類型

  1. 消息頭格式

  BGP有5種消息類型:Open,Update,Notification,Keepalive和Route-refresh。這些消息有相同的報文頭,其格式如圖:

   字段解釋:

    • Marker:16字節,用於標明BGP報文邊界,所有比特均為1。
    • Length:2字節,BGP消息總長度(包括報文頭在內),以字節為單位。
    • Type:1字節,BGP消息的類型。其取值從1到5。

  2、Open消息:Open消息是TCP連接建立后發送的第一個消息,用於建立BGP對等體之間的連接關系。消息格式如下:

   字段解釋:

    • Version:BGP的版本號。對於BGP-4來說,其值為4.
    • My autonomous system:本地AS號,通過比較兩端的AS號可以確定是EBGP連接還是IBGP連接。
    • Hold time:保持時間。在建立對等體關系時兩端要協商Hold time,並保持抑制,如果在這個時間內未收到對端發來的Keepalive消息或Update消息,則認為BGP消息中斷。
    • BGP identifier:BGP標識符,以IP地址的形式表示,用來識別BGP路由器。
    • Opt Parm Len(Optional Parameters Length):可選參數的長度。若為0則沒有可選參數。
    • Optional parameters:可選參數,用於多協議擴展(Multiprotocol Extensions)等功能。

  3、Update消息:Update消息用於在對等體之間交換路由信息。它既可以發布可達路由信息,也可以撤銷不可達路由信息。消息格式如下:

   一條Update報文可以通告一類具有相同路徑屬性的科大路由,這些路由放在NLRI(Network Layer Reachable Information,網絡層可達信息)字段中,Path Attributes字段攜帶了這些路由的屬性,BGP根據這些屬性進行路由的選擇;同時Update報文還可以攜帶多條不可達路由,被撤銷的路由放在Withdrawn Routes字段中。

  字段解釋:

    • Unfeasible routes length:不可達路由字段的長度,以字節為單位,若為0則說明沒有Withdrawn Routes字段。
    • Withdrawn routes:不可達路由的列表。
    • Total path attribute length:路徑屬性字段的長度,以字節為單位,若為0則說明沒有Path attribute字段。
    • Path Attribute:與NLRI相關的所有路徑屬性列表,每個路徑屬性由一個TLV(Type-Length-Value)三元組構成。BGP正是根據這些屬性值來避免環路,進行選路,協議擴展等。
    • NLRI(Network Layer Reachability Information):可達路由的前綴和前綴長度二元組。

  4、Notification:當BGP檢測到錯誤狀態時,就向對等體發出Notification消息,之后BGP連接會立即中斷。消息格式如下:

  字段解釋:

    • Error code:差錯碼,指定錯誤類型。
    • Error subcode:差錯子碼。錯誤類型的詳細信息。
    • Data:用於輔助發現錯誤的原因,它的內容以來於具體的差錯碼和差錯子碼,記錄的是出錯部分的數據,長度不固定。

  5、Keepalive:BGP會周期性地向對等體發出Keepalive消息,用於保持連接的有效性,其消息格式只包含報文頭,欸有附加其他任何字段。

  6、Route-refresh:Route-refresh消息用來要求對等體重新發送指定地址族的路由信息,其消息格式如下:

  字段解釋:

    • AFI:adderss family identifier,地址族標識。
    • RES:保留,必須置0。
    • SAFI:Subsequent Address Famliy Identifier,子地址族標識。

四、BGP的路由屬性

  路由屬性的分類

  BGP路由屬性是一組參數,它對特定的路由進行了進一步的描述,使得BGP能夠對路由進行過濾和選擇。可分為4類:

  1. 公認必須遵循(Well-Known mandatory):所有BGP路由器都必須能夠識別這種屬性,且必須存在Update消息中,如果缺少這種屬性,路由信息就會出錯。
  2. 公認可選(Well-known discretionary):所有BGP路由器都可以識別,但不要求必須存在於Update消息中,可以根據具體情況來操作。
  3. 可選過渡(Optional transitive):在AS之間具有可傳遞性的屬性,BGP路由器可以不支持此屬性,但它仍然會接收帶有此屬性的路由,並通告給其他對等體。
  4. 可選非過渡(Optional non-transitive):如果BGP路由器不支持此屬性,該屬性被忽略,且不會通告給其他對等體。
屬性名稱 類別

ORIGIN

公認必須遵循
AS_PATH 公認必須遵循
NEXT_HOP 公認必須遵循
LOCAL_PREF 公認可選
ATOMIC_AGGREGATE 公認可選
AGGREGATOR 可選過渡
COMMUNITY 可選過渡
MULTI_EXIT_DISC(MED) 可選非過渡
ORIGINATOR_ID 可選非過渡
CLUSTER_LIST 可選非過渡

 

 

 

 

 

 

 

 

 

 

 

 

 

  

  幾種重要的路由屬性

  1、 源屬性(ORIGIN):ORIGIN屬性定義路由信息的來源,標記一條路由時怎么成為BGP路由的,分為三種類型:

    • IGP:優先級最高,說明路由產生於本AS內。
    • EGP:優先級次之,說明路由通過EGP學到。
    • incomplete:優先級最低,它並不是說明路由不可達,而是標識路由的來源無法確定。

  2、AS路徑屬性(AS_PATH):AS_PATH屬性按照一定次序記錄了某條路由從本地到目的地址所要經過的所有AS號。當BGP將一條路由通告到其他AS時,便會把本地AS號添加在AS_PATH列表的最前面,收到此路由的BGP路由器根據AS_PATH屬性就可以知道去目的地址所要經過的AS。離本地AS最近的相鄰AS號排在前面,其他AS號按順序依次排列。

  3、下一跳屬性(NEXT_HOP):BGP的下一跳屬性和IGP的有所不同,不一定就是鄰居盧歐氣的IP地址。按照取值可分為3種:

    • BGP發言者把自己產生的路由發給所有鄰居時,將把該路由信息的下一跳屬性設置為自己與對端連接的接口地址;
    • BGP發言者把接收到的路由發送給EBGP對等體時,將把該路由信息的下一跳屬性設置為本地與對端連接的接口地址;
    • BGP發言者把從EBGP鄰居得到的路由發給IBGP鄰居時,並不改變該路由信息的下一跳屬性,如果配置了負載分擔,路由被發給IBGP鄰居時則會修改下一跳屬性。

  4、MED(MUTIL_EXIT_DISC):MED屬性僅在相鄰兩個AS之間交換,收到此屬性的AS一方不會再將其通告給任何其他第三方AS。MED屬性相當於IGP使用的度量值(metrics),它用於判斷流量進入AS時的最佳路由,當一個運行BGP的路由器通過不同的EBGP對等體得到的目的地址相同但下一跳不同的多條路由時,在其它條件相同的情況下,將優先選擇MED值較小者作為最佳路由。

  5、本地優先屬性(LOCAL_PREF):LOCAL_PREF屬性僅在IBGP對等體之間交換,不通告給其他AS。它表明BGP路由器的優先級。LOCAL_PREF屬性用於判斷流量離開AS時的最佳路由。當BGP的路由器通過不同的IBGP對等體得到的目的地址相同但下一跳不同的多條路由時,將優先選擇LOCAL_PREF屬性值較高的路由。

  6、團體屬性(COMMUNITY):團體屬性用來簡化路由策略的應用和降低維護管理的難度,它是一組有相同特征的目的地址的集合,沒有物理上的邊界,與其所在的AS無關,公認的屬性有:

    • INTERNET:缺省情況下,所有路由都屬於INTERNET團體,具有此屬性的路由可以被通告給所有的BGP對等體。
    • NO_EXPORT:具有此屬性的路由在收到后,不能被發布到本地AS之外,如果使用了聯盟,則不能被發布到聯盟之外,但可以發布給聯盟中的其他子AS。
    • NO_ADVERTISE:具有此屬性的路由被接收后,不能被通告給任何其他的BGP對等體。
    • NO_EXPORT_SUBCONFED:具有此屬性的路由被接收后, 不能被發布到本地AS之外,也不能發布到聯盟中的其他子AS。

五、BGP的選路規則

  1、BGP選路策略:在目前的實現中,BGP選路時采用下列策略:

    • 首先丟棄下一跳(NEXT_HOP)不可達的路由;
    • 優選Preferred-value值最大的路由;
    • 優選本地優先級(LOCAL_PREF)最高的路由;
    • 優選聚合路由;
    • 優選AS路徑(AS_PATH)最短的路由;
    • 依次選擇ORIGIN類型為IGP、EGP、Incomplete的路由;
    • 優選MED值最低的路由;
    • 依次選擇從EBGP、聯盟、IBGP學來的路由;
    • 優選下一跳Cost值最低的路由;
    • 優選CLUSTER_LIST長度最短的路由;
    • 優選ORIGINATOR_ID最小的路由;
    • 優選Router ID最小的路由器發布的路由。
    • 優選地址最小的對等體發布的路由。

  2、應用BGP負載分擔時的選路:在BGP中,由於協議本身的特殊性,它產生的路由的下一跳地址可能不是當前路由器直接相連的鄰居。常見的一個原因是:IBGP之間發布路由信息時不改變下一跳。這種情況下,為了能夠將報文正確轉發出去,路由器必須先找到一個直接可達的地址(查找IGP建立的路由表項),通過這個地址到達路由表中指示的下一跳。在上述過程中,去往直接可達地址的路由被稱為依賴路由,BGP路由依賴於這些路由指導報文轉發。根據下一跳地址找到依賴路由的過程就是路由迭代(recursion)。

  目前系統支持基於迭代的BGP負載分擔,即如果依賴路由本身是負載分擔的(假設有三個下一跳地址),則BGP也會生成相同數量的下一跳地址來指導報文轉發。需要說明的是,基於迭代的BGP負載分擔在系統上始終啟用。

  在實現方法上,BGP的負載分擔與IGP的負載分擔有所不同:

  • IGP是通過協議定義的路由算法,對到達同一目的地址的不同路由,根據計算結果,將度量值(metric)相等的(如RIP、OSPF)路由進行負載分擔,選擇的標准很明確(按metric)。
  • BGP本身並沒有路由計算的算法,它只是一個選路的路由協議,因此,不能根據一個明確的度量值決定是否對路由進行負載分擔,但BGP有豐富的選路規則,可以在對路由進行一定的選擇后,有條件地進行負載分擔,也就是將負載分擔加入到BGP的選路規則中去。

  3、BGP發布路由的策略:在目前的實現中,BGP發布路由時采用如下策略:

  • 存在多條有效路由時,BGP發言者只將最優路由發布給對等體;
  • BGP發言者只把自己使用的路由發布給對等體;
  • BGP發言者從EBGP獲得的路由會向它所有BGP對等體發布(包括EBGP對等體和IBGP對等體);
  • BGP發言者從IBGP獲得的路由不向它的IBGP對等體發布;
  • BGP發言者從IBGP獲得的路由發布給它的EBGP對等體(關閉BGP與IGP同步的情況下,IBGP路由被直接發布;開啟BGP與IGP同步的情況下,該IBGP路由只有在IGP也發布了這條路由時才會被同步並發布給EBGP對等體);
  • 連接一旦建立,BGP發言者將把自己所有的BGP路由發布給新對等體。

六、大規模BGP網絡所遇到的問題

  1、路由聚合:在大規模的網絡中,BGP路由表十分龐大,使用路由聚合(Routes Aggregation)可以大大減小路由表的規模。

  路由聚合實際上是將多條路由合並的過程。這樣BGP在向對等體通告路由時,可以只通告聚合后的路由,而不是將所有的具體路由都通告出去。

  目前系統支持自動聚合和手動聚合方式。使用后者還可以控制聚合路由的屬性,以及決定是否發布具體路由。

  2、BGP路由衰減:BGP路由衰減(Route Dampening)用來解決路由不穩定的問題。路由不穩定的主要表現形式是路由振盪(Route flaps),即路由表中的某條路由反復消失和重現。

  發生路由振盪時,路由協議就會向鄰居發布路由更新,收到更新報文的路由器需要重新計算路由並修改路由表。所以頻繁的路由振盪會消耗大量的帶寬資源和CPU資源,嚴重時會影響到網絡的正常工作。

  在多數情況下,BGP協議都應用於復雜的網絡環境中,路由變化十分頻繁。為了防止持續的路由振盪帶來的不利影響,BGP使用衰減來抑制不穩定的路由。

  BGP衰減使用懲罰值來衡量一條路由的穩定性,懲罰值越高則說明路由越不穩定。路由每發生一次振盪(路由從激活狀態變為未激活狀態,稱為一次路由振盪),BGP便會給此路由增加一定的懲罰值(1000,此數值為系統固定,不可修改)。當懲罰值超過抑制閾值時,此路由被抑制,不加入到路由表中,也不再向其他BGP對等體發布更新報文。

  被抑制的路由每經過一段時間,懲罰值便會減少一半,這個時間稱為半衰期(Half-life)。當懲罰值降到再使用閾值時,此路由變為可用並被加入到路由表中,同時向其他BGP對等體發布更新報文。

 

 

 

 

   3、對等體組:對等體組(Peer Group)是一些具有某些相同屬性的對等體的集合。當一個對等體加入對等體組中時,此對等體將獲得與所在對等體組相同的配置。當對等體組的配置改變時,組內成員的配置也相應改變。

  在大型BGP網絡中,對等體的數量會很多,其中很多對等體具有相同的策略,在配置時會重復使用一些命令,利用對等體組在很多情況下可以簡化配置。

  將對等體加入對等體組中,對等體與對等體組具有相同的路由更新策略,提高了路由發布效率。

  4、團體:對等體組可以使一組對等體共享相同的策略,而利用團體可以使多個AS中的一組BGP路由器共享相同的策略。團體是一個路由屬性,在BGP對等體之間傳播,它並不受到AS范圍的限制。

  BGP路由器在將帶有團體屬性的路由發布給其它對等體之前,可以改變此路由原有的團體屬性。

  除了使用公認的團體屬性外,用戶還可以使用團體屬性列表自定義擴展團體屬性,以便更為靈活地控制路由策略。

  5、路由反射器:為保證IBGP對等體之間的連通性,需要在IBGP對等體之間建立全連接關系。假設在一個AS內部有n台路由器,那么應該建立的IBGP連接數就為n(n-1)/2。當IBGP對等體數目很多時,對網絡資源和CPU資源的消耗都很大。

  利用路由反射可以解決這一問題。在一個AS內,其中一台路由器作為路由反射器RR(Route Reflector),其它路由器作為客戶機(Client)與路由反射器之間建立IBGP連接。路由反射器在客戶機之間傳遞(反射)路由信息,而客戶機之間不需要建立BGP連接。

  既不是反射器也不是客戶機的BGP路由器被稱為非客戶機(Non-Client)。非客戶機與路由反射器之間,以及所有的非客戶機之間仍然必須建立全連接關系。

  6、聯盟:聯盟(Confederation)是處理AS內部的IBGP網絡連接激增的另一種方法,它將一個自治系統划分為若干個子自治系統,每個子自治系統內部的IBGP對等體建立全連接關系,子自治系統之間建立聯盟內部EBGP連接關系。

七、BGP GR 

  基於BGP的GR Restarter為了與BGP對等體建立一個BGP會話連接,首先要發送一個包含了GR能力的OPEN消息到對端,BGP對等體收到該消息后,得知發送方已具有GR能力。這樣,通過OPEN消息交互GR能力,GR Restarter與其BGP對等體之間協商建立起GR Session連接。如果雙方都沒有交換GR能力的信息,建立起的會話也就不具備GR能力。

  對於分布式設備,當進行主備倒換時,會話項將丟失,此時具備GR感知能力的BGP對等體會將所有與該GR Restarter有關的路由進行失效標記。但在GR Time內仍按照這些路由進行報文轉發,這樣確保了在從BGP對等體重新收集路由信息的過程中沒有報文丟失。

  對於分布式設備,主備倒換后,GR Restarter會重新與BGP對等體建立GR Session連接,同時發送新的GR消息以宣告其重啟完畢。此時兩個BGP對等體間進行路由信息交換。交換完成后,GR Restarter根據新的路由轉發信息更新路由表和轉發表,刪除失效的路由,完成BGP協議收斂。

八、MP-BGP

  1、MP-BGP概述

  傳統的BGP-4只能管理IPv4單播路由信息,對於使用其它網絡層協議(如IPv6等)的應用,在跨自治系統傳播時就受到一定限制。

  為了提供對多種網絡層協議的支持,IETF對BGP-4進行了擴展,形成MP-BGP,目前的MP-BGP標准是RFC 4760(Multiprotocol Extensions for BGP-4,BGP-4的多協議擴展)。

  支持BGP擴展的路由器與不支持BGP擴展的路由器可以互通。

  2、MP-BGP屬性

  BGP-4使用的報文中,與IPv4地址格式相關的三條信息都由Update報文攜帶,這三條信息分別是:NLRI、路徑屬性中的NEXT_HOP、路徑屬性中的AGGREGATOR(該屬性中包含形成聚合路由的BGP發言者的IP地址)。

  為實現對多種網絡層協議的支持,BGP-4需要將網絡層協議的信息反映到NLRI及NEXT_HOP。MP-BGP中引入了兩個新的路徑屬性:

  • MP_REACH_NLRI:Multiprotocol Reachable NLRI,多協議可達NLRI。用於發布可達路由及下一跳信息。
  • MP_UNREACH_NLRI:Multiprotocol Unreachable NLRI,多協議不可達NLRI。用於撤銷不可達路由。

  這兩種屬性都是可選非過渡(Optional non-transitive)的,因此,不提供多協議能力的BGP發言者將忽略這兩個屬性的信息,不把它們傳遞給其它鄰居。

  3、地址族

  MP-BGP采用地址族(Address Family)來區分不同的網絡層協議,關於地址族的一些取值可以參考RFC 1700(Assigned Numbers)。目前,系統實現了多種MP-BGP擴展應用,包括對VPN的擴展、對IPv6的擴展等。

九、參考文獻

h3c.com/cn            BGP技術介紹.pdf(451.63 KB)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM