摘要

  • RFC 3968 补上 RFC 3261 留下的登记缺口,为 SIP 头字段参数及参数值建立 IANA 注册表,记录字段、名称、预定义值标记与定义它的 RFC。
  • 登记能固定公开含义并降低意外重名,却不证明某台终端实现了参数、识别了取值、同意执行或产生了安全结果。

封闭网络里的两个设备可能共享一个自创参数。发送端写出名称,接收端按约定解释,业务连续运行多年。这样的成功很真实,却只证明双方在那段时间拥有同一份本地知识。它没有为名称建立公共归属。

RFC 3968 正是从这道缝隙入手。RFC 3261 允许扩展定义新的 SIP 头字段参数和参数值,却没有为它们建立 IANA 注册表。不同实现者可能独立挑中同一个短名称,用来表示互不相同的功能;消息语法仍然像是正确的,语义却已经分叉。

2004 年 12 月发布的 RFC 3968 要求,每项登记都指明参数所在的头字段、参数名称、是否只接受预定义值,以及给出定义的 RFC。该 RFC 必须完整说明语法、预期用途与语义。目标不是给实现颁发证书,而是让独立实现能找到同一出处,并避免命名空间中的意外碰撞。

今天能工作,不等于明天仍拥有名称

登记后的名称成为保留字,使用方式必须与定义它的 RFC 一致。本地参数不得与已登记项冲突。但 RFC 3968 没有宣布所有未登记参数无效,它只是明确指出风险:新的 RFC 随时可能登记一个同名项,而既有私有部署无法要求公共命名空间迁就自己。

于是,“观察到功能正常”与“拥有公开命名权”是两种证据。前者来自运行时交换,后者来自可归属的登记流程。私有参数成功运行不能推导出全网唯一;公共登记存在也不能推导出旧终端已经升级。

这也是为什么参数身份不能只存一个字符串。RFC 3968 允许相同名称出现在不同头字段中,只要求同一头字段内的参数名称各不相同。字段是身份的一部分。日志若只留下 q、tag 或 algorithm,就可能在精确匹配字符串的同时匹配错对象。

Yes 不是值列表

注册表中有一列说明参数是否只接受预定义值。看到 Yes 很容易误以为这一行已经包含完整枚举。RFC 3968 的设计恰好相反:为避免大量子注册表,它按引用登记参数值。实现者要沿着原始 RFC 和后来增加取值的 RFC 查找;新增取值的文献以双括号表示。

所以,一张复制下来的表格不是可执行契约。脱离引用后,它只剩官方外观,失去了语法、条件和安全说明。没有观察时间的旧快照还可能漏掉后来登记的值。可靠实现要保存“字段—参数—引用集合—读取时间”,而不是把 Yes 变成未经验证的硬编码清单。

RFC 3968 采用 RFC 2434 当时所称的 IETF Consensus,并要求由 RFC 定义,但该 RFC 不一定属于标准轨。RFC 8126 后来把登记概括为:在命名空间里把某个值关联到一种用途。这个定义的边界很清楚——登记负责分配,不负责执行。

终端是否理解,要由终端留下证据

SIP 的运行时扩展协商存在于另一层。RFC 3261 定义了 Supported、Require、Proxy-Require、Unsupported 与 420 响应。终端可以声明支持、要求对方理解,或指出无法支持的扩展。它们是特定参与者在特定事务里产生的回执。

IANA 行记录不会自动生成这些回执,也不会说明设备的软件版本、启用模块或部署策略。即便终端声明支持,也不保证当前请求会通过授权、参数校验和后续业务步骤。能力、接受与结果仍要分开。

RFC 3261 还要求服务器在遇到不理解且非处理必需的头字段时忽略它并继续。消息最终到达,可能是因为扩展被正确执行,也可能是因为扩展完全没有被理解。包没有被丢弃,不等于参数产生了作用。

前缀无法替代登记元数据

RFC 3427 曾尝试通过 P- 前缀和审查流程管理初步、私有或专有的 SIP 头字段,因为新功能可能增加复杂性或损害安全。但名称上的边界没能限制部署范围。RFC 5727 记录,一些 P- 字段已经扩散到原定封闭环境之外;庞大的安装基础又使改名几乎不可行,于是特殊流程被废止。

RFC 6648 将教训推广到 X- 等命名方式:不能仅凭前缀有无判断标准化状态或安全性。生命周期、审查与信任都应存放在显式元数据和引用里,不能压缩进拼写。

初始注册表本身也说明统一行格式不等于统一机制。RFC 3310 涉及认证参数,RFC 3265 涉及事件,RFC 3455 涉及私有网络扩展,RFC 3329 涉及安全协商。注册表把入口排成一列,却没有把风险和行为变成同一件事。

今天的 IANA SIP Parameters 是由多个子注册表组成的动态索引。RFC Editor 页面、勘误记录 与 IETF Datatracker 能证明文档状态,不能证明部署比例、互通成功率或安全收益。

RFC 3968 的历史价值,在于把“这个词是谁定义的”变成可核验事实。至于某台机器懂不懂、做没做、结果如何,仍需各自的运行时证据。

来源