跳到主要内容

12. 与 RFC 3489 的向后兼容性 (Backwards Compatibility with RFC 3489)

本节定义允许在一定程度上与 RFC 3489 [RFC3489] 中定义的原始协议保持向后兼容的过程. 此机制是可选的, 仅在新客户端可以连接旧服务器或反之亦然的情况下使用. 用法必须定义是否以及何时使用此过程.

Section 19 列出了本规范与 RFC 3489 [RFC3489] 之间的所有变化. 但是, 并非所有差异都重要, 因为 "classic STUN" 只以少数特定方式使用. 就本扩展而言, 重要变化如下. 在 RFC 3489 中:

  • UDP 是唯一支持的传输.

  • 现在作为 magic cookie 字段的字段曾是 transaction ID 字段的一部分, 使 transaction ID 长度为 128 bit.

  • XOR-MAPPED-ADDRESS 属性不存在, Binding 方法改用 MAPPED-ADDRESS 属性.

  • 有三个 comprehension-required 属性 RESPONSE-ADDRESS, CHANGE-REQUEST 和 CHANGED-ADDRESS, 它们已从本规范中移除.

    • CHANGE-REQUEST 和 CHANGED-ADDRESS 现在是 NAT Behavior Discovery 用法 [BEHAVE-NAT] 的一部分, 另一个属性已被废弃.

12.1. 客户端处理的变化 (Changes to Client Processing)

希望与 [RFC3489] 服务器互操作的客户端应该向服务器发送使用 Binding 方法, 不包含任何属性, 并以 UDP 作为传输协议的请求消息. 如果从服务器收到成功响应, 该响应将包含 MAPPED-ADDRESS 属性, 而不是 XOR-MAPPED-ADDRESS 属性. 试图与旧服务器互操作的客户端必须准备好接收二者之一. 此外, 客户端必须忽略响应中可能出现的任何保留的 comprehension-required 属性. 在 Section 18.2 的保留属性中, 0x0002, 0x0004, 0x0005 和 0x000B 可能出现在符合 RFC 3489 的服务器发出的 Binding 响应中. 除此变化外, 响应处理与本规范描述的过程相同.

12.2. 服务器处理的变化 (Changes to Server Processing)

STUN 服务器可以通过 magic cookie 字段中缺少正确值来检测给定 Binding 请求消息是否来自 RFC 3489 [RFC3489] 客户端. 当服务器检测到 RFC 3489 客户端时, 它应该将 Binding 请求中 magic cookie 字段看到的值复制到 Binding 响应消息的 magic cookie 字段中, 并插入 MAPPED-ADDRESS 属性而不是 XOR-MAPPED-ADDRESS 属性.

在少数情况下, 客户端可能包含 RESPONSE-ADDRESS 或 CHANGE-REQUEST 属性. 在这些情况下, 服务器会将它们视为未知的 comprehension-required 属性, 并以错误响应回复. 由于使用这些属性的机制已不再受支持, 此行为是可接受的.

RFC 3489 版本的 STUN 缺少 magic cookie 和 FINGERPRINT 属性, 而这二者可以在 STUN 消息与其他协议复用时以很高概率正确识别 STUN 消息. 因此, 与 RFC 3489 向后兼容的 STUN 实现不应该用于 STUN 将与另一种协议复用的场景. 但是, 这应该不是问题, 因为 RFC 3489 中并没有这种复用.