BGP 的狀態機
--- 建立對等體之間的TCP會話:指定建立對等體的對象
六種狀態機
Idle狀態
Idle 等待狀態(相當于OSPF的down狀態)--- 采用TCP單播建鄰
Idle 狀態下,啟動BGP協議后必須指定建立對等體的目標之后,才能進入下一個狀態(依靠IGP協議:靜態、直連等)
Connect 狀態
Connect 狀態下,BGP對等體之間開始建立TCP會話連接。
Opensent 狀態
如果TCP會話建立成功則進入到OpenSent狀態。
Active 狀態
如果TCP會話建立失敗則進入Active狀態(嘗試狀態)。
OpenConfirm 狀態
如果認可對等體發過來的Open報文中的參數,首先會回復一個Keepalive報文用來確認Open報文中的參數已近被我認可,并且進入OpenConfirm 狀態。
OpenSent 狀態
如果TCP會話(三次握手)建立成功則進入OpenSent 狀態,在OpenSent狀態下,開始發送Open報文去建立BGP對等體關系。
Established 狀態
如果收到對等體發送的Keepalive報文,則進入Established狀態。
BGP的工作過程
- 基于IGP(靜態、直連、RIP、OSPF...)協議實現路由可達,原因:BGP需要建立TCP會話(單播)
- 必須指定鄰居關系,鄰居之間進行單播傳輸,通過三次握手,來建立TCP會話通道。之后所有的BGP通信都將基于TCP會話通道來傳輸。并且依靠TCP提供傳輸的可靠性。
- 使用Open報文和Keepalive報文來進行鄰居關系的建立。Open報文用來建鄰使用的參數,Keepalive報文用于Open報文參數的確認。最終完成對等體關系的建立。生成鄰居表,存儲BGP對等體關系信息。
- 建立鄰居關系后,使用Update報文來共享路由條目信息。信息中將攜帶目標網絡號,掩碼及路徑屬性;之后,將發送以及收集到的路由信息記錄在一張表中 --- BGP表
- 之后,會將BGP表中的最優的路由信息(通過路徑屬性選擇的結果)加載到路由表中。
- 收斂完成后,將使用Keepalive報文進行對等體之間的周期保活,默認的保活時間為 180 S (hold time), 發送周期為 60 S。
- 如果這個過程中出現任何問題,都將使用Notification報文進行 告警。
- 如果拓撲結構出現突變(增加/刪除),則將使用Update報文來進行觸發更新,并通告給其他的對等體。
BGP的機制
BGP的路由黑洞
存在問題:控制層面的可達 、數據層面實際不可達
IGP內部沒有運行BGP的設備,當訪問BGP網段流量來到這些設備之后,由于控制層面可達,數據層面不可達(因為這些設備沒有運行BGP,沒有BGP的網段的路由信息),那么將丟棄這些流量。
解決方法:
- 所有設備均運行BGP
- 重發布
- MPLS (Multi-Protocol Label?Switching?多標簽交換協議)--- 最早用來專門解決BGP路由黑洞,運用MPLS - VPN 廣泛。
原理:MPLS是根據標簽來轉發的,而不是路由條目。只要邊界路由器上有BGP路由,接下來路由傳播在內部路由器走MPLS,通過標簽轉發,即使路由有黑洞,也可以通,因為我內部走的是標簽。
同步機制? --- 當設備學習到一條BGP路由時,如果本地的IGP路由不可達,則將視該BGP路由無效。? 首先 可以先通告命令 查看路由條目:display ip routing-table 。? ---- 默認關閉的
BGP的防環 --- 水平分割
EBGP的水平分割
BGP 為了解決EBGP路由環路的問題,設計了一個AS - PATH的屬性,設備在發出AS 時會攜帶本AS的AS號,當路由信息攜帶該AS號,那么對應該AS的設備不會接受該路由。
同時AS - PATH 屬性也是BGP的一個選路依據,當其他屬性一致時,會選擇AS - PATH屬性 更短的路徑。
IBGP的水平分割
當運行BGP的設備 從IBGP對等體處學習到一條IBGP路由,那么將不再轉發給其他的IBGP對等體。
解決方案? --- 在IBGP對等體直接構建全連的IBGP對等體關系
引起兩個問題:
1.增加拓撲的復雜性導致網絡的可拓展性差。
2.增大了資源的占用。