BGP 协议详解
2583 字
13 分钟
BGP 协议详解
BGP 协议详解
一、协议概述
BGP(Border Gateway Protocol,边界网关协议)是一种路径矢量路由协议,是互联网核心路由协议。目前广泛使用 BGP-4(RFC 4271),支持 MP-BGP(Multiprotocol BGP)承载多种网络层协议。
- 基于 TCP:端口 179,提供可靠传输(无需 BGP 自身实现可靠性)
- AS 间路由:在不同自治系统(AS)之间交换路由信息
- 防环机制:通过 AS_Path 属性实现
- 丰富路由属性:支持复杂的路由策略控制
BGP 分类
| 类型 | AS 关系 | 默认 TTL | 邻居 IP 要求 | 特殊规则 |
|---|---|---|---|---|
| EBGP | 不同 AS | 1 | 建议直连 | AS_Path 追加本端 AS |
| IBGP | 同 AS | 255 | 不要求直连 | 水平分割 + 不追加 AS_Path |
AS 号范围:1-4294967295(2 字节 AS:1-65535,4 字节 AS:65536-4294967295)
二、BGP 报文类型 🏷️高频考点
| 报文 | 作用 | 发送时机 |
|---|---|---|
| Open | 建立 BGP 邻居,协商参数 | 邻居建立时 |
| Keepalive | 维持邻居关系(60s 发送) | 周期发送,Hold Time 默认 180s |
| Update | 通告可达路由 / 撤销路由 | 路由变化时 |
| Notification | 报告错误并中断邻居关系 | 发生错误时 |
| Route-Refresh | 请求对端重新发送指定路由 | 策略变化时(需要邻居双方支持) |
三、BGP 状态机 🏷️高频考点(核心)
| 状态 | 说明 |
|---|---|
| Idle | 初始状态,拒绝所有连接。检查到可用路由后进入 Connect |
| Connect | 发起 TCP 连接,成功 → OpenSent,失败 → Active |
| Active | TCP 连接失败,尝试重新发起连接 |
| OpenSent | 已发送 Open 报文,等待对端 Open 报文 |
| OpenConfirm | 收到对端 Open,协商成功,等待 Keepalive |
| Established | 邻居关系正式建立,可以交换 Update 报文 |
BGP 邻居建立条件:TCP 连通(IP 可达) + AS 号匹配(对端 remote-as = 本端 AS) + RID 不冲突
四、BGP 路由生成方式 🏷️高频考点
| 方式 | 命令 | 特点 |
|---|---|---|
| network | network x.x.x.x mask | 路由表必须存在精确匹配项,Origin 为 IGP(i),可操作属性 |
| import-route | import-route ospf/isis/static/direct | 引入其他协议路由,Origin 为 Incomplete(?) |
| 手工聚合 | aggregate x.x.x.x mask | 将细路由聚合为粗路由 |
选路优先级:Origin 值越小越优 → IGP(0) < EGP(1) < Incomplete(2)
五、BGP 路由属性 🏷️高频考点(最核心章节)
5.1 属性总览
| 属性 | 类型 | 作用 | 选路比较 |
|---|---|---|---|
| Preferred-Value | 华为私有,仅本地有效 | 本地路由优先级 | 第 1 步 |
| Local_Pref | 公认任意,IBGP 传递 | AS 内选出口 | 第 2 步 |
| Origin | 公认必遵 | 路由来源标识 | 第 5 步 |
| AS_Path | 公认必遵 | 防环 + 选路 | 第 4 步 |
| MED | 可选过渡 | 影响外部 AS 入口 | 第 6 步 |
| Next_Hop | 公认必遵 | 下一跳地址 | 第 8 步 |
| Community | 可选过渡 | 路由标记/策略控制 | — |
5.2 Origin(起源属性)
| 值 | 标记 | 说明 |
|---|---|---|
| 0 | IGP(i) | network 命令产生的路由 |
| 1 | EGP(e) | 从 EGP 学到的(已废弃) |
| 2 | Incomplete(?) | import-route 引入的路由 |
5.3 AS_Path(AS 路径)
- EBGP 通告时 prepend 本端 AS(追加到 AS_Path 最前面)
- 防环:收到包含自身 AS 号的路由 → 丢弃
- AS_Path 越短越优
- 策略操作:
apply as-path <非自身AS> additive加长路径(影响入向流量)
5.4 Next_Hop(下一跳)
| 场景 | Next_Hop 规则 |
|---|---|
| EBGP → EBGP 邻居 | = 发送者接口 IP |
| IBGP → IBGP 邻居 | = 保持原始 Next_Hop 不变 |
| EBGP → IBGP 邻居 | = 保持原始 Next_Hop |
| IBGP → EBGP 邻居 | = 自身更新源 IP |
⚠️ 最重要的问题:IBGP 传递路由时 Next_Hop 不变,如果下一跳 IGP 不可达则路由无效(需配置
peer next-hop-local)
5.5 Local_Pref(本地优先级)
- 默认值:100,值越大越优
- 只在 IBGP 间传递,EBGP 不携带
- 用于 AS 内部控制出口
5.6 MED(多出口鉴别器)
- 默认值:0,值越小越优
- 在相邻两个 AS 间传递
- 影响外部 AS 流量进入本 AS 的入口选择
compare-different-as-med可比较不同 AS 的 MED
5.7 Community(团体属性)
| Well-known Community | 作用 |
|---|---|
| no-export (0xFFFFFF01) | 不向 EBGP 邻居通告 |
| no-advertise (0xFFFFFF02) | 不向任何邻居通告 |
| no-export-subconfed (0xFFFFFF03) | 不向联盟外部通告 |
| internet (0) | 默认值,可向任何邻居通告 |
5.8 Preferred-Value(华为私有)
- 仅本地有效,不传递
- 默认值:0,值越大越优
- 华为 BGP 选路的第 1 步,是最高优先级的选路属性
六、BGP 13 步选路原则 🏷️高频考点(考试必考)
| 步 | 比较项 | 优者 | 默认值 | 备注 |
|---|---|---|---|---|
| 1 | Preferred-Value | 大者 | 0 | 华为私有 |
| 2 | Local_Pref | 大者 | 100 | IBGP 间传递 |
| 3 | 本地始发 | 是 | — | network > import-route |
| 4 | AS_Path | 短者 | — | |
| 5 | Origin | IGP > EGP > Incomplete | — | 越小越优 |
| 6 | MED | 小者 | 0 | |
| 7 | EBGP vs IBGP | EBGP > IBGP | — | |
| 8 | IGP 到 Next_Hop 的 Metric | 小者 | — | |
| 9 | Cluster_List 长度 | 短者 | — | RR 场景 |
| 10 | Originator_ID | 小者 | — | RR 场景 |
| 11 | 通告路由器的 RID | 小者 | — | |
| 12 | 对等体 IP 地址 | 小者 | — | |
| 13 | — | — | — | 仅用于负载分担场景 |
⚠️ 重要:步骤 9/10 仅在 RR 场景生效;步骤 1-8 是通用原则。
七、IBGP 水平分割与路由反射器 🏷️高频考点
7.1 IBGP 水平分割原则
从 IBGP 邻居学到的路由,不再转发给其他 IBGP 邻居。
后果:AS 内 IBGP 需要全互联(Full Mesh),n 台路由器需要 n×(n-1)/2 条 IBGP 会话。
7.2 路由反射器(Route Reflector)
RR 通过放宽 IBGP 水平分割解决全互联问题:
RR / | \ C1 C2 NC1 Client Non-ClientRR 反射规则:
| 路由来源 | → Client | → Non-Client | → EBGP |
|---|---|---|---|
| 从 Client 学到 | ✅ 反射 | ✅ 反射 | ✅ |
| 从 Non-Client 学到 | ✅ 反射 | ❌ 不反射 | ✅ |
| 从 EBGP 学到 | ✅ | ✅ | ✅ |
防环属性:
| 属性 | 作用 |
|---|---|
| Originator_ID | 记录路由始发路由器 RID,收到自己的 Originator_ID 则丢弃 |
| Cluster_List | 记录路由经过的 Cluster ID,收到包含自身 Cluster ID 则丢弃 |
7.3 BGP 联盟(Confederation)
将一个大 AS 划分为多个子 AS,子 AS 间运行 EBGP(行为类似 IBGP)。
- AS_Path 属性中加入子 AS 号(括号标记),联盟外部不可见
- 联盟内部保留 Next_Hop、Local_Pref、MED 等属性
- AS_Confed_Sequence:联盟内部防环
八、BGP 路由聚合 🏷️高频考点
| 方式 | 命令 | 特点 |
|---|---|---|
| 自动聚合 | summary automatic | 仅对 import-route 路由生效,聚合到主类网络(不推荐) |
| 手动聚合 | aggregate x.x.x.x mask | 灵活控制,推荐 |
手动聚合关键参数
| 参数 | 作用 |
|---|---|
detail-suppressed | 仅通告聚合路由,抑制所有明细路由 |
suppress-policy <policy> | 选择性抑制部分明细路由 |
origin-policy <policy> | 仅聚合匹配的明细路由 |
as-set | 聚合路由 AS_Path 包含所有明细路由的 AS(用于防环) |
九、BGP 路由衰减(Route Dampening) 🏷️高频考点
抑制频繁振荡的路由,避免路由翻动导致网络不稳定。
| 参数 | 默认值 | 说明 |
|---|---|---|
| Half-life(半衰期) | 15 min | 惩罚值衰减一半的时间 |
| Reuse(重用阈值) | 750 | 惩罚值低于此值恢复使用 |
| Suppress(抑制阈值) | 2000 | 惩罚值超过此值抑制路由 |
| Max-suppress-time | 60 min | 最大抑制时间 |
| 每次翻动惩罚值 | 1000 | 每翻动一次增加的惩罚值 |
注意:仅对 EBGP 路由生效,IBGP 路由不做衰减。
十、华为设备配置命令
10.1 基础 BGP 配置
# 启动 BGP 进程,指定本端 AS 号bgp 100 # 配置 Router ID(建议手动配置 Loopback 地址) router-id 10.0.0.1 # 配置 EBGP 邻居 peer 10.1.1.2 as-number 200 # 配置 IBGP 邻居(使用 Loopback 接口建立连接) peer 10.0.0.2 as-number 100 peer 10.0.0.2 connect-interface LoopBack0 # IBGP 配置 next-hop-local(解决下一跳不可达问题) peer 10.0.0.2 next-hop-local10.2 路由发布
bgp 100 # network 方式:路由表中必须存在精确匹配 network 192.168.1.0 255.255.255.0
# import-route 方式:引入 OSPF 路由 import-route ospf 1
# 手动聚合(抑制明细路由) aggregate 10.1.0.0 255.255.0.0 detail-suppressed10.3 路由属性操控
# Route-Policy 修改 Local_Prefroute-policy SET_LP permit node 10 apply local-preference 200bgp 100 peer 10.0.0.2 route-policy SET_LP import
# Route-Policy 修改 MEDroute-policy SET_MED permit node 10 apply cost 50bgp 100 peer 10.1.1.2 route-policy SET_MED export
# AS_Path prepend 影响返程路径route-policy PREPEND_AS permit node 10 apply as-path 100 100 100 additivebgp 100 peer 10.1.1.2 route-policy PREPEND_AS export
# 设置 Communityroute-policy SET_COM permit node 10 apply community no-exportbgp 100 peer 10.1.1.2 route-policy SET_COM export
# 修改 Preferred-Valuebgp 100 peer 10.0.0.2 preferred-value 10010.4 路由反射器配置
bgp 100 # 指定对等体为 RR Client peer 10.0.0.3 reflect-client peer 10.0.0.4 reflect-client
# 配置 Cluster ID(多 RR 场景防止 Cluster_List 环路) reflector cluster-id 1.1.1.110.5 BGP 联盟配置
# 联盟 ID(外部看到的 AS 号)bgp 65001 confederation id 100 # 声明联盟内部其他子 AS confederation peer-as 65002
# 与其他子 AS 建立联盟内 EBGP 邻居 peer 10.1.2.1 as-number 6500210.6 BGP 认证与调优
bgp 100 # MD5 认证 peer 10.1.1.2 password cipher Huawei@123
# 使用对等体组批量配置 group IBGP-PEERS internal peer IBGP-PEERS connect-interface LoopBack0 peer 10.0.0.2 group IBGP-PEERS peer 10.0.0.3 group IBGP-PEERS
# 路由衰减配置 dampening 15 750 2000 60十一、BGP 常见故障排查
11.1 邻居无法建立
| 状态 | 原因 | 排查方法 |
|---|---|---|
| Idle | TCP 不通 | ping -a <source> <destination> |
| Active | TCP 连接被拒绝 | 检查对端是否有 peer 配置、access-list 阻止端口 179 |
| OpenSent | AS 号不匹配、认证失败 | 对比两端 remote-as、password |
| OpenConfirm | Hold Time 不匹配、RID 冲突 | 检查两端 Hold Time、router-id |
11.2 路由不学习
| 症状 | 原因 | 解决 |
|---|---|---|
| IBGP 路由不生效 | Next_Hop IGP 不可达 | peer <ip> next-hop-local |
| EBGP 路由不收 | AS_Path 包含自身 AS | 检查 AS_Path(通常由路由泄漏导致) |
| IBGP 路由不传递 | 水平分割 | 配置 RR 或全互联 |
| import-route 路由不发布 | 路由表中不存在 | 确认路由存在后引入 |
11.3 高频诊断命令
display bgp peer # 查看 BGP 邻居状态display bgp peer <ip> verbose # 查看邻居详细信息display bgp routing-table # 查看 BGP 路由表display bgp routing-table <prefix> # 查看特定路由详细信息display bgp peer <ip> received-routes # 查看从对端收到的路由display bgp peer <ip> advertised-routes # 查看向对端通告的路由display bgp group # 查看对等体组display bgp routing-table dampened # 查看被抑制的路由reset bgp all # 重置所有 BGP(慎用)refresh bgp all export/import # 软重置十二、BGP 防环机制总结 🏷️高频考点
| 区域 | 机制 | 原理 |
|---|---|---|
| EBGP | AS_Path | 收到包含自身 AS 的路由 → 丢弃 |
| IBGP | 水平分割 | IBGP 学到的路由不传给其他 IBGP 邻居 |
| RR 内部 | Originator_ID + Cluster_List | 记录始发 RID 和 Cluster ID |
| 联盟内部 | AS_Confed_Sequence | 类似 AS_Path 在联盟子 AS 间生效 |
最后更新:2026-08-05
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
1
IS-IS 协议详解
网络2026-08-05
2
OSPF 协议详解
网络2026-08-05
3
IPv6 技术详解
网络2026-08-05
4
VLAN 技术详解
网络2026-08-05
5
ACL技术详解
网络2026-08-05
随机文章随机推荐



