第189篇:SRv6 网络编程——SID 的灵活编排
关键词
SRv6 网络编程、服务链、SFC、End.DX4/End.DT4/End.DX2、VPN over SRv6、可变 SID
一、什么是网络编程
1.1 概念
网络编程(Network Programming) 是 SRv6 最独特的能力——通过灵活组合不同的 SID 类型,实现各种网络服务:
传统网络:
每个网元独立配置功能
功能组合困难(如:路径选择 + VPN 封装 + 防火墙)
SRv6 网络编程:
将各种网络功能编码为 SID
通过编排 SID 序列实现业务链(Service Function Chaining)
就像编程一样组合功能模块
1.2 SID 作为功能指令
SRv6 的 SID 不仅标识位置,还标识功能:
一个 SID = 一个指令
SID FC00:100::1 → "终点处理"
SID FC00:100::2 → "从特定接口转发"
SID FC00:100::3 → "封装 VPN v4 并转发"
SID FC00:100::4 → "封装 L2 并转发"
...
二、VPN over SRv6
2.1 L3VPN over SRv6
SRv6 原生支持 L3VPN,通过 End.DT4/End.DT6 SID 实现:
PE1(Ingress):
① 收到 CE1 的 IP 包(目的=CE2)
② 查 VRF 路由 → 下一跳 PE2
③ 封装 SRH:[End.DT4 SID of PE2]
④ IPv6 目的地址 = PE2 的 End.DT4 SID
⑤ 发送到 SRv6 网络
P 路由器:
⑥ 按 IPv6 最短路径转发(不感知 VPN)
PE2(Egress):
⑦ 目的 IP = 本地 End.DT4 SID
⑧ End.DT4 功能:解封装,查 VRF 表
⑨ 转发到 CE2
End.DT4 的功能: - 去掉 SRv6 封装 - 恢复原始 IPv4 包 - 根据 VRF(由 SID 中的 Function 关联)查表转发
# PE2 配置
segment-routing ipv6
locator VPN-LOCATOR ipv6-prefix FC00:200:: 48
opcode 100 end-dt4 vpn-instance VRF-A # End.DT4 SID
2.2 L2VPN over SRv6
通过 End.DX2/End.DT2 SID 实现 L2VPN(类似 VPLS):
End.DX2(Layer-2 Cross Connect):
- 去掉 SRv6 封装
- 直接桥接到指定 AC(Attachment Circuit)
- 类似 VPWS 点对点
End.DT2(Layer-2 Table):
- 去掉 SRv6 封装
- 查 Bridge Domain MAC 表
- 类似 VPLS 多点
三、业务链(Service Function Chaining)
3.1 概念
通过编排 SID 序列,让流量依次经过多个服务节点:
用户流量 → 路径控制 → 防火墙 → DPI → NAT → 互联网
传统方式:
每台设备独立配置策略路由
变更时逐台修改
SRv6 方式:
Segment List = [路径SID, FW SID, DPI SID, NAT SID, 出口SID]
流量自动按序经过所有服务节点
3.2 配置示例
防火墙、DPI、NAT 设备都支持 SRv6:
Segment List = [
FC00:10::10, # 路径控制:走低延迟链路
FC00:20::1, # 防火墙 SID(End SID)
FC00:30::1, # DPI SID(End SID)
FC00:40::1, # NAT SID(End SID)
FC00:50::1 # 出口 PE SID
]
Ingress PE 压入完整的 Segment List
流量自动经过防火墙 → DPI → NAT → 出口
中间不需要 PBR!
3.3 业务链的优势
| 优势 | 说明 |
|---|---|
| 配置简化 | 在头端一次性定义完整路径 |
| 变更灵活 | 修改 Segment List 即可改变业务链 |
| 无中间配置 | 防火墙等设备只需配置 SRv6,不需要 PBR |
| 状态无关 | 中间节点无业务链状态 |
| 多租户 | 不同租户可以有不同业务链 |
四、SRv6 与 Controller 的集成
4.1 控制器编排
在大型网络中,SRv6 网络编程通常由控制器统一编排:
┌────────┐
│ Controller │
└────┬────┘
│ 下发 SRv6 Policy
│
PE1 PE2 FW/IPS DPI PE3
控制器知道: - 网络拓扑(所有节点和 SID) - 服务设备位置(FW、DPI 的 SID) - SLA 要求(延迟、带宽) - 客户需求(VPN、业务链)
控制器计算最优 Segment List → 下发到 Ingress PE
4.2 自动化业务部署
# 控制器通过 NETCONF/YANG 下发 SRv6 Policy
<?xml version="1.0"?>
<config>
<sr-policy xmlns="urn:ietf:params:xml:ns:yang:ietf-sr-policy">
<policy>
<name>VOICE_SERVICE_CHAIN</name>
<color>100</color>
<endpoint>3.3.3.3</endpoint>
<candidate-paths>
<candidate-path>
<preference>200</preference>
<segment-list>
<sid>FC00:20::1</sid> <!-- Firewall -->
<sid>FC00:30::1</sid> <!-- DPI -->
<sid>FC00:50::1</sid> <!-- Egress PE -->
</segment-list>
</candidate-path>
</candidate-paths>
</policy>
</sr-policy>
</config>
五、SRv6 网络编程能力总结
5.1 功能 SID 全景
| SID 类型 | 功能 | 应用场景 |
|---|---|---|
| End | 终点处理 | 基本转发、路径端点 |
| End.X | 指定出接口 | TE 路径控制 |
| End.DX4 | 解封装 IPv4 | L3VPNv4 |
| End.DT4 | 查 VRF IPv4 表 | L3VPNv4(多 VRF) |
| End.DX6 | 解封装 IPv6 | L3VPNv6 |
| End.DT6 | 查 VRF IPv6 表 | L3VPNv6(多 VRF) |
| End.DX2 | 解封装 L2 | L2VPN 点对点 |
| End.DT2 | 查 BD L2 表 | L2VPN 多点 |
| End.B6 | 插入 SRv6 封装 | 级联 SRv6 域 |
| End.B6.Encaps | 封装并插入 | 跨域 SRv6 |
5.2 编排示例
不同类型的业务需求 -> SID 编排:
1. 跨域 L3VPN:
Segment List = [B6.Encaps, Inter-AS SID, End.DT4]
2. 安全业务链:
Segment List = [End.X(TE路径), FW SID, DPI SID, End.DT4]
3. 低延迟 VPN:
Segment List = [End.X(光纤链路), End.DT4]
六、SRv6 网络编程 vs 传统网络
| 对比 | 传统网络 | SRv6 网络编程 |
|---|---|---|
| 功能部署 | 逐台设备配置 | 头端 SID 编排 |
| 业务变更 | 修改多台设备 | 修改 Segment List |
| 服务链 | 策略路由 + VRF | SID 序列编排 |
| VPN | 单独的 MPLS/VXLAN | End.DX/DT SID |
| 状态 | 所有设备有状态 | 仅头端有状态 |
| 可编程性 | 低 | 高 |
七、总结
| 知识点 | 核心要点 |
|---|---|
| 网络编程 | 通过组合不同 SID 实现网络功能 |
| VPN over SRv6 | End.DT4/DT6/DX4/DX6/DX2/DT2 SID |
| 业务链 | SID 序列编排,流量依次经过服务节点 |
| 控制器 | 统一编排和下发 SRv6 Policy |
| 无状态 | 中间节点不维护业务链状态 |
八、思考
- SRv6 的"网络编程"能力指的是什么?
- End.DT4 和 End.DX4 在 L3VPN 中的区别是什么?
- SRv6 业务链(SFC)和传统 PBR 实现服务链有什么不同?
- 控制器在 SRv6 网络编程中扮演什么角色?
- 如果要实现"低延迟路径 + 防火墙 + L3VPN",Segment List 应该如何编排?
下篇预告:第190篇《SRv6 与 EVPN 的深度融合》——SRv6 和 EVPN 的组合,如何构建新一代的端到端网络方案。