第84篇:BGP 路径属性——AS_PATH、Next_Hop、Origin
关键词
BGP、路径属性、AS_PATH、NEXT_HOP、ORIGIN、路由选路
一、什么是 BGP 路径属性
路径属性(Path Attributes) 是 BGP 路由的"标签",每条 BGP 路由都携带一组属性,路由器根据这些属性做出选路决策。
属性分类
BGP 属性分为四大类:
| 类别 | 说明 | 举例 |
|---|---|---|
| Well-known Mandatory | 所有 Update 必须携带 | AS_PATH、NEXT_HOP、ORIGIN |
| Well-known Discretionary | 可选但所有 BGP 都应支持 | LOCAL_PREF、ATOMIC_AGGREGATE |
| Optional Transitive | 可选,可跨 AS 传递 | COMMUNITY、AGGREGATOR |
| Optional Non-transitive | 可选,不跨 AS 传递 | MED |
二、AS_PATH(AS 路径)
2.1 定义
AS_PATH 记录路由经过的 AS 编号序列,是 BGP 防环和选路的基础。
路由 172.16.0.0/16 的 AS_PATH:
AS_PATH = [100, 200, 300]
含义:该路由经过了 AS 100 → AS 200 → AS 300
2.2 两种 AS_PATH 类型
| 类型 | 表示方式 | 说明 |
|---|---|---|
| AS_SEQUENCE | 有序列表 | AS_PATH = [100, 200, 300] |
| AS_SET | 无序集合 | AS_PATH = {100, 200}(聚合时使用) |
2.3 eBGP 的 AS_PATH 处理
AS 100 发送路由到 AS 200:
Update: AS_PATH = [100]
AS 200 的 eBGP 路由器收到后:
自己的 AS 不在 AS_PATH 中 → 接收
转发时:AS_PATH = [200, 100]
AS 300 的 eBGP 路由器收到后:
自己的 AS 不在 AS_PATH 中 → 接收
转发时:AS_PATH = [300, 200, 100]
2.4 iBGP 的 AS_PATH 处理
iBGP 不修改 AS_PATH。
AS 100 内:
RouterA(eBGP 边界)→ iBGP → RouterB(内部)
AS_PATH = [200, 100] (不变)
2.5 防环机制
# AS 200 收到一条 AS_PATH = [300, 200, 100] 的路由
# 发现自己的 AS 200 已经在 AS_PATH 中 → 丢弃该路由
display bgp routing-table 172.16.0.0
AS_PATH: 100 200 300
# 如果本端 AS = 200,则 AS_PATH 中包含 200 → 环路 → 丢弃
三、NEXT_HOP(下一跳)
3.1 定义
NEXT_HOP 指示到达 BGP 路由的下一跳 IP 地址。
3.2 eBGP 的下一跳行为
AS 100 AS 200
RouterA ─── eBGP ──── RouterB
10.0.12.1 10.0.12.2
RouterB 收到 RouterA 的 BGP 路由:
路由: 172.16.0.0/16
NEXT_HOP: 10.0.12.1 ← 下一跳是直连接口
3.3 iBGP 的下一跳行为
默认情况下,iBGP 不修改 NEXT_HOP。
AS 200
RouterB(边界)── iBGP ── RouterC(内部)
│ │
10.0.12.2 10.0.23.2
RouterC 收到的 BGP 路由:
路由: 172.16.0.0/16
NEXT_HOP: 10.0.12.1 ← 下一跳不是直连!
问题:RouterC 需要通过 IGP 到达 10.0.12.1。
# 在 RouterC 上检查
display ip routing-table 10.0.12.1
# 如果 IGP 中没有 10.0.12.1 → BGP 路由不可用
# 解决方案:在 RouterB 上设置 next-hop-local
bgp 200
peer 10.0.23.2 next-hop-local # 将 iBGP 下一跳改为自己
3.4 下一跳可达性检查
BGP 有一条重要规则:只有 NEXT_HOP 在路由表中可达时,BGP 路由才被使用。
display bgp routing-table 172.16.0.0
BGP Local router ID: 2.2.2.2
Next Hop: 10.0.12.1
IGP cost: 10 # IGP 到下一跳的 Cost
状态: valid (Nexthop reachable) ← 下一跳可达
四、ORIGIN(起源)
4.1 定义
ORIGIN 标示 BGP 路由的来源,是优先级最高的选路属性之一。
4.2 三种 Origin 类型
| 类型 | 编码 | 说明 |
|---|---|---|
| IGP | 0 | 通过 network 命令注入的路由(最高优先级) |
| EGP | 1 | 通过 EGP 协议学到的路由(已废弃) |
| Incomplete | 2 | 通过 import-route 引入的路由(最低优先级) |
4.3 示例
display bgp routing-table 172.16.0.0
Network: 172.16.0.0/16
Path Origin: IGP ← 通过 network 命令发布
AS_PATH: 100
display bgp routing-table 10.0.0.0
Network: 10.0.0.0/8
Path Origin: Incomplete ← 通过 import-route 引入
AS_PATH: 100
4.4 选路影响
Origin 的优选顺序:
IGP (0) > EGP (1) > Incomplete (2)
五、三条属性的综合排错
5.1 路由不可用
# 现象:BGP 路由在路由表中不生效
display bgp routing-table 172.16.0.0
Status: *> 表示有效可用
Status: 表示无效
# 可能原因
1. Next Hop 不可达
display ip routing-table x.x.x.x # 检查下一跳是否存在
2. AS_PATH 环路
AS_PATH 中包含本端 AS 号
5.2 修改下一跳
# 将 iBGP 下一跳设置为本地
bgp 100
peer 10.0.23.2 next-hop-local
5.3 查看属性
# 查看 BGP 路由的详细属性
display bgp routing-table 172.16.0.0
BGP Local router ID: 1.1.1.1
Network: 172.16.0.0/16
Next Hop: 10.0.12.1
AS_PATH: 200 100
Origin: IGP
Local Preference: 100
六、总结
| 属性 | 类别 | 作用 | 选路优先级 |
|---|---|---|---|
| AS_PATH | Well-known Mandatory | 记录 AS 路径,防环 | 第 4 优先 |
| NEXT_HOP | Well-known Mandatory | 指定下一跳地址 | - |
| ORIGIN | Well-known Mandatory | 标示路由来源 | 第 2 优先 |
七、思考
- AS_PATH 如何防止路由环路?如果路由器发现自己的 AS 号已经在 AS_PATH 中,会怎么处理?
- iBGP 默认为什么不修改 NEXT_HOP?这可能导致什么问题?如何解决?
- ORIGIN 属性的三种类型分别是什么?哪种类型的路由优先级别最高?
- 在什么情况下,即使 BGP 路由表中存在一条路由,它也不会出现在 IP 路由表中?
- eBGP 和 iBGP 对 AS_PATH 的处理有什么不同?
下篇预告:第85篇《BGP 选路原则(13 条规则)详解》——掌握 BGP 选路的完整流程。