第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
无状态 中间节点不维护业务链状态

八、思考

  1. SRv6 的"网络编程"能力指的是什么?
  2. End.DT4 和 End.DX4 在 L3VPN 中的区别是什么?
  3. SRv6 业务链(SFC)和传统 PBR 实现服务链有什么不同?
  4. 控制器在 SRv6 网络编程中扮演什么角色?
  5. 如果要实现"低延迟路径 + 防火墙 + L3VPN",Segment List 应该如何编排?

下篇预告:第190篇《SRv6 与 EVPN 的深度融合》——SRv6 和 EVPN 的组合,如何构建新一代的端到端网络方案。