第160篇:TE 隧道路径计算与显式路径

关键词

CSPF、显式路径、Strict 节点、Loose 节点、ERO、路径优化、ASON、路径多样性


一、路径计算方法概述

MPLS TE 隧道有三种路径计算方式:

方式 描述 适用场景
动态路径 CSPF 基于 TED 自动计算 自动优化路径
显式路径(严格) 手工指定每一跳 精确控制路径
显式路径(松散) 手工指定关键节点 指定必经节点,其他由 CSPF 计算

二、CSPF(Constraint-based SPF)算法详解

2.1 算法流程

CSPF 在标准 SPF 基础上增加了约束处理:

              TED(流量工程数据库)
                    │
带宽约束 亲和属性约束 显式路径约束
剪裁拓扑
(移除不满足约束的链路和节点)
运行 SPF 算法
计算最短路径树
输出最优路径(ERO)

2.2 带宽剪裁示例

原始拓扑(所有链路 Cost=10):
  PE1 ── P1 ── P2 ── PE2(所有链路 100 Mbps)
   │            │
   └── P3 ─────┘
   (P1-P3 10 Mbps,P3-P2 10 Mbps)

需求:建立一条 50 Mbps 的隧道

CSPF 计算过程:
  1. 带宽剪裁:
     P1-P3(10 Mbps < 50 Mbps)→ 剪裁
     P3-P2(10 Mbps < 50 Mbps)→ 剪裁
     其余链路(100 Mbps ≥ 50 Mbps)→ 保留

  2. 在剩余拓扑上运行 SPF:
     PE1 → P1 → P2 → PE2(Cost=30)
     PE1 → P3 → (被剪裁)→ 不可达

  3. 结果:PE1 → P1 → P2 → PE2

2.3 亲和属性(Affinity)

亲和属性通过"颜色"(Color)机制来约束路径:

属性 名称 位掩码
0x0001 光纤链路 0000 0001
0x0002 低延迟链路 0000 0010
0x0004 卫星链路 0000 0100
# 接口设置亲和属性
interface GigabitEthernet0/0/0
 mpls te affinity 0x0001 mask 0x0001    # 光纤链路

# 隧道请求包含(Include-Any):
# 任一匹配即可
mpls te affinity include-any 0x0001 mask 0x0F
  → 接受 bit 0(光纤)为 1 的链路

# 隧道请求排斥(Exclude-Any):
# 任一匹配即排除
mpls te affinity exclude-any 0x0004 mask 0x0F
  → 排除 bit 2(卫星)为 1 的链路

三、显式路径(Explicit Path)

3.1 ERO 结构

ERO(Explicit Route Object)是构成显式路径的核心元素。每个子对象代表路径上的一个节点或一段链路。

ERO: | Subobject 1: 10.1.1.2 (Strict) | ← 严格下一跳,必须直连 | | --- | --- | | Subobject 2: 10.2.2.2 (Strict) | | | Subobject 3: 10.3.3.2 (Loose) | ← 松散,允许 IGP 自动填充 | | Subobject 4: 10.4.4.2 (Strict) | |

3.2 Strict vs Loose 对比

特性 Strict(严格) Loose(松散)
含义 下一跳必须是直接相连的邻居 下一跳可以是间接可达的节点
约束程度 精确到每跳 只约束穿越节点
路径控制 完全控制 部分控制
配置复杂度 高(需列出所有节点) 低(只列出关键节点)
网络变化适应性 差(拓扑变化需重新配置) 好(自动适应中间路径)

3.3 Strict 路径示例

网络拓扑:
  PE1 ── A ── B ── C ── D ── PE2
   │              │
   └── E ── F ────┘

精确控制路径为 PE1 → A → E → F → C → D → PE2:

explicit-path path-strict
 next-hop 10.1.1.2        # A(strict)
 next-hop 10.5.5.2        # E(strict)
 next-hop 10.6.6.2        # F(strict)
 next-hop 10.3.3.2        # C(strict)
 next-hop 10.4.4.2        # D(strict)
 next-hop 10.7.7.2        # PE2(strict)

3.4 Loose 路径示例

只需要经过节点 B 和 D,其余让 CSPF 自动计算:

explicit-path path-loose
 next-hop 10.2.2.2 loose     # B(松散,不要求直连)
 next-hop 10.4.4.2 loose     # D(松散)


CSPF 自动填充中间路径:
  PE1 → A → B → C → D → PE2(基于 Cost 最短路径)

如果 PE1-B 之间的拓扑变化,CSPF 自动重新计算 PE1→B 的路径:
  PE1 → ... (新路径) ... → B → C → D → PE2

四、路径优化策略

4.1 负载均衡

多条 TE 隧道在相同的 Ingress-Egress 之间建立,利用流量分担:

# 建立两条隧道,实现负载均衡
interface Tunnel1
 mpls te tunnel-id 101
 destination 2.2.2.2
 mpls te bandwidth 50000     # 50 Mbps
 mpls te path explicit-path path-a
 mpls te commit
!
interface Tunnel2
 mpls te tunnel-id 102
 destination 2.2.2.2
 mpls te bandwidth 50000     # 50 Mbps
 mpls te path explicit-path path-b
 mpls te commit

# 使用 ECMP 或策略路由引导流量到两条隧道
ip route-static 10.0.0.0 255.255.255.0 Tunnel1
ip route-static 10.0.0.0 255.255.255.0 Tunnel2  // ECMP

4.2 主备路径

interface Tunnel1
 mpls te tunnel-id 101
 destination 2.2.2.2
 mpls te bandwidth 100000
 mpls te path explicit-path primary    # 主路径
 mpls te path explicit-path backup    # 备路径
 mpls te commit
!
explicit-path primary
 next-hop 10.1.1.2
 next-hop 10.2.2.2
 next-hop 10.3.3.2
!
explicit-path backup
 next-hop 10.1.1.2
 next-hop 10.4.4.2                    # 旁路
 next-hop 10.5.5.2
 next-hop 10.3.3.2

当主路径故障时,自动切换到备路径。

4.3 路径锁定(Path Lock)

有时不希望已建立的路径随 TED 变化而重新优化:

interface Tunnel1
 mpls te path explicit-path locked primary   # 锁定路径
 mpls te commit

锁定后,即使 TED 发现了更优路径,CR-LSP 也不会自动切换。只有管理员手动干预时才会变更。


五、实际案例:跨域 TE 隧道路径规划

5.1 需求

域 A(Area 0)        域 B(Area 1)
  PE1 ── P1 ── ABR1 ── P3 ── PE2
   │            │       │
   └── P2 ──────┘       │
                        │
         ABR2 ── P4 ────┘

从 PE1 到 PE2 建立 TE 隧道: - 必须经过 ABR1(用于跨域) - 在域 B 内避开 P3(链路拥塞)

5.2 配置

# PE1
explicit-path cross-domain-path
 next-hop 10.1.1.2                   # P1(strict)
 next-hop 10.2.2.2 loose             # ABR1(loose,跨域只需指定边界节点)
 next-hop 10.4.4.2 strict            # P4(strict,避开 P3)
 next-hop 10.5.5.2 loose             # PE2(loose)
!
interface Tunnel1
 ip address unnumbered interface LoopBack0
 tunnel-protocol mpls te
 destination 2.2.2.2
 mpls te tunnel-id 200
 mpls te bandwidth 200000
 mpls te path explicit-path cross-domain-path
 mpls te commit

六、路径验证与排错

6.1 验证命令

# 查看隧道实际路径
<PE1> display mpls te lsp path

LSP Path Information:
  Tunnel Interface: Tunnel1
  Session ID: 200
  Hop Information:
    Hop 1: 10.1.1.2           (Strict)  ← 实际路径
    Hop 2: 10.2.2.2           (Strict)
    Hop 3: 10.4.4.2           (Strict)  ← 跳过了 P3
    Hop 4: 10.5.5.2           (Strict)

# 查看 CSPF 计算日志
<PE1> display mpls te cspf verbose

CSPF Calculation Result:
  Algorithm: Dynamic
  Constraints:
    Bandwidth: 200000 Kbps
    Include-Any: 0x1
    Exclude-Any: 0x0
  Path: PE1 → P1 → ABR1 → P4 → PE2
  Metric: 100
  Hops: 5

6.2 常见问题

问题 原因 排查方法
隧道建立失败 CSPF 无法找到满足约束的路径 display mpls te cspf failed
路径漂移 TED 变化导致 CSPF 重新计算 检查 IGP 稳定性
Strict 下一跳不直连 配置错误或拓扑变化 display ip routing-table 检查直连性
Loose 节点被绕过 Loose 节点不在 TED 中 检查 IGP 区域边界路由

七、总结

知识点 核心要点
CSPF 在 SPF 基础上添加带宽、亲和属性等约束条件
Strict 路径 精确到每一跳,完全控制,但灵活性差
Loose 路径 只指定关键节点,中间路径由 CSPF 自动计算
亲和属性 通过位掩码标识链路特性,用于约束路径选择
主备路径 故障时自动切换备路径
路径锁定 锁定已建立的路径,防止自动重优化

八、思考

  1. CSPF 和标准 SPF 的主要区别是什么?CSPF 多做了哪些工作?
  2. Strict 路径和 Loose 路径各自适用于什么场景?
  3. 亲和属性如何影响路径计算?Include-Any 和 Exclude-Any 有什么区别?
  4. 为什么需要路径锁定(Path Lock)功能?
  5. 多条 TE 隧道在 Ingress 和 Egress 之间如何实现负载均衡?

下篇预告:第161篇《MPLS TE FRR(快速重路由)》——MPLS TE 的保护机制,如何在故障发生后的 50ms 内完成流量切换。