第188篇:SRv6 TE Policy 与 Color 选路
关键词:SRv6 TE Policy、Color、Endpoint、Candidate Path、CSPF、显式路径、绑定的SID
一、引言
SRv6 TE Policy 是 SRv6 网络中实现流量工程的核心机制。与 SR-MPLS TE Policy 类似,SRv6 TE Policy 通过 Color 标识流量类型、通过 Endpoint 指定目的地、通过 Candidate Path 定义候选路径,实现对流量的精细化路径控制。但 SRv6 TE Policy 具有更强的灵活性——由于 SID 本身就是 IPv6 地址,TE Policy 可以直接嵌入网络编程函数,实现路径控制与服务链编排的融合。
二、核心概念
2.1 SRv6 TE Policy 三元组
| 要素 | 说明 | 示例值 |
|---|---|---|
| Color | 流量分类标识(局部有效) | 10001(语音)、10002(视频) |
| Endpoint | TE 策略的目的端点 | 2001:DB8:3000::1(出口节点 SID) |
| Candidate Path | 候选路径集合 | 显式路径、自动路径、动态路径 |
2.2 Color 的含义
Color 是 SRv6 TE Policy 中最重要的概念之一,它标识"流量类型"而非路径本身:
| Color 值 | 业务含义 | 路径策略 |
|---|---|---|
| 10001 | 语音业务 | 低时延路径(最短跳数) |
| 10002 | 视频会议 | 高带宽路径(最小拥塞) |
| 10003 | 文件传输 | 最大带宽路径 |
| 10004 | 灾备流量 | 地理多样性路径 |
| 10005 | 互联网访问 | 成本最优路径 |

2.3 Candidate Path 类型
| 类型 | 说明 | 优先级 |
|---|---|---|
| Explicit Path(显式路径) | 管理员手动指定经过的节点/链路 | 最高(admin-distance=10) |
| Auto Path(自动路径) | 由 CSPF 算法自动计算 | 中等(admin-distance=20) |
| Dynamic Path(动态路径) | 由 PCE(路径计算元素)动态计算 | 最低(admin-distance=30) |
2.4 Binding SID(绑定 SID)
Binding SID 是 SRv6 TE Policy 在数据面使用的 SID,它将一组业务流量绑定到特定的 TE Policy 上:
| 概念 | 说明 |
|---|---|
| Binding SID | 分配给 TE Policy 的 SID,业务流量命中后走 TE 路径 |
| Tunnel-Binding SID | 隧道绑定的 SID,用于 BGP 路由映射 |
| SID 来源 | 从 Endpoint Locator 中分配 |
三、技术细节
3.1 SRv6 TE Policy 触发流程

3.2 SRv6 TE 路径切换机制
| 触发条件 | 切换行为 |
|---|---|
| 链路带宽不足 | CSPF 重新计算,切换到低负载路径 |
| 链路故障 | 删除受影响路径,激活次优候选路径 |
| 新链路加入 | 重新评估所有候选路径 |
| Policy 更新 | 删除旧路径,重新计算新路径 |
3.3 CSPF 约束条件(SRv6)
| 约束类型 | SRv6 实现 | 说明 |
|---|---|---|
| 带宽约束 | 接口剩余带宽 ≥ 请求带宽 | 需要 IGP TE 数据库支持 |
| Affinity 约束 | 链路颜色标记匹配/排除 | TE Affinity 位图匹配 |
| 显式路径 | 必须经过指定 SID | 严格或松散模式 |
| Max Latency | 路径最大时延 ≤ 阈值 | 需要 TE 度量收集 |
3.4 SRv6 TE Policy 与 SR-MPLS TE Policy 对比
| 维度 | SR-MPLS TE | SRv6 TE |
|---|---|---|
| SID 编码 | MPLS 标签(20 位) | IPv6 地址(128 位) |
| Segment List | MPLS 标签栈 | SRH 中的 SID 列表 |
| Binding | Binding Label | Binding SID(IPv6 地址) |
| 路径表达 | 有限(仅转发路径) | 丰富(SID 可嵌入函数) |
| 服务链 | 需额外机制 | 原生支持(SID = 函数) |
四、实战配置/案例分析
4.1 SRv6 TE Policy 完整配置
# ========== SRv6 TE Policy配置(RouterA→RouterD) ==========
[ SRv6-RouterA ] srv6
# --- 创建TE Policy ---
[ SRv6-RouterA ] srv6 te-policy color 10001 endpoint 2001:DB8:3000::1
[ SRv6-RouterA-srv6-te-policy-10001 ] color 10001
[ SRv6-RouterA-srv6-te-policy-10001 ] endpoint 2001:DB8:3000::1
# --- 候选路径1: 显式路径 ---
[ SRv6-RouterA-srv6-te-policy-10001 ] candidate-path 10
[ SRv6-RouterA-srv6-te-policy-10001-cpath-10 ] admin-distance 10
[ SRv6-RouterA-srv6-te-policy-10001-cpath-10 ] explicit-path
[ SRv6-RouterA-srv6-te-policy-10001-cpath-10-explicit-path ] \
nexthop 2001:DB8:FEED::2
# 第一跳: RouterB的接口IPv6地址
[ SRv6-RouterA-srv6-te-policy-10001-cpath-10-explicit-path ] \
nexthop 2001:DB8:1000::2
# 经过: RouterB的Node-SID
[ SRv6-RouterA-srv6-te-policy-10001-cpath-10-explicit-path ] \
nexthop 2001:DB8:1000::3
# 经过: RouterC的Node-SID
[ SRv6-RouterA-srv6-te-policy-10001-cpath-10-explicit-path ] \
nexthop 2001:DB8:3000::1
# 终点: RouterD的Node-SID
# --- 候选路径2: 自动路径(备份) ---
[ SRv6-RouterA-srv6-te-policy-10001 ] candidate-path 20
[ SRv6-RouterA-srv6-te-policy-10001-cpath-20 ] admin-distance 20
[ SRv6-RouterA-srv6-te-policy-10001-cpath-20 ] auto-path
# CSPF自动计算,带宽约束>=100Mbps
[ SRv6-RouterA-srv6-te-policy-10001-cpath-20 ] bandwidth 100000
# --- 激活TE Policy ---
[ SRv6-RouterA-srv6-te-policy-10001 ] commit
4.2 业务流量绑定到 TE Policy
# ========== 使用ACL将业务流量映射到TE Policy ==========
[ SRv6-RouterA ] acl ipv6 number 6001
[ SRv6-RouterA-acl6-ipv6-6001 ] rule 5 permit ipv6 destination 2001:DB8:CAFE::/48
# 匹配前往客户网的流量
# --- 策略路由绑定 ---
[ SRv6-RouterA ] traffic-policy
[ SRv6-RouterA-traffic-policy ] classifier voice-class if-match acl 6001
[ SRv6-RouterA-traffic-policy ] behavior srv6-te
[ SRv6-RouterA-traffic-policy-behavior-srv6-te ] \
apply srv6-te-policy color 10001 endpoint 2001:DB8:3000::1
# --- BGP路由绑定(更常用的方式) ---
[ SRv6-RouterA ] bgp 65001
[ SRv6-RouterA-bgp ] ipv6 unicast-ui
[ SRv6-RouterA-bgp-af ] import-route direct
[ SRv6-RouterA-bgp-af ] route-policy SR-TE import
# 在Route-Policy中绑定TE Policy
# --- Route-Policy配置 ---
[ SRv6-RouterA ] route-policy SR-TE permit node 10
[ SRv6-RouterA-route-policy-SR-TE-10 ] if-match acl 6001
[ SRv6-RouterA-route-policy-SR-TE-10 ] apply srv6-te-policy color 10001
4.3 故障排查:SRv6 TE Policy 路径未激活
故障场景:SRv6 TE Policy 配置完成后,显式路径和自动路径均处于 Unsatisfied 状态。
# Step 1: 检查TE Policy状态
<SRv6-RouterA> display srv6 te-policy
Color: 10001
Endpoint: 2001:DB8:3000::1
State: Inactive
Active-Path: None
# Step 2: 检查显式路径
<SRv6-RouterA> display srv6 te-policy candidate-path 10
Type: Explicit
State: Unsatisfied
Segment-List:
2001:DB8:FEED::2 -> Reachable
2001:DB8:1000::2 -> Reachable
2001:DB8:1000::3 -> Unreachable
2001:DB8:3000::1 -> Unreachable
# RouterC和RouterD的SID不可达!
# Step 3: 检查IPv6路由
<SRv6-RouterA> display ipv6 routing-table 2001:DB8:1000::3
# 无路由!
# 根因: RouterC的SID前缀未通过IS-IS通告
# Step 4: 检查IS-IS SRv6通告
<SRv6-RouterC> display isis lsdb
# 检查LSP中是否包含SRv6 Locator TLV
# 发现RouterC未配置IS-IS SRv6通告
# Step 5: 修正RouterC配置
[SRv6-RouterC] isis 1
[SRv6-RouterC-isis1] srv6
[SRv6-RouterC-isis1] srv6 locator NODE-C advertise
# 启用IS-IS SRv6 Locator通告
# Step 6: 验证SID可达性
<SRv6-RouterA> display ipv6 routing-table 2001:DB8:1000::3
Destination: 2001:DB8:1000::3/128
Protocol: IS-IS
NextHop: 2001:DB8:FEED::3
# Step 7: 验证TE Policy
<SRv6-RouterA> display srv6 te-policy
Color: 10001
State: Active
Active-Path: 10(Explicit)
Segment-List: [2001:DB8:1000::2, 2001:DB8:1000::3, 2001:DB8:3000::1]
# TE Policy激活,流量沿显式路径转发
五、总结
| 项目 | 要点 |
|---|---|
| TE Policy 三元组 | Color(流量分类)+ Endpoint(目的端点)+ Candidate Path(候选路径) |
| Color 局部性 | Color 在 Head-End 局部有效,不同 Head-End 可用相同 Color |
| 候选路径优先级 | 显式路径 > 自动路径 > 动态路径(admin-distance 越小优先级越高) |
| Binding SID | 将业务流量绑定到 TE Policy 的隧道 SID |
| CSPF 计算 | Auto Path 由 CSPF 根据约束条件自动计算最优路径 |
| 与 SR-MPLS 对比 | SRv6 TE 使用 IPv6 SID 而非 MPLS 标签,表达能力更强 |
思考
- Color 是 Head-End 局部有效的。如果两台不同的 Head-End 各自配置了 Color=10001 的 TE Policy,但它们指向不同的 Endpoint,是否会产生冲突?
- SRv6 TE Policy 的显式路径中,nexthop 可以是接口 IP 地址也可以是 Node-SID。两者在转发层面有什么区别?
- Auto Path 使用 CSPF 计算。如果 CSPF 计算出的路径与 SR-BE 最短路径相同,SRv6 TE Policy 还有意义吗?
下篇预告:第189篇:SRv6 网络编程:SID 的灵活编排