天天看點

邊界網關協定BGP

Border Gateway Protocol (BGP) is a standardized exterior gateway protocol designed to exchange routing and reachability information among autonomous systems (AS) on the Internet.[1] The protocol is often classified as a path vector protocol but is sometimes also classed as a distance-vector routing protocol. The Border Gateway Protocol makes routing decisions based on paths, network policies, or rule-sets configured by a network administrator and is involved in making core routing decisions.

BGP may be used for routing within an autonomous system. In this application it is referred to as Interior Border Gateway Protocol, Internal BGP, or iBGP. In contrast, the Internet application of the protocol may be referred to as Exterior Border Gateway Protocol, External BGP, or EBGP.

邊界網關協定(英文:Border Gateway Protocol, BGP)是網際網路上一個核心的去中心化自治路由協定。它通過維護IP路由表或‘字首’表來實作自治系統(AS)之間的可達性,屬于矢量路由協定。BGP不使用傳統的内部網關協定(IGP)的名額,而使用基于路徑、網絡政策或規則集來決定路由。是以,它更适合被稱為矢量性協定,而不是路由協定。

BGP是為了替換外部網關協定(EGP)協定而建立的,允許運作一個完全分散的路由系統,從ARPANET模型的核心路由系統過渡到包括NSFNET骨幹網及其相關區域網絡的分散系統。這使得網際網路成為一個真正的分權制度。自1994年以來,第四版本的BGP在網際網路上使用,所有以前的版本現在已經過時不可用。在第4版主要的增強功能是通過支援無類别域間路由和路由聚合來減少路由表的大小。第4版是在早期的 RFC 1771 第4版的基礎上編纂,通過20多個草案修改,最終在2006年1月通過形成 RFC 4271 。RFC 4271版本糾正了一些錯誤,澄清模糊之處,帶來了更接近工業級應用标準的RFC行業慣例。

大多數網際網路服務提供商(ISP)必須使用BGP來與其他ISP建立路由連接配接(尤其是當它們采取多宿主連接配接時)。是以,即使大多數網際網路使用者不直接使用它,但是與7号信令系統(SS7)相比,即通過PSTN的跨供應商核心響應設定協定,BGP仍然是網際網路最重要的協定之一。特大型的私有IP網絡也可以使用BGP。例如當需要将若幹個大型的開放最短路徑優先(OSPF)網絡進行合并,而開放最短路徑優先協定本身又無法提供這種可擴充性時。使用BGP的另一個原因是其能為多宿主的單個ISP(RFC 1998)或多個ISP網絡提供更好的備援網絡。

_______________________________________________________________________________

簡介

BGP是自治系統間的路由協定。BGP交換的網絡可達性資訊提供了足夠的資訊來檢測路由回路并根據性能優先和政策限制對路由進行決策。

1、介紹

BGP是自治系統間的路由協定。BGP交換的網絡可達性資訊提供了足夠的資訊來檢測路由回路并根據性能優先和政策限制對路由進行決策(要點見RFC 1104[2])。特别地,BGP交換包含全部AS path的網絡可達性資訊,按照配置資訊執行路由政策。

随着近年來網際網路的進步和增長,它也不得不面對一些嚴重的規模問題,包括:

-B類網絡位址空間的耗盡。該問題的主要原因之一,是缺少适于 中型組織的中等大小的網絡;C類網絡,最多擁有254個主機位址,實在太少,而B類網絡允許最多65534個位址,卻又太大無法充分使用。

-網際網路路由器中路由表的增長使目前的軟體(和人們)無法有效管理。

-32位IP位址空間的耗竭。

明顯,前兩個問題和最後一個問題可能分别在今後一兩年内和三年内變得急迫。無類别域間路由(CIDR)試圖解決這些問題,設計相應機制來降低路由表和對新

IP網絡配置設定需求的增長速度。它并沒有解決更具長期性的第三個問題,而是努力讓近期問題推遲使得網際網路仍能有效運作,同時着手遠期的解決方案。

BGP-4對BGP-3做了擴充,支援路由資訊的聚合及基于無類别域間路由體系(CIDR)[3]的路由減少。本備忘錄論述了BGP-4在網際網路中的應用。

本文檔的所有讨論基于如下假設:網際網路是一些随意連接配接的自治系統的集合。也就是說,網際網路可以模組化成一張一般的網絡圖,圖上節點是AS,邊是每對AS間的連接配接。

自治系統的經典定義是,一組路由器在統一管理之下,在AS内使用内部網關協定和統一度量來路由資料包,而通過外部網關協定将資料包路由到其他AS。

該經典定義尚在發展,一些AS在其内部使用多種内部網關協定和度量。在此,強調一下自治系統在本文檔中的含義,即使它采用多種IGP和度量,它的管理差別

于其他 AS,其内部路由是一緻的,當路由穿越它時,它在圖上視作一個節點。每個AS由一個管理機構管理,至少在外部看來它代表着該系統的路由資訊。

2. BGP拓撲模型

當我們說一個在兩個AS之間的連接配接時,意味着兩件事:

實體連接配接:兩個AS之間存在一條共享的資料鍊路子網,并且在該子網上,每個AS至少有一台自己的邊界網關路由器。是以,每個AS的邊界網關路由器可以轉發資料包到其他AS的邊界網關路由器,無需借助于AS内到AS間的路由。

BGP連接配接:在各個AS的BGP發言人之間有一個BGP會話程序,通過會話溝通路由,經過聲明的AS到達某目标網絡。

本文檔中,我們對構成BGP連接配接的BGP發言人加以額外限制:他們必須是自己直接共享資料鍊路子網。是以,相鄰AS間的BGP會話無需AS内或AS間的路由。超出本文範圍的案例可能與該限制不符。

是以,在每個連接配接中,每個AS擁有一個以上的BGP發言人和邊界網關路由器,這些BGP發言人和邊界網關路由器分布在共享資料鍊路子網上。注意到,

BGP發言人不一定是邊界網關路由器,反之亦然。一條連接配接上一個AS的BGP發言人聲明的路徑可以被同一個共享子網上其他AS的邊界網關路由器使用,也就

是非直接的鄰居是允許的。

一個AS内的流量,要麼是源于該AS,要麼是終于該AS(也就是說,IP資料包的源IP或目的IP在該AS内)。符合以上描述的流量稱為"本地流量",否則稱為"過渡流量"。BGP使用的主要目的是控制過渡流量。

按照某AS如何處理過渡流量,AS可以分為以下幾類:

末端AS:隻連接配接到一個其他AS。自然地,末端AS隻運輸本地流量。

多宿主AS:連接配接到超過一個的其他AS,但不運輸過渡流量。

過渡AS:連接配接到超過一個的其他AS,可以運輸本地和過渡流量。

一個完整的AS path提供了有效和簡捷的方式來避免路由回路、消除伴随距離向量算法的"計數到無窮"問題,是以,BGP沒有對AS之間的連接配接拓撲加以任何限制。

3. 網際網路中的BGP

3.1 拓撲學考慮

聯網拓撲可以視作過渡AS、多宿主AS和末端AS的任意互連。為了盡可能減少對目前網際網路結構的影響,末端和多宿主AS不一定要使用BGP。這些AS

可以運作其他的協定(比如,EGP)來與過渡AS交換網絡可達性資訊。使用BGP的過渡AS将對這些資訊做标記,以表明其學習自BGP以外的方法。BGP

不一定運作于末端或多宿主AS,這就不會對源于或終于末端AS或多宿主AS的資料包的AS間路由品質産生負面影響。

然而,仍然建議在末端和多宿主AS上使用BGP。在這些情況下,BGP相比其他目前使用的協定(比如EGP),可以提供更優的帶寬和性能。另外,這将減少預設路由的使用,為多宿主AS的AS間路由提供更好選擇。

3.2 BGP的整體特性

整體水準上,BGP用來在多個自治系統間傳遞路由資訊。其資訊流如下圖示:

     +-----------+ +------------+

BGP |  BGP  |  BGP  |  BGP   |  BGP

  -------------------+ +--------------------------+   +----------

 |  IGP  |  |  IGP    |

     +------------+    +-----------+

<-AS A--> <--AS B->

這張圖表說明,在AS間隻用BGP傳輸資訊,而在AS内BGP和IGP均可以傳輸資訊。確定AS内BGP和IGP間路由資訊的相容性,是一個重大問題,最後将在附錄A中詳細讨論。

3.3 BGP鄰居關系

聯網視作随意連接配接的AS的集合。通過BGP直接連接配接的路由器就是BGP發言人。BGP發言人可以在同一AS内,也可以在不同AS内。每個AS的BGP

發言人互相通信,遵照每個AS建立的政策,交換網絡可達性資訊。對某BGP發言人,如果與其他BGP發言人通信而且那個BGP發言人在不同的AS,則那個

其他 BGP發言人稱為外部對等體,而如果在相同的AS内,則稱為内部對等體。

在一個AS内可以有許多BGP發言人并被認為是需要的。通常,如果一個

AS與其他AS有多個連接配接,則需要多個BGP發言人。所有BGP發言人代表着相同AS,對外保持統一形象。這就要求他們之間保持一緻的路由資訊。這些路由

器可以通過BGP或其他方法互相通信。在同一AS内的所有BGP發言人的政策限制必須一緻。一些技術,如使用帶标記的IGP(參見A.2.2),可以用來

探測可能的沖突。

對于外部對等體,對等體分别屬于不同的AS,但共享同一資料鍊路子網。這共同的子網用來在對等體之間運輸BGP資訊。如果BGP使用通過一個幹預的AS,則将使AS path資訊無效。自治系統号必須在BGP中使用,用來标明BGP發言人所在的自治系統。

4. 路由聚合的需要

當路由資訊由各部分聚合時,一緻的BGP-4實作需要對其聲明。例如,一個在自治系統邊界的BGP發言人必須能産生某目标IP集合的聚合路由(在

BGP -4

術語中該目标IP集合稱為網絡層可達性資訊,NLRI),在它基礎上進行管理(包括路由器自身代表的位址),即使當這些位址不是同時全部可達的。

當聚合的NLRI産生時,一緻實作應能給予聲明。

當NLRI解聚合時,一緻實作應能給予聲明。

當出現重疊路由時,一緻實作應能支援如下選項:

-安裝聚合和詳細的路由

-隻安裝詳細路由

-安裝聚合路由

-均不安裝

一定的路由政策可能依賴于NLRI(比如,"研究"與"商業")。是以,一個運作路由聚合的BGP發言人,可能的情況下,應該能認知聚合NLRI時路由政策的潛在實作。

5. BGP的政策生成

BGP通過各種路由參數選擇和限制,實作政策。政策并不直接編入協定。而是,政策通過BGP的配置資訊來實作。

BGP實作政策的途徑有,影響從多條路徑中的選擇,控制路由資訊的下步傳遞。政策由AS的管理者決定。

路由政策與政治、安全或經濟考慮有關。

例如,如果一個AS不願意将流量運輸到其他AS,它可以制定政策來禁止。如下是一些能夠改變BGP使用的路由政策的例子:

1. 一個多宿主AS可以拒絕成為其他AS的過渡AS。(它隻告知那些目标網絡在自己AS内部的路由。)

2. 一個多宿主AS可以指定成為幾個相鄰AS的過渡AS,也就是說,一部分而不是全部AS,可以把該多宿主AS作為過渡AS。(它隻把它的路由資訊告知被允許的AS。)

3. 一個AS向外運輸流量時,可以決定是否偏愛特定的AS。

BGP應用可以控制許多性能相關的标準:

1. 一個AS可以最少化過渡AS的數目。(AS path越短,越可能被采用。)

2.

過渡AS的權重。如果一個AS決定,兩個以上的AS path可以用來到達目标網絡,那麼,AS可以使用多種方法來決定采納哪個候選AS

path。一個AS的權重值由以下幾個因素決定:徑向距離,鍊路速度,容量,擁塞的趨勢,和運作品質。這些性能值可以由BGP以外的方法決定。

3. 優先考慮内部路由,而不是外部路由。

為了一個AS的統一性,那些産自政策和/或正常路由選擇過程的等值路徑,必須以一緻的方式解決。

BGP的基礎,是這樣一個規則:一個AS隻把自己使用的路由通知給相鄰的AS。該規則反映了目前網際網路常用的"一跳接一跳"的路由方式。

6. BGP的路徑選擇

BGP

發言人的一項主要任務,是評價諸條從自身出發到那些用網絡字首表達的目的地的路徑,從中選出最優,應用合适的政策限制,然後将它通知給所有的BGP鄰居。

關鍵問題是如何評價和比較這些不同的路徑。傳統的距離向量協定(比如RIP)中,每條路徑隻有一個度量。是以,不同路徑的比較簡化為兩個值的比較。AS間

路由的複雜性,源自人們在如何評價外部路由的問題上缺少共同認可的度量。于是,每個AS擁有自己的一套對路徑的評價名額。

BGP發言人建構的路由資料庫,由所有可用的路徑和每條路徑可達的目标集合(表達為網絡字首)組成。為了達到前面讨論的目的,考慮目标網絡所對應的

可用路徑,是有用的。大多數情況下,我們期望找到唯一一條可用路徑。但是,當不是這樣時,所有可用的路徑應當儲存,當主要路徑缺失時,儲存能以最快的速度

适應,(産生新的主要路徑)。任何時候,隻有主要路徑才會被廣播。

路徑選擇過程可以形式化為,對所有可用路徑及相對應的目标IP,定義完整的優先級。定義這種優先級的一種方法,是定義一個函數,将每條完整的AS

path映射成一個非負整數,用來表示該路徑的優先級。路徑選擇于是簡化為,将該函數應用到所有可用路徑,再選擇最高的優先級。

在真實的BGP實作中,為路徑配置設定優先級的标準在配置資訊中說明。

為路徑配置設定優先級的過程源于以下幾個資訊:

1. 整條AS path顯示的資訊

2. 由AS path和BGP以外資訊(比如,配置資訊中的路由政策限制)引申出來的混合資訊。

為路徑配置設定優先級的可能的标準為:

-AS數目。AS越少,該條路徑越好。

-政策考慮。BGP對基于政策路由的支援,源于對分布式路由資訊的控制。一個BGP發言人可能知道幾條政策限制(包括自身AS的内外),進行合适的路徑選擇。不遵從政策要求的路徑不被考慮。

-某些AS是否在路徑中存在。依靠BGP以外的資訊,一個AS可以知道某些AS的一些性能特點(比如,帶寬,MTU,AS間徑向距離),然後選擇偏愛程度。

-路徑起源。由BGP學習而來的整條路徑(也就是說,路徑終點與路徑的上一個AS在BGP内部)相比那些部分學習自EGP及其他方法的路徑,是更優的。

-AS path子集。通往同一目的地,一個較長AS path的子集将受到偏愛。在該較短AS path中存在的任何問題都也是較長AS path的問題。

-鍊路動态。穩定的路徑比不穩定的路徑更受歡迎。注意,這個标準應被小心使用,避免出現路由抖動。一般來說,任何依賴于動态資訊的标準都可能引發路由不穩定,是以應謹慎對待。

7. 支援路由政策的必備集合

BGP政策以配置資訊的形式實作。該資訊不直接編入協定。是以,BGP可以提供非常複雜的路由政策。但是,并不要求所有的BGP實作支援這些政策。

我們不試圖将路由政策标準化使其适用于每個BGP實作,強烈鼓勵所有的實作支援如下的路由政策集:

1.

BGP實作應允許一個AS控制向相鄰AS廣播由BGP學習來的路由。實作還應支援對位址字首大小的控制。實作還應支援對自治系統大小的控制,不管該自治系

統是起源,還是鄰居。如果某路由對某外部對等體按上述控制聲明,則需注意該路由不能向那個對等體通告。特别地,本地系統必須明确向那個對等體通告,該路由

現在不可用。

2. BGP實作應允許一個AS對某條路徑優先考慮(當存在多條可用路徑時)。實作至少具備以下相同功能,允許管理者對來自鄰居的路由設定優先級。優先級的大小應在0到2^(31)-1之間。

3. BGP實作應允許一個AS忽略某些在AS_PATH屬性中存在特定AS的路由。該功能的實作,可以使用[2]中說明的技術,設定這些AS的"weight"為"infinity"。路由選擇過程必須忽略那些"weight"為"infinity"的路由。

8. 與其他外部路由協定的關系

本部分建議的指導方針與[3]中陳述的指導方針一緻。

一個AS應通告它内部目标網絡的最小聚合及與實際使用的位址空間的關系。這可以被非BGP-4的AS的管理者用來決定從某條聚合路由可以解聚出多少路由。

一個攜帶ATOMIC_AGGREGATE路徑屬性的路由,不應傳遞于BGP-3或EGP2,除非這種傳遞不出現路由NLRI的解聚。

8.1 與EGP2交換資訊

本文檔對于BGP-4與EGP2間的路由資訊交換,建議如下方針。

為過渡順利,一個BGP發言人EGP2和BGP-4都可以參與。是以,一個BGP發言人接收IP可達性資訊,可能産自EGP2,也可能産自BGP-

4。由

EGP2産生的資訊,将ORIGIN路徑屬性設為1後,可插入BGP-4。同樣地,由BGP-4産生的資訊也可以插入EGP2。但是,第二種情況,當從

BGP-4接收來的IP字首代表連續的A/B/C類網絡集合時,應清楚潛在的解聚資訊。由BGP-4接收的NLRI代表IP子集,插入時,要求BGP發言

人将相應的網絡插入EGP2。本地系統将提供控制EGP2與BGP-4之間可達性資訊交換的機制。特别地,當把來自BGP-4的可達性資訊插入EGP2

時,一個一緻實作要求支援所有如下選項:

-插入預設的(0.0.0.0),不傳遞其他NLRI

-允許受控的解聚,但隻對特定路由;

-允許傳遞非聚合的NLRI

-允許隻傳遞非聚合的NLRI

在一個參與BGP-4的BGP發言人和一個單純的EGP2發言人之間以EGP2交換路由資訊的情況,隻可能發現在域(自治系統)邊界。

8.2 與BGP-3交換資訊

本文檔對于BGP-4與BGP-3間的路由資訊交換,建議如下方針。

為過渡順利,一個BGP發言人BGP-3和BGP-4都可以參與。是以,一個BGP發言人接收IP可達性資訊,可能産自BGP-3,也可能産自BGP-4。

一個BGP發言人可能按如下方式将來自BGP-4的資訊插入到BGP-3。

如果一條BGP-4路由的AS_PATH屬性帶有AS_SET路徑段,那麼,BGP-3路由的AS_PATH屬性應為将此AS_SET段視作

AS_SEQUENCE段,最後的AS_PATH為單純的一個AS_SEQUENCE。這個過程損失了set/sequence資訊,但不影響預防路由回

路,但可能影響政策,如果政策是建立在AS_PATH屬性的内容或順序上的話。

把源自BGP-4的NLRI插入BGP-3,當從BGP-4接收來的IP字首代表連續的A/B/C類網絡集合時,應清楚潛在的解聚資訊。由BGP-

4接收的NLRI代表IP子集,插入時,要求BGP發言人将相應的網絡插入BGP-3。本地系統将提供控制BGP-3與BGP-4之間可達性資訊交換的機

制。特别地,當把來自BGP-4的可達性資訊插入BGP-3時,一個一緻實作要求支援所有如下選項:

在一個參與BGP-4的BGP發言人和一個單純的BGP-3發言人之間以BGP-3交換路由資訊的情況,隻可能發現在自治系統邊界。在一個單獨的自治系統内部,所有BGP發言人的會話必須要麼是BGP-3,要麼是BGP-4,不能是混合體。

9. 在虛拟交換線路上的運作

BGP使用在虛拟交換子網(SVC)上,被要求産生盡可能少的流量。特别地,可能被要求消除由周期性KEEPALIVE消息所産生的流量。BGP包含了一個機制,在虛拟交換線路(SVC)服務運作時,避免SVCs始終開啟,允許它終止周期性KEEPALIVE消息的發送。

本部分論述了如何在沒有周期性KEEPALIVE消息的條件下,使用智能的SVC管理,使SVC使用最少。所提議的方案也适用于"永久"線路,"永久"線路支援類似鍊路品質監測的特性,或者可以顯示請求來決定鍊路連接配接的狀态。

9.1 建立BGP連接配接

通過在OPEN消息中設定Hold Time為0來實作

9.2 線路管理器特性

線路管理必須具備足夠的功能來彌補周期性KEEPALIVE消息的缺失:

-必須能夠在失敗發生的可預見的有限時間内,确定鍊路層的不可達性。

-關于确定不可達性,應該:

-開啟一個配置死寂的計數器(與典型的保持計數器值相比)。

-試圖重建鍊路層連接配接。

-如果死寂計數器終止,應該:

-發送一個内部線路DEAD訓示給TCP。

-如果連接配接重建,應該

-取消死寂計數器

-發送一個内部線路UP訓示給TCP。

9.3 TCP特性

TCP須做一點修改,來處理來自線路管理器的内部通告:

-DEAD:清除發送隊列,取消TCP連接配接。

-UP:發送任何隊列資料,或者允許向程序傳遞TCP調用

9.4 混合特性

些應用可能無法保證BGP程序和線路管理器統一工作;也就是說,當一個停止或崩潰時,另一個仍獨立存在。如果這是事實,在BGP程序和線路管理器之間周期

性的雙向握手就需要實作。如果BGP程序發現線路管理器死亡,它就關閉所有相關的TCP連接配接。如果線路管理器發現BGP程序死亡,它将關閉所有與BGP進

程相關的連接配接,拒絕新連接配接。

10. 結論

BGP協定為域間路由提供高度的控制和柔韌性,執行政策限制,避免路由回路。在此說明的指導方針為BGP使用提供了一個起點,随着BGP增長,它将提供更多進階和可管理的路由方法。

附錄A. BGP與IGP的關系

本部分概述了BGP與IGP交換路由資訊的方法。這些方法此處不提議作為标準BGP使用的一部分。這些方法僅是資訊補充。應用在引入IGP資訊時,可能需要考慮這些方法。

這是适用于一般IGP的概述資訊。

BGP與某特定IGP的關系不在此部分讨論。特定IGP的方法應在其他文檔論述,在将來應成為标準化用法。

概論

據定義,所有過渡AS必須能運輸那些源于或終于該AS的流量。這要求在BGP和那個特定AS使用的内部網關協定(IGP)之間具有一定的聯系和協調。一般

來說,源于外部AS的流量将同時穿越内部網關(隻支援IGP)和邊界網關(支援IGP和BGP)。所有内部網關都通過IGP從一個以上的邊界網關那兒接收

有關外部路由的資訊。

依靠在一個AS内傳播BGP資訊的機制,BGP和IGP之間的一緻性須得到特别關注,因為狀态的改變可能以不同的速度在AS

内傳播。可能出現時間窗,兩個時刻分别為:在某邊界網關(A)從相同AS内的另一台邊界網關(B)擷取新的BGP路由資訊;AS的IGP能夠路由過渡流量

到邊界網關(B)。在這兩個時刻之間,錯誤路由和"黑洞"均可能發生。

為了盡可能減輕這個路由問題,在AS的所有内部網關準備好将目标為外部 IP

的流量發往正确出口邊界網關(B)之前,邊界網關(A)不應該向外部對等體廣播那些通過邊界網關(B)運往外部目标網絡的路由。換句話說,内部路由須會聚

一個合适的出口網關,然後才能廣播通過該出口網關前往外部對等體的路由。

A.2 實作穩定關系的方法

下面的讨論概述了幾個能實作在AS内BGP和IGP之間穩定關系的技術。

A.2.1 通過IGP傳遞BGP資訊

提供自己的機制在AS内傳遞BGP資訊,同樣,隻要IGP支援全部路由資訊的洪泛(提供分散BGP資訊的機制)和一條通路的會聚(使得機制有效原子化),

就可以用來傳輸BGP資訊。如果一個IGP用來傳遞BGP資訊,前述的異步時間将不複存在,因為AS内部的BGP資訊傳遞與IGP同步,IGP的會聚或多

或少與新路由資訊的到來同步。注意,IGP隻運輸BGP資訊,不對其解析或處理。

A.2.2 标記的内部網關協定

當向外的路由在

AS内傳遞時,一定的IGP可以用它們的出口點給它們做标記。每個邊界網關應使用同一的标記聲明外部路由資訊(通過BGP接收),不管這些路由資訊是進入

IGP還是傳遞到其他的内部對等體(擁有相同AS号的對等體)。邊界網關産生的标記必須唯一對應那個特定的邊界網關——不同的邊界網關必須使用不同的标

記。

在一個AS内的所有邊界網關必須遵守如下兩條規則:

1. 如果邊界網關A從内部對等體接收到資訊聲稱某些目标網絡不可達,則它必須向所有外部對等體傳遞該資訊。

2. 如果邊界網關A從内部對等體接收到關于某些可達目标網絡X的資訊,則它必須擁有到X的IGP路由,而且IGP和BGP的路由資訊都有對應标記,否則無法将這些資訊傳遞到任何外部對等體。

這些規則保證了除非IGP正确支援,否則不向外聲明路由資訊。它也可以部分避免"黑洞"。在AS内标記BGP和IGP的一種方法是使用出口邊界網關的IP位址。這種情況下,BGP的UPDATE消息的"gateway"域将用作标記。

A.2.3 封裝

封裝為運輸AS間過渡流量提供了最簡單的機制(關于IGP和BGP的聯系)。用這種方法,過渡流量封裝在一個位址為出口網關的IP資料包内。這種方法對IGP的唯一要求是能夠支援同一AS内邊界網關間的路由。

前往某些外部目标網絡X的出口網關A的位址,通過A向同一AS内其他邊界網關發送的BGP

OPEN消息中的BGP辨別符進行聲明。為了路由流量到目标X,AS内的每個邊界網關都封裝流量到以網關A為位址的IP資料包。然後,網關A解封裝,将原

始資料包發送到外部AS的對應網關。

因為封裝不依靠IGP來運輸外部路由資訊,是以在BGP和IGP之間無需同步。一些方法用來辨別包含封裝IP的資料包,如用IP協定類型碼,必須在使用前定義。注意,如果一個封裝後的資料包的長度非常接近MTU,這個資料包将被那個執行封裝的網關分片。

A.2.4 遍布的BGP

如果一個AS内的所有路由器都是BGP發言人,那麼就沒有必要聯系BGP和IGP。這種情況下,AS内的所有路由器擁有BGP路由的全部資訊。IGP隻用來在AS中路由,不再有BGP路由被導入成IGP。

如果路由器按此方式工作,它們必須能夠完成對路由表的循環查找。第一次查找将使用一條BGP路由來建立出口路由器,第二次查找将決定前往出口路由器

的IGP路徑。這種情形下,IGP不攜帶任何外部資訊,所有BGP發言人一旦獲得路由的新資訊,該AS内的路由器将很快會聚。因為不存在為IGP的會聚延

遲,一個應用能廣播這些路由,而沒有延遲。

A.2.5 其他情況

有些AS的IGP,可能既無法傳輸BGP資訊,也無法标記外部路由(比如,RIP)。另外,封裝可能不可行或不被接受。這些情況下,以下兩條規則須被遵守:

(1). 如果邊界網關A從内部對等體接收到資訊聲稱某些目标網絡不可達,則它必須向所有外部對等體傳遞該資訊。

(2). 如果邊界網關A從内部對等體接收到關于某些可達目标網絡X的資訊,則它必須擁有到X的IGP路由,而且有足夠的時間使IGP路由會聚,否則無法将這些資訊傳遞到任何外部對等體。

以上規則隻說明了傳遞BGP路由資訊到其他AS的必要(但不充分)條件。與标記的IGP相比,這些規則不能保證,在傳遞路由到其他AS之前,到出口

網關的内部路由存在。如果IGP會聚時間比某小值X還小,IGP和BGP不同步造成的時間窗也将小于X,那麼,路由不穩定是異常短暫的,這個問題就可以忽

略。至于這個X的合理取值,尚待研究,但至少應小于1秒。如果IGP會聚時間無法忽略,就需要不同的方法。适合這種情形的機制和技術尚待深入研究。

邊界網關協定(BGP)是運作于 TCP 上的一種自治系統的路由協定。 BGP 是唯一一個用來處理像網際網路大小的網絡的協定,也是唯一能夠妥善處理好不相關路由域間的多路連接配接的協定。 BGP 建構在 EGP 的經驗之上。 BGP 系統的主要功能是和其他的 BGP 系統交換網絡可達資訊。網絡可達資訊包括列出的自治系統(AS)的資訊。這些資訊有效地構造了 AS 互聯的拓樸圖并由此清除了路由環路,同時在 AS 級别上可實施政策決策。

中文名
邊界網關協定
外文名
Border Gateway Protocol
類    型
外部網關協定EGP
簡    稱
釋義

(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鄰居建立中的狀态和過程如下:

  1. 空閑(Idle):為初始狀态,當協定激活後開始初始化,複位計時器,并發起第一個TCP連接配接,并開始傾聽遠端對等體所發起的連接配接,同時轉向Connect狀态。。
  2. 連接配接(Connect):開始TCP連接配接并等待TCP連接配接成功的消息。如果TCP連接配接成功,則進入OpenSent狀态;如果TCP連接配接失敗,進入Active狀态。
  3. 行動(Active):BGP總是試圖建立TCP連接配接,若連接配接計時器逾時,則退回到Connect狀态,TCP連接配接成功就轉為Open sent狀态。
  4. OPEN發送(Open sent):TCP連接配接已建立,自己已發送第一個OPEN封包,等待接收對方的Open封包,并對封包進行檢查,若發現錯誤則發送Notification消息封包并退回到Idle狀态。若檢查無誤則發送Keepalive消息封包,Keepalive計時器開始計時,并轉為Open confirm狀态。
  5. OPEN證明(Open confirm):BGP等待Keepalive封包,同時複位保持計時器。如果收到了Keepalive封包,就轉為Established狀态,鄰居關系協商完成。如果系統收到一條更新或Keepalive消息,它将重新啟動保持計時器;如果收到Notification消息,BGP就退回到空閑狀态。
  6. 已建立(Established):即建立了鄰居(對等體)關系,路由器将和鄰居交換Update封包,同時複位保持計時器。

BGP路由通告原則

BGP在進行路由通告的時候,需要遵循以下原則:

  1. 多條路徑時,BGP Speaker隻選最優的給自己使用(負載均衡和FRR除外)。
  2. BGP Speaker隻把自己使用的路由(最優路由)通告給相鄰體。
  3. BGP Speaker從EBGP獲得的路由會向自己所有BGP相鄰體通告(包括EBGP和IBGP)。
  4. BGP Speaker從IBGP獲得的路由不向自己的IBGP相鄰體通告(反射器除外)。
  5. BGP Speaker從IBGP獲得的路由是否通告給自己的EBGP相鄰體要根據IGP和BGP同步的情況來決定。
  6. 當收到對端的refresh封包并且本端鄰居支援refresh能力,BGP Speaker将把自己所 有BGP路由通告給對等體。
  7. 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)分組,用來發送檢測到的差錯[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] 

代碼 說明
OPEN 初始化對等路由器間的通信
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 進行路由的傳播。[3] 

邊界網關協定BGP

如果這篇文章幫助到了你,你可以請作者喝一杯咖啡

邊界網關協定BGP