第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 优先

七、思考

  1. AS_PATH 如何防止路由环路?如果路由器发现自己的 AS 号已经在 AS_PATH 中,会怎么处理?
  2. iBGP 默认为什么不修改 NEXT_HOP?这可能导致什么问题?如何解决?
  3. ORIGIN 属性的三种类型分别是什么?哪种类型的路由优先级别最高?
  4. 在什么情况下,即使 BGP 路由表中存在一条路由,它也不会出现在 IP 路由表中?
  5. eBGP 和 iBGP 对 AS_PATH 的处理有什么不同?

下篇预告:第85篇《BGP 选路原则(13 条规则)详解》——掌握 BGP 选路的完整流程。