BGP(邊界網關協議)簡述


BGP的起源

不同自治系統(路由域)間路由交換與管理的需求推動了EGP的發展,但是EGP的算法簡單,無法選路,從而被BGP取代。

 

自治系統:(AS)

IGP:自治系統內部協議,ospf,rip,is-is,發現和計算路由信息

EGP:自治系統外部協議,傳遞路由信息,缺點:只負責傳路由信息,不進行路由控制。

 

BGP(邊界網關協議)是一種用於自治系統間的動態路由協議。

與其他協議的區別:作用在AS之間,IGP是自治系統學習路由信息和計算路由信息,BGP傳遞路由信息的,本身沒有學習和計算路由表的功能。

 

 

BGP協議特性(單播傳輸)

  • BGP是自治系統外部路由協議,用來在AS之間傳遞路由信息。
  • 路徑矢量路由協議(DV算法),從設計上避免了環路的發生(AS編號)
  • 由TCP協議承載,端口號為179
  • 支持CIDR(超網)和路由聚合
  • 路由附帶豐富的屬性
  • 只發送增量路由更新
  • 路由過濾和路由策略

 

BGP的術語:

 

  • BGP發言者(BGP Speaker):發送BGP消息的路由器稱為BGP發言者(起了BGP協議就是BGP發言者)
  • BGP對等體(BGP peer):相互交換消息的BGP發言者互稱為BGP對等體
  • EBGP對等體:處於不同AS的BGP對等體為EBGP對等體,通常情況下EBGP對等體是物理上直連。(RTA和RTB、RTD和RTE)
  1. BGP發言者從EBGP對等體獲得的路由會向它所有BGP對等體通告(包括EBGP和IBGP)。

 

  • IBGP對等體:處在同一AS的BGP對等體為IBGP對等體,可以直連也可以不直連。 
  1. 從IBGP獲得的路由不向它的IBGP對等體發布(防環)。
  2. 從IBGP獲得的路由是否發布給它的EBGP對等體與是否同步相關。

 

BGP中轉發"黑洞"產生:

RTA發送路由(100.10.1.0/24)給RTB,RTB給RTD發,如果不考慮其他因素,RTD會講路由發給RTE。。RTE發送數據包給RTA后,到RTD上后查BGP路由表,有路由,但是下一跳是RTB,再查RTD的IGP路由表沒有下一跳給RTC,但是RTC沒有100.10.1.0的路由,所以數據包被丟棄。為什么RTC學不到路由呢?因為BGP是單播傳的,從RTB發給RTC,發現目的地址不是自己,而是RTD的,根本就不會解包

 

解決方法:IBGP全連接的狀態或者反射器。

 

BGP同步:(默認同步是關的)

    

BGP同步是指IBGP和IGP之前的同步,目的是為了防止在某種情況下轉發"黑洞"的出現。。

 

開啟同步后,只有在IGP也知道這條IBGP路由時,才會被發布給EBGP對等體。 

 

 

BGP的消息和狀態機:

BGP消息種類:

Open:用於建立BGP對等體之間的連接關系(ospf的hello包),Open報文只發一次(建立鄰居關系)(類型1)

Keepalive:周期性的向BGP對等體發出Keepalive消息,用來保持連接的有效性和對收到的Open消息進行回應,(保活的)發送周期60s,老化時間180s(類型4)

Update:攜帶的是路由更新(刪減、增加)信息 (NLRI(更新的),Withdraw(刪除該路由))(類型2)

Notification:當BGP檢測到錯誤狀態時,就向對等體發出Notifition消息,之后BGP連接會立即被關閉。(類型3)

Route-refresh:用於在改變路由策略后請求對等體重新發送路由信息(類型5)

 

refresh bgp all import|export ipv4 //BGP路由更新觸發命令

 

open消息中的hold time是根據keepalive時間來的,如果兩邊Hold time時間不一致,會依據小的一邊。

 

 

BGP的狀態機:

  1. Idle狀態(空閑狀態):此狀態為初始狀態,不接受任何BGP連接,等待start事件產生。如果start事件(TCP連接)產生則系統開啟ConnectRetry定時器,向鄰居發起TCP連接,並將狀態改為Connect。
  2. Connect狀態(連接狀態):在Connect狀態,系統會等待TCP的連接建立完成。如果TCP狀態為Established(已完成),則拆除ConnectRetry定時器,並發送Open信息,將狀態變為Opensent;如果TCP建立失敗則重置ConnectRetry定時器,轉為Active狀態。如果定時器超時,重新連接。
  3. Active狀態(活躍狀態):如果已經啟動事件但TCP未完成,則處於Active狀態
  4. Open-sent狀態(Open消息已發送):此狀態 表明系統已經發出Open消息,在等待BGP鄰居發給自己的Open消息。
  5. Open-confirm(Open消息確定):此狀態表明系統已經發出keepalive消息,並等待BGP鄰居的Keepalive消息。
  6. Established狀態(連接建立):如果處於Established狀態,則說明BGP連接建立完成,可以發送Update消息交換路由信息。

 

BGP工作原理:

——對等體之間的交互:

BGP對等體交互路由原則:

  • 從IBGP對等體獲得的路由,只發布給EBGP(發的時候考慮同步)
  • 從EBGP對等體獲得的路由,發布給所有IBGP和EBGP鄰居
  • 只將BGP的最優路由發布給對等體
  • 只發送更新的BGP路由

 

注意:

1.IBGP的水平分割

2.as號,只能在EBGP鄰居之間放環

 

——數據庫:

IP路由表(IP-RIB)

  • 全局路由信息庫,包括所有IP路由信息

BGP路由表:

  • BGP路由信息庫,包括本地BGP Speakr選擇的路由信息

鄰居表:

  • 對等體鄰居清單列表

Adj-RIB-In:

  • 對等體宣告給本地BGP Speaker的未處理的路由信息庫

Adj-RIB-Out:

  • 本地BGP Speaker宣告給指定對等體的路由信息庫

 

——信息處理過程:

 

 

BGP配置:

啟動BGP:

[RT1]bgp 100

 

配置router ID(如果運行了ospf兩個ID號盡量保持一致)

[RT1-bgp]router-id 1.1.1.1

 

指定鄰居:

peer 12.1.1.2 as-number 200

     對端地址           對端as號

 

默認情況下建立TCP的接口是出接口,當建立BGP連接的路由器存在冗余鏈路時,如果路由器上的接口發生故障,建立tcp連接的源接口就會發生改變,導致BGP需要建立tcp連接。

所以將tcp的源地址配置成loopback接口,而真實的tcp連接的源地址就是出接口,所以要指定建立tcp連接的源接口:(用loopback建立鄰居關系時)

[RT2-bgp]peer 4.4.4.4 connect-interface loo 0 (只需要在一邊配,tcp是單向認證)

              對端的環回口               本地的環回口

 

當建立EBGP關系時,非直連,用loopback口建立鄰居關系時(不建議)

[RT1-bgp]peer 2.2.2.2 ebgp-max-hop 2

[RT2-bgp]peer 1.1.1.1 ebgp-max-hop 2         //改變EBGP連接的最大路由器跳數

 

[RT1-bgp]peer 2.2.2.2 connect-interface loo 0        //指定建立鄰居的源接口

 

將本地路由發布到BGP路由器中:

[RT1-bgp]netw 1.1.1.1 32        //公布的是路由表中的路由,且屬性必須是IGP,sys

后面的掩碼長度必須跟本地路由表一致

 

[RT1-bgp]dis bgp routing-table 

 Total Number of Routes: 1

 BGP Local router ID is 1.1.1.1

 Status codes: * - valid(有效), ^ - VPN best, > - best(最好的), d - damped,

               h - history,  i - internal, s - suppressed, S - Stale

               Origin(屬性) : i - IGP, e - EGP, ? - incomplete

      Network            NextHop         MED        LocPrf     PrefVal Path/Ogn

* >  1.1.1.1/32         0.0.0.0         0                     0       i

bgp只會把有效的和最好的且是igp的發給鄰居。

 

[RT2-bgp]peer 4.4.4.4 next-hop-local   //將發出的路由的下一跳指向本地(從EBGP學來的路由發給IBGP時)

 

[RT2-bgp]import-route ospf    //路由引入(引入的路由相當於本地通告的路由)

  • 被引入的路由必須存在於本地IP路由表中且為有效路由
  • 通過引入方式的路由的ORIGIN屬性Incomplete
  • 可以通過策略來對引入的路由進行過濾及改變路由屬性
  • 當引入ospf和rip時,引入前的cost作為BGP的med值,也就是開銷。

 

[RT2-bgp]synchronization       //打開同步(默認是關閉的)

   

BGP路由屬性: 

BGP路由屬性是路由信息所攜帶的一組參數,它對路由進行了進一步的描述,表達了每一條路由的各種特性。

 

  1. 公認必遵屬性(必須遵守):所有BGP路由器都必須能夠識別這種屬性,且必須存在於Update消息中。ORIGIN屬性、AS_PATH屬性(選路、防環)、NECT_HOP屬性。
  2. 公認可選屬性:所有BGP路由器都可以識別,但不要求必須存在於Update消息中,可根據情況來選擇。LOCAL_PREF屬性、ATOMIC_AGGREGATE屬性.
  3. 可選傳遞屬性:在AS之間具有可傳遞性的屬性。BGP路由器可以不支持此屬性,但它仍然會接收帶由此屬性的路由,並通告給其他對等體。COMMUNITY屬性、AGGREGATE屬性(聚合者)。
  4. 可選非傳遞屬性:如果BGP路由器不支持此屬性,該屬性被忽略,且不會通告給其他對等體。MED屬性、CLUSTER_LIST屬性(簇列表)、ORIGINATOR_ID屬性(起始者ID)。

 

必遵:next-hop、origin、as-path

可選:除以上三個除外

傳遞:必遵的三個,community(團體)、聚合(aggregate)

非傳遞:

公認:

私有:Preferred_value

 

1、AS_PATH屬性(防環):只給EBGP鄰居發的時,才修改該屬性。

  • 公認必遵
  • 是路由到底一個目的地所經過的一系列自治系統號碼的有序列表
  • 當BGP將一條路由通告到其他AS時,便會把自己的AS號添加在AS_PATH列表的最前面(只看AS的個數,不考慮AS的大小)
  • AS個數越少越好
  • AS可以防環
  • 普通的有兩種記錄類型:AS_SEQUENCE(序列號),AS_SET(聚合防環的)

2、NEXT_HOP屬性:

  • 公認必遵
  • 為BGP發言者指示去往目的地的下一跳
  • 從EBGP鄰居學來的路由,發給IBGP時NEXT_HOP不會改變。

 

3、ORIGIN屬性:定義路由信息的來源,標記一條路由是怎么成為BGP路由的

  • 三種ORIGIN屬性類型:  

       a.IGP:表明路由信息產生於AS內部,一般是聚合路由或者通過Network命令引入的路由,標識符:"i"

       b.EGP:路由信息是通過EGP協議引入的(已淘汰)標識符:"e"

       c.Incomplete:路由信息是通過其他方式學來的,一般是通過Import引入的IGP路由或者靜態路由。標識符"?"

 

  • 在其它選路因素相同的情況下,BGP會比較ORIGIN屬性來確定到達相同目的地的最佳路由

       a.IGP優於EGP,EGP優先於Incomplete。

 

4、LOCAL_PREF屬性:(數據怎么出去)只能在自治系統內傳遞(離開AS域)

  • 公認可選屬性,非傳遞屬性,只能在本AS內傳遞
  • 用於AS內IBGP鄰居選擇離開本AS時最佳路由,它表明BGP路由器的優先級
  • 僅在IBGP對等體之間交換,不傳遞或通告給其他EBGP對等體
  • 值越大,優先級越高,默認情況下LOCAL_PREF屬性值為100

 

5、MED屬性:(數據怎么進來)只在相鄰的EBGP之間傳遞,只能比較來自同一自治系統的MED。(進入AS域)

  • 可選非傳遞屬性 (運用在AS之間的那台路由器上 )
  • 相當於IGP路由協議使用的度量值metric,當一個AS有多個入口點時,用於判斷流量進入AS時的最優路徑
  • 僅在相鄰兩個AS之間傳遞(EBGP),收到此屬性的AS一方不會再將其通告給任何其他第三方AS。
  • 值越小越優

 

6、Preferred_value屬性(首選項值)(本地屬性)

  • 是私有BGP屬性
  • 為從對等體接收的路由分配首選值,從而影響選路
  • 只在本地有效,不隨路由信息傳播
  • 值越大越好,默認0

 

7COMMUNITY屬性(團體屬性):

團體屬性用於標識具有相同特征的BGP路由,該屬性可選傳遞。

分為:

  • 自定義團體屬性
  • 公共團體屬性
    • Internet(互聯網屬性)
    • No Advertise(不會將路由傳給任何BGP鄰居)
    • No Export(不會傳給EBGP鄰居)
    • No Export Subconfed(不會傳給聯盟EBGP鄰居)

 

BGP路由處理流程:

 

 

BGP的路由優選:(選路前提是兩條路由都是最優的,有可比性)

  1. 首先丟棄下一跳(NEXT_HOP)不可達的路由
  2. 優選Prefrerred_value值最大的路由
  3. 優選本地優先級(LOCAL_PREF)最高的路由
  4. 優選生成路由(聚合路由,發布的、import)
  5. 優選AS路徑(AS_PATH)最短的路由
  6. 依次選擇ORIGIN屬性為IGP、EGP、Incomplete的路由
  7. 優選MED值最小的路由

8.依次選擇從EBGP、聯盟、IBGP學來的路由

9.優選下一跳度量值最低的路由

以上如果相同允許做負載分擔:balance ibgp 2

 

10.優選CLUSTER_LIST(簇列表)長度最短的路由

11.優選ORIGINATOR_ID最小的路由

12.優選ROUTER ID最小的路由器發布的路由

13.優選地址最小的對等體發布的路由(同一路由器兩條線)

 

BGP的負載分擔時選路:

  • BGP協議本身一定能選出唯一一條到達目的網段的最優路由
  • 通過哦誒之允許BGP負載分擔
  • BGP的負載分擔與IGP的負載分擔有所不同

     ❤IGP是通過協議自身定義的路由算法,對到達同一目的地址的不同路由,將度量值相等的路由進行負載分擔

     ❤BGP本身並沒有路由計算的算法,但BGP有豐富的選路原則,可以在對路由進行一定的選擇后,有條件地進行負載分擔。

 

BGP路由的發布策略:

  • 只講最優路由發布給對等體(*>)
  • 只將自己使用的路由發給對等體
  • 從EBGP獲得的路由會向它所有BGP對等體發布
  • 從IBGP獲得的路由不向它的IBGP對等體發布

        

 

關閉BGP同步的情況下,IBGP路由被直接發布

        

開啟BGP同步的情況下,改IBGP路由只有在IGP也發布了這條路由時才會被發布給EBGP對等體

  • BGP連接一旦建立,BGP發言者將把自己所有的BGP路由發布給新對等體。

 

   

 

 

 

 


免責聲明!

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



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