摘要

  • RFC 791 的 Type 68 选项允许 IP 模块追加时间,并可选记录地址;四位溢出计数记录了因空间不足而无法写入的模块数。
  • 由于各处时钟可能不同步且记录容量有限,该选项留下的是部分处理观测,不是可靠的端到端时延测量。

写进数据报的一次时刻

RFC 791 定义了 Type 68 Internet Timestamp 选项。发送端在 IP 首部预留空间;每个参与处理的数据报的 IP 模块都可以写入时间值。这个 32 位数表示自午夜 UT 起经过的毫秒数。如果模块没有 UT,或时钟并非按 UT 计时,则用最高位标记该值为非标准时间。

标志位决定每个槽位记录什么。标志 0 只记录时间;标志 1 将地址与时间成对写入;标志 3 则预先列出地址,只有模块地址与下一个待匹配地址相同,才写入时间。指针指向下一个槽位。选项长度最多 40 字节,因此发送端必须决定愿意从 IP 首部中划出多少空间来记录。

这个空间限制也规定了溢出字段的含义。四位计数器记录遇到选项已满、无法追加时间的 IP 模块数量。没有空间时,模块继续转发数据报并增加计数。但若仍有空间却不足以容纳完整时间戳,或计数器本身溢出,RFC 791 将数据报视为错误,并允许发送 ICMP Parameter Problem。该字段不会指出缺失的是哪台路由器,也不会解释原因。

规范还限制了记录如何随数据包传递:分片时该选项不复制到后续分片,而且整个 IP 首部中至多出现一次。因此,不能假定每个分片都带有完整路径记录。

记录的是观测,不是经过时间

一串时间看起来像时延轨迹,但 RFC 791 并未保证时钟同步或准确,也没有保证每台路由器都会参与,更没有承诺获得完整跳点列表。每条时间都来自写入它的那个 IP 模块自己的时钟。两个数值相减,可能把时钟偏差和真实转发耗时混在一起。较稳妥的解读是:数据包可以承载有限数量的地址—时间观测,以及一个溢出计数。

后来的主机要求进一步确认这项功能是可选的。RFC 1122 将源端生成和中间处理 Timestamp 选项都列为可选行为。协议定义提供格式和规则,却不能证明主机或路由器实际部署了它。

2014 年的 RFC 7126 指出,这个选项可能泄露设备时钟、帮助推测网络拓扑,也可用于设备指纹识别。该 RFC 称,普遍丢弃此类数据包使这些技术几乎无法使用,并建议路由器、安全网关和防火墙应当丢弃携带该选项的数据包。这是该 RFC 的安全建议和描述,不是对今天所有网络的测量。

它说明了可观测性的边界:带内记录可以留下有用线索,也可能不完整、依赖时钟并占用有限首部空间。格式说明参与的模块可以写什么;某条记录缺席,并不能证明路径上没有经过某一跳。

来源