HCIE課程筆記11-BGP基本原理

    BGP是Border Gateway Protocol的簡稱

    BGP是一種增強的路徑矢量路由協議,同時BGP是擁有豐富的策略控制技術的外部網關協議。

    BGP多運行於AS與AS之間

 

一 BGP概述

(1)BGP是一種外部網關協議(EGP),與OSPF、RIP等內部網關協議(IGP)不同,其着眼點不在於自動發現網絡拓撲,而在於在AS之間選擇最佳路由和控制路由的傳播。

(2) BGP使用TCP作爲其傳輸層協議(監聽端口號爲179),提高了協議的可靠性,且不需要專門的機制來確保連接的可控性。

(3)BGP進行域間的路由選擇,對協議的穩定性要求非常高。因此用TCP協議的高可靠性來保證BGP協議的穩定性。

(4)BGP的對等體之間必須在邏輯上連通,並進行TCP連接。

(5)路由更新時,BGP只發送更新的路由,大大減少了BGP傳播路由所佔用的帶寬,適用於在Internet上傳播大量的路由信息。

(6)BGP從設計上避免了環路的發生。AS之間:BGP通過攜帶AS路徑信息來標記途經的AS,帶有本地AS號的路由將被丟棄,從而避免了域間產生環路。AS內部:BGP在AS內學到的路由不再通告給AS內的BGP鄰居,避免了AS內產生環路。

(7)BGP提供了豐富的路由策略,能夠對路由實現靈活的過濾和選擇。

(8) BGP提供了防止路由振盪的機制,有效提高了Internet網絡的穩定性。

(9) BGP易於擴展,能夠適應網絡新的發展。主要是通過TLV進行擴展。

 

二 BGP基本概念

1 自治系統

AS(autonomous system)是指在一個實體管轄下的擁有相同選路策略的IP網絡。

(1)自治系統的典型定義是指由同一個技術管理機構管理,使用統一選路策略的一些路由器的集合。

(2) 每個自治系統都有唯一的自治系統編號,這個編號是由IANA分配的。

(3)自治系統的編號範圍是從1到65535,其中1到64511是註冊的因特網編號,64512到65535是私有網絡編號。

(4)BGP網絡中的每個AS都被分配一個唯一的AS號,用於區分不同的AS。AS號分爲2字節AS號和4字節AS號,其中2字節AS號的範圍爲1 至65535,4字節AS號的範圍爲1至4294967295。支持4字節AS號的設備能夠與支持2字節AS號的設備兼容。

2 EBGP和IBGP

 

 

 

 IBGP:運行於同一AS內部的BGP稱爲IBGP。爲了防止AS內產生環路,從IBGP對等體學到的路由不能轉發給其他IBGP對等體;所以IBGP對等體相互之間需要建立全連接。

 EBGP:運行於不同AS之間的BGP稱爲EBGP。爲了防止AS間產生環路,當BGP路由器從EBGP對等體接收到路由時,會將帶有本地AS號的路由丟棄。

3 BGP報文交互中的角色

 Speaker:發送BGP消息的路由器稱爲BGP發言者,它接收或產生新的路由信息,併發布給其它BGP Speaker。

 Peer:相互交換消息的BGP Speaker之間互稱對等體(Peer),若干相關的對等體可以構成對等體組(Peer Group)。

 

4 BGP報文

    BGP的運行是通過消息驅動的,共有Open、Update、Notification、Keepalive和Route-Refresh等5種消息類型。

 Open消息:是TCP連接建立後發送的第一個消息,用於建立BGP對等體之間的連接關係。對等體在接收到Open消息並協商成功後,將發送Keepalive消息確認並保持連接的有效性。確認後,對等體間可以進行Update、Notification、Keepalive和Route-Refresh消息的交換。

 Update消息:用於在對等體之間交換路由信息。一條Update消息可以發佈多條屬性相同的可達路由信息,也可以撤銷多條不可達路由信息。

 Keepalive消息:BGP會週期性的向對等體發出Keepalive消息,用來保持連接的有效性。

 Notification消息:當BGP檢測到錯誤狀態時,就向對等體發出Notification消息,之後BGP連接會立即中斷。

 Route-Refresh消息:通過OPEN消息告知BGP peer本地支持路由刷新能力(Route-Refresh capability)。在所有BGP路由器使能Route-Refresh能力的情況下,如果BGP的入口路由策略發生了變化,本地BGP路由器會向對等體發佈Route-Refresh消息,收到此消息的對等體會將其路由信息重新發給本地BGP路由器。這樣,可以在不中斷BGP連接的情況下,對BGP路由表進行動態刷新,並應用新的路由策略。

 

BGP報文應用:

 BGP使用TCP建立連接,本地監聽端口爲179。和TCP連接建立相同,BGP連接的建立也要經過一系列的對話和握手。TCP通過握手協商通告其端口等參數,BGP的握手協商的參數有:

BGP版本、BGP連接保持時間、本地的路由器標識(RouterID)、授權信息等。這些信息都在Open消息中攜帶。

  BGP連接建立後,如果有路由需要發送則發送Update消息通告對端。Update消息發佈路由時,還要攜帶此路由的路由屬性,用以幫助對端BGP協議選擇最優路由。在本地BGP路由變化時,要通過Update消息來通知BGP對等體。

 經過一段時間的路由信息交換後,本地BGP和對端BGP都無新路由通告,趨於穩定狀態。此時要定時發送KEEPALIVE消息以保持BGP連接的有效性。對於本地BGP,如果在保持時間內,未收到任何對端發來的BGP消息,就認爲此BGP連接已經中斷,將斷開此BGP連接,並刪除所有從該對等體學來的BGP路由。

 當本地BGP在運行中發現錯誤時(如對端BGP版本本地不支持、本地BGP收到了結構非法的Update消息等),要發送Notification消息通告BGP對等體。本地BGP退出BGP連接時,也需發送Notification報文。

BGP報頭

 Marker(標記):16字節,固定爲1。

 Length(長度):兩字節無符號整數。指定了消息的全長,包括頭部。

 Type(類型):1 字節,指示報文類型:

• Open

• Update

• Keepalive

• Notification

• Route-Refresh

 

Open報文結構

 Version:BGP的版本號。對於BGPv4來說,其值爲4。

 My Autonomous System:本地AS編號。通過比較兩端的AS編號可以確定是EBGP連接還是IBGP連接。

 Hold Time:在建立對等體關係時兩端要協商Hold time,並保持一致。如果兩端所配置的Hold time時間不同,則BGP會選擇較小的值作爲協商的結果。如果在這個時間內未收到對端發來的Keepalive消息,則認爲BGP連接中斷。如果保持時間爲0,則標識不發送Keepalive報文。

 BGP Identifier:BGP路由器的Router ID,以IP地址的形式表示,用來識別BGP路由器。

 Opt Parm Len(Optional Parameters Length):可選參數的長度。如果爲0則沒有可選參數。

 Optional Parameters:是一個可選參數用於BGP驗證或多協議擴展(Multiprotocol Extensions)等功能。每一個參數爲一個(Parameter Type-Parameter Length-Parameter

Value)三元組 。

 

Update報文結構

 Withdrawn Routes Length :(2字節無符號整數) 不可達路由長度,表示Withdrawn Routes字段的數據長度。如果Withdrawn Routes Length字段數值爲0,則表示Withdrawn

Routes字段沒有任何數據,在UPDATE消息中不會被顯示。

 Withdrawn Routes :(變長) 撤銷路由。該字段包括一系列的IP地址前綴信息,以<length, prefix>的格式來表示,比如<19,198.18.160.0>表示一個198.18.160.0 255.255.224.0的

網絡。

 Path Attribute Length :(2字節無符號整數) 路由屬性長度,表示Path Attribute字段的數據長度。如果Path Attribute Length數值爲0,則表示Path Attribute字段沒有任何數據,在UPDATE消息中不會被顯示。

 Network Layer Reachability Information :(變長) 網絡可達信息。包括一系列的IP地址前綴。格式與撤消路由字段一樣<length, prefix>。

 

Keepalive報文結構

 KeepAlive 報文的組成只包括一個BGP數據報頭。缺省情況下,發送KeepAlive 的時間間隔爲 60 秒,Hold Time是180秒。每次從鄰居處接收到KeepAlive 報文將重置Hold Time定時器,如果Hold Time定時器超時,就認爲對等體Down掉。

 

Notification報文結構

 Errorcode:錯誤碼。1字節長的字段。每個不同的錯誤都使用唯一的代碼表示,而每一個錯誤碼都可以擁有一個或多個錯誤子碼,但如果某些錯誤碼並不存在錯誤子碼的話,則該錯誤子碼字段以全0表示。

 Errsubcode:錯誤子碼。

 

5 BGP狀態機

 

 

 

BGP有限狀態機共有六種狀態,分別是Idle、Connect、Active、OpenSent、OpenConfirm和Established。

 

 Idle狀態是BGP初始狀態。在Idle狀態下,BGP拒絕鄰居發送的連接請求。只有在收到本設備的Start事件後,BGP纔開始嘗試和其它BGP對等體進行TCP連接,並轉至Connect狀態。

• Start事件是由一個操作者配置一個BGP過程,或者重置一個已經存在的過程或者路由器軟件重置BGP過程引起的。

• 任何狀態中收到Notification報文或TCP拆除鏈路通知等Error事件後,BGP都會轉至Idle狀態。

 

 在Connect狀態下,BGP啓動連接重傳定時器(Connect Retry,缺省爲32秒),等待TCP完成連接。

• 如果TCP連接成功,那麼BGP向對等體發送Open報文,並轉至OpenSent狀態;

• 如果TCP連接失敗,那麼BGP轉至Active狀態;

• 如果連接重傳定時器超時,BGP仍沒有收到BGP對等體的響應,那麼BGP繼續嘗試和其它BGP對等體進行TCP連接,停留在Connect狀態。

• 如果發生其他事件(由系統或者操作人員啓動的),則退回到Idle狀態。

 

 在Active狀態下,BGP總是在試圖建立TCP連接。

• 如果TCP連接成功,那麼BGP向對等體發送Open報文,關閉連接重傳定時器,並轉至OpenSent狀態;

• 如果TCP連接失敗,那麼BGP停留在Active狀態;

• 如果連接重傳定時器超時,BGP仍沒有收到BGP對等體的響應,那麼BGP轉至Connect狀態。

 

 在OpenSent狀態下,BGP等待對等體的Open報文,並對收到的Open報文中的AS號、版本號、認證碼等進行檢查。

• 如果收到的Open報文正確,那麼BGP發送Keepalive報文,並轉至OpenConfirm狀態;

• 如果發現收到的Open報文有錯誤,那麼BGP發送Notification報文給對等體,並轉至Idle狀態。

 

 在OpenConfirm狀態下,BGP等待Keepalive或Notification報文。如果收到Keepalive報文,則轉至Established狀態,如果收到Notification報文,則轉至Idle狀態。

 

 在Established狀態下,BGP可以和對等體交換Update、Keepalive、Route-refresh報文和Notification報文。

• 如果收到正確的Update或Keepalive報文,那麼BGP就認爲對端處於正常運行狀態,將保持BGP連接。

• 如果收到錯誤的Update或Keepalive報文,那麼BGP發送Notification報文通知對端,並轉至Idle狀態。

• Route-refresh報文不會改變BGP狀態。

• 如果收到Notification報文,那麼BGP轉至Idle狀態。

• 如果收到TCP連接斷開消息,那麼BGP斷開連接,轉至Idle狀態。

 

6 對等體之間的交互原則

 

 

BGP對等體交互原則:

(1)從IBGP對等體獲得的路由,只發布給EBGP對等體

(2)從EBGP對等體獲得的路由,發佈給所有EBGP和IBGP對等體

(3)只講BGP的最優路由發佈給對等體

(4)只發送更新的BGP路由

 

 

 

7 數據庫

IP路由表(IP-RIB):全局路由信息庫,包括所有IP路由信息;

BGP路由表(Loc-RIB):BGP路由信息庫,包括本地BGP Speaser選擇的路由信息;

鄰居表:對等體鄰居清單列表;

Adj-RIB-In:對等體宣告給本地BGP Speaker的未處理的路由信息庫;

Adj-RIB-Out:本地BGP Speaker宣告給指定對等體的路由信息庫;

 

8 BGP路由信息處理

 

 

 

BGP路由信息處理:

 (1)當從對等體接收到更新數據包時,路由器會把這些更新數據包存儲到路由選擇信息庫(Routing Information Base, RIB)中,並指明是來自哪個對等體的(Adj-RIB-In)。這些更新數據包被輸入策略引擎過濾後,路由器將會執行路徑選擇算法,來爲每一條前綴確定最佳路徑。

 (2)得出的最佳路徑被存儲到本地BGP RIB (Loc-RIB)中,然後被提交給本地IP路由選擇表(IP-RIB),以用作安裝考慮。

 (3)除了從對等體接收來的最佳路徑外,Loc-RIB也會包含當前路由器注入的(被稱爲本地發起的路由),並被選擇爲最佳路徑的BGP前綴。Loc-RIB中的內容在被通告給其他對等體之前,必須通過輸出策略引擎。只有那些成功通過輸出策略引擎的路由,纔會被安裝到輸出RIB (Adj-RIB-Out)中。

 

9 BGP與IGP交互

 

BGP同步:
在IBGP路由加入路由表併發布給EBGP對等體之前,會先檢查IGP路由表。只有在IGP也知道這條IBGP路由時,它纔會被加入到路由表,併發布給EBGP對等體。

 

同步是指IBGP和IGP之間的同步,其目的是避免誤導外部AS的路由器。

 

二 BGP路由屬性特點

BGP路由屬性是一套參數,它是對路由的進一步的描述的進一步的描述

(1)公認必遵:所有BGP路由器必須識別,且必須存在於Update消息中;如果缺少這種屬性,路由信息就會出錯;

(2)公認任意:所有BGP路由器必須可以識別,但不要求必須存在於Update消息中;缺少這類屬性不會導致路由信息出錯;

(3)可選過渡:在BGP對等體之間具有可傳遞性的屬性;BGP路由器可以不支持此屬性,但它仍然會接受這類屬性,並傳遞給其他對等體;

(4)可選非過渡:如果BGP路由器不支持此屬性,則相應的這類屬性會被忽略,且不會傳遞給其他對等體;

 

常用的屬性類別如下所示:

 Origin爲公認必遵屬性

 AS_Path爲公認必遵屬性

 Next_Hop爲公認必遵屬性

 Local_Pref爲公認任意屬性

 community爲可選過渡屬性

 MED爲可選非過渡屬性

 Originator_ID爲可選非過渡屬性

 Cluster_List爲可選非過渡屬性

 

 

Origin

 

Origin屬性用來定義路徑信息的來源,標記一條路由是怎麼成爲BGP路由的。它有以下3種類型:

(1) IGP:具有最高的優先級。通過路由始發AS的IGP得到的路由信息,比如通過network命令注入到BGP路由表的路由,其Origin屬性爲IGP。標識符爲」i」;

(2) EGP:優先級次之。通過EGP得到的路由信息,其Origin屬性爲EGP。標識符爲「e」;

(3) Incomplete:優先級最低。通過其他方式學習到的路由信息。比如BGP通過import-route命令引入的路由,其Origin屬性爲Incomplete。標識符爲「?」;

 

 

AS_Path

AS_Path屬性按矢量順序記錄了某條路由從本地到目的地址所要經過的所有AS編號。當BGP路由器從EBGP對等體接收路由時,如果發現AS_Path列表中有本AS號,則不接收該路由,從而避免了AS間的路由環路。

 

   當BGP Speaker本地通告一條路由時:

  (1)當BGP Speaker將這條路由通告到其他AS時,便會將本地AS號添加在AS_Path列表中,並通過Update消息通告給鄰居路由器。

  (2)當BGP Speaker將這條路由通告到本地AS時,便會在Update消息中創建一個空的AS_Path列表。

 

   當BGP Speaker傳播從其他BGP Speaker的Update消息中學習到的路由時:

  (1)當BGP Speaker將這條路由通告到其他AS時,便會把本地AS編號添加在AS_Path列表的最前面(最左面)。收到此路由的BGP路由器根據AS_Path屬性就可以知道去目的地址所要經過的AS。離本地AS最近的相鄰AS號排在前面,其他AS號按順序依次排列。

  (2)當BGP Speaker將這條路由通告到本地AS時,不會改變這條路由相關的AS_Path屬性.

拓撲描述:

 當R4將網段10.0.0.0/24通告給AS400和AS100時,會在AS_PATH中添加自己的AS號。當R5將網段10.0.0.0/24通告給AS100時,也會添加添加自己的AS號。當AS100內的R1、R3和R2之間將網段10.0.0.0/24相互通告時,AS_PATH屬性不會改變,在其他BGP選路條件相同的前提下,BGP會選擇AS_PATH路徑最短的,即選擇通過R3直達R4的路由。

 

Next_Hop

 

 

      Next_Hop屬性記錄了路由的下一跳信息。BGP的下一跳屬性和IGP的有所不同,不一定就是鄰居設備的IP地址。通常情況下,Next_Hop屬性遵循下面的規則:

(1)BGP Speaker將本地始發路由發佈給IBGP對等體時,會把該路由信息的下一跳屬性設置爲本地與對端建立BGP鄰居關係的接口地址。

(2)BGP Speaker在向EBGP對等體發佈某條路由時,會把該路由信息的下一跳屬性設置爲本地與對端建立BGP鄰居關係的接口地址。

(3)BGP Speaker在向IBGP對等體發佈從EBGP對等體學來的路由時,並不改變該路由信息的下一跳屬性。

 

 

Local_Pref

Local_Pref屬性

 (1)該屬性僅在IBGP對等體之間有效,不通告給其他AS。它表明路由器的BGP優先級。

 (2)該屬性用於判斷流量離開AS時的最佳路由。當BGP路由器通過不同的IBGP對等體得到目的地址相同但下一跳不同的多條路由時,將優先選擇Local_Pref屬性值較高的路由。

 

 

 

MED

    MED屬性用於判斷流量進入AS時的最佳路由,當一個運行BGP的設備通過不同的EBGP對等體得到目的地址相同但下一跳不同的多條路由時,在其它條件相同的情況下,將優先選擇MED 值較小者作爲最佳路由。

    MED屬性僅在相鄰兩個AS之間傳遞,收到此屬性的AS一方不會再將其通告給任何其他第三方AS。MED屬性可以手動配置,如果路由沒有配置MED屬性,BGP選路時將該路由的MED值按缺省值0來處理。

 

 

 

團體屬性

   團體屬性是一組有相同特徵的目的地址的集合。團體屬性用一組以4字節爲單位的列表來表示,設備中團體屬性的格式是aa:nn或團體號。

   團體屬性屬於可選過度屬性,團體屬性分爲自定義團體屬性和公共團體屬性。

   公共團體屬性有如下四類:

(1)Internet:缺省情況下,所有的路由都屬於Internet團體。具有此屬性的路由可以被通告給所有的BGP對等體。

(2) No_Advertise:具有此屬性的路由在收到後,不能被通告給任何其他的BGP對等體。

(3)No_Export:具有此屬性的路由在收到後,不能被髮布到本地AS之外。如果使用了聯盟,則不能被髮布到聯盟之外,但可以發佈給聯盟中的其他子AS。

(4)No_Export_Subconfed:具有此屬性的路由在收到後,不能被髮布到本地AS之外,也不能發佈到聯盟中的其他子AS。

  

 

四 BGP選路原則

當到達同一目的地存在多條路由時,BGP依照如下策略順序進行路由選擇:

  1. 如果此路由的下一跳不可達,忽略此路由;
  2. 優選協議首選值(PrefVal)最高的路由;華爲設備的特有屬性,僅在本地有效;
  3. 優選本地優先級(Local_Pref)最高的路由;缺省本地優先級100,可以通過執行default local-preference命令可以修改BGP路由的缺省本地優先級;
  4. 優選本地生成的路由;包括通過network命令或import-route命令引入的路由、手動聚合路由和自動聚合路由。優選聚合路由(聚合路由優先級高於非聚合路由);通過aggregate命令生成的手動聚合路由的優先級高於summary automatic命令生成的自動聚合路由;通過network命令引入的路由優先級高於通過import-route命令引入的路由;
  5. 優選AS路徑(AS_Path)最短的路由;AS_Path的長度不包括AS_CONFED_SEQUENCE和AS_CONFED_SET;AS_SET的長度爲1,無論AS_SET中包括多少AS號;執行bestroute as-path-ignore命令後,BGP選路時,忽略AS_Path的比較。
  6. 比較Origin屬性,依次優選Origin類型爲IGP、EGP、Incomplete;
  7. 優選MED值最低的路由;BGP只比較來自同一個AS(不包括聯盟的子AS)的路由的MED值;缺省值爲0;執行bestroute med-none-as-maximum命令後,BGP選路時將該路由的MED值安最大值來處理;
  8. 優選從EBGP鄰居學來的路由(EBGP路由優先級高於IBGP的路由);
  9. 優選到下一跳IGP Metric較小的路由;
  10. 優選Cluster_List最短的路由;
  11. 優選Router ID最小的路由器發佈的路由;
  12. 比較對等體的IP Address,優選從具有較小IP Adddress的對等體學來的路由

 

負載分擔:當到達同一目的地址存在多條等價路由時,可以通過BGP等價負載分擔實現均衡流量的目的;形成BGP等價負載分擔的條件是:BGP選路規則中「到下一跳的IGP metric」這條規則之前所有需要比較的屬性完全相同。

 

五 BGP擴展特性

安全特性

BGP安全特性:

 (1)MD5:BGP使用TCP作爲傳輸層協議,爲提高BGP的安全性,可以在建立TCP連接時進行MD5認證。但BGP的MD5認證並不能對BGP報文認證,它只是爲TCP連接設置MD5認證密碼,由TCP完成認證。如果認證失敗,則不建立TCP連接。  

   (2)限制從對等體接收的路由數量,防止資源耗盡性攻擊。

   (3)AS_Path長度保護。通過在入口和出口兩個方向對AS_Path的長度進行限定,直接丟棄AS_Path超限的報文。

 

 

路由衰減

    路由衰減(Route Dampening)用來解決路由不穩定的問題。多數情況下,BGP協議都應用於複雜的網絡環境中,路由變化十分頻繁。爲了防止持續的路由振盪帶來的不利影響,BGP使用路由衰減來抑制不穩定的路由。

    BGP衰減使用懲罰值(Penalty Value)來衡量一條路由的穩定性,懲罰值越高則說明路由越不穩定。路由每發生一次振盪(路由從激活狀態變爲未激活狀態,稱爲一次路由振盪),BGP便會給此路由增加一定的懲罰值(1000)。當懲罰值超過抑制閾值(Suppress Value)時,此路由被抑制,不加入到路由表中,也不再向其他BGP對等體發佈更新報文。被抑制的路由每經過一段時間,懲罰值便會減少一半,這個時間稱爲半衰期(Half-life)。當懲罰值降到再使用閾值(Reuse Value)時,此路由變爲可用並被加入到路由表中,同時向其他BGP對等體發佈更新報文。上文提到的懲罰值、抑制閾值和半衰期都可以手動配置。路由衰減只適用於EBGP路由。對於從IBGP收來的路由不能進行衰減,因爲IBGP路由經常含有本AS的路由,內部網絡路由要求轉發表儘可能一致,IGP快速收斂就是爲了達到信息同步,轉發一致。如果衰減對IBGP路由起作用,不同設備的衰減參數不一致時,會導致轉發表不一致。