摘要

  • RFC 8402、8754、8986 和 9256 把 Clarence Filsfils 与一条可核验的技术链条联系起来:定义 Segment Routing 指令模型、在 IPv6 数据包中承载分段列表、在端点执行有界行为,并在 SR Policy 中校验和选择候选路径。
  • 这些 RFC 都是多人共同完成的 IETF 成果。它们不能证明某个人独自发明了 SRv6,也不能证明某个运营商采用了特定方案或获得了特定性能;它们能够证明的是署名贡献和规范所界定的处理边界。
  • 可编程网络并不会取消边界,反而要求更严格的标识、能力清单、策略来源、有效性判断、转发面观测和回退记录。真正的控制来自运行中的行为与记录相符,而不是来自架构口号。

从公开技术轨迹出发,而不是制造个人神话

IETF Datatracker 中的 Clarence Filsfils 个人页面,为名字与多项路由标准之间提供了可核验的连接。本文只选取其中四份相互关联的文档。RFC 8402 说明 Segment Routing 架构;RFC 8754 定义 IPv6 的 Segment Routing Header,也就是 SRH;RFC 8986 以分段所关联的行为为中心描述 SRv6 网络编程;RFC 9256 则规定 SR Policy 的标识、候选路径、偏好、有效性与流量引导关系。

这组材料足以说明 Filsfils 是观察 SRv6 架构演进的一位合适人物,却不足以把整个领域归结为个人作品。RFC 8402 将 Clarence Filsfils 和 Stefano Previdi 列为编辑,同时署名 Les Ginsberg、Bruno Decraene、Stephane Litkowski 与 Rob Shakir。RFC 8754 的署名包括 Filsfils、Darren Dukes、Previdi、John Leddy、Satoru Matsushima 和 Daniel Voyer。RFC 8986 的署名包括 Filsfils、Pablo Camarillo、Leddy、Voyer、Matsushima 与 Zafar Ali。RFC 9256 则由 Filsfils、Praveen Talaulikar 和 Ketan Talaulikar 共同署名。

准确保留共同署名并不是礼仪问题,而是理解互联网工程如何发生的一部分。作者定义接口和边界,工作组进行讨论和评审,实现者把语义写入代码,设备厂商决定能力范围,运营者配置策略并承担业务风险。这些层面互相依赖,但没有任何一层能够代表全部。

因此,本文关注的不是未经证实的私人动机、公司决策或部署成绩,而是公开规范中可被检查的对象。Filsfils 的技术轨迹提供了连续的观察窗口;网络的真实状态仍然由实际实现、配置、转发表和数据包决定。

RFC 8402:指令首先需要明确的作用域

RFC 8402 把 Segment Routing 描述为一种由源节点或路径头端通过有序分段列表引导数据包的架构。一个分段可以表达节点、邻接、服务或其他已定义的处理指令。列表表达了路径意图,却不会凭空创造执行这项意图所需的能力。

这里的“源”不能理解为拥有全球控制权的中心。头端只能在自己的信息范围、策略范围和管理域内作出决定。它必须知道相关拓扑,必须确认沿途设备理解分段含义,还必须满足安全和资源限制。列表一旦离开其信任边界,其他网络可以过滤、忽略或拒绝其中的要求。

Segment Routing 还可以使用不同的数据平面。在 SR-MPLS 中,分段常以标签表达;在 SRv6 中,分段以 IPv6 标识并与具体行为关联。共同的抽象不会消除封装、栈深、MTU、硬件处理、安全模型和可观测性上的差异。笼统地说一台设备“支持 Segment Routing”,并不能说明它真正支持哪些分段和行为。

因此,运营控制的第一步不是扩大使用范围,而是写清作用域:哪些系统可以生成列表,哪些标识空间由谁维护,哪些节点具备相应能力,信任域在哪里结束,以及数据包跨越边界时会发生什么。只有把这些条件写入记录,规范中的指令才会变成可以问责的运营对象。

短列表背后可能是很长的依赖链

分段列表在界面上可能只有几项,却压缩了大量前置判断。每个标识必须在相应范围内保持唯一并拥有当前含义;生成列表时使用的拓扑必须足够新;节点必须具备资源和处理能力;策略必须允许相应动作;数据包尺寸还要符合路径实际承载条件。

这意味着一条列表可以在语法上完全正确,却在运行中失真。邻接可能已经撤销,标识可能被重新分配,软件声称支持的功能可能无法进入硬件快速路径,列表深度可能超过设备上限,控制器缓存的拓扑也可能落后于实际变化。

在安装之前,系统需要重建依赖链:哪项业务需求产生了策略,哪一个拓扑版本参与计算,能力数据来自哪里,哪些权限允许使用相应分段,设备是否确认安装。脱离这些引用,列表只是一串看似有序的值。

安装后的观测也需要同样的关联。仅仅看到目的地址可达,不能证明数据包使用了预期候选路径,更不能证明每个行为按策略执行。计数器、日志、转发表和数据包样本需要能够回到同一策略标识。

撤回时仍要沿着依赖链工作。删除一个候选路径之前,应知道哪些策略正在选择它;释放一个分段标识之前,应知道是否仍有活动引用。缺少引用关系的回退容易留下孤立状态,也可能把流量推向从未评估的替代路径。

分段标识构成一个本地运营登记系统

分段标识并不都来自全球登记机构。许多标识存在于一个 IGP 域、一个运营者管理的标签空间,或一组本地配置的 SRv6 行为中。本地性并不会降低记录要求,只是明确了由谁维护这份记录、哪些系统必须保持一致。

一份可用的登记应把标识与行为、作用域、所有者、兼容平台、创建时间、版本和当前状态关联起来。它还应保留修改和撤销历史,避免一个已经释放的值在旧策略或缓存尚未消失时被重新赋予新的含义。

唯一性只是基础。两个不同标识仍可能指向不兼容行为;一个唯一标识也可能因为缺少授权来源而不安全。运营意义上的准确性包括唯一性、语义、来源、时效和责任人。

这与互联网号码资源的治理有相似之处。登记的目的不是让记录本身成为凌驾于网络之上的主权,而是让多个运行系统对一个值的含义和变更历史保持足够一致。最终要判断的仍是代码和转发面是否执行了登记所描述的动作。

运营团队应周期性地把记录与设备比较。文档中存在、设备上不存在的行为是一种差异;设备上存在、记录中没有当前条目的行为也是差异。每项差异都需要明确决定:修复配置、更新记录、撤销功能,或在查清前禁止新的引用。

RFC 8754:SRH 把意图送到执行边界

RFC 8754 定义 IPv6 Segment Routing Header。SRH 在数据包中携带分段列表和处理状态,使节点能够知道当前分段以及后续处理顺序。规范同时把该机制放在 SR 域的边界内讨论,而不是把 IPv6 地址的全球可达性误解为全球执行权限。

SRH 让控制面与转发面之间的分界变得具体。控制面选择了列表,数据包负责携带列表,接收节点则根据本地实现、配置和策略决定是否执行。标准化让格式和语义可以互通,但不会迫使一个不属于该管理域的节点接受任意行为。

域边界是安全条件。运营者需要规定哪些来源可以引入 SRH、允许从哪些接口进入、能够调用哪些行为、深度上限是多少,以及异常数据包如何处理。没有这些限制,网络编程会把控制能力扩展到无法问责的范围。

SRH 还会增加数据包开销。更长的分段列表和可选信息会占用更多字节,其影响取决于 MTU、封装方式、中间设备和硬件解析能力。只测试最短列表,不能证明实际业务所需的最大情况能够安全运行。

观测工具必须理解处理过程。系统应该区分被接受、被拒绝、格式错误和未经授权的 SRH,并显示当前处理的分段以及产生列表的策略。否则,抓包能够看到字节,却无法回答是谁、为什么把这些字节放到了链路上。

安全边界必须通过失败场景来证明

技术演示通常展示成功到达的数据包,运营测试则必须同样重视本应失败的情况。未经授权的来源、过深的列表、不一致的字段、不存在的行为和不允许的状态转换,都应产生可以预期的结果。

测试拒绝路径有两层价值。第一,它证明配置中的安全意图确实成为了运行行为;第二,它暴露失败如何被记录。设备可能正确丢弃数据包,却没有留下足够信号;也可能把异常情况送到通用处理器,从而造成资源风险。

测试还应覆盖状态变化。行为在被策略引用时撤销会怎样,控制器重连后重新发送旧状态会怎样,软件升级或硬件替换过程中能力发生变化又会怎样。许多真实故障并不发生在稳定状态,而发生在两个正确状态之间的过渡期。

一张有效的测试矩阵应列出来源、接口、深度、行为、版本和预期结果,并用计数器、日志和数据包观察逐项确认。结论必须绑定具体配置和版本,而不能写成“SRH 已被证明安全”的永久判断。

控制结论的作用域能够提升证据质量。某平台、某版本、某组行为通过测试,只说明这个组合已通过。它不会自动覆盖其他深度、其他功能和其他网络。保留边界使测试结果能够被正确复用,而不是被宣传语放大。

数据包尺寸与设备能力属于真实语义

RFC 描述格式和行为,设备则以有限资源执行这些格式和行为。可处理的列表深度、可安装的策略数量、可分配的计数器、异常路径处理方式,都会决定架构在现实中是什么样子。

能力清单必须绑定版本。一次软件升级可能增加功能、改变上限,也可能引入回归。仍在读取静态清单的控制器,可能继续生成已经无法安装的列表。配置接口接受请求,不代表硬件转发面已经接受。

状态模型需要区分“收到意图”“策略有效”“条目已安装”和“行为已观察”。其中一层失败时,上一层不能继续被显示为最终成功。否则,控制器界面与网络实际状态会产生危险的时间差。

能力的准确性也影响投资。某项需求可能需要更深的列表、更多表项或新的解析能力。运营者可以选择升级设备、限制使用范围,或采用其他技术。标准的存在不会替代成本与替代方案比较。

把限制写清有助于连续性。系统可以在业务依赖一个不存在的能力之前拒绝激活,也可以避免为了少数路径而进行无差别升级。真实能力而非架构口号,应该决定部署边界。

RFC 8986:网络编程是调用有定义的行为

RFC 8986 以分段关联行为来描述 SRv6 网络编程。“行为”是理解这一模型的关键。数据包不是携带任意程序,而是携带一个标识;本地节点已经配置了该标识对应的功能,并根据本地策略决定是否允许执行。

某些行为推进到下一个分段,某些行为可以查询特定转发表、使用邻接、执行解封装,或把流量连接到服务上下文。每一种变体都带来不同依赖。查询表依赖表内状态,邻接行为依赖链路,解封装则跨越外层与内层上下文的边界。

统一的行为名称让控制器与设备能够讨论同一功能,却不会剥夺节点的自主权。运营者仍然决定启用哪些行为、放置在哪里、允许哪些来源使用,以及如何观察其结果。只实现规范中的一个子集,并不必然意味着实现不完整。

选择行为应从明确需求出发。因为目录中存在某项功能就全部启用,会增加未被观测和未被测试的表面积。一个规模较小、但拥有所有者、证据和回退方式的功能集合,可能比一个庞大目录更可靠。

Filsfils 在这里的公开贡献边界是清楚的:他是这份多人共同署名 RFC 的作者之一。该文档定义了行为模型,但不证明某家厂商的性能,也不证明某个运营者采用了特定行为。实现和运营证据需要来自其他材料。

不同行为要求不同的证据

两个格式相似的分段,可能带来完全不同的后果。普通转发行为需要确认下一跳;查询本地表的行为需要确认表和上下文;解封装行为需要明确外层与内层数据包之间的安全策略;邻接行为则依赖一个随时可能变化的资源。

因此,“SRv6 能工作”的通用测试意义有限。每一种行为都需要自己的前置条件、预期动作和后置条件。前置条件包括能力、配置、授权和资源状态;预期动作描述具体处理;后置条件则通过计数器、转发表、数据包和业务结果来确认。

这种粒度也改善故障定位。如果策略有效但行为计数器保持为零,问题可能出在流量引导;如果计数器增长而业务失败,问题可能在本地动作或后续路径;如果策略本身失效,则应回到候选来源、约束和分段列表。

回退需要使用同样粒度。一个有问题的行为可以从列表中移除,一个候选路径可以失效,一个业务流可以退出策略。因为单一行为失败就关闭整个 SRv6 域,可能扩大影响并破坏其他无关服务。

组织还应使用稳定标识,把变更请求、策略、候选、分段列表、行为和观测结果关联起来。没有共同标识,各团队可能都保存了正确片段,却无法重建一条完整的决策链。

版本化能力,避免自动化编程过去

自动化依赖数据作出决定。如果数据仍描述上一版本设备,速度只会加快错误。SRv6 能力清单应把节点与硬件、软件、行为、深度、资源和已知限制绑定。

每项能力还需要时间和来源。直接从设备读取的状态,与人工维护表格拥有不同可信度;实验室结果也不能自动代表生产设备。记录来源能够帮助系统决定一项数据可以使用多久,以及何时必须重新核验。

升级前后需要可比较的快照。变更前记录策略、行为、计数器和重要业务;变更后重新核验能力与安装状态。如果某项行为消失或上限改变,依赖它的候选路径应在接收流量之前被判为无效。

失败状态必须传递给作出决策的层。仅仅发出人工告警可能不够,因为控制器仍可能把候选视为有效。系统需要把本地安装失败向上传递,又不能借此自动选择一个未经评估的替代路径。

版本化还能帮助解释成本。如果只有部分节点需要某项能力,清单可以精确指出升级范围。如果收益不足,运营者可以限制用例。架构应适应真实网络,而不是要求真实网络服从一个静态图示。

RFC 9256:策略需要标识与来源

RFC 9256 定义 SR Policy 架构。策略由路径头端、颜色或意图以及端点共同标识,并可以包含多个候选路径。每个候选都拥有来源、偏好、有效性和一个或多个分段列表。

标识可以避免把看似相似的决定混在一起。到达同一端点的两个策略,可能服务不同业务或约束。颜色可以区分服务意图,头端说明决定在哪里执行,端点则界定路由目标。

候选来源同样重要。本地计算、外部控制器提供和人工配置的路径并不等价,它们可能拥有不同信任程度、生命周期和撤销流程。如果没有来源记录,一个偏好数字无法解释为什么某个候选值得被激活。

偏好只能在有效候选之间排序。偏好高但拓扑陈旧、能力不足或约束不满足的候选,不应凭数字获胜。系统应先判断存在性、能力、约束和时效,再比较仍然合格的对象。

策略登记还应保留历史:哪个候选曾经激活、为什么被替换、哪些流量使用了该策略。没有历史的策略今天可能正常,明天却无法解释。

有效性必须先于偏好

偏好把复杂选择压缩成顺序,使用起来很方便,但它不能取代有效性判断。候选路径可能因为拓扑变化、能力丢失、管理约束、分段列表缺失或来源消失而失效。

有效性也不能只在创建时检查一次。拓扑持续变化,设备会升级,来源会断开。每个候选都需要明确的失效条件和重新评估机制。没有收到更新,不能自动等同于对象仍然有效。

当前候选失效时,过渡行为必须预先定义。系统可以选择另一个有效候选、撤回策略,或把流量送回常规路由。不同业务可能需要不同处理,不能在事故发生时临时猜测。

中间状态要能够被看见:策略可能存在候选却没有有效候选;候选可能已选择但列表尚未安装;列表可能已经安装但没有流量关联。把这些状态都显示为“活跃”,会掩盖故障所在。

运营者可以测量系统发现、传播和完成失效状态的时间。这比笼统的收敛承诺更有价值,因为它能指出哪一层保留旧状态,以及业务在过渡中是否仍走一条可以解释的路径。

流量引导决定谁承担策略风险

已经安装的策略不一定影响任何数据包。流量引导依据目的地址、服务、颜色或其他条件,把流量与策略关联起来。这是一项独立决定,也需要独立所有者。

把安装与流量引导分开,可以支持渐进部署。运营者可以先安装并观测策略,再接入测试流量,随后扩大到有限业务,同时保留回到常规路由的出口。

这种分离也会产生新的风险。策略变化时,流量引导可能仍然存在;规则可能覆盖超过预期的流量;候选撤销后,关联关系可能把业务送到从未验证的替代结果。因此,评审必须同时比较策略对象和流量关联。

指标应显示每项策略承载多少流量、当前候选是什么、业务结果如何。只有策略计数而没有流量上下文,无法判断影响;只有业务指标而没有策略标识,也无法解释变化原因。

回退必须包括流量引导。删除列表却保留关联规则,可能触发隐含行为。正确关闭应在变更后检查策略、候选、安装、流量关联和业务结果。

从拓扑到数据包的证据链

四份 RFC 可以组成一条责任链。Segment Routing 架构定义指令,SRH 在 IPv6 中携带列表,SRv6 行为执行本地功能,SR Policy 选择候选路径,流量引导则决定哪些数据包使用它。

任何一层都不能自动证明下一层。列表格式正确,不代表域会接受 SRH;SRH 被接受,不代表行为已经安装;行为存在,不代表策略仍然有效;策略有效,也不代表流量正在使用它或业务达到目标。

证据需要逐层推进。拓扑和能力支持候选,策略状态说明选择,转发表确认安装,计数器说明处理,数据包样本展示实际字段,业务测量给出最终结果。

故障分析可以逆向走完这条链。如果业务失败,先确定哪些流量被关联,再查当前候选、列表、行为和链路。这种方法能够定位具体接口,而不是把责任推给抽象的“控制器”或“网络”。

共同标识是连接证据的关键。变更请求、策略、候选、配置和观测都应能够互相引用。没有共享身份,即使每份证据本身正确,也可能属于另一个时刻或另一个业务。

按各层真实权力分配责任

可编程网络把决定分散给架构、平台、自动化、运营和安全团队。有效治理要求每个团队为自己真正掌握的权力负责。架构团队定义管理域和批准的行为目录,平台团队确认能力,自动化系统负责计算和安装,运营团队观察并恢复,安全团队控制来源与边界。

这种分工不能留下空白。控制器提供候选时,需要有人为数据来源负责;节点安装行为时,需要有人维护能力清单;流量规则启用时,需要业务所有者理解可能后果。

权限应跟随分工。能够计算候选的系统,不一定需要修改本地行为或边界过滤器;能够启用流量引导的角色,也不一定需要管理全局行为目录。最小权限可以缩小错误和凭据泄露的影响。

协调应依赖共同对象,而不是只依赖会议。策略标识和变更标识能够跨系统连接决定。自动检查可以在安装之前要求能力、来源、有效性和回退方式全部存在。

问责不等于把全部权力集中到一个系统。多个所有者可以并存,只要边界清楚、记录可以衔接,并且没有一项重要决定隐藏在“另一层应该已经检查”的假设里。

分阶段部署才能保留选择

部署可以拆成拥有独立验收条件的步骤。首先核验节点能力,然后测试基本可达性,再引入有限行为。策略可以先安装而不关联业务流量,之后再接入小规模测试流量。

每个阶段都应说明前进证据与后退动作。缺少计数器的安装不应接收生产流量;拒绝路径尚未测试的行为不应扩大来源;必须手工重建大量状态的回退还不能视为可靠出口。

分阶段只有在混合状态可见时才有效。迁移期间,一部分节点或业务可能使用 SRv6,另一部分仍使用常规路径。清单、看板和操作程序必须显示这种差异,不能用一个全局“已迁移”标签掩盖。

扩展应跟随证据,而不是跟随日期。如果某阶段出现差异,应在当前范围修复。带着未解释问题继续扩大,只会把局部不确定性变成系统性债务。

保留选择还包括维护替代路径。常规路由、另一个候选或上一版本策略都可能成为回退方式,但替代方案也需要测试。一个从未演练过的出口只是设想。

看似合规的系统仍会出现典型故障

实现可能接受全部配置,却在运营上失败。控制器可能使用过期能力,标识可能保留旧含义,列表可能超过硬件上限,行为可能进入低速处理路径,SRH 也可能在未建模的边界被拒绝。

有效性层面有另一组问题。候选来源消失后,状态可能没有撤销;偏好可能让已经不满足约束的对象继续激活;策略可能显示有效,但对应列表并未安装。

流量引导也可能单独出错。规则覆盖的流量多于预期,或在策略删除后继续存在。业务可能落到从未测试的替代行为,聚合计数器则可能把少量严重影响隐藏在总量中。

观测界面同样会因为简化而误导。进程存活不代表转发项存在;“策略活跃”也可能没有区分候选选择、列表安装和流量关联。

这些故障需要不同证据。格式合规、能力、安装、处理和业务结果是五项独立判断,不存在一个指标可以替代全部。

撤回动作应与激活动作保持同样粒度

可逆性应在设计时形成,而不是事故发生后补写。能够在数秒内启用策略,却需要长时间人工操作才能撤销,说明自动化只覆盖了生命周期的一半。

精确回退能够限制影响。候选失败时选择另一个候选,行为失败时绕开相应分段,单个业务异常时撤回它的流量关联。因为一个功能出错就关闭整个 SRv6 域,会伤及无关服务,也会丢失定位证据。

撤销还要遵循引用关系。移除标识或行为前,检查哪些策略仍在引用;删除策略前,检查流量引导。完成后重新比较转发表、计数器和业务结果。

被撤销的对象同样需要记录。历史能够解释为什么一个值不能立即重用,也能帮助重建事故。配置消失并不等于工作结束,只有实际状态完成对账、依赖关闭,撤回才算完成。

这是一种具体的运营连续性。它不承诺永不故障,而是保留发现差异、限制影响、恢复可解释路径的能力。

公开材料能够支持哪些结论

本文列出的公开材料能够证明 Clarence Filsfils 在 RFC 8402、8754、8986 和 9256 中被署名,并能证明这些文档的共同作者、发布日期和技术内容。因此,可以把他的公开技术轨迹与 Segment Routing 架构、SRH、SRv6 行为模型和 SR Policy 联系起来。

这些材料不能证明个人独自发明整个体系。RFC 8402 署名六人,RFC 8754 署名六人,RFC 8986 署名六人,RFC 9256 署名三人。工作组参与者、评审者、实现者与运营者也构成技术结果的一部分。

材料也没有说明哪些网络使用每项行为、某个雇主作出了哪些决定、哪些客户获得何种结果,或哪种平台达到特定性能。本文不需要用这些未经证实的断言填补故事。

准确边界同时保护人物和读者。它避免把私密动机或未测量成绩归给个人,也不会削弱可以核验的贡献。

最终形成的是一篇工程分析,而不是形象宣传。人物名称帮助读者沿着连续文档理解问题,系统现实仍由实现、策略和运行团队决定。

这条轨迹为什么对可编程网络重要

关于可编程网络的讨论常以速度和灵活性开始。Filsfils 的公开文档轨迹提供了另一种起点:为了让一个动作能够被解释和撤销,网络中必须有哪些对象。答案依次经过分段、SRH、行为、候选路径、策略和流量引导。

每个对象都增加能力,也增加义务。分段表达指令,却需要作用域;SRH 携带列表,却需要边界;行为执行功能,却需要能力;候选路径提供选择,却需要来源和有效性;流量引导接入业务,却需要所有者和出口。

自动化可以高速处理这些对象,却无法替代赋予它们意义的证据。当标识、版本或观测缺失时,速度只会增加尚未对账的状态数量。

规范的价值在于把可以核验的层面分开。运营者因此能够设计控制和诊断,指出到底缺少哪项证据,而不是用模糊的“网络异常”概括。

可编程网络走向成熟的标志,不是它能发布多少指令,而是指令始终小于容纳它的边界,并且运行行为的权重高于架构口号。

结论:编程意味着能够解释,也能够撤回

把四份 RFC 连起来看,会看到一套由有界承诺组成的架构。指令拥有标识和作用域,头部拥有处理规则和管理域,行为拥有本地语义与能力,策略拥有候选、来源、偏好和有效性,流量则通过引导规则进入策略。

信任来自这些承诺与证据的连接。能力清单确认设备条件,登记记录标识和变更,转发表证明安装,计数器证明处理,业务测量证明结果。

同一条链必须支持撤回。引用可以被找到,候选可以失效,流量可以退出策略,行为可以在已知范围内停用。回退不是对失败的妥协,而是安全变化的前提。

公开记录允许把 Clarence Filsfils 与组织这条链条的多人规范贡献联系起来,却不允许把它改写成个人独创或部署保证。保留这一界限本身就符合本文讨论的架构原则:每项声明都必须有自己的作用域。

真正成熟的网络编程,不以发出指令的数量衡量,而以能够说明、观察和撤回多少指令衡量。这正是这些文档共同呈现的运营边界。

来源

Clarence Filsfils 的 IETF Datatracker 个人页面

RFC 8402:Segment Routing 架构

RFC 8754:IPv6 Segment Routing Header

RFC 8986:SRv6 网络编程

RFC 9256:Segment Routing Policy 架构