一、BGP 基礎概念
1. 產生背景
BGP(Border Gateway Protocol)是自治系統(AS)間的動態路由協議,屬于外部網關協議(EGP),用于在不同 AS 之間傳遞路由信息。
2. 自治系統(AS)
定義:一組被統一管理、運行相同 IGP 協議的路由器集合,通常使用相同路由策略。
AS 編號:
2 字節:范圍 0-65535(0 和 65535 保留),其中公有 AS 為 1-64511,私有 AS 為 64512-65535。
4 字節:公有 AS 為 65536–4199999999,私有 AS 為 4200000000–4294967294。
二、路由協議分類
IGP(內部網關協議):用于 AS 內部路由,如 RIP、OSPF、IS-IS。
EGP(外部網關協議):用于 AS 之間路由,BGP 是目前唯一廣泛使用的 EGP。
三、BGP 協議特性
路由傳遞范圍:僅負責 AS 間路由傳遞,AS 內部路由擴散依賴 IGP。
路徑矢量協議:一跳代表一個 AS,路由傳入 AS 時,下一跳變為上個 AS 的出接口 IP;AS 內部傳遞時,下一跳不變。
AS 防環機制:通過
AS_PATH
屬性防環,路由每經過一個 AS,會將該 AS 編號按 “右到左” 順序加入AS_PATH
;若收到的路由AS_PATH
包含本地 AS 編號,則不學習。傳輸層依賴:基于 TCP 協議,端口號 179,需手動配置鄰居。
更新方式:首次收斂發送完整路由表,后續僅增量更新。
路由控制:支持多種屬性控制選路,支持路由聚合、過濾和策略。
四、BGP 基本術語
BGP Speaker:運行 BGP 協議的路由器。
BGP Peer(對等體):通過 TCP 連接交換路由信息的 BGP Speaker,分為:
EBGP 對等體:跨 AS 的鄰居,通常物理直連,從 EBGP 學到的路由會通告給所有對等體(包括 EBGP 和 IBGP)。
IBGP 對等體:同一 AS 內的鄰居,可非直連,受 “水平分割” 限制(從 IBGP 學到的路由不傳給其他 IBGP)。
五、路由黑洞及解決方法
產生原因:IBGP 鄰居間存在未運行 BGP 的路由器,無法獲取 BGP 路由,導致數據包被丟棄。
解決方法:
BGP 引入 IGP;
在黑洞路由器上配置靜態路由;
IBGP 全連接(需所有 IBGP 路由器互建鄰居,適用于小規模網絡);
路由反射器(RR,無視 IBGP 水平分割,減少鄰居數量);
BGP 聯盟(將 AS 劃分為子 AS,子 AS 間用 EBGP 連接,減少 IBGP 鄰居)。
六、BGP 環路問題(水平分割)
EBGP 水平分割:通過
AS_PATH
屬性,若路由包含本地 AS 編號則拒絕學習。IBGP 水平分割:從 IBGP 對等體學到的路由,不向其他 IBGP 對等體通告。
七、BGP 消息種類
消息類型 | 作用 |
---|---|
Open | 建立對等體連接,攜帶 |
Keepalive | 周期保活(默認 60s 發送一次),維持連接有效性。 |
Update | 攜帶路由更新(新增 / 刪除),包含 |
Notification | 檢測到錯誤時發送,隨后關閉連接。 |
Router-refresh | 更改路由策略后,請求對等體重發指定地址族的完整路由表。 |
八、BGP 狀態機
Idle:初始化狀態,準備 TCP 連接,停留 30 秒。
Connect:TCP 連接建立中,失敗則進入 Active 狀態。
Active:主動嘗試建立 TCP 連接,失敗則重試。
OpenSent:TCP 連接建立,發送 Open 報文,等待對方響應。
OpenConfirm:收到 Open 報文,發送 Keepalive,等待對方 Keepalive。
Established:收到 Keepalive,鄰居關系建立,開始交換路由。
九、BGP 鄰居建立條件
1. IBGP 鄰居
物理口建鄰:建議用直連接口地址。
環回口建鄰:需 TCP 可達(路由可達),修改更新源為環回口(
peer connect-interface LoopBack 0
),默認 TTL 為 255。
2. EBGP 鄰居
物理口建鄰:建議用直連接口地址。
環回口建鄰:需 TCP 可達,修改最大跳數(
ebgp-max-hop
),默認 TTL 為 1(需改為更大值,如 2)。
注意
若路由器同時有 EBGP 和 IBGP 鄰居,需修改 IBGP 鄰居的下一跳為本機(
next-hop-local
),否則路由可能不可達。
十、BGP 基本配置
1. 啟動 BGP 并創建連接
[huawei] bgp <as-number> # 啟動BGP,指定AS編號
[huawei-bgp] router-id <router-id> # 配置Router-id(可選,建議配置)
[huawei-bgp] peer <ip-address> as-number <as-number> # 指定對等體及AS
[huawei-bgp] address-family ipv4 unicast # 進入IPv4地址族(華三設備)
[huawei-bgp-ipv4] peer <ip-address> enable # 使能對等體路由交換
2. 優化配置
[huawei-bgp] peer <ip-address> connect-interface <interface> # 指定TCP連接源接口
[huawei-bgp] peer <ip-address> ebgp-max-hop <hop-count> # 修改EBGP最大跳數
3. 發布路由
# 宣告本地路由
[router-bgp] network <ip-address> [mask <mask-length>] [route-policy <name>]
# 引入其他協議路由
[router-bgp] import-route <protocol> [process-id] [route-policy <name>]
4. 查看命令
display bgp peer # 查看BGP鄰居狀態
display bgp routing-table # 查看BGP路由表
十一、BGP 選路原則(13 條)
丟棄下一跳不可達的路由。
優選
Preferred-value
(首選項)最大的路由(默認 0,華為 / H3C 私有屬性)。優選
Local_Pref
(本地優先級)最高的路由(默認 100,僅 IBGP 傳遞)。依次選擇
network
生成、import-route
引入、聚合的路由。優選
AS_PATH
最短的路由。依次選擇
ORIGIN
為 IGP(i)、EGP(e)、Incomplete(?)的路由。優選
MED
(多出口鑒別器)最小的路由(默認 0,相鄰 AS 間傳遞)。依次選擇從 EBGP、聯盟 EBGP、聯盟 IBGP、IBGP 學到的路由。
優選下一跳 IGP 度量值最低的路由。
優選
CLUSTER_LIST
最短的路由。優選
ORIGINATOR_ID
最小的路由。優選 Router ID 最小的路由器發布的路由。
優選 IP 地址最小的對等體發布的路由。
十二、BGP 屬性
1. 公認必遵屬性(所有路由必須攜帶)
AS_PATH:記錄路由經過的 AS 編號,用于防環和選路(短路徑優先)。
Next-hop:路由的下一跳 IP,EBGP 鄰居間傳遞時更新,IBGP 鄰居間傳遞時不變(需手動修改為本地)。
ORIGIN:路由來源,優先級:IGP(i)> EGP(e)> Incomplete(?)。
2. 公認可選屬性(所有路由器識別,非必須攜帶)
Local_Pref:本地優先級,僅 IBGP 傳遞,值越大越優先(默認 100)。
Atomic-aggregate:自動聚合標記。
3. 可選傳遞屬性(可不識別,但會傳遞)
Community(團體屬性):標記路由,用于批量控制,如
no-export
(不傳出 AS)、no-advertise
(不向任何對等體通告)。
4. 可選非傳遞屬性(可不識別,不傳遞)
MED:多出口鑒別器,用于相鄰 AS 間選路,值越小越優先。
Cluster_list:路由反射器集群列表,用于防環。
Originator_ID:路由反射器中路由的始發者 ID,用于防環。
十三、大規模 BGP 網絡優化
1. 對等體組(Peer Group)
定義:將具有相同屬性的對等體分組,簡化配置。
配置示例:
[R2-bgp] group <group-name> internal # 創建IBGP對等體組 [R2-bgp] peer <ip1> group <group-name> # 加入對等體 [R2-bgp] peer <group-name> connect-interface LoopBack 0 # 統一配置更新源
2. 路由聚合
自動聚合:僅對引入的 IGP 路由聚合到主類(可能產生黑洞),命令:
summary automatic
。手動聚合:精確匯總,可抑制明細路由,命令:
[router-bgp] aggregate <network> <mask> detail-suppressed # 抑制明細路由
3. 路由反射器(RR)
作用:替代 IBGP 全連接,減少鄰居數量,允許將從 IBGP 學到的路由反射給其他 IBGP 鄰居。
角色:RR(反射器)、Client(客戶機)、非客戶機。
反射規則:
從非客戶機學到的路由,僅反射給客戶機。
從客戶機學到的路由,反射給所有客戶機和非客戶機(除始發者)。
從 EBGP 學到的路由,反射給所有客戶機和非客戶機。
防環機制:
Cluster_list
(記錄經過的 RR 集群 ID)和Originator_ID
(路由始發者 ID)。配置示例:
[R2-bgp] peer <client-ip> reflect-client # 配置客戶機 [R2-bgp] reflector cluster-id <id> # 配置集群ID(可選)
4. BGP 聯盟(Confederation)
作用:將一個 AS 劃分為多個子 AS(用私有 AS 編號),子 AS 間用 EBGP 連接,減少 IBGP 鄰居。
配置示例:
[R2] bgp <子AS編號> [R2-bgp] confederation id <主AS編號> # 聲明主AS [R2-bgp] confederation peer-as <其他子AS編號> # 聲明聯盟內其他子AS
5. 團體屬性(Community)
作用:標記路由,批量控制路由發布范圍。
公認團體屬性:
Internet
:默認,可通告給所有對等體。no-advertise
:不向任何對等體通告。no-export
:不傳出 AS(但可在聯盟內子 AS 間傳遞)。
配置示例:
[R1] route-policy <name> permit node 10 [R1-route-policy] apply community no-export # 標記為no-export [R1-bgp] peer <ip> route-policy <name> export # 應用策略 [R1-bgp] peer <ip> advertise-community # 允許傳遞團體屬性
6. 路由衰減(Route Dampening)
作用:解決路由振蕩(頻繁上下線),通過懲罰值抑制不穩定路由。
參數:抑制閾值(默認 2000)、重用閾值(默認 750)、半衰期(默認 15 分鐘)。
配置示例:
[router-bgp] dampening # 啟用默認參數
十四、BGP 實驗實例
1. 基本配置實驗
目標:配置 EBGP 和 IBGP 鄰居,宣告業務網段,解決路由黑洞。
關鍵步驟:
配置 IP 和 OSPF(AS 內部互通)。
建立 EBGP(直連)和 IBGP(環回口)鄰居。
宣告業務網段,通過
import-route bgp
將 BGP 路由引入 IGP,解決黑洞。
2. 路由控制實驗
目標:通過修改屬性控制選路(MED、Preferred-value、AS_PATH、Local-pref)。
示例:修改 MED 使路由優選某路徑:
[R2] acl 2000 # 抓取目標網段 [R2-route-policy] apply cost 100 # 提高MED值 [R2-bgp] peer <ip> route-policy <name> export # 應用策略
3. 路由反射器實驗
目標:配置 RR 減少 IBGP 鄰居,實現路由反射。
關鍵步驟:
配置 OSPF 確保 TCP 可達。
建立 IBGP 對等體組,配置 RR 及客戶機。
聚合業務網段,抑制明細路由。