BGP基礎

BGP是一種路徑向量的路由協議,使用TCP的179端口來建立鄰居。它的作用不是用來學習路由,而是用來控制路由的傳播和選路的。它是一種邊界網關協議和IGP不同。

 一、     數據包
  1. open: 用於建立鄰居關係,並交換基本參數。包括: AS號、Router-ID以及Hold time
  2. keepalive: 用於維護鄰居關係,如果在協商好的保持定時器間隔內未收到保持激活消息,那麼BGP就會關閉鄰居連接。每60秒發送一次存活消息.
  3. update: 用於交換路由信息(更新和撤消NLRI,NLRI即網絡層可達消息,網絡前綴,包括了豐富的路由屬性)
  4. notification: BGP出現差錯時使用,發送該消息後將會重置鄰居關係,重置TCP連接
  5. refresh: 用來通知對等體自己支持刷新路由的能力

二、狀態機

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

    說明:
    Start事件是由一個操作者配置一個BGP過程,或者重置一個已經存在的過程或者路由器軟件重置BGP過程引起的。
    任何狀態中收到Notification報文或TCP拆鏈通知等Error事件後,BGP都會轉至Idle狀態。
    idle狀態可能的原因:沒有路由,EBGP沒有做多跳,地址族沒有激活,手動關閉了鄰居。

  2. 在Connect狀態下,BGP啓動連接重傳定時器(Connect Retry),等待TCP完成連接。
    如果TCP連接成功,那麼BGP向對等體發送Open報文,並轉至OpenSent狀態。
    如果TCP連接失敗,那麼BGP轉至Active狀態。
    如果連接重傳定時器超時,BGP仍沒有收到BGP對等體的響應,那麼BGP繼續嘗試和其它BGP對等體進行TCP連接,停留在Connect狀態。
  3. 在Active狀態下,BGP總是在試圖建立TCP連接。
    如果TCP連接成功,那麼BGP向對等體發送Open報文,關閉連接重傳定時器,並轉至OpenSent狀態。
    如果TCP連接失敗,那麼BGP停留在Active狀態。
    如果連接重傳定時器超時,BGP仍沒有收到BGP對等體的響應,那麼BGP轉至Connect狀態。
  4. 在OpenSent狀態下,BGP等待對等體的Open報文,並對收到的Open報文中的AS號、版本號、認證碼等進行檢查。
    如果收到的Open報文正確,那麼BGP發送Keepalive報文,並轉至OpenConfirm狀態。
    如果發現收到的Open報文有錯誤,那麼BGP發送Notification報文給對等體,並轉至Idle狀態。
  5. 在OpenConfirm狀態下,BGP等待Keepalive或Notification報文。如果收到Keepalive報文,則轉至Established狀態,如果收到Notification報文,則轉至Idle狀態。
  6. 在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狀態。

三、BGP對等體之間的交互原則
BGP設備將最優路由加入BGP路由表,形成BGP路由。BGP設備與對等體建立鄰居關係後,採取以下交互原則:
從IBGP對等體獲得的BGP路由,BGP設備只發布給它的EBGP對等體。
從EBGP對等體獲得的BGP路由,BGP設備發佈給它所有EBGP和IBGP對等體。
當存在多條到達同一目的地址的有效路由時,BGP設備只將最優路由發佈給對等體。
路由更新時,BGP設備只發送更新的BGP路由。
所有對等體發送的路由,BGP設備都會接收。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章