跳到主要内容

SRv6

源路由如何把完整转发路径编码进 IPv6 报文头

核心要点

  • 入口节点写完整 SID list 进 IPv6 SRH,中间路由器只查"下一跳指针"
  • 决策位置在入口 + 控制面,是 ECMP "每跳分布式哈希" 的相反极端
  • SID 不仅编码位置,还可编码动作(VPN、跨连接、解封装)
  • Microsoft Fairwater AI 集群用 static SRv6 + Multiplane + MRC 协同

SRv6(Segment Routing over IPv6,RFC 8754)是将"完整路径指令"编码进 IPv6 报文头的源路由方案[1]。入口节点把中间节点和操作打包成 SID(Segment Identifier)list 写入 IPv6 Segment Routing Header(SRH),中间路由器只读"下一跳指针"按 SID 转发。SRv6 是 3.8 KSP 中"源路由模型"的现代标准实现。

SRv6 与其它路由方案的决策位置差在哪?

与 ECMP / AR / DQPLB / PLB 的根本区别

路由方案决策位置路径完整性控制粒度
ECMP每跳哈希入口选定,逐跳分布式确认流级别
AR每跳本地每跳重选报文 / flowlet
DQPLBhost 通信库沿用 ECMP 的多路径QP / segment
PLBhost transport改 flow label 触发 ECMP 重哈希连接
SRv6入口节点 + 控制面完整路径在报文头中编码任意(按 SID list 粒度)
TE-CCL离线控制面完整路径离线求解chunk

@tbl-route-srv6-decision-position SRv6 在路由方案决策位置中的定位

SRv6 的核心差异:中间路由器不做选路决策——它们只查"SRH 里指针指向哪个 SID",按 SID 转发。这把 ECMP 在每条链路上的"哈希分散"完全替换为入口编程的"显式指定"。

源路由能解决什么、不能解决什么

能解决

  • 明确指定流量走特定路径(绕开热点、走特定 trust domain、走专用低延迟链路)
  • 提前编程故障保护备路(不依赖 IGP 收敛)
  • 跨域路径拼接(先内部 IGP,再骨干 SR,再目的域 IGP)
  • 网络切片 / VPN(每个 SID 编码租户/服务身份)

不能解决

  • 不能替代拥塞控制(SRv6 决定走哪条路,仍需要 BBR/DCQCN/Bolt 决定多快发)
  • 不能替代实时拥塞均衡(静态编程的路径不响应运行时拥塞,需要与 PLB 等动态机制配合)

SRv6 数据平面如何编码完整路径?

Segment Routing Header (SRH)

SRH 是一种 IPv6 Routing Extension Header(Routing Type = 4),由入口节点插入 IPv6 报文头之后。其结构(简化):

+-----------------------------------+
| IPv6 Header |
| Destination = Active SID |
+-----------------------------------+
| SRH |
| Next Header / Hdr Ext Len |
| Routing Type = 4 |
| Segments Left | <- 剩余 SID 数(指针)
| Last Entry |
| Flags / Tag |
| Segment List[0] (最末跳) |
| Segment List[1] |
| ... |
| Segment List[N-1] (起点的下一跳) |
| (Optional TLVs) |
+-----------------------------------+
| Payload |
+-----------------------------------+

关键字段:

  • IPv6 Destination Address:当前 active segment 的 SID
  • Segments Left:指向 Segment List 中的下一个 SID(向 index 0 方向递减)
  • Segment List[]:完整 SID list,逆序存储(List[0] 是终点,List[N-1] 是第一个中间跳)

Active Segment 推进机制

每经过一个 SR-aware 路由器,SID 切换流程:

当前节点 = SRH.Segment_List[Segments_Left]
= IPv6.Destination

1. SR-aware 路由器收到报文,识别 Destination 是自己的 SID
2. Segments_Left -= 1
3. 把 Segment_List[Segments_Left] 复制到 IPv6.Destination
4. 按新 Destination 转发(用普通 IPv6 路由表)

中间路由器不需要解析整个 SID list,只需要操作 Segments Left 指针和 Destination 字段——这是 SRv6 在数据平面保持高速的关键。

一个简单示例

假设入口节点 A 想让报文经过 R1 → R2 → R3 → 终点 B,则插入 SRH:

IPv6.Destination = SID(R1)
SRH.Segment_List = [ SID(B), SID(R3), SID(R2), SID(R1) ]
SRH.Segments_Left = 3
  • A → R1:Destination=SID(R1),按普通 IPv6 路由送达 R1
  • R1 处理:Segments_Left = 2,Destination=SID(R2)
  • R1 → R2:按 IPv6 路由送达 R2
  • R2 → R3 → B:同理

到达终点时 Segments_Left = 0,最终 Destination 是 SID(B) = B 的某个本地 SID(可能携带额外动作,例如解封装)。

SID 编码开销

每个 SID 是 128 bit IPv6 地址,加上 SRH 固定 8 字节 header,总开销:

$$\begin{equation} \text{SRH 开销} = 8 + 16 N_{\text{SID}} \text{ 字节} \label{eq:route-srv6-srh-overhead} \end{equation}$$

例如 4 跳 SID list = 8 + 64 = 72 字节。对小 RDMA 报文(1.5 KB MTU)开销约 5%,对 jumbo frame(9 KB)开销 < 1%。

Compressed SID(C-SID,RFC 9800[2];工业语境中也称 uSID / microSID) 通过将多个 SID 打包进单个 128 bit container 缓解开销。典型 C-SID 长度 16 bit,单个 container 可容纳的 SID 数取决于 Locator-Block (LB) 长度(RFC 9800 §6.1 要求 LB > 0)——RFC 9800 §3 标定示例为 48-bit LB + 16-bit CSID,单 container 可装 5 个 SID;更短 LB 时上限可达 6 个。Microsoft / Cisco / Huawei 等主流厂商已支持。

SID 不只是地址,还能编码什么动作?

SRv6 的 SID 不只是"目的地址",还可以编码"到达此地后做什么"[3]。常见类型:

SID 类型含义用途
EndEndpoint:到达节点继续下一 SID基础转发
End.XEndpoint + L3 Cross-connect:从指定接口转发链路保护、强制走特定链路
End.TEndpoint + Table lookup:在指定路由表查询多 VRF 场景
End.DT4 / End.DT6Decap + Table lookup:解封装后查 VPN 表L3 VPN endpoint
End.DX4 / End.DX6Decap + Cross-connect:解封装后向指定 nexthopPE-CE 直连
End.B6.Encaps(常简称 End.B6)Endpoint + Binding SID:跳到另一个 SR policy(带封装),另有 End.B6.Encaps.Red 变体SR 策略嵌套
H.EncapsHeadend Encapsulation:入口节点封装 SRv6入口侧 SR policy 应用

@tbl-route-srv6-sid-types 常见 SRv6 SID 类型

End 系列是基础转发,DT/DX 系列实现 VPN endpoint,H 系列是入口侧动作。这套 SID functional taxonomy 让 SRv6 不仅是"路径编程",也是"网络功能编程"——一个 SID 可以同时编码身份、位置、动作。

SR-MPLS 与 SRv6 应该怎么选?

Segment Routing 有两种数据平面实现:SR-MPLS 和 SRv6。它们共享同一个控制面(PCEP / BGP-LS / IGP 扩展),但数据平面完全不同:

维度SR-MPLSSRv6
数据平面MPLS label stackIPv6 SRH
单 SID 大小20 bit (MPLS label)128 bit (IPv6) / 16 bit (C-SID)
头部开销4 bytes per label8 bytes SRH + 16 bytes per SID
需要 MPLS data plane否(原生 IPv6)
需要 IPv6
SID functional 表达力有限(仅路径)强(路径 + 动作)
跨 AS 互通需要 MPLS 互联普通 IPv6 路由可达即可
部署门槛已有 MPLS 网络平滑过渡需要支持 SRv6 的 ASIC + IPv6 全栈

@tbl-route-srv6-vs-mpls SR-MPLS 与 SRv6 数据平面对比

选型逻辑

  • 已有 MPLS 网络(运营商骨干)+ 渐进升级:SR-MPLS
  • 新建数据中心 + 全 IPv6:SRv6
  • 跨域 / 跨 AS 场景:SRv6(无 MPLS 互联依赖)
  • 需要丰富的 SID functional 编码(VPN、网络切片):SRv6

Microsoft Fairwater 如何用 static SRv6 撑起 AI 集群?

Microsoft 2025 年公开宣布 SRv6 作为 Fairwater AI 超级数据中心的网络主干技术[4][5]。Fairwater 是 Microsoft 在 Wisconsin / Atlanta 等地建设的多个相同结构的 AI 数据中心,通过 AI WAN 互联形成"分布式 AI 超级工厂"。

静态 SRv6 部署

Microsoft 采用 static SRv6——SID list 在控制面预先编程到入口节点,不在每条流到达时动态计算。这与传统 SRv6 用法(PCE 动态计算路径)的区别:

维度Dynamic SRv6Static SRv6(Microsoft Fairwater)
路径计算时机流建立时 / 拥塞触发部署时 / 拓扑变更时
控制面负载高(频繁求解)低(一次性下发)
适用场景通用 IP 流量AI 训练(流量矩阵规律)
故障响应重新计算预编程备路

@tbl-route-srv6-static-vs-dynamic 静态 vs 动态 SRv6

静态 SRv6 对 AI 训练特别合适:训练流量矩阵高度规律,最优路径分配可以离线一次性求解——与 TE-CCL 的离线思路一脉相承,但 TE-CCL 是 collective comm chunk 级,静态 SRv6 是 IP 流级别。

MRC + Multiplane + Static SRv6 三层协同

Microsoft 公开的 Fairwater scale-out 网络 resilience strategy 由三层协同组成[6],static SRv6 只是其中一层:

层级机制解决问题
Transport 层MRC(Multipath Reliable Connection)在多条并行路径上做可靠传输,单路径故障不中断
拓扑层Multiplane 拓扑提供多条物理独立的并行路径(与 DQPLB §Rail-Optimized plane 类似)
Forwarding 层Static SRv6为 MRC 提供确定性、预编程的路径基底

@tbl-route-srv6-fairwater-stack Fairwater 网络容错的三层协同

SRv6 在这个组合中的角色是为上层 MRC 提供"我可以指定走哪几条物理独立路径"的能力——而不是故障检测和重传本身。三者协同的目标是在网络故障条件下仍维持大规模同步训练的进度。

具体而言,static SRv6 提供的能力包括:

  • 在每个 plane 内预编程"主路径 + 备路径"两组 SID list
  • 跨 plane 用不同 SID list 实现物理路径分散
  • 路径在控制面一次性下发,运行时不重新计算

AI WAN:连接多个 Fairwater

Fairwater 不是单数据中心,而是多个地理分布的相同结构数据中心,通过 AI WAN 互联。AI WAN 的核心特征:

  • 跨 facility 的 SRv6 隧道
  • 全局流量工程:训练 job 的不同 stage 可以跨 facility 编排
  • 路径编程在控制面预先计算(与 TE-CCL 思路类似但作用于 IP 流量层)

SRv6 与其它路由方案如何协同?

层级机制角色
入口控制面SRv6 SID list 编程决定流量的完整路径
host transportPLB / PRR拥塞 / 故障触发 IPv6 flow label 重哈希(仅在 SRv6 SID list 内的 ECMP 段生效)
host transportBolt / Swift / DCTCP调节发送速率
交换机 ASICECMP(含 flow label)在 SRv6 SID 段间提供等价路径分散

@tbl-route-srv6-with-others SRv6 与其它路由方案的协同

关键点:SRv6 不取代 ECMP——SRv6 指定"经过哪些中间节点",但两个相邻 SID 之间仍可能存在多条等价 IP 路径,由 ECMP 哈希散列。这种"显式指定主路径 + 局部 ECMP 散列"是生产部署的常见组合。

SRv6 综合性能特性?

指标SRv6TE-CCL(对照)DQPLB(对照)
路径控制粒度任意(SID list 编程)chunk 级QP 级
拥塞响应单独无(静态部署)或慢(PCE 重算);与 PLB 协同后获得 RTT 级响应
故障响应快(预编程备路)
拓扑泛化极强(任意 IPv6 网络)中(MILP 求解器限制)中(依赖 Rail-Optimized)
报文开销中(每跳 16 字节 SID)00
部署门槛中(需 SRv6 ASIC + IPv6)高(求解器)低(仅通信库)

@tbl-route-srv6-perf SRv6 性能特性对比

何时该用 SRv6,何时不该?

适用场景

  • 新建数据中心 + 全 IPv6 栈
  • 多数据中心 WAN 互联(典型 Microsoft AI WAN)
  • 大规模 AI 集群(流量矩阵规律 + 需要故障容量管理)
  • 网络切片 / VPN(多租户 + 服务隔离)
  • 跨 AS / 跨域路径编程(避免 MPLS 互联复杂度)

局限

  • 依赖 SRv6 数据平面:需要交换机 ASIC 支持 SRv6(现代 Broadcom Tomahawk / Trident / Cisco Silicon One / Nokia FP5 等已支持,但老旧设备无法升级)
  • 报文开销显著:4 跳 SID list 增加 ~70 字节,对小报文影响明显(C-SID 缓解但未消除)
  • 静态 SRv6 不响应运行时拥塞:需要与 PLB 等动态机制协同
  • 控制面复杂度高:大规模生产部署需要 PCE / SDN 控制器 + IGP/BGP-LS 拓扑收集
  • 故障切换不是无缝:备路切换仍需 host 检测故障(依赖 PLB/PRR)

选型建议

  • Microsoft / Cisco / Huawei 系生态 + 全 IPv6 + 高路径编程需求:SRv6 是当前最佳选择
  • 已有 MPLS 网络且不计划全 IPv6:SR-MPLS 更平滑
  • 流量矩阵高度规律的 AI 训练:静态 SRv6(Fairwater 模式)+ TE-CCL 协同
  • 单纯解决 collective comm 散列:DQPLB + E-ECMP 已足够,无需 SRv6
  • 需要快速故障恢复(不只是拥塞):SRv6 预编程备路 + PRR

Takeaway

知识点核心结论
决策位置入口节点 + 控制面写完整 SID list,中间路由器只查指针
数据平面SRH 携带 SID list(逆序),每跳推 Segments Left 指针
SID 表达力End / End.X / End.DT / End.B6 等编码身份、位置、动作
报文开销$8 + 16 N_{\text{SID}}$ 字节;C-SID 把单 SID 压到 16 bit 缓解
SR-MPLS vs SRv6MPLS label stack vs IPv6 SRH;前者过渡平滑,后者跨域 / 全 IPv6 强
Microsoft Fairwaterstatic SRv6(预编程)+ Multiplane + MRC 三层协同支撑 AI 训练
协同与 PLB/PRR 配合获得 RTT 级动态响应;本身不替代拥塞控制

参考资料

  1. Filsfils et al., IPv6 Segment Routing Header (SRH), RFC 8754, IETF 2020. https://www.rfc-editor.org/rfc/rfc8754
  2. Cheng et al., Compressed SRv6 Segment List Encoding, RFC 9800, IETF 2024. https://www.rfc-editor.org/rfc/rfc9800
  3. Filsfils et al., SRv6 Network Programming, RFC 8986, IETF 2021. https://www.rfc-editor.org/rfc/rfc8986
  4. Microsoft, Inside the world's most powerful AI datacenter, 2025-09. https://blogs.microsoft.com/blog/2025/09/18/inside-the-worlds-most-powerful-ai-datacenter/
  5. segment-routing.net, Microsoft: SRv6 powers the largest AI DC in the world, 2025-10. https://www.segment-routing.net/news/2025-10-13-Microsoft-SRv6-powers-the-largest-AI-DC-in-the-world/
  6. Microsoft Tech Community, Building resilient networks for AI supercomputers, 2026. https://techcommunity.microsoft.com/blog/azurehighperformancecomputingblog/building-resilient-networks-for-ai-supercomputers/4516919

延伸阅读