CISCO TECHNICAL DEEP-DIVE · 2026

从源路由的复仇
到 IP 网络的指令集革命

一份用苏格拉底提问法+ 第一性原理解剖 SRv6 的硬核手册。 从状态机灾难、ASIC 微架构到 uSID 压缩魔术,我们拒绝浅尝辄止——直达底层。

📚 6 大模块 🔬 第一性原理推导 💬 苏格拉底式追问 ⚙️ 直达 ASIC 层
MODULE 1 · ORIGINS

第一性原理与 SRv6 的起源

①·起源 (当前) ②·数据面 ③·控制面 ④·指令集 ⑤·进化 ⑥·应用

在你了解 SRv6 的任何细节之前,我们必须先回答一个最根本的问题: 为什么人类需要在 IPv6 已经"够用"的情况下,再造一个 SRv6? 这不是一次平庸的协议升级,而是一次对网络架构哲学的彻底反叛

§ 1.1 第一问:网络的本质,到底是什么?

SOCRATIC QUESTION #1

"你认为,IP 网络一定要是逐跳路由(Hop-by-Hop Routing)的吗?"

请暂停 30 秒,认真思考这个问题。如果你的答案是"是"——那是因为你被 30 年的 Internet 训练出了一种思维定势。 如果你的答案是"不一定"——那么恭喜,你已经站在了源路由(Source Routing)哲学的门槛上。

FIRST PRINCIPLE

让我们抛开一切既有协议,回到最朴素的问题:"把数据从 A 送到 Z,本质上需要什么?"

答案只有一个——路径决策(Path Decision)。 决策可以发生在两个地方:

  1. 分布式决策(Hop-by-Hop):每一台中间路由器,独立查表、独立决定下一跳。这是 Internet 的默认范式。
  2. 集中式决策(Source Routing):起点(源节点)一次性决定整条路径,把"指令清单"写进数据包,沿途节点只是"忠实执行"。

这两种范式没有谁绝对优劣——但在不同的时代、面对不同的需求,最优解是不同的。 SRv6 的诞生,正是因为时代变了。

类比 · 出租车 vs Google Maps 导航

逐跳路由,就像你在 1990 年代打出租车——你只告诉司机"我要去机场",至于走哪条路,每个路口该左转还是右转,全凭司机的经验和当时的路况判断。每个司机的决策都是局部最优,但你没法保证全局是最快的。

源路由,则像今天你打开 Google Maps:导航 APP 在出发前就为你算好了最佳路径,"前 200 米左转,第二个路口右转,再走 1 公里上高架……",司机(以及所有路过的红绿灯)只需要按部就班执行。决策者只有一个,路径是全局最优

§ 1.2 第二问:既然源路由这么好,为什么 30 年来没人用?

SOCRATIC QUESTION #2

"如果源路由这么优雅,为什么 IPv4 时代它几乎被遗忘了?"

提示:去翻一下 RFC 791(1981 年的 IPv4 标准),它本来就支持 Loose Source Route 和 Strict Source Route 选项。 那为什么今天没人用?这背后藏着一个深刻的工程教训。

FIRST PRINCIPLE · 历史的失败

IPv4 的源路由失败有三个致命原因,每一个都是用第一性原理就能推出来的:

  1. 安全噩梦:任何主机都可以伪造源路由,绕过防火墙、欺骗反向路径检查(uRPF)。 于是几乎所有运营商在边界默认 drop ip option source-route。一项被全网封禁的功能,等于死亡。
  2. 性能黑洞:IPv4 头部本身只有 20 字节,源路由选项最多塞 9 个 IP 地址(每个 4 字节)。 更要命的是——选项处理走的是软件慢路径(Slow Path),硬件根本不加速。
  3. 没有控制面配套:IGP(OSPF/IS-IS)只算最短路径,没有任何机制让源端"知道"该写什么路径下去。 源路由变成了一个"有数据面、没控制面"的孤儿。

所以——IPv4 源路由不是输在哲学,是输在工程实现。这个教训直接塑造了 SRv6 的所有设计决策。

§ 1.3 第三问:那 MPLS / RSVP-TE 不是已经"解决"了吗?

SOCRATIC QUESTION #3

"我们有 MPLS,有 RSVP-TE,有 LDP,运营商网络跑得好好的,为什么还要 SRv6?"

这是反对者最常用的论据。要回答这个问题,你必须先回答另一个更深刻的问题: "MPLS 流量工程的痛苦根源,到底是什么?"

让我用一个词概括 MPLS TE 的原罪:状态机灾难(State Machine Hell)。 我们逐层拆解这个灾难是怎么发生的。

§ 1.3.1 MPLS RSVP-TE 的本质:用"状态"换"路径控制"

想象你是一个运营商网络架构师,你想从 PE1 到 PE2 建一条低时延 + 绕开核心节点 P3的隧道。MPLS RSVP-TE 是怎么实现的?

  1. 头节点(PE1)用 CSPF 算法算出路径:PE1 → P1 → P2 → P4 → PE2
  2. RSVP Path 消息沿着这条路径逐跳发送,每个节点必须分配一个本地标签,并记住这条 LSP 的状态(带宽预留、亲和性、保护信息)
  3. Resv 消息反向回送,绑定标签
  4. 每隔 30 秒,所有中间节点必须发送 Refresh 消息维护这个状态——否则状态超时被清除

问题来了:假设你有 1000 个 PE 节点,做 PE-to-PE 全互联(典型 L3VPN 场景):

  • 需要建立的隧道数 = 1000 × 999 ≈ 100 万条 LSP
  • 每条 LSP 在每个中间节点都有状态
  • 每个 P 节点可能要维护数十万条 LSP 状态,每 30 秒刷新一次
  • 任何一次链路抖动,所有受影响 LSP 都要重新信令,控制面雪崩

这就是网络工程师的"RSVP 之夜"——一次小小的链路 Flap,整个网络的控制面 CPU 飙到 100%,运维彻夜不眠。

§ 1.3.2 第一性原理:状态应该放在哪里?

FIRST PRINCIPLE · 状态守恒定律

网络工程有一条铁律:"状态是有成本的"。状态越多,控制面越脆弱、扩展性越差、收敛越慢。

那么,对于"用户想走特定路径"这件事,状态最少应该放在哪里?有三个选项:

  1. 放在每一台中间节点(RSVP-TE 的做法)→ 状态 = O(N²) 量级
  2. 放在头节点 + 尾节点(部分隧道方案)→ 状态 = O(N) 量级
  3. 放在数据包自己里面(源路由)→ 状态 = O(1),跟节点数无关!

第三个选项就是 Segment Routing(SR)的核心哲学"把状态从网络中赶出去,塞进数据包的头里。"

类比 · 旅行社 vs 自助攻略

MPLS RSVP-TE 像是跟团旅游——旅行社在每个景点都要预订位置、维护订单、保留状态,任何一个环节出问题整团都得改行程。
Segment Routing 像是自由行——你手里拿着一份自己写好的"路线攻略"(SID List),到每个景点(节点)只需要按攻略上的下一项执行就行。景点不需要记住"你来过",路线全部状态都在你的攻略本里。

§ 1.4 第四问:那 SR-MPLS 不就够了吗?为什么还要 SRv6?

SOCRATIC QUESTION #4

"SR 可以基于 MPLS 数据面(SR-MPLS)实现,性能好、生态成熟。为什么思科还要力推 SRv6?"

这是 SRv6 故事中最关键、也最容易被误解的一步。许多工程师会说:"SRv6 就是把标签换成了 IPv6 地址而已嘛,何必多此一举?" 但如果你这么想,你就完全错过了 SRv6 的革命性所在。

§ 1.4.1 SR-MPLS 的"原罪":协议栈的累赘

要理解 SRv6 为什么必须存在,我们要看一眼一个典型 SR-MPLS 网络的真实协议栈

SR-MPLS vs SRv6 · 协议栈复杂度对比 SR-MPLS 网络 ① IPv4/IPv6 — 用户层 ② MPLS 数据面 — 标签封装 ③ LDP / RSVP-TE / SR — 标签分发 ④ IGP(OSPF/IS-IS)— 底层路由 4 层协议栈 · 状态多 · 故障点多 SRv6 网络 ① IPv6(用户层 + 转发层 = 同一层) ② IGP(IS-IS with SR ext.)— 自动分发 SID ✓ 移除:MPLS 标签栈 ✓ 移除:LDP ✓ 移除:RSVP-TE 2 层协议栈 · 极简 · IP 即一切
FIRST PRINCIPLE · 奥卡姆剃刀

"如无必要,勿增实体"——奥卡姆剃刀原理。 如果 IPv6 地址(128 比特)本身就足以编码一个"指令"(Locator + Function + Args), 那么 MPLS 标签层就是历史负担,应该被剃掉。 SRv6 的本质,是把 IPv6 地址重新定义为"指令操作码"——这就是它被称为"网络编程(Network Programming)"的原因。

§ 1.4.2 SR-MPLS 的真正软肋:跨域与端到端

SR-MPLS 在同一个 MPLS 域内表现优秀,但一旦跨越多个域(运营商边界、数据中心 underlay 与 fabric 边界、5G 移动网与传输网),就会暴露三大软肋:

维度 SR-MPLS(标签数据面) SRv6(IPv6 数据面)
跨域能力 MPLS 标签是本地有效,跨域需要 BGP-LU、Inter-AS Option B/C 等"胶水"协议。复杂、易错。 IPv6 地址全球可路由,跨域天然可达。一个 SID 就是一个 IPv6 地址,不需要任何"翻译"。
主机参与 主机不懂 MPLS,无法直接生成或处理 SID。隧道只能在 PE 上终结。 主机原生支持 IPv6,可以直接生成 SRH。Linux Kernel 4.10+ 已原生支持。
云原生融合 公有云不跑 MPLS。SR-MPLS 永远走不出运营商核心网。 AWS、Azure 都基于 IPv6。SRv6 可以从主机一直贯穿到云,实现 End-to-End 网络编程。
安全模型 MPLS 没有 IP 层的安全机制(IPsec、ACL 等)。 IPv6 自带 IPsec、ACL、uRPF——SRv6 直接继承全部安全工具链。
运维工具 需要专用 MPLS OAM(LSP Ping/Traceroute)。 Ping、Traceroute、tcpdump 全部原生可用。运维心智负担降到最低。

§ 1.5 第五问:那 SRv6 真正的"杀手锏"哲学,是什么?

SOCRATIC QUESTION #5 · 终极一问

"如果让你用一句话概括 SRv6 的设计哲学,你会怎么说?"

想清楚这一点,你就抓住了 SRv6 的"道"。其余所有的细节——SRH 头、End/End.X 指令、uSID 压缩——都只是"术"。

SRv6 设计哲学(一句话定义)

SRv6 = 把网络变成一台"分布式可编程计算机",IPv6 地址是它的"指令操作码",源节点是它的"程序员",沿途路由器是它的"CPU"。

终极类比 · 网络编程 vs 传统网络

传统网络像是一群独立思考的快递员——你交给他们一个包裹,他们各自决定怎么送。 你能干预的,最多就是说"请走 EMS"或"请走顺丰"。

SRv6 像是给网络写一段汇编代码——你(源节点)在数据包里写下: "到东京(End)→ 走第三条线缆(End.X)→ 进入 VPN-A(End.DT4)→ 出到客户网"。 整个网络变成了你的"可编程 CPU",每个 IPv6 地址都是一条机器指令。这种范式转换,不是协议升级,是架构革命

§ 1.6 SRv6 的演化时间线:一场十年的革命

2013
理论奠基 · IETF SPRING 工作组成立

由思科 Clarence Filsfils 主导提出 Segment Routing 概念,目标:消除 MPLS RSVP-TE 的状态地狱。最初基于 MPLS 数据面(SR-MPLS)。

2017
SRv6 数据面定义 · RFC 8200 修订

Routing Header Type 4(SRH)被正式定义,IPv6 路由扩展头获得 SRv6 专属类型。从此,IPv6 地址不再只是"标识",而成为"指令"。

2020
RFC 8754 + RFC 8986 · 标准成熟

SRH(RFC 8754)与网络编程(RFC 8986)正式成为 IETF 标准。End、End.X、End.DT4/6、End.DX2 等全套指令集尘埃落定。

2021-2023
uSID 革命 · 思科 Micro-SID 压缩架构

SRH 头过长导致芯片处理瓶颈和 MTU 问题。Cisco 提出 uSID(128bit 容器中嵌入 8 个 16bit 微指令),单个 IPv6 地址可承载完整 SID 列表,彻底解决 SRH 膨胀。

2024-2026
规模部署 · 5G/Cloud/AI 网络全面采用

中国移动、Softbank、Telefonica 等头部运营商规模商用。AWS、Azure 在 backbone 试水 SRv6。AI 数据中心使用 SRv6 实现 GPU-to-GPU 流量工程。SRv6 从"未来"成为"现在"。

§ 1.7 数据说话:SRv6 vs MPLS 的对比震撼

10×
控制面状态减少(vs RSVP-TE)
↓50ms
TI-LFA 故障倒换时间
2 → 4
协议栈层数:从 4 层精简至 2 层
128 bit
单个 SID 编码空间(vs MPLS 20 bit)

§ 1.8 模块 1 小结:你已经掌握了"道"

🎯

如果你能用自己的话回答以下五个问题,说明你已经掌握了 SRv6 的"第一性原理",可以进入下一模块——数据平面解剖

  1. 为什么逐跳路由不是网络的唯一范式?源路由的根本优势在哪?
  2. IPv4 时代的源路由为什么失败了?三个工程教训分别是什么?
  3. MPLS RSVP-TE 的"状态机灾难"是怎么发生的?SR 是如何用"状态守恒定律"解决它的?
  4. SR-MPLS 已经很好了,SRv6 凭什么必须存在?跨域、主机参与、云融合三个维度怎么打?
  5. 用一句话概括 SRv6 的设计哲学:网络编程范式的本质是什么?

状态是有成本的。SRv6 的伟大,不在于它发明了什么新东西,
而在于它把状态从网络中赶出去,塞进了数据包的 IP 头里
从此,IP 地址不再只是"标识",而成为可编程的"指令"。

—— SRv6 第一性原理
下一模块预告 · MODULE 2 · DATA PLANE

"现在你知道了'为什么',下一个问题是——'怎么实现'?"

我们会带你深入 SRH(Segment Routing Header)的每一个比特位:

  • IPv6 扩展头机制:为什么 Routing Header Type 4 是 SRH?
  • SRH 字段精确解构:Segments Left、Last Entry、TLV、Flags 每一个位的含义
  • Locator : Function : Arguments 三元结构:128 比特如何编码一个完整指令?
  • 抓包实战:用 Wireshark 看清一个 SRv6 报文的真实样貌
MODULE 2 · DATA PLANE

数据平面解剖:从 IPv6 扩展头到 SRH 的每一个比特

①·起源 ✓ ②·数据面 (当前) ③·控制面 ④·指令集 ⑤·进化 ⑥·应用

上一模块我们建立了"为什么"的认知——网络编程范式。本模块我们要回答"怎么实现"—— 当一个 SRv6 报文出现在网线上时,它到底是什么样子?路由器/ASIC 又是如何精确处理它的每一个比特的? 这一章是后续所有内容的"物理基础",请不要跳过任何一个字段。

§ 2.1 第六问:IPv6 凭什么"天生"就能扛起源路由的大旗?

SOCRATIC QUESTION #6

"为什么是 IPv6 而不是 IPv4 成为 SRv6 的载体?仅仅因为地址够多吗?"

如果你的回答是"因为 IPv6 地址够多,能编码 SID"——那只是表面原因。 真正的根本,藏在 IPv6 头部一个被大多数人忽略的设计里:扩展头机制(Extension Headers)

§ 2.1.1 IPv6 头部的革命性设计:固定 + 可扩展

让我们对比一下 IPv4 和 IPv6 的头部哲学。这个对比不只是历史考古,它直接决定了 SRv6 为什么必须诞生在 IPv6 上:

IPv4 vs IPv6 · 头部哲学对比 IPv4 · 头部哲学:所有功能塞进一个头 Ver|IHL|ToS|Total Length Identification | Flags | Fragment Offset TTL | Protocol | Header Checksum Source IP (32 bit) Destination IP (32 bit) ⚠️ Options(变长,0~40 字节) — 几乎无人使用,硬件慢路径处理 问题: • 头部变长 → 硬件必须做 IHL 解析 • Checksum 涉及全头部,每跳重算 • Options 在路由器走 CPU 软件路径 • 防火墙广泛 drop options 包 → 源路由扩展性 = 0 IPv6 · 头部哲学:固定头 + 链式扩展头 Ver|TC|Flow Label Payload Len | Next Header | Hop Limit Source IPv6 (128 bit) Destination IPv6 (128 bit) ↓ Next Header 链式指针 ↓ ★ Routing Header Type 4 = SRH Hop-by-Hop Destination Opts Fragment / AH / ESP / ... 优势: • 固定头永远 40 字节 → 硬件流水线极简 • 扩展头按需加挂,不影响基础转发 → 源路由有了"合法宿主"
FIRST PRINCIPLE · 为什么扩展头是革命性的

IPv4 的 Options 是"内嵌的负担"——它强制每一台路由器在转发任何 IPv4 包时都要检查"我是不是有 Options"。 即使 99.99% 的包没有 Options,硬件的 IHL(IP Header Length)字段也必须被解析。这种"悲观假设"的代价是巨大的。

IPv6 的扩展头是"乐观分离"——主头永远 40 字节,硬件按固定偏移取字段;只有当 Next Header 字段指向扩展头时, 硬件才进入"深度处理"模式。这种设计让"绝大多数普通包跑得飞快,少数特殊包享受丰富功能"成为可能。 SRv6 正是优雅地利用了这一机制,把整条路径指令封装进 Routing Header Type 4。

类比 · 集装箱 vs 散装货物

IPv4 像是"散装货船"——每件货物形状各异,装卸时必须逐一称量。
IPv6 像是"标准集装箱"——主体永远是 40 英尺标准箱(固定头),如果你需要冷藏、危险品、超长货等特殊需求, 就外挂一个"特种附加箱"(扩展头)。普通船只看主箱即可装卸(硬件快路径),特种箱由专门设备处理(SRv6 引擎),效率最大化。

§ 2.2 第七问:SRH 的每一个字段,到底在干什么?

SOCRATIC QUESTION #7

"打开 RFC 8754,你能告诉我 SRH 里 Segments Left 和 Last Entry 的关系吗?为什么需要两个看似冗余的字段?"

这是一个绝佳的问题,能区分"读过文档"和"理解设计"的工程师。我们一起解剖。

§ 2.2.1 SRH 完整字段图(RFC 8754 精确定义)

SRH (Segment Routing Header) · RFC 8754 字段图 bit: 0 8 16 24 31 Next Header 8 bit · 后继协议 Hdr Ext Len 8 bit · SRH 长度 Routing Type = 4 8 bit · 固定 = 4 (SRH) Segments Left 8 bit · 剩余 SID 索引 ⭐ Last Entry 8 bit · 末尾 SID 索引 ⭐ Flags 8 bit · 保留标志位 Tag 16 bit · 数据包分组标记 Segment List [0] — 128 bit IPv6 SID 这是路径中的 ★最后一站★(注意:栈底!) Segment List [1] — 128 bit IPv6 SID Segment List [2] — 128 bit IPv6 SID ... Segment List [n] ... Segment List [Last Entry] — 128 bit IPv6 SID 这是路径中的 ★第一站★(栈顶!数据包出发就走它) Optional TLVs (HMAC, Padding, NSH, ...) · 可选
FIRST PRINCIPLE · Segments Left & Last Entry 的关系

这两个字段的设计,是 SRv6 数据面最精妙的细节,也是最容易被误读的地方。它们的关系如下:

  • Last Entry:固定值,永远指向 Segment List 数组的最大下标(数组长度 - 1)。它告诉硬件"这条路径总共有多少站"。
  • Segments Left (SL):动态值,初始等于 Last Entry,每经过一个段端点就减 1。它告诉硬件"还剩几站要走"。
  • 当前活跃 SID = Segment List[SL],并且这个值同时被复制到 IPv6 主头的 Destination Address 字段。

为什么要这样设计? 因为 IPv6 的全局路由查找永远是基于 Destination Address。SRv6 巧妙地把"当前应该去的下一个段端点"放到 DA 字段, 这样整个 IPv6 网络都不需要修改——普通路由器只看 DA 转发,根本不需要知道 SRH 的存在。 只有 DA 命中本地 SID 的"段端点路由器",才会去解析 SRH,做 SL 减 1、更新 DA、然后继续转发。

类比 · 接力赛跑

想象一场接力赛:教练(源节点)在出发前给运动员(数据包)一份完整的"交接棒名单"(Segment List),名单从最后一棒往前写。
Last Entry = 名单总人数 - 1 = "这场比赛总共要交几次棒",是固定的;
Segments Left = "还剩几次棒没交",每完成一次交接就减 1;
运动员手里的"下一棒选手胸牌"(IPv6 DA)= 名单中第 SL 项,每次交棒后更新。
沿途的观众(普通路由器)只需要看胸牌指向哪——不需要懂整个名单。这就是 SRv6 优雅之处。

§ 2.3 第八问:一个 128 比特的 IPv6 地址,凭什么能装下"完整的指令"?

SOCRATIC QUESTION #8

"如果 SID 只是个 IPv6 地址,那它和'目的地址'有什么本质区别?"

这是 SRv6 哲学层最关键的一跃——SID 不是地址,而是一条"机器指令"。 我们来看看一个 128 比特如何被切分成"指令操作码 + 操作数"。

§ 2.3.1 SID 的三段式结构:Locator : Function : Arguments

SRv6 SID · 128 bit 三段式语义结构 bit: 0 48 (默认) 80 127 Locator (定位段) 通常 32~48 bit 类似"邮政编码 + 街道地址" Function (功能段) 16~32 bit "操作指令",如 End.DT4 Arguments (参数段) 可选,剩余 bit "操作数",如 Flow ID 实例:fcbb:bb00:0001:e002:: Locator = fcbb:bb00:0001::/48 Function = e002 (= End.DT4 指令) Arguments = 0000:0000:0000:0000 (本例无参数) → "去找节点 0001" → "执行 IPv4 VPN 解封装查表" → "无额外参数"
SID 三段式语义
  • Locator(定位段):定义"这条指令在哪台路由器上执行"。它是可路由的 IPv6 前缀,通过 IGP(IS-IS)扩散到全网。本质上类似 MPLS 中的 Node SID。
  • Function(功能段):定义"这条指令做什么"。它是路由器本地分配的"操作码",常见值如 End=0xe000、End.X=0xe001、End.DT4=0xe002。这就是 RFC 8986 定义的"网络指令集"。
  • Arguments(参数段):定义"这条指令的额外操作数"。比如 End.DT2M 多播 SID 的 Bridge-Domain 编号、Flow ID 等。
类比 · 汇编指令

如果你写过汇编,一定见过这样的指令:MOV [0x1000], EAX
0x1000(操作地址) = 类似 Locator——"对哪个内存位置操作"
MOV(操作码) = 类似 Function——"做什么操作"
EAX(操作数) = 类似 Arguments——"用什么数据"
所以 SRv6 的 128 bit SID,本质是一条"分布式机器指令"。整个网络是 CPU,IPv6 地址就是机器码。

§ 2.4 第九问:报文经过每一跳时,到底发生了什么?

SOCRATIC QUESTION #9

"现在请你用第一性原理推演:一个 SRv6 包从源 A 经过 4 跳到达目的 D,每一跳的 IPv6 头和 SRH 字段会发生什么变化?"

如果你能把这个过程逐字段地讲清楚,你就真正"看见"了 SRv6 数据面。

§ 2.4.1 报文逐跳演进(State-by-State Diagram)

假设拓扑:R1 (源) → R2 → R3 → R4 → R5 (目的),源节点 R1 想强制路径走 R2、R3、R4 终结于 R5。 源节点构造的 SRH 路径列表(注意栈底→栈顶):

Segment List[0] = R5::SID  ← 终点(栈底)
Segment List[1] = R4::SID
Segment List[2] = R3::SID
Segment List[3] = R2::SID  ← 第一站(栈顶)
Last Entry = 3
Segments Left = 3 (初始)
SRv6 报文逐跳演进 · DA 与 SL 的精确变化 R1 R2 R3 R4 R5 Stage 1 · R1 → R2 DA = R2::SID ⭐ SL = 3 SegList[3] = R2::SID SegList[2] = R3::SID SegList[1] = R4::SID, [0]=R5 Stage 2 · R2 → R3 DA = R3::SID ⭐ SL = 2 (减 1) SegList[3] = R2::SID SegList[2] = R3::SID SegList[1] = R4::SID, [0]=R5 Stage 3 · R3 → R4 DA = R4::SID ⭐ SL = 1 SegList[3] = R2::SID SegList[2] = R3::SID SegList[1] = R4::SID Stage 4 · R4 → R5 DA = R5::SID ⭐ SL = 0 (最后一站) ... SegList[0] = R5::SID PSP: 弹出 SRH! ✓ Stage 5 · R5 终结处理 命中本地 SID = R5::SID 执行 Function (如 End.DT4) 查 VRF 表,解封装 原始 IPv4/IPv6 包送出 → 路径完成! ✓ ⚡ 关键洞察 · 路径状态在哪里? 中间路由器 R3 完全不需要"记住"这条路径——它只看到 DA = 自己的 SID,做完操作把 DA 改成下一站,丢出去就完事 所有路径状态 都在数据包的 SRH 里,路由器是"无状态执行单元" • 即使百万条隧道穿过 R3,R3 的内存占用 不会因此增加 1 比特 → 这就是模块 1 说的"状态守恒定律"在数据面的精确实现 ✦

§ 2.5 第十问:ASIC 芯片到底是怎么"读懂"SRH 的?

SOCRATIC QUESTION #10 · 直达硬件层

"你能告诉我,一颗 NPU(网络处理器)芯片在 100 纳秒内,是如何把 SRH 解析、查 SID 表、改 DA、转发的吗?"

这是大多数工程师从未深入的领域,但对于真正掌握 SRv6 至关重要—— 因为 SRH 的处理深度直接决定了 SRv6 的工程可行性。

§ 2.5.1 NPU 处理 SRH 的微观流水线

现代高性能路由器(如 Cisco Silicon One、ASR 9000 系列的 NPU)使用流水线式包处理。 一个 SRv6 报文进入芯片后,会经历以下精密阶段:

NPU 处理 SRv6 包的流水线(Pipeline) ① Parser 解析 IPv6 主头 识别 NextHdr=43 读 SRH 字段 ② DA Lookup 查 IPv6 FIB(LPM) 命中本地 SID? → 进入 SID 表 ③ SID Decode 提取 Function 查指令表 → 执行 End/End.X.. ④ SRH Update SL = SL - 1 DA = SegList[SL] PSP/USD 处理 ⑤ Forward 查新 DA 的 FIB 出接口 送 Egress ⚠️ ASIC 的"解析深度墙"(Parser Depth Wall)—— SRv6 落地的硬件天花板 网络芯片的 Parser 单元是固定流水线,每个 cycle 只能解析有限的 byte。常见的硬件限制: • Cisco Silicon One Q200 : 可解析至包头 ~256 bytes(约 12-14 个 SID) • Broadcom Jericho 2 : 可解析至 ~192 bytes • 老旧芯片 : 仅 ~80-128 bytes(甚至无法处理 4 个以上 SID) 如果 SRH 太长(比如 10 个 SID = 160 bytes),芯片会 触发 "Recirculation" ——把包丢回 Parser 再来一次。 → 性能可能腰斩 50%!这是 SRv6 早期落地的最大痛点,也是 uSID 必须诞生的根本原因(模块 5 详讲)。 ⏱️ 实测处理时延(参考 Cisco ASR 9000) 普通 IPv6 转发 : ~80 ns/pkt (流水线满速) SRv6 转发(≤ 6 SID) : ~100-120 ns/pkt (+ 25% 开销) SRv6 + Recirculation : ~200+ ns/pkt (性能减半)⚠️

这就是为什么 SRv6 早期被很多人质疑"性能不行"——他们用的是不带专用 SRv6 引擎的老芯片。

现代 NPU(如 Cisco Silicon One、Broadcom Jericho 2C+、Marvell Teralynx 等)已经在硬件层专门设计了 SRv6 加速单元——SRH 解析、SL 减一、DA 替换全部在单 cycle 完成,性能与原生 IPv6 几乎无差异。但对于运营商存量设备而言,SRH 长度仍然是落地的核心约束,这直接催生了 uSID 微指令架构。

§ 2.6 抓包实战:用 Wireshark 看一个真实的 SRv6 报文

理论说了再多,不如看一眼真实抓包。下面是一段在 Cisco IOS-XR 设备上抓到的 SRv6 报文 hex dump,逐字段拆解:

0000  60 00 00 00 00 5c 2b 40    fc bb bb 00 00 01 00 00      ← IPv6 主头:NextHdr = 0x2b (43 = Routing)
0010  00 00 00 00 00 00 00 01    fc bb bb 00 00 02 e0 00     ← Source / Destination = R2 的 SID
0020  00 00 00 00 00 00 00 00    2b 06 04 02 00 00 00 00     ← SRH 起点:NH=43, HdrExtLen=6, RT=4, SL=2
                                                                              ← (Last Entry 隐含在 HdrExtLen 中)
0030  fc bb bb 00 00 04 e0 00    00 00 00 00 00 00 00 00         ← SegList[0] = R4::SID (终点)
0040  fc bb bb 00 00 03 e0 00    00 00 00 00 00 00 00 00         ← SegList[1] = R3::SID
0050  fc bb bb 00 00 02 e0 00    00 00 00 00 00 00 00 00         ← SegList[2] = R2::SID (当前活跃)
0060  04 00 00 00 ...                                            ← 内层 IPv4 payload
字段精确对照
  • 0x2b = 43:IPv6 NextHeader 字段,43 表示后面是 Routing Header
  • HdrExtLen = 6:SRH 长度 = (6 + 1) × 8 = 56 字节(不算前 8 字节)
  • RT = 4:Routing Type = 4,明确这是 SRH(不是其它路由头)
  • SL = 2:还剩 2 个 SID 没消费(当前在第 2 跳)
  • DA = R2::SID:刚好等于 SegList[2],符合规范

§ 2.7 SRH 的 TLV 扩展:HMAC、Padding 与未来

SRH 末尾的 Optional TLV(Type-Length-Value)字段为 SRv6 提供了极强的可扩展性。当前 RFC 8754 定义了三类常见 TLV:

TLV 类型 Type 值 用途与本质
Padding TLV 0x04 对齐到 8 字节边界,硬件解析效率优化。无功能含义。
HMAC TLV 0x05 基于密钥的消息认证码,防止 SRH 被中间节点伪造或篡改。这是 SRv6 安全模型的基石。
NSH TLV Draft 承载 SFC(Service Function Chain)元数据,用于服务链编排。
重要的设计哲学:SRH 的 TLV 机制确保了协议的前向兼容——未来如果我们要加新功能(比如 In-Situ OAM、Path Tracing),不需要修改 SRH 主体结构,只需要新增一种 TLV Type。这就是 IPv6 设计的远见。

§ 2.8 模块 2 小结:你已经看清了"机器码"

🔬

如果你能用自己的话回答以下问题,你就真正掌握了 SRv6 数据面的每一个比特

  1. 为什么 IPv6 的扩展头机制比 IPv4 的 Options 更适合承载源路由?两者的"乐观/悲观假设"区别在哪?
  2. SRH 中 Segments Left 和 Last Entry 为什么要分两个字段?如果只用一个会出什么问题?
  3. SID 的三段式结构(Locator : Function : Arguments)如何映射到"汇编指令"的概念?
  4. 当一个 SRv6 包从 R1 经过 R2 到 R3,IPv6 主头的 DA 字段如何变化?为什么这个设计让普通路由器"无感"?
  5. 什么是 ASIC 的"解析深度墙"?为什么 SRH 太长会触发 Recirculation?这与第 5 模块的 uSID 有什么关系?

SRv6 的优雅,在于它从不强迫世界改变——
它让普通 IPv6 路由器只需要看 DA 转发,让段端点路由器才执行指令
这就是分层抽象的极致艺术:每一层只看自己该看的事。

—— SRv6 数据面美学
下一模块预告 · MODULE 3 · CONTROL PLANE

"现在你知道了'数据包长什么样'。但下一个问题是:源节点凭什么知道该写哪些 SID?"

数据面再优雅,也需要控制面的"大脑"。模块 3 我们将深入:

  • IGP 扩展(IS-IS / OSPFv3):Locator、Function 是怎么扩散到全网的?
  • BGP-LS:拓扑信息如何上报给 SDN 控制器?
  • BGP SRv6 Service SID:VPN 服务怎么把 SID 通告给对端 PE?
  • PCEP 与控制器算路:跨域 TE 的算法实现细节
  • 分布式 vs 集中式:SR-PCE 的真实角色
MODULE 3 · CONTROL PLANE

控制平面魔法:从 IGP 扩散到 SDN 算路的全链路

①·起源 ✓ ②·数据面 ✓ ③·控制面 (当前) ④·指令集 ⑤·进化 ⑥·应用

数据平面是"被动的执行单元",控制平面是"主动的决策大脑"。 如果说 SRH 是机器码,那么控制面就是编译器 + 链接器 + 操作系统。 一个 SRv6 网络的真正威力,不在于一个孤立的 SRH 包能跑多快, 而在于整个网络的拓扑、SID、策略、约束能否被快速、准确、自动地分发到每一个角落。

§ 3.1 第十一问:为什么不能用 BGP 来分发 SID?

SOCRATIC QUESTION #11

"BGP 是 Internet 上分发路由信息的事实标准,为什么 SRv6 用 IS-IS / OSPFv3 来分发 Locator?"

这个问题看起来简单,但答案揭示了 IGP 与 EGP 在设计哲学层面的根本差异—— 它直接决定了 SRv6 控制面为什么必须是"IGP 主导 + BGP 辅助"的双层架构。

FIRST PRINCIPLE · IGP vs BGP 的本质差异

让我们抛开协议细节,回到最朴素的问题:"什么场景适合什么协议?"

维度 IGP(IS-IS / OSPFv3) BGP(边界网关协议)
设计初衷 同一管理域内的拓扑同步。所有节点必须看到一致的网络全貌。 不同管理域之间的策略交换。每个 AS 只暴露自己愿意暴露的部分。
收敛速度 毫秒级(基于 LSP/LSA 洪泛 + Dijkstra) 秒级(基于 Best Path 选举 + 增量更新)
状态模型 Link-State:每个节点知道全网的链路图(LSDB) Path-Vector:节点只知道"经过哪些 AS 可达某前缀"
适合分发什么 拓扑、链路属性、Locator 前缀、SR 算法、邻接 SID 服务前缀(VPN 路由)、跨域可达性、策略

所以 SRv6 的设计选择是必然的底层 Locator/拓扑由 IGP 分发(域内同步)顶层 Service SID 由 BGP 分发(跨域可达)。 这是"用对工具做对的事"的典范。

类比 · 公司组织架构

IGP 像是公司内部的钉钉/企微——所有员工都要看到完整的部门架构、座位地图、办公电话。信息必须同步、必须一致
BGP 像是公司之间的商务对接邮件——你只把"对方需要知道的"信息发出去,绝不暴露内部细节。 两者绝不能混用——你不会把公司架构图群发给所有合作伙伴,也不会让员工通过"商务邮件"才能看到自己的座位号。

§ 3.2 第十二问:IS-IS 凭什么扛起 SRv6 的大旗?

SOCRATIC QUESTION #12

"OSPFv3 也支持 IPv6,为什么运营商和大型数据中心几乎一边倒地选择 IS-IS 作为 SRv6 的载体?"

这是个有意思的"历史选择题"。如果你只看协议规范,OSPFv3 完全可以承载 SRv6。但实际世界中——尤其是 Tier-1 运营商和超大规模数据中心——几乎全部押注 IS-IS。为什么?

§ 3.2.1 IS-IS 的"基因优势"

FIRST PRINCIPLE · 协议扩展性

IS-IS 在三个维度上"天生"就比 OSPF 更适合 SRv6:

  1. 不依赖 IP 寻址:IS-IS 跑在数据链路层(OSI Layer 2)之上,使用 NSAP 地址, 完全独立于 IPv4/IPv6。这意味着——它可以在 IPv6 网络起来之前就建立邻接、传递拓扑。 这对运营商"边迁移边运行"的现实诉求至关重要。
  2. TLV 机制极致灵活:IS-IS 协议天生用 TLV 编码所有信息,新增任何属性只需要定义新的 TLV Type 即可, 不需要修改报文主体结构。SRv6 的所有扩展(Locator TLV、SID TLV、Algo TLV)都是这样无缝加进去的。
  3. 大规模性能优秀:IS-IS 的 LSP(Link State PDU)不分片, 可以承载数十 KB 的拓扑信息,特别适合超大规模网络。OSPF 的 LSA 受 IPv6 MTU 限制,扩展性较差。

简而言之:IS-IS 是"可扩展协议工程"的胜利。它不是因为"先到",而是因为"基因更好"。

§ 3.2.2 IS-IS 的 SRv6 关键 TLV 详解

当一台路由器配置了 SRv6 Locator 后,IS-IS 会通过以下 TLV 把"我有哪些 SID、能力如何"通告给全网:

TLV 名称 Type 含义与作用
Router Capability TLV 242 通告本节点的SRv6 能力:是否支持 SRv6、最大 SRH 长度(MSD)、支持的 Function 类型。下游节点据此判断"能不能给它推 SID 列表"。
SRv6 Locator TLV 27 通告本节点的 Locator 前缀(如 fcbb:bb00:0001::/48)。其他节点据此可以"路由到这个 Locator"——这是 SRv6 数据面的根基。
SRv6 End SID Sub-TLV Sub-TLV 挂在 Locator TLV 下,通告具体的 End SID(即 Function 段),包括 PSP/USP/USD Flavor。
SRv6 End.X SID Sub-TLV Sub-TLV 挂在 Extended IS Reachability TLV (#22) 下,通告邻接 SID。这是 TE 的关键——可以指定"必须走某条具体的物理链路"。
SR Algorithm TLV Sub-TLV 通告本节点支持的路径计算算法。0 = 默认 SPF;128~255 = Flex-Algo(用户自定义算法,如低时延 SPF、避开特定区域等)。
Cisco IOS-XR 配置实例:在思科设备上启用 SRv6 + IS-IS 通告 Locator,配置极其简洁:
segment-routing srv6
 locators
  locator MAIN
   prefix fcbb:bb00:0001::/48
  !
 !
!
router isis CORE
 address-family ipv6 unicast
  segment-routing srv6
   locator MAIN

§ 3.2.3 拓扑扩散的全过程图解

IS-IS 扩散 SRv6 Locator 与 SID 的全过程 R1 fcbb:bb00:0001::/48 R2 fcbb:bb00:0002::/48 R3 fcbb:bb00:0003::/48 R4 fcbb:bb00:0004::/48 ↓ 每个节点构造自己的 LSP 并洪泛 ↓ 📬 R2 构造的 LSP (Link State PDU) 关键内容 ┌─ Router-ID: R2.00.00 ├─ Router Cap TLV (#242): SRv6-capable, MSD=10, Algo=[0,128] ├─ SRv6 Locator TLV (#27): fcbb:bb00:0002::/48, metric=10 │ └─ End SID Sub-TLV: fcbb:bb00:0002:e000:: (PSP+USD) ├─ Extended IS Reach (#22): R1, metric=10, link-id=12 │ └─ End.X SID Sub-TLV: fcbb:bb00:0002:e001:: (邻接 R1)
关键认知

收敛后,R1 的 LSDB 中 会同时拥有: ① 全网拓扑图(Dijkstra 算最短路); ② 全网每台路由器的 Locator 前缀; ③ 每条链路的 End.X SID。 这就是为什么 R1 可以"独立、本地、无须询问任何人"地构造出一条 SRH——所有的"原料"都已经通过 IGP 同步到了它的本地数据库。 这也是为什么 SR-MPLS 能淘汰 LDP——IGP 已经做了 LDP 的活

§ 3.3 第十三问:服务怎么"用"上 SID?BGP 又是怎么参与的?

SOCRATIC QUESTION #13

"IGP 把 Locator 散布到全网了。但 R1 凭什么知道:'去访问 VPN-A 的客户网段,应该用 R4 的哪个 SID'?"

这是底层"地图"和上层"服务"之间的关键桥梁。答案是:BGP SRv6 Service SID

§ 3.3.1 BGP 在 SRv6 中的"双重身份"

BGP 在 SRv6 网络中扮演两个完全不同的角色,理解这一点至关重要:

① 服务路由分发

本质:传统 BGP 的 EVPN/VPNv4/VPNv6/L3VPN 等 Address-Family, 现在在 NLRI 或 Attribute 中携带SRv6 Service SID

典型用法:PE2 通告"VPN-A 的 192.168.1.0/24"路由时,附带"用我的 End.DT4 SID = fcbb:bb00:0002:e002::"。 PE1 收到后,就知道"给 192.168.1.0/24 的包要封装 SRH,外层 DA = 这个 SID"。

RFC 9252:BGP Services over SRv6 Core,定义了 Service SID 的 BGP 传输机制。

② 拓扑信息上报(BGP-LS)

本质:BGP-LS 是"反向"用法——把 IGP 的 Link State Database 导出到外部控制器(如 SDN PCE)。

典型用法:每台 ABR 路由器把本域的 IGP 拓扑(节点、链路、Locator、SID、TE 属性)通过 BGP-LS 推送给 Cisco Crosswork / SR-PCE。 控制器据此构建跨域全网拓扑数据库,进行算路。

RFC 7752 + 9552:BGP-LS 与 SRv6 扩展。

类比 · 房地产中介市场

想象一个城市的房产生态:
IGP = 城市政府的"街道地图与门牌号系统",所有人都看得到(每条街、每栋楼)。
BGP(服务路由) = "房屋买卖与租赁广告"——"我家在 XX 路 88 号,卖房,联系门牌 XX"。
BGP-LS = "城市规划局的统计上报"——把城市完整地图导出给国务院做宏观决策。
三者协同:地图(IGP)告诉你"路怎么走",广告(BGP 服务)告诉你"哪有房",规划上报(BGP-LS)让上层做"全城统筹"。

§ 3.3.2 一次完整的 L3VPN over SRv6 控制面交互

让我们用最经典的 L3VPN 场景,展示 IGP 与 BGP 如何协同:

L3VPN over SRv6 · 控制面完整交互序列 CE-1 PE-1 (R1) P-1 (R2) P-2 (R3) PE-2 (R4) CE-2 Step 1 · IS-IS 在域内洪泛 Locator (Underlay) PE-1 通过 IS-IS 学到:PE-2 的 Locator = fcbb:bb00:0004::/48 ,可达,Cost = 30 → Underlay 路由就绪:PE-1 知道"如何把包送到 PE-2 的任何 SID 上" Step 2 · CE-2 通过 eBGP 把 192.168.2.0/24 通告给 PE-2 PE-2 收到 IPv4 路由,加入到 VRF "CUST-A" → PE-2 本地为 VRF "CUST-A" 分配 End.DT4 SID = fcbb:bb00:0004:e002:: Step 3 · PE-2 通过 iBGP (VPNv4) 把 VPN 路由通告给 PE-1(关键!) BGP UPDATE: NLRI = RD:1:100 + 192.168.2.0/24 Attribute: Prefix-SID Attr → SRv6 L3 Service TLV → SID=fcbb:bb00:0004:e002:: ⭐ Step 4 · PE-1 为 VRF "CUST-A" 安装路由:192.168.2.0/24 → SRv6 封装 PE-1 FIB 安装: 192.168.2.0/24 → encap (Outer IPv6 DA = fcbb:bb00:0004:e002::, no SRH if 1 SID) → 控制面闭环!数据面就绪 ✓ ⚡ IGP 提供"怎么走",BGP 提供"去哪里 + 干什么" — 各司其职、完美协同

容易混淆的细节

  • RFC 9252 定义的 Service SID 编码方式有两种:Transposition Scheme(与 BGP Label 字段联动)和 Non-Transposition Scheme(完整放在 Prefix-SID 属性中)。Cisco 默认用前者,节省 BGP 报文长度。
  • SID 的 Function 部分是 PE-2 本地分配的,不需要预先约定。这就是 SRv6 的"分布式语义"——每台路由器自治决定本地 Function 编码。
  • 当 SID 列表只有 1 个时,可以直接放到 IPv6 主头 DA,省略整个 SRH——这就是 RFC 8986 提到的 "Reduced SRH" 优化。

§ 3.4 第十四问:跨域怎么办?分布式 IGP 不是封闭在域内吗?

SOCRATIC QUESTION #14

"如果客户端在北京 IGP 域,服务端在广州 IGP 域,中间隔了三个 AS——SRv6 路径怎么算?"

IGP 的"同一管理域内"特性此时反而成了限制——它看不到其他域的拓扑。这正是集中式控制器(PCE)+ BGP-LS 登场的舞台。

§ 3.4.1 SR-PCE 的真实角色

FIRST PRINCIPLE · 何时需要集中式大脑

分布式 IGP 在三个场景下力不从心,必须靠集中式控制器解决:

  1. 跨域可见性:单个路由器只能看到本 IGP 域,无法做"北京 → 上海 → 广州"的全局路径选择。
  2. 带宽感知 TE:IGP 不会传播实时带宽利用率,CSPF 只能基于"预留带宽"算路,而非"实时空闲带宽"。
  3. 多约束优化:当约束变得复杂("低时延 + 避开 AS65001 + 带宽 ≥ 10 Gbps + 不超过 4 跳"),分布式算法处理不了,必须集中式 LP 求解。

Cisco SR-PCE(基于 IOS-XR 软件实例)就是为解决这三个问题而生。

§ 3.4.2 SR-PCE 完整工作流程

Cisco SR-PCE · 跨域 SRv6 TE 算路工作流 SR-PCE / Crosswork 📊 跨域拓扑数据库 🧮 集中式 CSPF 引擎 🔌 PCEP / NETCONF IGP Domain 1 (北京) PE-A ABR-1 IS-IS Level-2 IGP Domain 2 (中转) ABR-1 P-X ABR-2 IS-IS Level-2 IGP Domain 3 (广州) ABR-2 PE-Z IS-IS Level-2 BGP-LS BGP-LS BGP-LS PCEP Request 📋 完整跨域 TE 工作流 拓扑收集:每个域的 ABR 通过 BGP-LS 把本域 IGP LSDB 上报给 SR-PCE,PCE 形成跨域全局拓扑 头节点请求:PE-A 收到业务流量,需要建立到 PE-Z 的 SR-TE 策略,发送 PCEP PCRequest 给 SR-PCE 集中式算路:SR-PCE 基于全局拓扑 + 约束(带宽、时延、亲和性)计算最优 SID 列表 下发结果:通过 PCEP PCReply 把 SID List = [ABR-1::SID, P-X::SID, ABR-2::SID, PE-Z::End.DT4] 返回给 PE-A 数据面执行:PE-A 在 SRH 中按列表封装,包跨越 3 个 IGP 域到达 PE-Z ✓ 关键点:每个 IGP 域不需要知道其他域的细节,所有"跨域智能"集中在 SR-PCE

§ 3.4.3 SR-PCE 的算路引擎:CSPF + 多约束优化

集中式算路不是简单的 Dijkstra。SR-PCE 内部维护着一个约束最短路径优先(CSPF, Constrained SPF)引擎,能处理:

⏱️ 时延约束

基于 IS-IS 通告的链路时延(RFC 8570),找出"端到端时延 ≤ 5ms"的路径。

📊 带宽约束

结合 SNMP/Telemetry 实时利用率,避开"已被使用 ≥ 80%"的链路。

🎨 亲和性

"必须经过"或"必须避开"特定 Color 的链路(如绕开海底光缆)。

🔀 不相交路径

为主备双隧道找出节点/链路/SRLG 完全不相交的两条路径。

🌐 Flex-Algo

用户自定义算法(如"最低成本 + 避开 AS65001"),SID 列表自动嵌入算法编号。

⚡ 自动 BFD

SR-PCE 监控路径状态,故障时毫秒级下发新 SID 列表。

§ 3.5 第十五问:分布式与集中式,到底谁是主谁是辅?

SOCRATIC QUESTION #15

"既然 SR-PCE 这么强,是不是所有的算路都应该交给它?分布式 IGP 是不是该被淘汰?"

这是一个非常容易陷入"非此即彼"思维的问题。真正的工程智慧,是知道在什么时候用什么

FIRST PRINCIPLE · 分层职责

SRv6 的控制面是"分层职责模型",每一层解决一类问题:

层级 协议 解决什么问题 响应速度
L0 · 拓扑层 IS-IS / OSPFv3 域内拓扑同步、Locator 扩散、最短路径计算 毫秒级(故障切换 50ms)
L1 · 服务层 BGP(VPNv4/v6, EVPN, …) VPN 服务前缀分发、Service SID 携带 秒级
L2 · TE 算路层 SR-PCE / PCEP 跨域算路、多约束优化、集中式策略 秒级 ~ 分钟级
L3 · 编排层 NETCONF / gRPC / Crosswork 意图驱动配置、自动化部署、闭环验证 分钟级

这是一个"金字塔"——底层快、上层慢;底层确定性、上层灵活性。 分布式 IGP 永远不会被淘汰——它是 SRv6 的"反射神经",故障毫秒切换靠它,永远不能依赖远程控制器。 SR-PCE 是"大脑"——做需要全局视野的决策。两者协同才完美。

类比 · 人体神经系统

IGP 像是脊髓反射——你被针扎到,反射弧在脊髓就完成了缩手动作,不需要等大脑决策(毫秒级)。
SR-PCE 像是大脑皮层——决定"今天要不要出门、走哪条路"等需要全局信息和复杂判断的决策(秒级)。
如果你的所有决策都靠大脑,被针扎到的瞬间你已经被烫伤了。但如果只靠脊髓反射,你永远不会进步、不会规划。 SRv6 的控制面正是这种"反射 + 大脑"的双层架构智慧。

§ 3.6 模块 3 小结:你已经掌握了"操作系统"

🧠

如果你能用自己的话回答以下问题,你就真正理解了 SRv6 控制面的分层智慧

  1. 为什么 IGP 用来分发 Locator,而 BGP 用来分发 Service SID?两者的设计哲学差异在哪?
  2. IS-IS 相比 OSPFv3,在 SRv6 场景下有哪三个"基因优势"?
  3. BGP 在 SRv6 中有哪两个完全不同的角色?BGP-LS 是哪一种?
  4. L3VPN over SRv6 的端到端控制面交互序列是什么?Service SID 在哪一步被分配、在哪一步被通告?
  5. SR-PCE 解决了哪三类分布式 IGP 解决不了的问题?为什么"分布式 + 集中式"必须共存?

控制面的伟大,不在于谁更聪明,而在于分层职责的智慧——
让 IGP 做反射神经,让 BGP 做服务广告,让 PCE 做大脑皮层。
每一层只解决自己擅长的事,整个系统才能既稳如磐石,又灵活如水

—— SRv6 控制面分层哲学
下一模块预告 · MODULE 4 · INSTRUCTION SET

"现在你会写'地图'了。但 SRv6 的'指令集'到底有哪些?怎么组合?"

模块 4 我们将进入 SRv6 的"汇编语言手册"——RFC 8986 网络编程指令集:

  • End / End.X:基础指令家族(含 PSP/USP/USD 等 Flavor 的精确语义)
  • End.DT4 / End.DT6 / End.DT2U/M:L3VPN/EVPN 解封装指令
  • End.DX4 / End.DX6 / End.DX2: Cross-Connect 直连指令
  • H.Encaps / H.Insert:源节点的封装与插入操作
  • End.B6.Encaps / End.BM:Binding SID 的"宏指令"机制
  • 组合的艺术:用多个 SID 组装一段"网络程序"
MODULE 5 · COMPROMISE & EVOLUTION

现实妥协与 uSID 进化:从 SRH 膨胀危机到 Micro-SID 革命

①·起源 ✓ ②·数据面 ✓ ③·控制面 ✓ ④·指令集 ✓ ⑤·进化 (当前) ⑥·应用

前四章描绘的 SRv6 是一个近乎完美的理论模型——但任何工程系统,理论的优雅都要在物理世界里"交税"。 这一章我们直面 SRv6 最痛的两道伤疤:SRH 头膨胀ASIC 解析深度墙。 然后我们将看到 Cisco 是如何用一段精妙的位操作魔术——uSID(Micro-SID)——把这两个看似无解的问题彻底化解的。

§ 5.1 第二十三问:SRH 真的会"膨胀"到不可接受吗?

SOCRATIC QUESTION #23

"模块 4 我们看到一段跨域 SID 列表里塞了 4 个 SID。但真实运营商网络呢?让我们做个真实场景的算术。"

数学不会骗人。让我们用一个典型 5G 跨域承载的实际场景,算清楚 SRH 到底有多"胖"。

§ 5.1.1 真实场景的字节计算

考虑一个 5G 跨域 SR-TE 路径,需要经过 6 个段端点: RAN-PE → Aggregation-1 → ABR-1 → P-Core → ABR-2 → Aggregation-2 → DC-PE。 源节点需要在 SRH 里塞下 7 个 SID。让我们逐字节计算:

SRH 膨胀的真实账单 · 一个 7-SID 跨域路径 原始用户数据包:1500 byte 标准 MTU 假设 IPv4 + TCP + Payload 应用流量 Outer IPv6 +40 bytes (固定) SRH 头 +8 bytes (固定) SID List × 7 + 7 × 16 = 112 bytes ⚠️ 每个 SID 是 128bit / 16 byte 总封装开销:40 + 8 + 112 = ★ 160 bytes ★ ⚠️ MTU 受害最深的两个场景 场景 1:以太网默认 MTU 1500 原始可承载用户数据 = 1500 - 40(IPv4) = 1460 byte SRv6 封装后 = 1500 - 160(SRv6 总头) - 40(IPv4) = 1300 byte → 损失 11% 净荷! 场景 2:4G/5G 移动承载(典型 MTU 1400) SRv6 头占用 160 byte → 净荷只剩 1200 byte → 损失 14% 带宽 → 这意味着运营商每承载 100 Gbps 用户流量,就有 11~14 Gbps 在传"包头" ❌

这还不是最糟的。让我们考虑更极端的场景:

  • 跨 3 个 AS 的全球互联(10+ SID):SRH 长度可达 8 + 160 = 168 bytes
  • SFC 服务功能链(5 个服务节点 × 经过 5 个传输节点 = 10 SID):同样达到 160+ bytes
  • 需要 IPsec 加密时:再加 ESP 头和填充 ≈ +50 bytes,总头部接近 210 bytes,净荷损失超 15%

§ 5.2 第二十四问:能不能通过分片解决?为什么不行?

SOCRATIC QUESTION #24

"既然包头太长,那让设备分片不就行了?IPv6 不是支持分片扩展头吗?"

这是个看似合理但致命错误的提议。理解为什么"分片不是解药",能让你看清 IPv6 设计哲学的另一面。

FIRST PRINCIPLE · IPv6 分片的"原罪"

IPv6 与 IPv4 在分片处理上有一个巨大差异

  • IPv4路由器可以分片(中间节点也能切包)
  • IPv6仅源节点能分片(RFC 8200 强制要求)。中间节点遇到 MTU 不足时,必须丢包并发送 ICMPv6 Packet Too Big

为什么 IPv6 这样设计?因为分片在路由器上是性能噩梦——需要做 IP 重组、维护状态、处理乱序。 IPv6 把"路径 MTU 发现(PMTUD)"作为强制机制,让源节点动态学习最小 MTU 并主动适配。

但这套机制在 SRv6 场景下成了大坑

  • PMTUD 依赖 ICMPv6 反馈,很多防火墙默认 drop ICMPv6,PMTUD 静默失败
  • 如果源节点是"不感知 SRv6 的 CE"(普通主机),它根本不知道有 SRv6 封装开销,无法主动调整
  • 大包到达 PE 被强制丢弃,用户感受是"网络莫名其妙断流"——这是真实运营商的运维噩梦
类比 · 行李超重

IPv4 像是有人工分拣员的机场——你的行李超重了,机场会帮你分成两个包托运。
IPv6 像是全自动 RFID 通道——超重了直接扔回来,让你自己重新打包。
SRv6 在 IPv6 之上又加了 160 byte 行李——如果用户不知道这个事实,就会被"扔回来"。
所以分片不是解药,"让 SID 列表本身变短"才是唯一出路——这就是 uSID 诞生的根本动机。

§ 5.3 第二十五问:芯片解析深度墙到底是什么物理限制?

SOCRATIC QUESTION #25 · 直达硬件层

"模块 2 我提到了'解析深度墙',但没深入它的物理本质。一颗 NPU 为什么读不动 200 byte 的包头?这是软件限制还是硬件限制?"

答案:是物理限制,是芯片设计的根本约束。理解这一点,需要我们短暂深入芯片微架构。

§ 5.3.1 NPU Parser 的物理结构

FIRST PRINCIPLE · 流水线深度 = 时延 = 芯片成本

现代网络芯片(NPU/ASIC)使用流水线(Pipeline)处理报文,每个 cycle 推进一步。 Parser 单元的设计核心是"在固定时间内取多少 byte"

  • 每个 Parser 节点(Stage)通常并行解析 32~64 bytes
  • Stage 数量受芯片面积、功耗、时钟频率限制——通常 4~8 级
  • 这意味着 Parser 最大解析深度 = Stage 数 × Stage 宽度 ≈ 128~512 bytes

超过这个深度怎么办?芯片就必须做 Recirculation——把包重新回送到 Parser 入口,再来一次。 这就是 SRv6 早期最痛的"暗坑"——每多一次 Recirculation,转发性能腰斩 50%

§ 5.3.2 Recirculation 的真实代价

ASIC Pipeline Recirculation · SRv6 性能"暗坑" 情况 A:SRH ≤ 6 SID(Parser 一次过) Parser 解析包头 Lookup 查 FIB / SID 表 Modify 改 DA / SL Egress 送出 → 100 ns ✓ 情况 B:SRH 含 8+ SID(触发 Recirculation) Parser (1st) 读 IPv6+SRH 头 Recirculation Stage SID 太多,回送 Parser ↪ Loop Back Parser (2nd) 再读剩余 SID Lookup+Modify Egress → 200+ ns ❌ 💥 Recirculation 的真实代价(生产环境实测) 单包时延翻倍:100ns → 200ns,对低时延业务(金融、5G uRLLC)灾难性 芯片吞吐量减半:原本能跑满 100 Gbps 的端口,启用 SRv6 8+ SID 后实测仅 50 Gbps

这就是为什么 SRv6 早期落地遭遇"性能不行"的污名—— 不是协议本身有问题,而是SID 列表太长,触发了硬件 Recirculation。 业界共识是:SRH 中 SID 数量 ≤ 6 才能保证线速转发。 但跨域 TE 经常需要 8~10 SID——这就是矛盾的根源

§ 5.4 第二十六问:能不能"压缩"SID 列表?

SOCRATIC QUESTION #26 · 灵感时刻

"如果一个 SID 是 128 bit,其中 Locator 已经占了 48 bit,剩下 80 bit 真的都需要吗?能不能多个'微指令'共享一个 IPv6 地址?"

这正是 Cisco 工程师在 2020 年灵光一闪的问题。答案就是改变 SRv6 战局的——uSID(Micro-SID)架构

FIRST PRINCIPLE · 信息密度的革命

Clarence Filsfils 的关键洞察——"我们其实不需要每个段都用整个 128 bit"

  • 大多数 SID 真正承载的信息其实只有 16~32 bit(节点 ID + 简单 Function)
  • 剩下的 96+ bit 都是"Locator 块前缀"——但这些前缀在同一个网络里是高度重复的
  • 关键洞察:如果一组 SID 共享相同的 Locator Block(比如全网都用 fcbb:bb00::/32),那么这部分前缀只需要写一次

于是诞生了 uSID 的核心思想: "把多个 16-bit 微指令打包进一个 IPv6 地址容器,让一个 IPv6 地址承载一段路径"。 这是信息论意义上的完美压缩——剔除冗余、保留语义。

§ 5.4.1 uSID 容器的精确结构

uSID Container · 一个 IPv6 地址装 6 条微指令 bit: 0 32 48 64 80 96 128 uSID Block (32 bit) 全网共享前缀 fcbb:bb00::/32 uSID #1 16 bit 0x0001 uSID #2 0x0002 uSID #3 0x0003 uSID #4 0x0004 End-of- Container 0x0000 📦 实际 IPv6 地址 fcbb:bb00 : 0001:0002:0003:0004 :: → 一个地址 = 一段 4 跳路径! ⚡ 这意味着什么? 传统 SRv6:6 跳路径需要 6 × 16 byte = 96 byte 的 SID 列表 uSID 模式:6 跳路径只需 1 × 16 byte = 16 byte(甚至连 SRH 都不要!)→ 节省 83%
类比 · 邮政编码的智慧

想象你要把一个包裹送到"北京 → 上海 → 杭州 → 萧山区"4 个站点。
传统 SRv6:每个站点写一张完整地址("中国北京"、"中国上海"...),4 张完整地址
uSID:因为都在中国,把"中国"前缀只写一次,然后是简短的城市代码序列:CN-BJ-SH-HZ-XS——一行表达整条路径
这就是信息论中的"共同前缀压缩"——uSID 把网络的 Locator Block 当成"国家代码",把节点 ID 当成"城市代码",自然地实现了极致压缩。

§ 5.5 第二十七问:路由器到底怎么"消费"一个 uSID?

SOCRATIC QUESTION #27 · 关键技术

"既然一个 IPv6 地址装了多个 uSID,路由器怎么知道当前轮到哪个?怎么把'当前 uSID'更新为'下一个 uSID'?"

答案是 uSID 设计中最精妙的——位移操作(Bit Shift)。这是一段优雅的位运算魔术。

§ 5.5.1 uSID Shift-and-Forward 操作

FIRST PRINCIPLE · Shift 而非 Pop

传统 SRv6:用 Segments Left(指针)来定位"当前活跃 SID",每跳 SL 减 1。
uSID:用左移操作把消费完的 uSID 直接"挤出去"。

具体步骤(以 4 个 uSID 为例):

  1. 路由器发现 DA 中第一个 uSID(紧跟 Block 之后的 16 bit)匹配本地 SID 表
  2. 触发 uSID 处理:把整个 16-bit uSID "弹出"——逻辑上左移 16 bit
  3. 右侧自动"补 0"——对应那个 0x0000 End-of-Container 标记
  4. 新的 DA 自动指向"下一个 uSID",继续转发
uSID Shift-and-Forward · 位移魔术全流程 Stage 1:包到达 Node-1,DA = fcbb:bb00:0001:0002:0003:0004:: fcbb:bb00 (Block) ★ 0001 ★ 0002 0003 0004 ::0000 (空) ← 当前 uSID = 0001(本节点) ↓ 处理 0001 完成,左移 16 bit Stage 2:左移后,DA = fcbb:bb00:0002:0003:0004:0000:: fcbb:bb00 (Block) ★ 0002 ★ 0003 0004 :0000:0000 (空) → 转发去 Node-2 Stage 3:Node-2 处理 0002,再左移 fcbb:bb00 (Block) ★ 0003 ★ 0004 :0000:0000:0000 (空) ⚡ 为什么"左移"是天才设计? 硬件极致友好:左移 16 bit 是 ASIC 单 cycle 操作,比"SL 减 1 + DA 替换"更快 无需 SRH:所有 uSID 都在 IPv6 主头 DA 内!如果路径短,根本不需要 Routing Header! 完美兼容:到不识别 uSID 的旧路由器时,它会按 LPM 匹配 Block 前缀正常路由——零破坏部署
类比 · 字符串处理

uSID 的 Shift 操作,就像编程里的字符串左移
"BJ-SH-HZ-XS" → 处理完 BJ → "SH-HZ-XS-" → 处理完 SH → "HZ-XS--"
每一步都是简单的内存左移操作,不需要维护任何"指针变量"。 这就是为什么 uSID 在硬件上如此高效——它把"状态变量"(SL 指针)融化进了数据本身的位置

§ 5.6 第二十八问:uSID 怎么和传统 SRv6 共存?

SOCRATIC QUESTION #28

"如果运营商已经部署了 RFC 8986 的传统 SRv6,能不能渐进引入 uSID?两者会冲突吗?"

这是 uSID 设计中真正的"工程艺术"——它不是替代 RFC 8986,而是优雅地兼容

§ 5.6.1 GIB 与 LIB 的双层 SID 空间

FIRST PRINCIPLE · 命名空间分隔

Cisco 在 SRv6 SID 空间里巧妙划分了两类区域:

  • GIB(Global ID Block):传统 SRv6 SID 区域,使用完整 128-bit Locator + Function 编码(兼容 RFC 8986 / 8754)
  • LIB(Local ID Block):uSID 区域,每个 16-bit 微指令在本节点有局部含义

关键设计:路由器查 SID 表时,根据 IPv6 DA 自动判断"这是 GIB SID 还是 uSID Container",分别走不同处理路径。 两套机制在同一台路由器上无缝共存——运营商可以"新业务用 uSID,旧业务保留传统 SID",逐步迁移。

§ 5.6.2 真实部署:典型 uSID 编码方案

字段 长度 取值 含义
uSID Block 32 bit fcbb:bb00::/32 全网共享前缀(运营商 ULA 或 GUA 段)
uSID #1~5 每段 16 bit 0x0001~0xDFFF 节点 uSID:标识网络中具体节点(最多 65535 个,远超大多数运营商规模)
Behavior uSID 16 bit 0xE001~0xEFFF 功能 uSID:如 0xE001=End.X-Link1, 0xE002=End.DT4-VRF-A
End-of-Container 16 bit 0x0000 终结标记,路由器看到 0x0000 知道容器消费完毕

§ 5.6.3 uSID 与 SRH 的双层组合

uSID 不是完全消灭 SRH——而是把"信息密度"提升数倍。当路径超过 5~6 跳时,依然可以用多个 uSID Container 串联组成 SID List:

超长路径:用多个 uSID Container 拼接 场景:12 跳跨域路径(每个 uSID Container 装 6 跳) SegList[1] · uSID Container 1 fcbb:bb00:0001:0002:0003:0004:0005:0006 承载前 6 跳:N1 → N2 → N3 → N4 → N5 → N6 SegList[0] · uSID Container 2 fcbb:bb00:0007:0008:0009:000a:000b:E002 后 5 跳 + 终点 End.DT4 (0xE002) ⚡ 对比传统 SRv6 编码 传统 SRv6:12 跳 = 12 个 SID = 12 × 16 = 192 byte SID 列表 uSID:12 跳 = 2 个容器 = 2 × 16 = 32 byte SID 列表 → 节省 83%! 关键效果:12 跳路径不再触发 ASIC Recirculation,性能恢复线速 → 这就是 uSID 在 5G/AI 跨域大网中的杀手级价值

§ 5.7 实测性能:uSID 在 Cisco Silicon One 上的真实数据

理论再美也要有数据支撑。以下是 Cisco 在 Silicon One Q200 NPU 上的实测对比:

100ns
uSID 单跳处理时延(与原生 IPv6 持平)
0次
12 跳路径 Recirculation 次数
↓83%
SID 列表字节数减少(12 跳路径)
线速
100Gbps 端口满载,零丢包
维度 传统 SRv6(RFC 8986) uSID(Cisco Micro-SID)
SID 编码长度 每个 SID 128 bit 每个 uSID 仅 16 bit
5 跳路径开销 SRH + 5×16 = 88 byte 仅 IPv6 DA = 0 byte 额外
12 跳路径开销 SRH + 12×16 = 200 byte SRH + 2×16 = 40 byte
硬件操作 SL-1 + DA 替换(多 cycle) 单 cycle 左移
Recirculation 风险 SID > 6 时高频触发 几乎不触发(容器内 6 跳 = 1 个 IPv6 地址)
MTU 友好度 长路径吃掉 10%+ 净荷 几乎零开销
与传统 IPv6 兼容 需要 SRH 解析支持 完全 IPv6 LPM 路由兼容

§ 5.8 第二十九问:uSID 是不是"完美"了?还有什么短板?

SOCRATIC QUESTION #29 · 反思

"任何技术都有代价。uSID 解决了 SRH 膨胀,但它一定也牺牲了什么。猜猜是什么?"

这是工程师必须有的批判性思维——任何"过于完美"的方案都隐藏代价。

uSID 的工程代价

  1. 编码空间约束:16 bit 节点 ID 上限 65535,对于超大规模公有云(如 AWS Global)可能不够用,需要分层 uSID Block
  2. 标准化滞后:uSID 是 Cisco 主导的"事实标准"(IETF draft-filsfils-spring-net-pgm-extension-srv6-usid),尚未成为 RFC——其他厂商早期可能不兼容
  3. 认知曲线陡峭:从"一个 SID 一条指令"到"一个 IPv6 地址多条指令",运维心智模型需要重建
  4. 调试复杂度:抓包看到的 IPv6 DA 不是简单的"目的地址",而是"指令容器"——传统工具需要升级理解能力
  5. uSID Block 全网规划:必须从 Day-1 就确定全网共享的 32-bit Block,事后修改成本极高
FIRST PRINCIPLE · 工程权衡的真相

uSID 的故事完美诠释了工程的本质——在多个约束之间找到帕累托最优用"标准化复杂度"换"硬件性能与 MTU 友好"。 对于 5G/云/AI 这种"性能压倒一切"的场景,这是绝对划算的交易。 这也告诉我们一个真理——没有银弹,只有权衡。优秀工程师的能力,是知道在什么场景下做什么权衡

§ 5.9 模块 5 小结:你已经看清了"工程现实"

⚙️

如果你能用自己的话回答以下问题,你就理解了 SRv6 的工程演进逻辑

  1. SRH 膨胀在 7-SID 跨域路径上具体多少字节?为什么 IPv6 分片不能解决这个问题?
  2. NPU 解析深度墙的物理本质是什么?什么是 Recirculation?它对性能的影响有多大?
  3. uSID 的核心思想是什么?为什么"共享 Locator Block"的洞察如此关键?
  4. uSID 的"左移操作"相比传统 SL 减 1 有哪些硬件优势?
  5. GIB 和 LIB 是怎么实现 uSID 与传统 SRv6 共存的?
  6. uSID 牺牲了什么?为什么这些代价对运营商是可接受的?

理论上,理论与实践没有差别;
实践上,它们的差别巨大。
uSID 的伟大,在于它不是推翻 SRv6,而是用一段位运算魔术让 SRv6 真正落地

—— SRv6 工程演进哲学
下一模块预告 · MODULE 6 · APPLICATIONS

"理论、协议、工程都讲完了。SRv6 在真实业务中是怎么改变世界的?"

最终一章,我们要看 SRv6 在三个最具代表性的场景中的杀手级应用:

  • 5G 核心网切片:每个切片一个 SRv6 Flex-Algo + 独立 SLA
  • 跨域 TE:从中国到美国的端到端低时延承载,怎么靠 SRv6 + uSID + SR-PCE 实现?
  • SFC 服务功能链:把防火墙、DPI、NAT 用 SID 串成一条"服务链"
  • AI 数据中心:GPU-to-GPU 流量 RDMA over SRv6 实战
  • SD-WAN 升维:SRv6 怎么取代 IPsec 隧道
  • 结尾:完整术语表(Glossary)

请回复"继续",我会先用苏格拉底问题检验你对模块 5 的理解,然后进入终章模块 6。

MODULE 6 · APPLICATIONS · 终章

应用场景推演:SRv6 在真实战场上的范式革命

①·起源 ✓ ②·数据面 ✓ ③·控制面 ✓ ④·指令集 ✓ ⑤·进化 ✓ ⑥·应用 (当前)

协议的优雅是写给程序员看的;业务的革命才是写给世界看的。 前五章我们解构了 SRv6 的"骨骼与神经",本章我们看它如何"改变行业"—— 5G 切片、跨域 TE、服务链、AI 数据中心、SD-WAN。每一个场景都是 SRv6 真正发挥威力的舞台。

§ 6.1 第三十问:为什么 5G 切片"必须"用 SRv6?

SOCRATIC QUESTION #30

"5G 三大业务(eMBB、URLLC、mMTC)有截然不同的 SLA。传统网络也能给不同业务做 QoS,为什么必须用 SRv6 切片?"

这个问题揭示了 5G 的本质需求——不只是"区分对待",而是"硬隔离"

§ 6.1.1 5G 三大业务的"SLA 撕裂"

业务类型 典型应用 时延要求 带宽要求 可靠性
eMBB
增强移动宽带
4K/8K 直播、VR、云游戏 ~20ms 极高(10 Gbps+) 99.99%
URLLC
超可靠低时延
工业控制、自动驾驶、远程手术 ≤ 1ms 99.9999%(六个 9)
mMTC
海量物联
智慧城市、表计、传感网 ~100ms(不敏感) 极低 99%

问题:传统 QoS(DiffServ)只能"软优先级"——拥塞时高优先级先走。 但 URLLC 不是"更优先",而是"必须 1ms 内到达"—— 它需要独立的物理路径、独立的带宽、独立的转发资源。 这是 SLA 的"硬隔离",不是"软优先"。

§ 6.1.2 SRv6 + Flex-Algo + uSID 的切片实现

SRv6 的 Flex-Algo 让"每个切片用独立的算法走独立的路径"成为可能:

5G 切片 · SRv6 + Flex-Algo 实现"硬隔离" 5G gNB (基站 / RAN-PE) eMBB 切片 (Algo 0 · 默认) 大带宽路径,经核心 P 节点 URLLC 切片 (Algo 128 · 低时延) 超短路径 + 严格 BW 预留 mMTC 切片 (Algo 129 · 低成本) 最便宜路径,可绕远 5GC (UPF/AMF) 📦 SRv6 切片 SID 编码(基于 uSID) eMBB: fcbb:bb00:0001:0002:0003:E002:: (Algo 0) → 走默认 Flex-Algo URLLC: fcbb:bb01:0001:0002:0003:E002:: (Algo 128) → 严格低时延路径 ⚡ mMTC: fcbb:bb02:0001:0002:0003:E002:: (Algo 129) → 最低成本路径 → 三条切片在物理上完全隔离,但共享同一套基础设施
FIRST PRINCIPLE · 切片的本质

5G 切片 = "多个虚拟网络共享物理基础设施 + SLA 强隔离"。 SRv6 实现切片的精妙之处: 同一台路由器、同一根光纤,仅靠"不同的 Flex-Algo SID"就让数据自动走独立的路径、享受独立的带宽资源。 而且切片定义可以秒级动态调整——这是传统 MPLS 切片需要预先规划隧道完全做不到的。 这就是为什么中国移动、中国电信、Softbank、Telefonica 等头部运营商5G 承载网全面采用 SRv6

§ 6.2 第三十一问:跨国跨域 TE,到底是怎么实现的?

SOCRATIC QUESTION #31

"假设你是一家全球游戏公司,你的玩家在北京,服务器在新加坡,中间跨 3 个 AS。SRv6 怎么保证'端到端 50ms'的 SLA?"

这是 SRv6 + uSID + SR-PCE 三剑合璧的舞台。我们走一遍完整的工程实现。

§ 6.2.1 跨域 TE 的实战架构

跨国跨域 SRv6 TE · 端到端 50ms SLA 实战 Cisco Crosswork + SR-PCE 全局拓扑 + 实时算路 + 跨 AS BSID 编排 AS-A · China Telecom uSID Block: fcbb:bb00::/32 PE-A 玩家入网 P-1 ABR-A 边界 AS-B · NTT Transit uSID Block: fcbb:bb20::/32 ABR-B1 P-T ABR-B2 AS-C · Singtel uSID Block: fcbb:bb40::/32 ABR-C P-2 PE-Z 游戏服务器 eBGP eBGP BGP-LS 📦 PE-A 头节点构造的 SRv6 SID List(含跨域 BSID) SegList[0] = fcbb:bb40:0050:0070:E002:: → AS-C 内 uSID 容器(终点 PE-Z) SegList[1] = fcbb:bb20:BSID-X:: → AS-B 的 BSID(封装其内部路径) SegList[2] = fcbb:bb00:0030:0040:E001:: → AS-A 内 uSID 容器(出 ABR-A) ⚡ 关键技巧:每个 AS 用自己的 uSID Block,跨 AS 用 BSID 封装对方的内部路径 → 上游不需要知道下游 AS 内部细节,BSID 替代了"另一个 AS 的整段路径"
这正是回答模块 5 留下的问题:当跨多个 uSID Block 时(不同运营商不同 Block),BSID 是天然的"翻译层"。 上游 PE 把对方的 uSID Container 封装成一个 BSID,下游 ABR 解析后展开成本地的 uSID 列表继续转发—— 就像编程语言中跨模块调用必须经过"接口(API)"一样优雅

§ 6.3 第三十二问:服务功能链(SFC)—— 怎么把网络服务"串起来"?

SOCRATIC QUESTION #32

"企业流量需要按顺序经过:防火墙 → DPI → 负载均衡 → 业务服务器。传统方式是用 VLAN 串接 / Policy-Based Routing。SRv6 怎么做?"

传统方式叫"Service Chaining via Topology"——靠物理拓扑硬连接。SRv6 让它进化为"Service Chaining via Programming"——按 SID 列表自由编排。

§ 6.3.1 SRv6 SFC 的核心思想

FIRST PRINCIPLE · 服务即指令

把每个网络服务(防火墙、DPI、LB...)当成"网络函数(Network Function, NF)", 每个 NF 在控制器注册一个 SRv6 SID。流量按SID List 顺序逐个穿过 NF—— 这就是 SFC(Service Function Chaining)。

关键创新:NF 不需要懂路由! 它只需在收到包后处理完业务(比如防火墙过滤),然后把包送回到默认网关—— 网关就是 SRv6-aware 路由器,会根据 SRH 自动找到下一个 NF 的 SID 转发。

SRv6 SFC · 用 SID List 编排服务功能链 企业流量 (Internet 访问) 🛡️ Firewall SID: ::F001:E001 🔍 DPI SID: ::F002:E001 ⚖️ Load-Bal SID: ::F003:E001 📊 业务服务器 SID: ::F004:E002 (End.DT4) 📦 入口路由器构造的 SID List SegList[3] = fcbb:bb00:F001:E001:: (Firewall NF) SegList[2] = fcbb:bb00:F002:E001:: (DPI NF) SegList[1] = fcbb:bb00:F003:E001:: (LoadBalancer NF) ⚡ 为什么 SRv6 SFC 远胜传统方案? 动态编排:增减服务节点 = 改 SID 列表,秒级生效,无需改 VLAN/路由 服务无感知:NF 只看本地 SID,收发包就行,无需理解整条链 多链并存:不同租户/业务可定义不同链(用不同 SID List),物理设施完全共享 故障跳过:某 NF 故障时,控制器实时下发新 SID List 跳过该节点
类比 · 工厂流水线

传统 SFC 像是"焊死的流水线"——产品必须按预设物理路径走过每个工位,调整顺序要重新布置传送带。
SRv6 SFC 像是"无人车自动调度"——每个工位有 RFID 标识(SID),无人车(数据包)按"工位列表"自主导航。 增加一个工位 = 改个列表。软件定义服务编排,正是 SRv6 SFC 的核心革命

§ 6.4 第三十三问:AI 数据中心 GPU-to-GPU 流量为什么需要 SRv6?

SOCRATIC QUESTION #33 · 2026 热点

"训练大模型时,几千张 GPU 之间的 RDMA 通信对网络要求极高。SRv6 在 AI 数据中心能解决什么独特问题?"

这是 2024-2026 年 SRv6 最热门的新战场。理解这个场景,能让你看清 SRv6 在"性能+可编程"双维度的天然优势。

§ 6.4.1 大模型训练的网络挑战

典型 LLM 训练场景(如 GPT-4 级模型):

  • 规模:万卡级 GPU 集群(10000+ NVIDIA H100/H200)
  • 通信模式:AllReduce、All-to-All——每个 GPU 都和其他所有 GPU 通信
  • 带宽需求:单 GPU 网卡 400 Gbps,集群总带宽达 PB/s 级
  • 时延敏感:单次 AllReduce 时延 百微秒级——一次抖动让整个 epoch 浪费
  • 故障敏感:任何一条链路丢包都会让 NCCL 重传,整个集群效率暴跌

§ 6.4.2 SRv6 在 AI DC 的三大杀招

① 路径多样性

AllReduce 流量经常出现"大象流"——多条 ECMP 路径中只走一条,导致拥塞。 SRv6 + Flex-Algo 让控制器精确分配每条流走不同路径,实现真正的等价多路径

② 拥塞自避让

控制器实时监控每条链路 BW 利用率。检测到拥塞时, 毫秒级下发新 SID List,让流量绕开热点链路。比传统 ECMP 哈希更智能。

③ 故障快速切换

SRv6 TI-LFA(Topology Independent Loop-Free Alternate)实现 ≤ 50ms 故障切换。 NCCL 通信几乎无感知——不会触发 TCP 重连或集合通信重启。

实战案例:Meta、Microsoft Azure 的 AI 训练网络已开始采用 SRv6 over Ethernet(基于 RoCEv2), 实现 GPU 集群间的智能路径调度。Cisco Silicon One G200 NPU(51.2 Tbps 单芯片)原生支持 uSID, 为 AI Fabric 提供线速转发能力。

§ 6.5 第三十四问:SD-WAN 为什么也开始拥抱 SRv6?

SOCRATIC QUESTION #34

"SD-WAN 用 IPsec 隧道+应用感知路由不是已经很成熟了吗?SRv6 加进来有什么新价值?"

这是企业网架构师在 2025-2026 年面对的关键问题。答案藏在"隧道叠加"的深层成本里。

FIRST PRINCIPLE · 隧道蛛网的代价

传统 SD-WAN 在 N 个分支机构之间建立 N×(N-1) 的全互联 IPsec 隧道:

  • 100 个分支 = 9900 条 IPsec 隧道
  • 每条隧道维护:IKE 协商、SA 状态、密钥更新——控制面噩梦
  • 路径选择是"隧道粒度",无法做精细的应用级 TE
  • 跨运营商时还要叠加 MPLS L3VPN,双层封装开销巨大

SRv6 让 SD-WAN 演进为"无隧道隧道":分支用 SRv6 SID 直接编程路径, 路径状态在数据包里,不需要预建隧道。这就是 Cisco Catalyst SD-WAN(前 Viptela)正在融合 SRv6 的方向。

维度 传统 SD-WAN(IPsec 隧道) SRv6 SD-WAN
隧道数量 N² 全互联,控制面爆炸 无需预建,路径在包里
路径选择 隧道粒度(粗) SID 粒度(极细,可应用级)
跨运营商 叠加 MPLS,双层封装 原生 IPv6 全球可达
新分支接入 配置 N 条新隧道 分配 Locator 即可加入
故障切换 秒级(隧道重建) 毫秒级(TI-LFA)

§ 6.6 全文回环:SRv6 真正改变了什么?

走过六大模块,我们终于可以回到最初的问题——SRv6 到底改变了什么?

SRv6 范式革命的三个层次 ① 协议层革命 从"标签转发"到"网络编程" • 状态在包头,不在节点 • IPv6 地址 = 机器指令 • 协议栈精简(4→2 层) • 全球可达,主机可参与 • uSID 极致信息密度 代表技术: SRH / End.* / uSID RFC 8754 / 8986 / 9252 ② 架构层革命 从"分布式管理"到"分层智能" • IGP 反射神经(毫秒) • BGP 服务广告(秒) • PCE 大脑皮层(分钟) • 控制器+模型驱动 • 意图自动转译路径 代表技术: Crosswork / SR-PCE / BGP-LS PCEP / Flex-Algo ③ 业务层革命 从"专网叠加"到"统一可编程" • 5G 切片硬隔离 • 跨域 TE 端到端 SLA • SFC 服务链动态编排 • AI Fabric 智能调度 • SD-WAN 无隧道化 商业价值: 运维 OPEX↓ / 业务 TTM↓ 资源利用率↑ / SLA 保障

SRv6 不只是更优秀的 MPLS。
它是把网络从"管道"升维为"分布式可编程计算机"的范式跃迁。
每一个 IPv6 地址都是一条指令,每一段 SID 列表都是一段程序——
从此,网络不再是被使用的基础设施,而是可以被编程的计算引擎

—— SRv6 终极哲学
GLOSSARY · 术语表

完整术语表:SRv6 核心概念速查

一份精心编纂的术语速查手册,按"协议数据面 / 控制面 / 工程优化 / 业务场景"四类组织。 遇到不熟悉的概念时,可随时回查。

📦 数据平面术语

术语 英文全称 定义
SRv6 Segment Routing over IPv6 基于 IPv6 数据面的 Segment Routing 实现,将路径指令编码为 IPv6 地址
SRH Segment Routing Header IPv6 Routing Header Type 4,承载 SID 列表与转发状态(RFC 8754)
SID Segment Identifier 128-bit IPv6 地址,由 Locator + Function + Arguments 组成
Locator Locator SID 中的可路由前缀(通常 32-64 bit),定义"指令在哪台节点执行"
Function Function Code SID 中的指令操作码(16-32 bit),定义"做什么操作"
Arguments Arguments SID 中的指令参数(剩余 bit),如 Flow ID、Bridge Domain 等
SL Segments Left SRH 字段,剩余未消费的 SID 数量。每经过一个段端点减 1
Last Entry Last Entry SRH 字段,SID 列表的最大下标(数组长度 - 1)
End Endpoint Function 基础节点指令,按 IGP 最短路径到达节点。类似 SR-MPLS 的 Node SID
End.X Endpoint w/ Cross-Connect 邻接指令,强制经特定接口出。类似 SR-MPLS 的 Adjacency SID
End.DT4/6 End w/ Decap & Table Lookup VPN 解封装指令,剥外层 SRv6 后查 IPv4/IPv6 VRF 表
End.DX2 End w/ Decap & L2 X-Connect L2VPN 直连指令,剥外层后 L2 帧送特定接口
End.DT2U/M L2 Unicast/Multicast Table EVPN 桥接指令,单播查 MAC 表 / 多播 BUM 洪泛
H.Encaps Headend Encapsulation 源节点封装指令,把原始包整体封进 IPv6+SRH 隧道
H.Insert Headend Insert 已废弃:直接在原 IPv6 包插入 SRH(违反 RFC 8200)
BSID Binding SID "宏指令"SID,绑定一段 SR Policy。被命中时自动展开为子 SID 列表
PSP Penultimate Segment Pop Flavor 修饰符:在倒数第二跳(SL=1)弹出 SRH
USP Ultimate Segment Pop Flavor 修饰符:在最后一跳(SL=0)弹出 SRH
USD Ultimate Segment Decapsulation Flavor 修饰符:最后一跳整体剥掉外层 IPv6+SRH,送内层包
uSID Micro Segment Identifier Cisco 提出的 16-bit 微指令,多个 uSID 打包进单个 IPv6 地址
uSID Block uSID Common Block 32-bit 全网共享前缀,多个 uSID 容器共用
uSID Container uSID Container 一个 IPv6 地址容器,承载 4-6 个 16-bit uSID + End-of-Container 标记
GIB / LIB Global / Local ID Block GIB = 传统 SRv6 SID 区域;LIB = uSID 区域。两者可同节点共存

🧠 控制平面术语

术语 英文全称 定义
IGP Interior Gateway Protocol 域内路由协议(IS-IS / OSPFv3),负责拓扑同步与 Locator 扩散
IS-IS Intermediate System to IS 基于 OSI L2 的链路状态协议,SRv6 主流承载协议(RFC 9352)
LSP Link State PDU IS-IS 的链路状态报文。承载 SRv6 Locator TLV、SID Sub-TLV 等
BGP Border Gateway Protocol 跨域路由协议,在 SRv6 中分发 Service SID(RFC 9252)
BGP-LS BGP Link-State "反向"BGP,把 IGP 拓扑导出给外部 SDN 控制器(RFC 9552)
PCE Path Computation Element 集中式路径计算实体,运行 CSPF 算法解决跨域 TE 问题
SR-PCE Cisco Segment Routing PCE Cisco 基于 IOS-XR 的 PCE 实现,支持 SR-MPLS 与 SRv6
PCEP PCE Communication Protocol 头节点与 PCE 之间的通信协议,传递路径请求与响应
CSPF Constrained SPF 带约束的最短路径优先算法,支持带宽、时延、亲和性等多约束
SR Policy SR Policy 由 (头节点, Color, 终点) 唯一标识的流量工程策略,含多条候选路径
Color Color (32-bit) BGP Extended Community,标识"意图"(如低时延 = Color 100)
ODN On-Demand Next-Hop 头节点根据收到的彩色 BGP 路由自动实例化 SR Policy
Automated Steering Automated Steering (AS) BGP 服务路由自动按 (Color + Endpoint) 匹配的 SR Policy 转发
Flex-Algo Flexible Algorithm 用户自定义算法(128-255),每个算法独立 SPF + 独立 SID(RFC 9350)
Crosswork Cisco Crosswork Network Controller 思科端到端网络控制器,集成 SR-PCE + 服务编排 + AI 闭环

⚙️ 工程优化术语

术语 英文全称 定义
NPU Network Processing Unit 专用网络处理芯片(如 Cisco Silicon One)
Parser Packet Parser NPU 流水线第一阶段,解析包头字段
Parser Depth Parser Depth Wall 解析器一次能读取的最大 byte 数,超过则触发 Recirculation
Recirculation Pipeline Recirculation 包头过长时,包被丢回 Parser 重新解析,性能减半
MSD Maximum SID Depth 节点能处理的最大 SID 列表深度(IGP 通告)
PMTUD Path MTU Discovery 路径 MTU 发现机制,IPv6 强制要求源节点处理 MTU 适配
TI-LFA Topology Independent LFA 拓扑无关的快速重路由,≤ 50ms 故障切换
LFA Loop-Free Alternate 无环替代路径,故障时本地切换的备份路径
SRLG Shared Risk Link Group 共享风险链路组,主备路径必须避免落入同一 SRLG
HMAC TLV HMAC Authentication TLV SRH 中的密钥认证 TLV,防止 SRH 被篡改
SR-PM SR Performance Measurement 基于 STAMP/TWAMP 的性能测量工具集,测时延/丢包/活性
STAMP Simple Two-Way AMP RFC 8762 简单双向主动测量协议

🚀 业务与场景术语

术语 英文全称 定义
L3VPN Layer-3 VPN IP 层 VPN 服务,每个 VRF 用一个 End.DT4/6 SID 表示
EVPN Ethernet VPN 基于 BGP 的 L2/L3 VPN 控制平面,配合 SRv6 数据面
VPWS Virtual Private Wire Service 点到点 L2 VPN,用 End.DX2 实现
VPLS Virtual Private LAN Service 多点 L2 VPN,用 End.DT2U/M 实现
SFC Service Function Chaining 服务功能链,按 SID 列表顺序串接多个网络功能
NF Network Function 网络功能(防火墙、DPI、LB),每个 NF 注册一个 SID
5G Slicing 5G Network Slicing 5G 网络切片,基于 Flex-Algo 实现 eMBB/URLLC/mMTC 硬隔离
eMBB enhanced Mobile Broadband 5G 增强移动宽带切片,高带宽场景
URLLC Ultra-Reliable Low-Latency 5G 超可靠低时延切片,要求 ≤ 1ms 时延 + 6 个 9 可靠性
mMTC massive Machine-Type Comm. 5G 海量物联切片,连接密度优先
RoCEv2 RDMA over Converged Ethernet v2 以太网上的 RDMA,AI 数据中心的关键传输协议
NCCL NVIDIA Collective Comm. Library NVIDIA GPU 集合通信库,AllReduce / All-to-All 等原语
Mo6 MPLS over SRv6 MPLS 业务承载在 SRv6 underlay 上的过渡方案
6PE/6vPE IPv6 Provider Edge IPv6 业务承载在 MPLS 之上的传统方案,可与 SRv6 网关互联

🎯 学习路径建议

🔰 入门

重读模块 1(起源)+ 模块 4 的 End / End.X / End.DT4 三条核心指令。 在实验室 IOS-XR 上配置一个 L3VPN over SRv6 实例。

🚀 进阶

深入模块 2(数据面)+ 模块 3(IS-IS / BGP-LS)。 用 Wireshark 抓包分析 SRH,理解 PSP/USD Flavor 的实际效果。

⚡ 专家

精读模块 5(uSID)+ 模块 6(应用)。 部署 SR-PCE + Crosswork,在跨域场景中实施 Flex-Algo 切片与 TI-LFA 保护。

写在最后

从模块 1 我们提出"为什么 IP 网络不一定是逐跳路由"开始, 到模块 6 我们看到 SRv6 在 5G、AI、SD-WAN 中的革命应用——
我们走过了一段完整的"第一性原理 + 苏格拉底追问"的认知旅程

真正的技术理解,从来不是"记住了多少 RFC 编号",
而是"能用第一性原理推导出每一个设计决策"。
希望这份白皮书让你不只是"知道 SRv6"——而是"看懂 SRv6"。

Cisco Technical Deep-Dive · 2026
"The network is not a tube. It's a distributed programmable computer."