BGP是一種路徑向量的路由協議,使用TCP的179端口來創建鄰居。它的做用不是用來學習路由,而是用來控制路由的傳播和選路的。它是一種邊界網關協議和IGP不一樣。網絡
1、 數據包
- open: 用於創建鄰居關係,並交換基本參數。包括: AS號、Router-ID以及Hold time
- keepalive: 用於維護鄰居關係,若是在協商好的保持定時器間隔內未收到保持激活消息,那麼BGP就會關閉鄰居鏈接。每60秒發送一次存活消息.
- update: 用於交換路由信息(更新和撤消NLRI,NLRI即網絡層可達消息,網絡前綴,包括了豐富的路由屬性)
- notification: BGP出現差錯時使用,發送該消息後將會重置鄰居關係,重置TCP鏈接
- refresh: 用來通知對等體本身支持刷新路由的能力
2、狀態機ide
-
Idle狀態是BGP初始狀態。在Idle狀態下,BGP拒絕鄰居發送的鏈接請求。只有在收到本設備的Start事件後,BGP纔開始嘗試和其它BGP對等體進行TCP鏈接,並轉至Connect狀態。學習
說明:
Start事件是由一個操做者配置一個BGP過程,或者重置一個已經存在的過程或者路由器軟件重置BGP過程引發的。
任何狀態中收到Notification報文或TCP拆鏈通知等Error事件後,BGP都會轉至Idle狀態。
idle狀態可能的緣由:沒有路由,EBGP沒有作多跳,地址族沒有激活,手動關閉了鄰居。code
- 在Connect狀態下,BGP啓動鏈接重傳定時器(Connect Retry),等待TCP完成鏈接。
若是TCP鏈接成功,那麼BGP向對等體發送Open報文,並轉至OpenSent狀態。
若是TCP鏈接失敗,那麼BGP轉至Active狀態。
若是鏈接重傳定時器超時,BGP仍沒有收到BGP對等體的響應,那麼BGP繼續嘗試和其它BGP對等體進行TCP鏈接,停留在Connect狀態。
- 在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狀態。
3、BGP對等體之間的交互原則
BGP設備將最優路由加入BGP路由表,造成BGP路由。BGP設備與對等體創建鄰居關係後,採起如下交互原則:
從IBGP對等體得到的BGP路由,BGP設備只發布給它的EBGP對等體。
從EBGP對等體得到的BGP路由,BGP設備發佈給它全部EBGP和IBGP對等體。
當存在多條到達同一目的地址的有效路由時,BGP設備只將最優路由發佈給對等體。
路由更新時,BGP設備只發送更新的BGP路由。
全部對等體發送的路由,BGP設備都會接收。事件