第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 自动计算 |
| 亲和属性 | 通过位掩码标识链路特性,用于约束路径选择 |
| 主备路径 | 故障时自动切换备路径 |
| 路径锁定 | 锁定已建立的路径,防止自动重优化 |
八、思考
- CSPF 和标准 SPF 的主要区别是什么?CSPF 多做了哪些工作?
- Strict 路径和 Loose 路径各自适用于什么场景?
- 亲和属性如何影响路径计算?Include-Any 和 Exclude-Any 有什么区别?
- 为什么需要路径锁定(Path Lock)功能?
- 多条 TE 隧道在 Ingress 和 Egress 之间如何实现负载均衡?
下篇预告:第161篇《MPLS TE FRR(快速重路由)》——MPLS TE 的保护机制,如何在故障发生后的 50ms 内完成流量切换。