HCIE(BGP工作原理)

BGP是一種用於自治系統之間的動態路由協議。主要用於交換AS之間的可達路由信息,構建AS域間的傳播路徑,防止路由環路的產生,並在AS級別應用一些路由策略。


BGP作爲事實上的Internet外部路由協議標準,被廣泛應用於ISP之間
.當前使用的版本是BGP-4

BGP概述

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

  • BGP使用TCP作爲傳輸層協議(監聽端口號爲179),提高了協議的可靠性,且不需要專門的機制來確保連接的可控性;也正因爲使用TCP,只能發送單播,不能發送組播,故BGP不能自動發現網絡拓撲

  • BGP進行域間的路由選擇,對協議的穩定性要求非常高。因此用TCP協議的高可靠性來保證BGP協議的穩定性
    1. BGP對等體之間必須在邏輯上連通,並進行TCP連接。目的端口號爲179,本地端口號任意
    2. 沒有周期更新,BGP只發送更新的路由,大大減少了BGP傳播所佔用的帶寬,故適用於在Intedrnet上傳播大量的路由信息

  • BGP從設計上避免了環路的產生
    1. AS之間:BGP通過攜帶AS路徑信息來標記途經的AS,帶有本地AS號的路由將被丟棄,從而避免了域間產生環路。在某些情況下,可以通過命令使得路由器接受相同AS的路由。
    2. AS內部:BGP在AS內學到的路由不再通告給AS內的BGP鄰居,避免了AS內產生環路。

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

  • BGP提供了防止路由震盪的機制,有效提高了Internet網絡的穩定性。

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

BGP工作原理—報文類型

  • Open報文
    協商BGP參數
  • Update報文
    交換路由信息
  • Keeplive報文
    保持鄰居關係
  • Notification報文
    差錯通知
  • Route-Refresh報文
    用於在改變路由策略後請求對等體重新發送路由信息

詳細解釋:
BGP的運行是通過消息驅動的,共有Open、Update、Keeplive、Notification、Route-Refresh等五種消息

  • Open消息:是TCP連接建立後發送的第一個消息,用於建立BGP對等體之間的連接關係。對等體在接收到Open消息並協商成功後,將發送Keeplive消息確認並保持連接的有效性。確認後,對等體之間可以進行Update、Notification、Keeplive和Route-Refresh消息的交換
  • Update消息:用於在對等體之間交換路由信息。一條Update消息可以發佈多條屬性相同的可達路由信息,也可以撤銷多條不可達路由信息。
  • Keeplive消息:BGP會週期的向對等體發出Keeplive消息,用來保持連接的有效性。
  • Notification消息:當BGP檢測到錯誤狀態時,就向對等體發出Notification消息,之後BGP連接會立即中斷
  • Route-Refresh消息:通過Open消息告知BGP peer本地支持路由刷新能力。在所有BGP路由器使能Route-Refresh能力的情況下,如果BGP的入口路由策略發生了變化,本地BGP路由器會向對等體發佈Route-Refresh消息,收到此消息的對等體會將其路由信息重新發送給本地BGP路由器。這樣,可以在不中斷BGP連接的情況下,對BGP路由表進行動態刷新,並應用新的路由策略。

BGP報文應用

  • BGP使用TCP建立連接,本地監聽端口爲179。和TCP連接建立相同,BGP連接的建立也要經過一系列的對話和握手。TCP通過握手協商通告其端口等參數,BGP的握手協商的參數有:BGP版本、BGP連接保持時間、本地的路由器標識(Router ID)、授權信息等。這些信息都在Open消息中攜帶。BGP在協商過程中會高版本兼容低版本,所以不同版本的BGP也是可以正常建立連接的。
  • BGP連接建立後,如果有路由需要發送則發送Update消息通告對端。Update消息發佈路由時,還要攜帶此路由的路由屬性,用於幫助對端BGP協議選擇最優路由。在本地BGP路由變化時,要通過Update消息來通知BGP對等體。
  • 經過一段時間的路由信息交換後,本地BGP和對端BGP都無新路由通告,趨於穩定狀態。此時要定時發送Keeplive消息以保持BGP連接的有效性。對於本地BGP,如果在保持時間內,未收到任何對端發來的BGP消息,就認爲此BGP連接已經中斷,將斷開此BGP連接,並刪除所有從該對等體學來的BGP路由。
  • 當本地BGP在運行中發現錯誤時(如對端BGP版本本地不支持、本地BGP收到了結構非法的Update消息等),要發送Notification消息通告BGP對等體。本地BGP退出BGP連接時,也需發送Notification報文

BGP工作原理—狀態機

BGP有限狀態機共有六種狀態,分別是IdleConnectActiveOpenSentOpenConfirmEstablished在這裏插入圖片描述

  • Idle狀態是BGP初始狀態。在Idle狀態下,BGP拒絕鄰居發送的連接請求。只有在收到本設備的Start事件後,BGP纔開始嘗試和其他BGP對等體進行TCP連接,並轉至Connect狀態。
    1. Start事件是由一個操作者配置一個BGP過程,或者重置一個已經存在的過程或者路由器軟件重置BGP過程引起的
    2. 任何狀態下收到Notification報文或者TCP拆除鏈路通知等Error事件後,BGP都會轉至Idle狀態。

  • 在Connect狀態下,BGP啓動連接重傳定時器,等待TCP完成連接
    1. 此階段主動發出TCP連接請求
    2. 如果TCP連接成功,那麼BGP向對等體發送Open報文,並轉至OpenSent狀態
    3. 如果TCP連接失敗,那麼BGP轉至Active狀態
    4. 如果連接重傳定時器超時,BGP仍沒有收到BGP對等體的響應,那麼BGP繼續嘗試和其他BGP對等體進行TCP連接,停留在Connect狀態
    5. 如果發生其他事件,則退回Idle狀態

  • 在Active狀態下,BGP總是在試圖建立TCP連接
    1. 此階段等待對方發起TCP連接
    2. 如果TCP連接成功,那麼BGP向對等體發送Open報文,關閉連接重傳定時器,並轉至OpenSent狀態
    3. 如果TCP連接失敗,那麼BGP停留在Active狀態
    4. 如果連接重傳定時器超時,BGP仍沒收到BGP對等體的響應,那麼BGP轉至Connect狀態

  • 在OpenSent狀態下,BGP等待對等體的Open報文,並對收到的Open報文中的AS號、版本認證碼等進行檢查
    1. 如果收到的Open報文正確,那麼BGP發送Keeplive報文,並轉至OpenConfirm狀態
    2. 如果發現收到的Open報文有錯誤,那麼BGP發送Notification報文給對等體,並轉至Idle狀態

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

  • 在Established狀態下,BGP可以和對等體交換Update、Keeplive、Route-Refresh報文和Notification報文
    1. 如果收到正確的Update或Keeplive報文,那麼BGP就認爲對端處於正常運行狀態,將保持BGP連接
    2. 如果收到錯誤的Update或Keeplive報文,那麼BGP發送Notification報文通知對端,並轉至Idle狀態。
    3. Route-Refresh報文不會改變BGP狀態
    4. 如果收到Notification報文,那麼BGP轉至Idle狀態
    5. 如果收到TCP連接斷開消息,那麼BGP斷開連接,轉至Idle狀態

BGP工作原理—BGP路由信息處理

  • IP路由表(IP-RIB)
    全局路由信息庫,包括所有IP路由信息
  • BGP路由表(Loc-RIB)
    BGP路由信息庫,包括本地BGP Speaker選擇的路由信息
  • 鄰居表
    對等體鄰居清單列表
  • Adj-RIB-In
    對等體宣告給本地BGP Speaker的未處理的路由信息庫
  • Adj-RIB-Out
    本地BGP Speaker宣告給指定對等體的路由信息庫

BGP路由信息處理:在這裏插入圖片描述

BGP工作原理—對等體之間的交互原則

  • 從IBGP對等體獲得的路由,只發布給EBGP對等體
  • 從EBGP對等體獲得的路由,發佈給所有EBGP和IBGP對等體
  • 只將BGP的最優路由發佈給對等體
  • 只發送更新的BGP路由
發佈了88 篇原創文章 · 獲贊 7 · 訪問量 4813
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章