一、BGP 基礎概念
1.?網絡分類與協議定位
- IGP(內部網關協議):用于自治系統(AS)內部路由,如 RIP、OSPF、EIGRP,關注選路效率、收斂速度和資源占用。
- EGP(外部網關協議):用于 AS 之間的路由傳遞,BGP 是主流 EGP 協議,負責跨 AS 路由信息交換。
2.?自治系統(AS)
- 定義:由單一組織管理的網絡(含設備),通過AS 號唯一標識。
- 編號規則:
- 傳統 16 位 AS 號范圍:0-65535(如中國骨干網 AS 號為 4134)。
- 擴展 32 位 AS 號:解決 16 位 AS 號耗盡問題,由 IANA 管理。
3.?BGP 版本特性
- BGPv4:傳遞 IPv4 路由,是最常用版本。
- BGPv4+:支持 IPv6 等多網絡環境,適應復雜拓撲。
二、BGP 協議核心特性
1.?路由協議類型
- 路徑矢量路由協議:以 AS 為單位傳遞路由,下一跳為發送設備,不依賴算法計算路徑,僅傳遞路由表中已存在的路由。
- 無類別路由協議:路由條目攜帶子網掩碼,支持 CIDR(無類域間路由)。
2.?可靠性與可控性
- 可靠性:
- 基于 TCP(端口 179)傳輸,通過確認機制保證報文可靠交付,無需周期更新。
- 唯一使用 TCP 的路由協議,其他 IGP 多基于 UDP 或跨層封裝(如 OSPF)。
- 可控性:通過路徑屬性(如 AS_PATH、本地優先級 LP、MED 等)干預選路,解決 AS 間路由冗余和策略控制問題。
三、BGP 對等體(鄰居)機制
?
1.?對等體類型與建鄰規則
- EBGP 對等體:
- 位于不同 AS,需直連建立(默認 TTL=1,僅一跳),路由傳遞時攜帶 AS_PATH 防環。
- 例:AS100 與 AS200 的邊界設備通過直連接口建立 EBGP 鄰居。
- IBGP 對等體:
- 同一 AS 內,支持非直連建鄰(TTL=255),推薦使用環回接口(LoopBack)建立邏輯連接,需確保 IGP 可達。
- 例:AS 內部設備通過環回接口 IP 建立 IBGP 鄰居,需配置
connect-interface
指定更新源。
2.?建鄰過程與狀態機
- TCP 連接建立:
- 雙方發起 TCP 三次握手,建立兩個連接,最終保留 Router ID 較小者發起的連接(Router ID 生成規則與 OSPF 一致,需唯一)。
- Open 報文協商:
- 攜帶版本、AS 號、保活時間(默認 180 秒,協商取最小值)、Router ID 等參數,AS 號不一致會導致建鄰失敗。
- Keepalive 確認與保活:
- 周期發送 Keepalive 報文(默認 60 秒),確認參數協商成功并維持連接活性。
四、BGP 報文類型與功能
報文類型 | 功能描述 | 關鍵字段 / 特性 | 發送時刻 |
---|---|---|---|
Open | 協商建鄰參數,建立對等體關系 | 版本、AS 號、保活時間、Router ID、可選參數(認證、路由刷新) | BGP TCP連接建立成功之后 |
Update | 發布路由更新(新增 / 撤銷路由),攜帶路徑屬性和可達網絡信息 | 撤銷路由列表、路徑屬性(AS_PATH、MED 等)、NLRI(網絡層可達信息) | BGP對等體關系建立之后有路由需要發送或路由變化時向對等體發送Update報文 |
Keepalive | 確認 Open 參數,周期保活(默認 60 秒),維持對等體連接 | 無有效負載,僅公共頭部 | 當BGP在運行中發現錯誤時,發送Notification報文將錯誤通告給BGP對等體 |
Notification | 報告錯誤(如參數不匹配、路由無效),終止對等體關系 | 錯誤代碼、子代碼、錯誤數據 | BGP路由器收到對端發送的Keepalive報文,將對等體狀態置為已建立,同時后續定期發送keepalive報文用于保持連接 |
Route-refresh | 請求對等體重新發送路由(需雙方支持路由刷新功能) | 用于策略變更后同步路由,減少人工干預 | 當路由策略發生變化時,觸發請求對等體重新 通告路由 |
?open報文---建立BGP對等體
update報文--更新報文用來承載BGP路由信息的報文
公共頭部格式:
- Marker(16 字節):用于認證(若啟用),通常為全 0 或特定值。
- Length(2 字節):報文總長度(含頭部)。
- Type(1 字節):標識報文類型(1-5 分別對應 Open 到 Route-refresh)。
五、BGP 工作流程與狀態機
1.?狀態機階段與遷移
BGP 建鄰通過 6 種狀態機實現:
Peer狀態名稱 | 用途 |
---|---|
Idle | 開始準備TCP的連接并監視遠程對等體,啟用BGP時,要準備足夠的資源 |
Connect | 正在進行TCP連接,等待完成中,認證都是在TCP建立期間完成的。如果TCP連接建立失敗則進入Active狀態,反復嘗試連接 |
Active | TCP連接沒建立成功,反復嘗試TCP連接 |
OpenSent | TCP連接已經建立成功,開始發送Open包,Open包攜帶參數協商對等體的建立 |
OpenConfirm | 參數、能力特性協商成功,自己發送Keepalive包,等待對方的Keepalive包 |
Established | 已經收到對方的Keepalive包,雙方能力特性經協商發現一致,開始使用Update通告路由信息 |
Idle--空閑狀態:在指定建立對等體對象時,監測設備是否存在路由,如果存在那么進入下一 個狀態并準備建立三次握手,如果沒有路由,那么停留在idle狀態
?
2.?完整工作流程
- 路由可達性:依賴 IGP(如 OSPF、靜態路由)確保 BGP 設備間 IP 連通,為 TCP 連接建立的前提。
- 對等體建立:通過 TCP 三次握手和 Open/Keepalive 報文完成參數協商,生成鄰居表。
- 路由交換:
- 使用 Update 報文傳遞路由,攜帶 AS_PATH、MED 等屬性,存儲于 BGP 路由表。
- 僅傳遞最優路由(默認無負載均衡),路由表中標記 “>” 為優選路由。
- 選路與安裝:根據路徑屬性篩選最優路由,加載到全局路由表(需下一跳可達)。
- 連接維護:周期發送 Keepalive(默認 60 秒);路由變化時觸發 Update,故障時發送 Notification 終止連接。
六、路由黑洞與防環機制
1.?路由黑洞問題與解決方案
- 問題本質:AS 內部非 BGP 設備無路由,導致控制平面可達但數據平面不可達(如 IGP 與 BGP 路由不一致)。
- 解決方案:
- 全互聯 IBGP:AS 內所有設備兩兩建立 IBGP 鄰居(適用于小規模 AS)。
- 路由反射器(RR):通過反射器減少鄰居數量,Client 與非客戶機制優化路由傳遞(反射規則:Client→全反射,非客戶→僅反射給 Client)。
- MPLS(多協議標簽交換):通過標簽轉發繞過 IGP 路由缺失問題。
- 重發布 IGP 到 BGP:將 AS 內路由注入 BGP,但需結合路由策略過濾無關路由。
2.?防環機制
- EBGP 防環:
- AS_PATH 屬性:路由每經過一個 AS,其 AS 號添加到路徑列表,接收方若發現本地 AS 號在列表中則拒絕路由(核心防環手段)。
- AS_PATH 屬性:路由每經過一個 AS,其 AS 號添加到路徑列表,接收方若發現本地 AS 號在列表中則拒絕路由(核心防環手段)。
- IBGP 防環:
- 水平分割原則:從 IBGP 鄰居學到的路由不轉發給其他 IBGP 鄰居。
- 路由反射器輔助防環:通過Originator ID(反射源 RID)和Cluster List(反射器 RID 列表)避免環路。
- 聯邦防環:將大 AS 劃分為小聯邦 AS(私有 AS 號 64512-65535),內部使用 EBGP 規則防環,外部統一為公共 AS 號。
七、路由發布與聚合
1.?路由發布方式
- Network 命令:
- 精確發布路由表中存在的網段(需掩碼完全匹配),Origin 屬性為 “i”(IGP)。
- 例:
[r1-bgp] network 1.1.1.0 24
?發布直連路由,要求路由表中存在該精確路由。
- 重分布(Import-route):
- 引入 IGP 路由(如 OSPF)到 BGP,Origin 屬性為 “?”(Incomplete),需結合路由策略(如 IP 前綴列表、Route-policy)過濾。
- 例:
[r2-bgp] import-route ospf 1 route-policy filter
?引入 OSPF 路由并過濾非目標網段。
2.?路由聚合
- 自動聚合:
- 僅對重分布路由有效,聚合成主類網絡(如 192.168.0.0/16),生成空接口路由防環,但靈活性低,易產生黑洞路由,默認不推薦。
- 手工聚合:
- 自定義聚合網段和掩碼,支持抑制明細路由(
detail-suppressed
)和保留 AS_PATH(as-set
)。 - 例:
[r1-bgp] aggregate 172.16.0.0 22 detail-suppressed as-set
?聚合路由并抑制明細,保留 AS 路徑防止環路。
- 自定義聚合網段和掩碼,支持抑制明細路由(
八、路徑屬性與選路規則
1.?關鍵路徑屬性詳解
屬性名稱 | 類型 | 傳遞范圍 | 選路邏輯 | 典型應用場景 |
---|---|---|---|---|
Preferred-Value(PV) | 本地屬性 | 不傳遞 | 值越大越優(華為私有,僅影響本地選路) | 單設備多路徑選路策略 |
Local Preference(LP) | 公認強制 | IBGP 內傳遞 | 值越大越優(AS 內出口策略控制) | AS 內統一路由出口優先級 |
MED(多出口鑒別) | 可選非過渡 | EBGP 間傳遞 | 值越小越優(影響相鄰 AS 選路) | 控制相鄰 AS 進入本 AS 的路徑 |
AS_PATH | 公認強制 | 所有對等體 | 路徑越短越優,防環核心屬性 | 選路時優先選擇 AS 跳數少的路徑 |
Origin | 公認強制 | 所有對等體 | 優先級:i(IGP)> e(EGP)> ?(Incomplete) | 路由來源可信度判斷 |
2.?選路規則優先級(自上而下)
- 丟棄下一跳不可達的路由:BGP 路由表中 “* valid” 表示可用,下一跳不可達則無效。
- 比較 PV 值:華為設備本地屬性,值大優先(如
[r4-bgp] peer 3.3.3.3 preferred-value 100
)。 - 比較 LP 值:AS 內統一策略,值大優先(如
[r3-bgp] default local-preference 200
全局設置)。 - 本地始發路由優先:優先級順序為手工聚合 > 自動聚合 > Network > 重分布。
- AS_PATH 最短優先:通過策略添加 AS 號(如
apply as-path 123 additive
)延長路徑,引導選路。 - Origin 類型優先:i > e > ?,可通過策略修改(如
apply origin igp
將路由來源標記為 IGP)。 - MED 值最小優先:僅在相同 AS 的 EBGP 鄰居間比較,跨 AS 比較需配置
compare-different-as-med
。 - EBGP 路由優先于 IBGP:相同路由來源時,EBGP 路由優先級更高。
- IGP 度量值最小優先:到下一跳的 IGP 路徑開銷越小越優(如 OSPF Cost)。
- Cluster List 最短優先:路由反射器環境中,簇列表越短越優,避免環路。
- Router ID 或對等體 IP 較小者優先:當所有屬性相同時,取設備標識較小者。
起源者ID--在一個AS內部反射路由的源頭設備的RID--當設備產生反射路由時如果沒有起源者ID 那么將添加該屬性,如果反射器反射路由時該路由已經存在起源者ID那么將僅反射
簇列表--AS_path---每經過一個反射器的反射均會添加該反射器的RID(簇ID)到簇列表中,之 后設備一旦收到一條IBGP路由時,如果路由攜帶的簇ID和自身設備的簇ID一致,那么將拒絕 學習該路由
九、BGP 基礎配置示例
1.?啟動 BGP 與基本參數配置
[r1] bgp 100 # 啟動BGP,指定AS號為100
[r1-bgp] router-id 1.1.1.1 # 配置Router ID(需全局唯一)
2.?建立 EBGP 對等體(直連)
[r1-bgp] peer 12.0.0.2 as-number 200 # 對端IP為12.0.0.2,AS號為200
3.?建立 IBGP 對等體(環回接口,非直連)
[r3-bgp] peer 4.4.4.4 as-number 100 # 對端Router ID為4.4.4.4,同屬AS100
[r3-bgp] peer 4.4.4.4 connect-interface LoopBack0 # 指定更新源為環回接口
[r3-bgp] peer 4.4.4.4 ebgp-max-hop 255 # 允許非直連建鄰(默認TTL=1,需調整)
4.?發布路由與策略配置
- Network 發布精確路由:
[r1-bgp] network 1.1.1.0 24 # 發布路由表中存在的1.1.1.0/24網段
- 重分布 IGP 路由并過濾:
[r2] ip ip-prefix filter permit 3.3.3.0/24 # 抓取目標網段 [r2] route-policy filter permit node 10 # 創建路由策略 [r2-route-policy] if-match ip-prefix filter # 匹配目標網段 [r2-bgp] import-route ospf 1 route-policy filter # 引入OSPF路由并應用策略
5.?路由反射器(RR)配置
[r3-bgp] peer 2.2.2.2 reflect-client # 將2.2.2.2設為客戶端,允許反射路由
6.?聯邦(Confederation)配置
[r2] bgp 64512 # 啟動聯邦內AS號(私有AS號)
[r2-bgp] confederation id 2 # 聲明所屬公共AS號為2
[r2-bgp] peer 3.3.3.3 as-number 64512 # 聯邦內IBGP鄰居使用私有AS號建鄰
十、常見問題與解決方案
- 下一跳不可達:
- 原因:IBGP 環境中,路由下一跳為對端環回接口 IP,若 IGP 未通告該路由則不可達。
- 解決:配置
[r2-bgp] peer 3.3.3.3 next-hop-local
,將下一跳修改為本地接口 IP。
- IBGP 全互聯規模問題:
- 原因:AS 內設備較多時,全互聯鄰居數量呈平方級增長(N*(N-1)/2)。
- 解決:引入路由反射器(RR)或聯邦,減少鄰居數量,優化拓撲。
- 聚合路由環路:
- 原因:手工聚合未保留 AS_PATH,導致路由環路風險。
- 解決:聚合時添加
as-set
參數(如aggregate ... as-set
),繼承明細路由的 AS 路徑。