本頁使用了標題或全文手工轉換

邊界閘道器協定

維基百科,自由的百科全書
跳至導覽 跳至搜尋

邊界閘道器協定英語: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的鄰居關係(或稱通訊對端/對等實體)是通過人工組態實現的,對等實體之間通過TCP(埠179)對談互動資料。BGP路由器會周期地傳送19位元組的保持存活keep-alive訊息來維護連接(預設周期為60秒)。在路由協定中,只有BGP使用TCP作為傳輸層協定。

同一個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路由聯通性和路由學習[編輯]

同一AS內如果有多個路由器參與BGP路由,則它們之間必須組態成全連通的網狀網格結構:任意兩個路由器之間都必須組態成對等實體。這樣做會帶來擴充方面的問題,因為所需要的(TCP)連接數是(BGP)路由器數量的平方。為緩減這個問題,BGP支援兩種選項:route reflectors (RFC 4456)和confederations(RFC 5065)。下面討論了在全連通的IBGP網格中的基本更新處理(UPDATE)。

基本更新過程[編輯]

NLRI(Network Layer Reachability Information網路層可達資訊)。

一個BGP路由器可以從多個鄰居接收NLRI更新資訊,並且將(自己擁有的)NLRI資訊通告給自己的鄰居們(與收到NLRI更新訊息的鄰居可以不一致)。BGP維護自己的主路由表,稱為Loc-RIB(本地路由資訊庫),注意與路由器的主路由表的區別。針對每一個鄰居,目前BGP的行程(可以理解成本地BGP實體)維護一個Adj-RIB-In(鄰接路由資訊庫,入站),記錄從該鄰居收到的NLRI訊息;還要維護一個Adj-RIB-Out(出站),記錄從本地BGP實體傳送給該鄰居的NLRI資訊。

在上一段中提到的Loc-RIB, Adj-RIB-In和Adj-RIB-Out的具體實現(這些RIB的物理儲存和結構)都由不同的廠商在實現BGP時自行決定。雖然本地路由器上往往通過管理指令查詢這些RIB,但BGP路由器並不關心其他BGP路由器是如何實現這些RIB的。具體實現方法可以不同,大家往往把兩個Adj-RIBs和loc-RIB存在同一個資料結構中,依靠每個RIB表項後附加的額外資訊來區分。BGP行程可以從附加資訊中得知很多資訊,例如哪些表項是屬於為某個特定鄰居準備的Adj-RIBs,Loc-RIB表項是否有資格被遞交給本地路由器的路由表管理行程,逐鄰接路由選擇行程收到的Loc-RIB是否符合策略。

如果Loc-RIB表項有資格被提交給本地路由器的路由表管理行程,BGP會把自認為最佳的多條路由遞交給主路由表行程。所遞交的BGP路由是否被選用,則是完全由上述行程的具體實現決定的。例如,如果從路由器的本地埠獲知某一字首與本路由器直接相連,則通常會選擇直接轉發的路由。只要直連的埠還在正常工作,去向該目的字首的BGP路由就不會被真正納入路由表(主路由表)。如果直連埠無法正常工作,並且不存在優先級較高的路由,則Loc-RIB路由表項就會被載入主路由表。之前有一個常見的誤解,認為BGP傳送各種策略。實際上BGP只傳送資訊,基於這些資訊,BGP行程可以做決策。有些資訊顯然是用於決策的,例如communities和multi-exit discriminators (MED).

路由選擇[編輯]

在選擇合適的NLRI加入loc-RIB時,BGP標準規定了很多決策準則。評價NLRI的第一個準則就是判斷它的下一跳屬性必須是可達(reachable或resolvable)。下一跳可達還可以做如下解釋:在本路由器的主路由表中,有一條活動可用的路由,指向下一跳位址所在的字首。換句話說,必須有一條活動可用的路由去向下一跳。

其次,針對每個鄰居,本地BGP行程可以採用不同的標準和廠商自訂的原則決定哪些路由可以加入該鄰居對應的Adj-RIB-in。鄰居可以把去向某個目的地的多條路由發給你,but the first level of preference is at the neighbor level。對於某個目的地,只有一條路由會被加入所謂的Adj-RIB-In(註:在本地,針對每個鄰居都有一個Adj-RIB-In)。如果鄰居復原了任何路由,該BGP行程還要負責從Adj-RIB-In中刪除對應的條目(如果有)。

如果某個Adj-RIB-In發生變化,原生的主BGP行程將判斷對應的鄰居通告的新路由是否比Loc-RIB中現有路由更好。如是,將進行替換。如果某個路由被鄰居復原,而且沒有別的路由指向相應的目的地,則需要從Loc-RIB中刪除相應的路由表項,並且BGP不再將該表項遞交給主路由表管理器。如果OSPF或其他非BGP協定也沒能為本路由器找到一條指向該目的地的路由,則相應的路由表項將從主路由表中刪除。

逐鄰居選擇[編輯]

如果某條路由資訊(NLRI)來自一個本域內的對等實體(IBGP),BGP標準規定的第一條準則就是檢查LOCAL_PREFERENCE(以下簡稱LOCAL_PREF)屬性。如果來自鄰居(同一AS域)的多條IBGP路由指向同一目的字首,則選擇具有最高LOCAL_PREF的那條路由。如果恰巧有多條路由都具有相同的最高LOCAL_PREF,則執行下一條準則。標準中規定LOCAL_PREF為第一準則,一旦確定了NEXT_HOP可達,Cisco和其他幾個廠商首先考慮了本地路由器定義的WEIGHT值(該屬性僅在本地路由器有效,不會通過BGP擴散),即選擇具有最大WEIGHT的路由。

可以通過本地組態或控制軟體能夠操縱LOCAL_PREF、WEIGHT以及其他的準則。標準中並未定義這樣的操縱,但在實際產品中廣泛存在。例如,BGP選擇行程(selection process)並不直接使用COMMUNITY屬性(見下面)。但BGP鄰居行程(neighbor process)可以根據手動組態的規則來設定LOCAL_PREF或別的factor的屬性值。例如,當COMMUNITY屬性值滿足某種模式符合準則(或者說具有某種模式)時,BGP鄰居行程就可以修改LOCAL_PREF的值。如果某條路由是從相鄰AS的某個對等實體(BGP)獲知的,per-neighbor BGP process會根據原生的策略規則計算該路由的LOCAL_PREF,並且與來自同一鄰居的其他路由的LOCAL_PREF比較大小。

如果不考慮廠商自己對規則的修改,在BGP協定中,per-neighbor level上依次執行下面的準則,直至選出唯一的一條路由:

  1. 選擇具有最短AS_PATH的路徑。AS_PATH是由到達通告中的目的地所必須經過的AS號組成。AS1-AS2-AS3比AS4-AS5-AS6-AS7短。
  2. (如果多條路由具有相同的AS_PATH長度)選擇具有最小ORIGIN值的路由,
  3. (如果多條路由具有相同的ORIGIN)選擇具有最小MED值的路由

參見[編輯]

參考文獻[編輯]

外部連結[編輯]