视频加载失败

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不同 AS1建议直连AS_Path 追加本端 AS
IBGP同 AS255不要求直连水平分割 + 不追加 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 状态机 🏷️高频考点(核心)#

初始状态

Start事件/TCP连接

TCP连接建立成功

TCP连接建立失败

触发重试

收到Open报文且协商成功

收到Keepalive且协商参数OK

永远不接受的连接

收到Notification/错误

收到Notification/错误

收到Notification/Keepalive超时

Idle

Connect

OpenSent

Active

OpenConfirm

Established

初始状态

Start事件/TCP连接

TCP连接建立成功

TCP连接建立失败

触发重试

收到Open报文且协商成功

收到Keepalive且协商参数OK

永远不接受的连接

收到Notification/错误

收到Notification/错误

收到Notification/Keepalive超时

Idle

Connect

OpenSent

Active

OpenConfirm

Established

状态说明
Idle初始状态,拒绝所有连接。检查到可用路由后进入 Connect
Connect发起 TCP 连接,成功 → OpenSent,失败 → Active
ActiveTCP 连接失败,尝试重新发起连接
OpenSent已发送 Open 报文,等待对端 Open 报文
OpenConfirm收到对端 Open,协商成功,等待 Keepalive
Established邻居关系正式建立,可以交换 Update 报文

BGP 邻居建立条件:TCP 连通(IP 可达) + AS 号匹配(对端 remote-as = 本端 AS) + RID 不冲突


四、BGP 路由生成方式 🏷️高频考点#

方式命令特点
networknetwork x.x.x.x mask路由表必须存在精确匹配项,Origin 为 IGP(i),可操作属性
import-routeimport-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(起源属性)#

标记说明
0IGP(i)network 命令产生的路由
1EGP(e)从 EGP 学到的(已废弃)
2Incomplete(?)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 步选路原则 🏷️高频考点(考试必考)#

比较项优者默认值备注
1Preferred-Value大者0华为私有
2Local_Pref大者100IBGP 间传递
3本地始发network > import-route
4AS_Path短者
5OriginIGP > EGP > Incomplete越小越优
6MED小者0
7EBGP vs IBGPEBGP > IBGP
8IGP 到 Next_Hop 的 Metric小者
9Cluster_List 长度短者RR 场景
10Originator_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-Client

RR 反射规则

路由来源→ 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:联盟内部防环

EBGP(联盟内)

AS 100

(联盟)

子 AS 65001

R1-R2

子 AS 65002

R3-R4

AS 200

(EBGP)

EBGP(联盟内)

AS 100

(联盟)

子 AS 65001

R1-R2

子 AS 65002

R3-R4

AS 200

(EBGP)


八、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-time60 min最大抑制时间
每次翻动惩罚值1000每翻动一次增加的惩罚值

注意:仅对 EBGP 路由生效,IBGP 路由不做衰减。


十、华为设备配置命令#

10.1 基础 BGP 配置#

Terminal window
# 启动 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-local

10.2 路由发布#

Terminal window
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-suppressed

10.3 路由属性操控#

Terminal window
# Route-Policy 修改 Local_Pref
route-policy SET_LP permit node 10
apply local-preference 200
bgp 100
peer 10.0.0.2 route-policy SET_LP import
# Route-Policy 修改 MED
route-policy SET_MED permit node 10
apply cost 50
bgp 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 additive
bgp 100
peer 10.1.1.2 route-policy PREPEND_AS export
# 设置 Community
route-policy SET_COM permit node 10
apply community no-export
bgp 100
peer 10.1.1.2 route-policy SET_COM export
# 修改 Preferred-Value
bgp 100
peer 10.0.0.2 preferred-value 100

10.4 路由反射器配置#

Terminal window
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.1

10.5 BGP 联盟配置#

Terminal window
# 联盟 ID(外部看到的 AS 号)
bgp 65001
confederation id 100
# 声明联盟内部其他子 AS
confederation peer-as 65002
# 与其他子 AS 建立联盟内 EBGP 邻居
peer 10.1.2.1 as-number 65002

10.6 BGP 认证与调优#

Terminal window
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 邻居无法建立#

状态原因排查方法
IdleTCP 不通ping -a <source> <destination>
ActiveTCP 连接被拒绝检查对端是否有 peer 配置、access-list 阻止端口 179
OpenSentAS 号不匹配、认证失败对比两端 remote-aspassword
OpenConfirmHold 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 高频诊断命令#

Terminal window
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 防环机制总结 🏷️高频考点#

区域机制原理
EBGPAS_Path收到包含自身 AS 的路由 → 丢弃
IBGP水平分割IBGP 学到的路由不传给其他 IBGP 邻居
RR 内部Originator_ID + Cluster_List记录始发 RID 和 Cluster ID
联盟内部AS_Confed_Sequence类似 AS_Path 在联盟子 AS 间生效

最后更新:2026-08-05

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
BGP 协议详解
https://blog.zs13.tech/posts/网络/01-路由协议/bgp协议详解/
作者
zs13
发布于
2026-08-05
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
zs13
Hello, I'm Zs13.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
22
分类
1
标签
46
总字数
64,717
运行时长
0
最后活动
0 天前
站点信息
构建平台
EdgeOne Pages
博客版本
Firefly v6.15.10
文章许可
CC BY-NC-SA 4.0