摘要

  • RFC 3485 要求所有 SIP/SDP SigComp 实现预装同一份不可变、逐字节确定的静态状态,使首条消息也能引用常见字符串。
  • 附录中的可读词表只解释材料来源;真正决定互通的是第三节的规范二进制值、状态标识、长度和精确访问区间。

压缩通常依靠过去:已经出现的字段、重复的值、上一条消息留下的状态。可是首条 SIP 消息没有过去。RFC 3485 的办法不是等待第二条,而是在对话开始之前,为两端制造一段共同记忆。

这段记忆必须付出严格代价。用于 SIP/SDP 的每个 SigComp 实现都必须拥有唯一的静态字典,而且字典不随 SIP 或 SDP 的演进而演进。它只定义一次,永远保持原样。这样,发送首条压缩消息之前就不必追问远端支持哪个版本。

双方同意的不是一份大致相同的词汇清单,而是一项精确 SigComp 状态。第三节固定了完整状态标识、0x12E4 的长度、六字节最小访问长度和全部二进制值。示例 STATE-ACCESS 使用六字节部分标识,是借助 SigComp 的状态匹配规则找到那个完整对象,并没有创造一个较短的新状态。

因此,文档内部的权威层级很重要。附录 A、B 列出 SIP 与 SDP 输入字符串、优先级、偏移、长度和来源规范,方便人阅读,但它们是说明性材料。第三节的二进制表示才是规范对象。两个实现即使收集了相同单词,只要其中一个字节或位置不同,就不再共享同一状态。

二进制值由两个区域连接而成。字符串子集让所有输入材料都作为某段子串存在;表格子集为各条目保存一字节长度和两字节偏移,并在偏移上加 1024,以便字典加载到 UDVM 地址 1024 后直接引用。一般算法可使用字符串区域,LZ78 相关方法还能用表格初始化标记。

空间会被重叠复用。多个头字段可以共享同一前缀,再由不同条目指向剩余部分。响应码既有“代码加空格”的条目,也有“代码加建议原因短语”的条目,因为代码是规范语义,原因短语只是建议文本。两个逻辑条目可以落在同一片字节上,却由不同表项描述。

消息格式本身也是证据。字典匹配区分大小写,头字段常常连同前一个 CRLF、冒号和预期空格一起保存。合法 SIP 消息若采用另一种允许的空白方式,可能得到较少收益。概念相同不等于字节相同。

一到五的优先级表达设计者对出现频率的估计,数值越低,预期越常见。高频材料被排列到适合某些算法高效引用的位置。这不是后来网络的流量统计,也不能拿来证明某个词今天仍最常用。

优先级同时提供内存裁剪边界。RFC 给出了只装优先级一、优先级一至二、一至三或一至四时,字符串区域与表格区域各自的精确偏移和长度。选择较小切片不是协商出一个“精简新版”,而是在同一不可变状态内访问一个规定区间。

审计若只记录“使用静态字典”,仍然缺乏决定性细节。必须保存部分标识、STATE-ACCESS 的偏移与长度、访问的是字符串还是表格,以及哪一级切片。即便如此,也只能证明访问动作;它并不自动证明解压成功。

成功解压仍不等于 SIP/SDP 有效,更不等于身份可信、消息送达或会话建立。RFC 3320 已经占据 UDVM 执行与应用授权持久状态的边界;RFC 3321 处理动态状态确认与留存;RFC 3322 的数字属于简化模型。RFC 3485 只负责首条消息之前那份预置记忆。

后续文档补充了脉络。RFC 3486 规定 SIP 如何表示 SigComp,RFC 4464 解释使用方法,RFC 4465 测试字典访问,RFC 4896 重述优先级布局,RFC 5049 要求 SIP/SigComp 支持这份字典。RFC 5112 为 presence 另建一份静态字典,而不是悄悄修改 RFC 3485,这恰好证明不可变规则的含义。

安全章节很短:RFC 3320 的安全考虑继续适用,本文没有已知新增风险。这句话不是认证承诺。知道正确标识不能证明发送者身份、授权、完整性、传输结果或应用结果。

规范也没有提供某个生产部署或实际压缩率。它解释为何预置状态能改善最初消息,尤其适合窄带链路,但算法、消息内容、格式、切片和链路条件都会改变测量结果。

沿用 Heng Lu 的现实层方法,第一步应哈希完整规范状态并核对标识、长度和最小访问长度。第二步保存部分标识及所有 STATE-ACCESS 操作数,解析实际字节区间。第三步对照解压轨迹。最后才连接协议解析、认证、传输和会话结果。

RFC 3485 的历史交易非常清楚:它给首条消息借来一段并不存在的共同过去。这个过去之所以可信,正因为它不是一本可以修订的书,而是一块封存的字节阵列;任何“新版”都会破坏第一条消息赖以起步的确定性。

来源