关键词:BGP、路径属性、AS_PATH、Next_Hop、Origin、LOCAL_PREF、MED、公认必遵、可选过渡
第84篇:BGP 路径属性:AS_PATH、Next_Hop、Origin
一、引言
BGP 路径属性是 BGP 路由决策的核心依据。与 IGP 仅使用单一的度量值(Cost/Metric)不同,BGP 通过多种路径属性描述路由的特征,并结合本地策略做出路由选择。
BGP 路径属性分为四大类:公认必遵、公认任意、可选过渡和可选非过渡。每种属性有不同的含义、作用和传播规则。理解这些属性,是掌握 BGP 路由控制和选路优化的基础。
二、核心概念
2.1 BGP 路径属性分类
BGP 路径属性按两个维度分类:是否所有 BGP 实现都必须识别(Well-known vs Optional),以及不识别时是否继续传递(Transitive vs Non-transitive):
| 分类 | 所有实现必须识别? | 不识别时继续传递? | 包含的属性 |
|---|---|---|---|
| 公认必遵(Well-known Mandatory) | 是 | N/A | AS_PATH、Next_Hop、Origin |
| 公认任意(Well-known Discretionary) | 是 | N/A | LOCAL_PREF、Atomic_Aggregate |
| 可选过渡(Optional Transitive) | 否 | 是 | Community |
| 可选非过渡(Optional Non-transitive) | 否 | 否(丢弃该属性) | MED、Aggregator、Originator_ID、Cluster_List |
分类规则: - 公认必遵:Update 报文中必须包含,缺失则视为错误,发送 Notification - 公认任意:所有实现必须识别,但 Update 报文中不一定包含(如 LOCAL_PREF 仅在 iBGP 中传递) - 可选过渡:可以不识别,但不识别时仍将该属性传递给其他 Peer(Community 的典型场景) - 可选非过渡:可以不识别,不识别时直接丢弃该属性(MED、Originator_ID 等)
2.2 AS_PATH 属性
AS_PATH 是 BGP 最重要的路径属性之一,用于记录路由经过的 AS 序列:
| 特性 | 说明 |
|---|---|
| 类型 | 公认必遵 |
| 内容 | 路由经过的 AS 号序列(从目的地向外排列,最近经过的 AS 在最前面) |
| 作用 | 选路依据(AS_PATH 短的优先)、环路检测 |
| 环路检测 | 如果 BGP 路由器在 AS_PATH 中发现自己的 AS 号,丢弃该路由 |
AS_PATH 的编码格式:
| 编码类型 | 代码 | 说明 |
|---|---|---|
| AS_SEQUENCE | 2 | 有序 AS 列表(最常见的形式) |
| AS_SET | 1 | 无序 AS 集合(聚合时保留,as-set 场景) |
| AS_PARTIAL | 3 | 不完整的 AS 序列(已废弃) |
AS_PATH 示例:
AS_PATH: 300 200
含义:本路由从AS 300学到,经过AS 200到达目的地
AS_PATH: 300 200 200 200 100
含义:AS_PATH Prepending场景,AS 200重复了3次以延长路径
2.3 Next_Hop 属性
Next_Hop 指定到达目标网络的下一跳地址:
| 场景 | Next_Hop 行为 |
|---|---|
| eBGP 传递 | 自动修改为发送者的 eBGP 出口接口 IP |
| iBGP 传递 | 默认不修改(透传原始 Next_Hop) |
| Confederation eBGP 传递 | 不修改(透传,与标准 iBGP 行为一致) |
| next-hop-self | 手动修改 Next_Hop 为本端 IP |
iBGP Next_Hop 问题: - iBGP 传递路由时不修改 Next_Hop,保留 eBGP 对端的 IP 地址 - 如果 iBGP Peer 没有到达该 Next_Hop 的 IP 路由(IGP 路由或静态路由),BGP 路由虽然存在于 BGP 表中,但不会被标记为最佳路径(Best),也不会安装到 IP 路由表 - 这就是著名的"Next_Hop 不可达导致路由无效"问题
解决方案:
1. 在 eBGP 路由器上配置 next-hop-self,将 Next_Hop 修改为本端 iBGP 接口 IP
2. 在 iBGP Peer 上添加到达原始 Next_Hop 的静态路由
3. 将 eBGP 对端 IP 重分发到 IGP(不推荐,增加 IGP 路由负担)
2.4 Origin 属性
Origin 标识路由的注入来源:
| Origin 值 | 符号 | 说明 | 优先级(选路) |
|---|---|---|---|
| IGP | i | 通过 network 命令宣告进入 BGP |
最高 |
| EGP | e | 通过 EGP 协议学习(已废弃,历史上使用) | 中间 |
| Incomplete | ? | 通过 import-route(重分发)引入 |
最低 |
Origin 的选路意义:当多条路由在其他属性上完全一致时,Origin 作为第三条比较规则,IGP(network 宣告)优先于 Incomplete(重分发)。
三、技术细节
3.1 AS_PATH 的传递与修改

AS_PATH 修改规则:
1. eBGP 传递:在 AS_PATH 前面(最左侧)添加自己的 AS 号
2. iBGP 传递:不修改 AS_PATH(Peer 在同一 AS,无需追加)
3. 路由聚合:默认丢弃明细的 AS_PATH 信息(可使用 as-set 保留)
4. AS_PATH Prepending:通过路由策略人为追加自己的 AS 号,使路径"变长"
3.2 Next_Hop 的处理流程

3.3 其他重要属性概览
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| LOCAL_PREF | 公认任意 | 100 | 本地优先值,越大越优,在 AS 和 Confederation 内部传递,仅在传递给标准 eBGP 时被剥离 |
| MED | 可选非过渡 | 0 | 多出口度量,建议进入 AS 的最佳入口 |
| Community | 可选过渡 | 无 | 团体属性,用于路由标记和策略匹配 |
| Originator_ID | 可选非过渡 | 无 | 路由反射场景中原始发布者的 Router ID |
| Cluster_List | 可选非过渡 | 无 | 路由反射场景中经过的 Cluster ID 列表 |
| Atomic_Aggregate | 公认任意 | 无 | 标识该路由是聚合路由,可能丢失明细信息 |
四、实战配置/案例分析
4.1 查看路径属性
# 查看BGP路由的详细信息(包含所有属性)
display bgp routing-table 10.1.1.0 verbose
Network: 10.1.1.0/24
Path Attributes:
Origin: IGP
NextHop: 2.2.2.2
AS_PATH: 300 200 I
LOCAL_PREF: 100
MED: 0
Community: 200:100
PrefVal: 0
# 查看BGP表的汇总信息
display bgp routing-table summary
4.2 案例分析:iBGP Next_Hop 不可达
故障现象:AS 100 内,R1(PE)通过 eBGP 从 AS 200 学到路由 172.16.0.0/16,通过 iBGP 传递给 R2。R2 的 BGP 表中存在该路由,但未被标记为 Best,也没有安装到 IP 路由表。
排查:
- 检查 R2 的 BGP 表:
[R2] display bgp routing-table 172.16.0.0
Network NextHop MED LocPrf PrefVal Path/Ogn
> 172.16.0.0/16 3.3.3.3 0 100 0 200i
# 注意:>表示Valid但*表示Best,该路由只有>没有*,说明Valid但非Best
- 检查 Next_Hop(3.3.3.3 是 AS 200 的 eBGP 对端 IP):
[R2] display ip routing-table 3.3.3.3
# 无到达3.3.3.3的路由!
# Next_Hop不可达,因此BGP路由无法被选为Best路径
-
根因:R2 没有到达 eBGP Next_Hop(3.3.3.3)的 IGP 路由。R1 通过 iBGP 传递路由时未修改 Next_Hop,保持了原始的 eBGP 对端 IP(3.3.3.3),而 R2 无法到达该地址。
-
解决方案(推荐方案1):
# 方案1:在R1(eBGP路由器)上配置next-hop-self
[R1] bgp 100
[R1-bgp] peer 2.2.2.2 next-hop-self
# 配置后,R1传递给R2的路由Next_Hop修改为R1的iBGP地址
# 方案2:在R2上添加到达Next_Hop的静态路由
ip route-static 3.3.3.3 32 10.1.1.1
# 方案3:使用路由策略统一设置next-hop-self
route-policy NH-SELF permit node 10
apply next-hop 2.2.2.2 # 设置为R2可达的地址
4.3 案例分析:AS_PATH 环路检测
故障场景:网络中存在配置错误,导致 BGP 路由形成环路:

环路检测过程:
- R1 通过 eBGP 将 10.0.0.0/8 路由传给 R2,AS_PATH: 100
- R2 传给 R3,AS_PATH: 100 200
- R3 尝试将路由传回 R1(AS 100)
- R1 收到路由,检查 AS_PATH: 100 200 100
- R1 在 AS_PATH 中发现自己的 AS 号(100),判定为环路,丢弃该路由
关键:AS_PATH 环路检测仅对 eBGP 有效,因为 iBGP 传递不追加 AS 号。这也是 iBGP 需要水平分割(或 RR/联邦)防环的原因。
4.4 案例分析:Origin 影响选路
场景:BGP 路由器同时通过 network 和 import-route 获得同一条路由:
[R1] bgp 100
[R1-bgp] network 10.0.0.0 24 # Origin = IGP(i)
[R1-bgp] import-route ospf 1 # Origin = Incomplete(?)
两条路由在其他属性完全相同的情况下,network 宣告的路由(Origin=IGP)被选为最佳路径,import-route 引入的路由(Origin=Incomplete)成为备选。
五、总结
| 属性 | 类型 | 核心作用 | 传递规则 |
|---|---|---|---|
| AS_PATH | 公认必遵 | 选路依据(短路径优先)、环路检测 | eBGP追加本AS号,iBGP不修改 |
| Next_Hop | 公认必遵 | 指定数据转发的下一跳地址 | eBGP修改为本端IP,iBGP透传 |
| Origin | 公认必遵 | 标识路由来源(IGP/EGP/Incomplete) | 保持不变 |
| LOCAL_PREF | 公认任意 | AS内部出口选择(越大越优) | AS和Confederation内部传递,传递给标准eBGP时剥离,默认100 |
| MED | 可选非过渡 | 建议进入AS的最佳入口 | 默认不传递到下一AS |
思考
- 为什么 AS_PATH 属性是从目的地向外排列(最近经过的 AS 在最前面),而非从源向外?这种排列方式对环路检测和选路有什么意义?
- iBGP 传递路由时不修改 Next_Hop,这种设计的初衷是什么?在什么场景下会导致路由无法安装到 IP 路由表?
- BGP 的 Origin 属性有三个取值(IGP/EGP/Incomplete),为什么 EGP 已经被废弃但仍然保留在协议定义中?
下篇预告:第85篇:BGP 选路原则(13条规则)详解