###BGP概述
BGP的版本:
- BGP-1 RFC1105
- BGP-2 RFC1163
- BGP-3 RFC1267
- BGP-4 RFC1771 1994年
- BGP-4 RFC4271 2006年
AS Autonomous System 自治系統:由一個單一的機構或者組織所管理的一系列IP網絡及其設備所構成的集合
根據工作范圍的不同,動態路由協議可以分兩類:
a. IGP Interior Gateway Protocol 內部網關協議
ⅰ. RIP
ⅱ. OSPF
ⅲ. IS-IS
b. EGP Exterior Gateway Protocol 外部網關協議
ⅰ. BGP
BGP Border Gateway Protocol 邊界網關協議
6. BGP使用TCP作為傳輸層協議 TCP端口 179
7. 建立對等體關系后,只發送增量更新或者在需要時進行觸發性更新
8. BGP采用認證和GTSM的方式,保證了網絡的安全性
9. BGP提供了豐富的路由策略,能夠靈活的進行路由選路,并且指導鄰居按策略發布路由
10. BGP提供了路由聚合和路由衰減功能,用于防止路由震蕩,提高了網絡的穩定性
###BGP對等體關系類型
- BGP的對等體關系不要求設備必須直連
- BGP基于TCP 179 端口建立連接
BGP兩種對等體關系:
- EBGP External BGP Peer 如果建立對等體關系的兩臺路由器位于不同的AS,那么他們之間的關系被稱為EBGP對等體關系
a. EBGP對等體之間發送的BGP協議報文的TTL值默認為1,可以修改
b. 通常情況下,EBGP對等體關系基于直連接口建立 - IBGP Internal BGP Peer 如果建立對等體關系的兩臺BGP路由器位于相同的AS,那么他們之間的關系被稱為IBGP對等體關系
a. IBGP對等體不要求路由器必須路直連
###BGP鄰居建立
- eBGP:運行于不同AS之間的BGP稱為eBGP。為了防止AS間產生環路,當BGP設備接收eBGP對等體發送的路由時,會將帶有本地AS號的路由丟棄
- iBGP:運行在相同AS之內BGP稱為iBGP,為了防止AS內產生環路,在AS內需要保持全連接的iBGP鄰居
###BGP的路由標識(RouterID)
BGP的RouterID是一個用于標識BGP設備的32位的值,通常是IPv4地址的格式,在BGP會話建立時發送的Open報文攜帶。對等體之間會話建立,每個BGP設備都必須有唯一的RouterID,否則對等體之間無法建立連接
BGP RouterID可以通過兩種方式獲取:
- BGP自動選取
- 手工配置
缺省情況下,BGP選中設備上Loopback接口的IPv4地址作為BGP設備的RouterID,如果沒有配置Loopback接口,系統會選擇接口中最大的地址作為BGP的RouterID。一旦選出RouterID,除非發生進程重啟或者接口地址刪除,否則即時配置了更大的地址,也保持原來的RuterID
###BGP有線狀態機
- Idle
a. BGP空閑狀態,在Idle狀態下,BGP拒絕鄰居發送的連接請求,此時等待由BGP系統發出的Start事件
b. Strat事件發生后,BGP會對自己的資源進行初始化,重置連接計時器(Connect Retrt 默認為32s),發起TCP連接請求,并且開始偵聽遠端對等體發起連接的端口,并轉至Connect狀態
c. Start事件是一個由操作者配置一個BGP過程,或者重置一個已經存在的過程,或者路由器軟件重置BGP過程引起的
d. 任何狀態中收到Notification報文或者TCP拆除鏈路通知等Error事件后,BGP都會轉至Idle狀態 - Connect
a. 在Connect狀態下,BGP啟動重傳定時器,等待TCP完成連接
b. 如果TCP連接成功,那么BGP向對等體發送Open報文,并轉至OpenSent狀態
c. 如果TCP連接失敗,那么BGP轉至Active狀態
d. 如果連接重傳定時器超時,BGP任沒有收到BGP對等體的響應,那么BGP繼續嘗試和其他BGP對等體進行TCP連接,停留在Connect狀態
e. 如果發生其他事件(如BGP系統或者操作者人員啟動的),則退回Idle狀態 - Active
a. 在Active狀態,BGP總是在試圖建立TCP連接
b. 如果TCP連接成功,那么BGP向對等體發送Open報文,關閉連接重傳定時器,并轉至OpenSent狀態
c. 如果TCP連接失敗,那么BGP停留在Active狀態
d. 如果重傳定時器超時,任沒有收到BGP對等體的響應,那么BGP轉至Connect狀態
e. 如果發生其他事件 如BGP系統或者操作者人員啟動的),則退回Idle狀態
f. 如果鄰居狀態在Connect和Active來回切花,有可能是TCP重傳次數過多或者IP地址不可達造成的 - OpenSent
a. 在OpenSent狀態下,BGP等待對等體的Open報文,并對收到的Open報文中的AS號、版本號、認證碼等進行檢查
b. 如果收到的Open報文正確,那么BGP發送Keepalive報文,且重置Keepalive定時器,并轉至OpenConfirm狀態
c. 如果收到的Open報文有錯誤,那么BGP發送Notification報文給對等體,并轉至Idle狀態 - OpenConfirm
a. 在OpenConfirm狀態下,BGP等待keepalive或Notification報文,如果收到keepalive報文,則轉至Established,如果收到Notification報文,則轉至Idle狀態 - Established
a. 在Established狀態下,BGP可以和對等體交換Update、Keepalive、Router-refresh報文和Notification報文
b. 如果收到正確的Update或keepalive報文,那么BGP就認為對端處于正常運行狀態,將保持BGP連接
c. 如果收到錯誤的Update報文或Keepalive報文,那么BGP發送Notification報文通知對端,并轉至Idle狀態
d. Route-refresh報文不會改變BGP狀態
e. 如果收到Notification報文,那么BGP轉至Idle狀態
f. 如果收到TCP拆除鏈接通知,那么BGP將斷開連接,轉至Idle狀態
###BGP鄰居無法建立的因素
處于Idle、Connect、Active狀態,說明BGP會話沒有建立成功,處于OpenSent、OpenConfirm則說明鄰居協商出現問題:
- 兩邊BGP Peer地址不可達,一般是因為底層原因或者缺少可達的路由
- 對等體AS配置錯誤
- eBGP跳數問題
- 更新源問題
- BGP的認證錯誤
- Open報文協商失敗,Open報文需要協商BGP版本,Holdtime、RouterID以及可選項參數等
- BGP的RouterID沖突
- 聯盟與非聯盟之間的BGp連接配置錯誤
- 錯誤報文導致連接中斷,比較少見的比如BGP的Marker值出現錯誤
###BGP對等體之間交互原則
BGP設備將最優路由加入BGP路由表,形成BGP路由,BGP設備與對等體建立鄰居關系后,采取以下交互原則
- 從iBGP對等體收到的路由,BGP設備只發布給他的eBGP對等體
- 從eBGP對等體收到的路由,BGP設備發布給它所有的eBGP和iBGP對等體
- BGP設備只將最優路由發布給對等體
- 路由更新時,BGP設備只發送跟新的BGP路由
- 所有對等體發送的路由,BGP設備都會接收
BGP水平分割
IBGP水平分割用于解決BGP路由在一個AS內傳遞時,發生環路的問題
IBGP水平分割:BGP規定,當路由器從一個IBGP對等體學習到某條BGP路由時,他將不能再把這條路由通告給任何IBGP對等體
路由黑洞問題以及BGP同步規則
為了避免路由黑洞問題,BGP引入了同步規則(BGP Synchronization)
BGP同步規則:當一臺路由器從自己的IBGP對等體學習到一條BGP路由時,它將不能使用該條路由或者把這條路由通告給自己的EBGP對等體,除非他又從IGP(ospf、靜態路由)學習到這條路由,也就是要求IBGP路由與IGP路由同步
解決路由黑洞的三種方案:
- AS內所有路由器都運行BGP
- 開啟BGP同步規則(華為設備默認關閉同步規則)
- MPLS
路由通告
BGP路由在對等體之間交互路由時,有以下幾個原則:
- 只將最優的路由加載到路由表中使用(激活了負載分擔功能的情況下除外),而且只會將最優的路由通告給BGP對等體
- 當一臺路由器從自己的EBGP對等體學習BGP路由時,默認會將這些路由通告給所有IBGP對等體以及EBGP對等體
- 當一臺路由器從自己的IBGP對等體學習到BGP路由時,他不會將這些路由通告給其他IBGP對等體–水平分割使然
- 當一臺路由器從自己的IBGP對等體學習到BGP路由時,如果BGP同步規則被激活,則路由器只有從IGP協議也學習到相應的路由時,才會將這些BGP路由通告給EBGP對等體;如果BGP同步規則被關閉,則即使沒有從IGP協議學習到相應的路由,他也會將這些BGP路由通告給EBGP對等體
注意:華為路由器默認關閉BGP同步規則
AS號
BGP私有AS號的范圍是64512-65534。這些AS號可以由私人組織自行使用。