BGP協定

BGP協定

ectRetry計時器,繼續偵聽遠端BGP對端初始化的連線,改變它的狀態到Active狀態。 回響Stop事件(系統或者操作者初始化),本地系統傳送NOTIFICATION訊息,錯誤碼是Cease同時改變狀態到Idle。 如果Hold計時器溢出,本地系統傳送NOTIFICATION訊息,錯誤碼是HoldTimerExpired,改變狀態到Idle。

BGP協定

RFC1771對BGP的最新版本BGP-4進行了詳盡的介紹。BGP用來在AS之間實現網路可達信息的交換,整個交換過程要求建立在可靠的傳輸連線基礎上來實現。這樣做有許多優點,BGP可以將所有的差錯控制功能交給傳輸協定來處理,而其本身就變得簡單多了。BGP使用TCP作為其傳輸協定,預設連線埠號為179。與EGP相比,BGP有許多不同之處,其最重要的革新就是其採用路徑向量的概念和對CIDR技術的支持。路徑向量中記錄了路由所經路徑上所有AS的列表,這樣可以有效地檢測並避免複雜拓撲結構中可能出現的環路問題;對CIDR的支持,減少了路由表項,從而加快了選路速度,也減少了路由器間所要交換的路由信息。另外,BGP一旦與其他BGP路由器建立對等關係,其僅在最初的初始化過程中交換整個路由表,此後只有當自身路由表發生改變時,BGP才會產生更新報文傳送給其它路由器,且該報文中僅包含那些發生改變的路由,這樣不但減少了路由器的計算量,而且節省了BGP所占頻寬。
BGP有4種分組類型:打開分組用來建立連線;更新分組用來通告可達路由和撤銷無效路由;周期性地傳送存活分組,以確保連線的有效性;當檢測到一個差錯時,傳送通告分組。

BGP有限狀態機

BGP有限狀態機有6種狀態,分別是:IDLE,CONNECT,ACTIVE,OPENSET,OPEMFIRM和ESTABLISHED。狀態之間的相互轉換及轉換條件如下圖所示:

BGP協定BGP協定

Idle狀態:
在這個狀態,BGP拒絕任何進入的BGP連線,不為對端分配任何資源。回響Start事件,本地系統初始化所有的BGP資源,開始ConnectRetry計時器,初始化傳輸連線到別的BGP對端,當檢聽到遠端BGP對端初始化BGP連線,改變狀態到連線。ConnectRetry計時器的確切值是本地設定,但是要有效大於允許TCP初始化。
如果BGP發言者探測到錯誤,關閉連線轉換狀態到Idle。脫離Idle狀態需要Start事件的產生。如果這個事件自動產生,連續的BGP錯誤會導致發言者的抖動。為了避免這個情況,建議先前由於錯誤而轉換到Idle狀態的對端的Start事件不應該立即產生。在連續產生的Start事件之間的時間,如果事件時自動產生的,應該指數增長。初始計時器的值應該是60秒。計時應該每連續產生一次就加倍。
在Idle狀態下任何別的事件被忽略。
Connect狀態:
在這個狀態BGP等待傳輸協定連線的完成。
如果傳輸協定連線成功,本地系統清除ConnectRetry計時器,完成初始化,傳送OPEN訊息到對端,改變狀態到OpenSent.
如果傳輸協定連線失敗(比如,重傳逾時),本地系統重啟ConnnectRetry計時器,繼續偵聽遠端BGP對端初始化的連線,改變它的狀態到Active狀態。
回響ConnectRetry計時器溢出事件,本地系統重啟ConnectRetry計時器,初始化傳輸連線到BGP對端,繼續偵聽遠端BGP對端初始化的連線,停留在Connect狀態。
Start事件在Active狀態被忽略。
回響其他的事件(被別的系統或者操作者初始化),本地系統釋放連線占有的所有的BGP資源,轉換狀態到Idle。
Active狀態:
在這個狀態,BGP嘗試通過初始化傳輸協定連線來得到對端。
如果傳輸協定連線成功,本地系統清除ConnectRetry計時器,完成初始化,傳送OPEN訊息到對端,設定Hold計時器為一個很大值,改變狀態到OpenSent。計時器值建議是4分鐘。
回響ConnectRetry計時器溢出事件,本地系統重啟ConnectRetry計時器,初始化傳輸連線到別的BGP對端,繼續偵聽遠端BGP對端初始化的連線,改變狀態到Connect.
如果本地系統探測到遠端嘗試建立BGP連線到自己,遠端的IP位址不是期望的,本地系統重啟ConnectRetry計時器,拒絕嘗試連線,繼續偵聽遠端BGP對端初始化的連線,停留在Active狀態。
Start事件在Active狀態被忽略。
回響任何別的事件(別的系統或者操作者初始化),本的系統釋放連線占有的所有的資源,改變狀態到Idle.
OpenSent狀態:
在這個狀態BGP等待來自對端的OPEN訊息。當OPEN訊息收到,所有的域要檢查正確性,如果BGP訊息頭檢查或者OPEN訊息檢查探測到錯誤,或者由連線衝突,本的系統傳送NOTIFACATION訊息,改變狀態到Idle。
如果在OPEN訊息內沒有錯誤,BGP傳送KEEPALIVE訊息設定KeepAlive計時器。Hold計時器,先前被設定為一個大值,被商議的HoldTime值替代。如果商議的HoldTime值是0,HoldTime計時器和KeepAlive計時器要重啟。如果AutonomousSystem域的值是和本地AS號碼一樣的,連線是“內部”連線,否則是“外部”連線。最後,轉態轉換到OpenConfirm。
如果從承載傳輸協定收到斷開通告,本地系統關閉BGP連線,重啟ConnectRetry計時器,同時繼續偵聽遠端BGP初始化的連線,進入Active狀態。
如果Hold計時器溢出,本地系統傳送NOTIFICATION訊息,錯誤碼是HoldTimerExpired,同時改變狀態到Idle。
回響Stop事件(系統或者操作者初始化),本地系統傳送NOTIFICATION訊息,錯誤碼是Cease同時改變狀態到Idle。
Start事件在OpenSent狀態被忽略。
對別的事件的回響,本地系統傳送NOTIFICATION訊息,錯誤碼是FiniteStateMachineError同時改變狀態到Idle。
無論何時BGP改變狀態從OpenSet到Idle,關閉BGP(以及傳輸層)連線釋放連線占用的所有的資源。
OpenConfire狀態:
在這個狀態,BGP等待KEEPALIVE或者NOTIFICATION訊息。
如果本地系統收到KEEPALIVE訊息,改變狀態到Established。
如果在收到KEEPALIVE訊息之前,Hold計時器溢出,本的系統傳送NOTIFICATION訊息,錯誤碼是HoldTimerExpired,改變狀態到Idle.
如果本地系統受到NOTIFICATION訊息,改變狀態到Idle。
如果KeepAlive計時器溢出,本地系統傳送KEEPALIVE訊息,重啟他的KeepAlive計時器
如果從底層的傳輸協定收到斷開通告,本的系統狀態轉換到Idle。
回響Stop事件(系統或者操作者初始化)本地系統傳送NOTIFICATION訊息,錯誤碼是Cease,改變狀態到Idle。
Start事件在OpenConfirm狀態被忽略。
回響別的事件,本的系統傳送NOTIFICATION訊息,錯誤碼是FiniteStateMachineError,改變狀態到Idle。
無論何時BGP改變狀態從OpenConfirm到Idle,關閉BGP(傳輸層)連線同時釋放所有連線占用的資源。
Established狀態:
在建立狀態,BGP交換UPDATE,NOTIFICATION,和KEEPALIVE訊息到對端。
如果本地系統收到UPDATE或者KEEPALIVE訊息,開啟Hold計時器,如果商議的HoldTime值不是零。
如果本地系統收到NOTIFICATION訊息,狀態轉換到Idle.
如果本地系統收到UPDATE訊息,UPDATE訊息的錯誤處理過程探測到錯誤,本地系統傳送NOTIFICATION訊息,改變狀態到Idle。
如果斷開通告通過承載傳輸協定收到,本地系統改變狀態到Idle。
如果Hold計時器溢出,本地系統傳送NOTIFICATION訊息,錯誤碼是HoldTimerExpired,改變狀態到Idle。
如果KeepAlive計時器溢出,本地系統傳送KEEPALIVE訊息,重啟KeepAlive計時器。
每次本地系統傳送KEEPALIVE或者UPDATE訊息,重啟KeepAlive計時器,除非商議的計時器值是零。
回響Stop事件(通過系統或者操作者初始化),本地系統傳送NOTIFICATIOIN訊息,錯誤碼是Cease,改變狀態到Idle。
Start事件在Established狀態被忽略。
回響別的事件,本的系統傳送NOTIFACATION訊息,錯誤碼是FiniteStateMachineError,改變狀態到Idle。
無論何時改變狀態從Established到Idle,關閉BGP(以及傳輸層)連線,釋放連線占用的所有資源,刪除所有的連線產生的路由。

相關詞條

相關搜尋

熱門詞條

聯絡我們