9. DNS Discovery of a Server (服务器的DNS发现)
本节描述了 STUN 的一个可选过程,该过程允许客户端使用 DNS 确定服务器的 IP 地址和端口。STUN 用法必须 (must) 描述是否以及何时使用此扩展。要使用此过程,客户端必须知道服务器的域名和服务名称; 用法还必须描述客户端如何获取这些信息。不推荐 (NOT RECOMMENDED) 将服务器的域名硬编码到软件中,以防域名丢失或因法律或其他原因需要更改。
当客户端希望在公共互联网中定位接受绑定请求/响应事务的 STUN 服务器时,SRV 服务名称为 "stun"。当它希望定位通过 TLS 会话接受绑定请求/响应事务的 STUN 服务器时,SRV 服务名称为 "stuns"。STUN 用法可以 (MAY) 定义额外的 DNS SRV 服务名称。
使用 [RFC2782] 中指定的 SRV 过程将域名解析为传输地址。DNS SRV 服务名称是作为此过程输入提供的服务名称。SRV 查找中的协议是客户端将在其上运行 STUN 的传输协议: UDP 使用 "udp",TCP 使用 "tcp"。请注意,目前只有 "tcp" 与 "stuns" 一起定义。
遵循 RFC 2782 的过程来确定要联系的服务器。RFC 2782 详细说明了如何对一组 SRV 记录进行排序然后尝试。但是,RFC 2782 只说明客户端应该 "尝试连接到 (协议、地址、服务)",而没有详细说明失败时会发生什么。在遵循这些过程时,如果 STUN 事务超时而未收到响应,客户端应该 (SHOULD) 向 RFC 2782 定义的顺序中的下一个服务器重试请求。这种重试仅适用于请求/响应传输,因为指示事务不生成响应或超时。
STUN 请求的默认端口是 3478,TCP 和 UDP 都使用此端口。
STUN 服务器的管理员应该 (SHOULD) 在其 UDP 和 TCP 的 SRV 记录中使用此端口。在所有情况下,DNS 中的端口必须 (MUST) 反映服务器正在侦听的端口。STUN 通过 TLS 的默认端口是 5349。如果服务器软件支持确定初始消息是 TLS 还是 STUN 消息,服务器可以在与 STUN 通过 TCP 相同的端口上运行 STUN 通过 TLS。
如果未找到 SRV 记录,客户端对域名执行 A 或 AAAA 记录查找。结果将是 IP 地址列表,每个地址都可以使用 UDP 或 TCP 在默认端口上联系,与 STUN 用法无关。对于需要 TLS 的用法,客户端使用默认的 STUN 通过 TLS 端口连接到其中一个 IP 地址。