跳到主要内容

7. Protocol Version Negotiation (协议版本协商)

路由器必须通过发出重置查询或序列查询来启动每个传输连接。此查询将告诉缓存路由器实现的此协议版本。

如果支持版本 1 的缓存收到指定版本 0 的路由器的查询, 缓存必须降级到协议版本 0 [RFC6810] 或发送带有错误代码 4 ("Unsupported Protocol Version") 的版本 1 错误报告 PDU 并终止连接。

如果支持版本 1 的路由器向仅支持版本 0 的缓存发送查询, 将发生以下两种情况之一:

  1. 缓存可能终止连接, 可能带有版本 0 错误报告 PDU。在这种情况下, 路由器可以使用协议版本 0 重试连接。

  2. 缓存可能以版本 0 响应进行回复。在这种情况下, 路由器必须降级到版本 0 或终止连接。

在上述任何降级组合中, 版本 1 的新功能将不可用, 所有 PDU 的版本字段都将为 0。

如果任一方在此协商期间接收到包含无法识别的协议版本 (既不是 0 也不是 1) 的 PDU, 它必须降级到已知版本或终止连接, 除非接收到的 PDU 本身是错误报告 PDU, 否则使用错误报告 PDU。

路由器必须忽略在此初始启动期间可能从缓存接收到的任何序列通知 PDU, 无论序列通知 PDU 中的协议版本字段如何。由于会话 ID 和序列号值特定于特定协议版本, 通知中的值对路由器没有用。即使这些值有意义, 处理通知的唯一效果也将触发与路由器已作为尚未完成的版本协商过程的一部分发送的完全相同的重置查询或序列查询, 因此在版本协商完成之前处理通知没有任何收获。

缓存不应在版本协商完成之前发送序列通知 PDU。但是, 路由器必须处理此类通知 (通过忽略它们), 以便与提供协议版本 0 的缓存向后兼容。

一旦缓存和路由器通过上述协商过程就协议版本达成一致, 该版本在会话的生命周期内是稳定的。有关协议版本和会话 ID 之间交互的讨论, 请参见第 5.1 节。

如果任一方在上述协商完成后接收到不同协议版本的 PDU, 该方必须断开会话; 除非包含意外协议版本的 PDU 本身是错误报告 PDU, 否则断开会话的一方应发送错误代码为 8 ("Unexpected Protocol Version") 的错误报告。