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有限狀態機共有六種狀態,分別是Idle、Connect、Active、OpenSent、OpenConfirm和Established
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路由