Skip to main content

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

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

第19节列出了本规范与 RFC 3489 [RFC3489] 之间的所有更改。但是,并非所有这些差异都很重要,因为 "经典 STUN" 仅在几种特定方式中使用。就本扩展而言,重要的更改如下。在 RFC 3489 中:

  • UDP 是唯一支持的传输。

  • 现在是魔术饼干字段的字段是事务 ID 字段的一部分,事务 ID 长 128 位。

  • XOR-MAPPED-ADDRESS 属性不存在,绑定方法使用 MAPPED-ADDRESS 属性代替。

  • 有三个必须理解属性,RESPONSE-ADDRESS、CHANGE-REQUEST 和 CHANGED-ADDRESS,已从本规范中删除。

    • CHANGE-REQUEST 和 CHANGED-ADDRESS 现在是 NAT 行为发现用法 [BEHAVE-NAT] 的一部分,另一个已被弃用。

12.1. Changes to Client Processing (客户端处理的更改)

希望与 [RFC3489] 服务器互操作的客户端应该 (SHOULD) 发送使用绑定方法、不包含属性并使用 UDP 作为传输协议的请求消息到服务器。如果成功,从服务器收到的成功响应将包含 MAPPED-ADDRESS 属性而不是 XOR-MAPPED-ADDRESS 属性。寻求与旧服务器互操作的客户端必须 (MUST) 准备好接收任何一个。此外,客户端必须 (MUST) 忽略可能出现在响应中的任何保留的必须理解属性。在第 18.2 节的保留属性中,0x0002、0x0004、0x0005 和 0x000B 可能出现在符合 RFC 3489 的服务器的绑定响应中。除此更改外,响应的处理与本规范中描述的过程相同。

12.2. Changes to Server Processing (服务器处理的更改)

STUN 服务器可以通过魔术饼干字段中缺少正确值来检测给定的绑定请求消息是否是从 RFC 3489 [RFC3489] 客户端发送的。当服务器检测到 RFC 3489 客户端时,它应该 (SHOULD) 将在绑定请求中的魔术饼干字段中看到的值复制到绑定响应消息中的魔术饼干字段,并插入 MAPPED-ADDRESS 属性而不是 XOR-MAPPED-ADDRESS 属性。

客户端可能在极少数情况下包含 RESPONSE-ADDRESS 或 CHANGE-REQUEST 属性。在这些情况下,服务器将把这些视为未知的必须理解属性,并回复错误响应。由于使用这些属性的机制不再受支持,因此此行为是可接受的。

RFC 3489 版本的 STUN 缺少魔术饼干和 FINGERPRINT 属性,这些属性允许在与其他协议多路复用时非常高概率地正确识别 STUN 消息。因此,与 RFC 3489 向后兼容的 STUN 实现不应该 (SHOULD NOT) 在 STUN 将与另一个协议多路复用的情况下使用。但是,这不应该是问题,因为 RFC 3489 中不提供此类多路复用。