第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 互联网访问 成本最优路径

Color 的含义 - 图示

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 触发流程

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 标签,表达能力更强

思考

  1. Color 是 Head-End 局部有效的。如果两台不同的 Head-End 各自配置了 Color=10001 的 TE Policy,但它们指向不同的 Endpoint,是否会产生冲突?
  2. SRv6 TE Policy 的显式路径中,nexthop 可以是接口 IP 地址也可以是 Node-SID。两者在转发层面有什么区别?
  3. Auto Path 使用 CSPF 计算。如果 CSPF 计算出的路径与 SR-BE 最短路径相同,SRv6 TE Policy 还有意义吗?

下篇预告:第189篇:SRv6 网络编程:SID 的灵活编排