5. 传输协议选择 (Transport Protocol Selection)
[RFC1123] 第 6.1.3.2 节更新如下: 所有通用 DNS 实现 MUST 同时支持 UDP 和 TCP 传输.
-
权威服务器实现 MUST 支持 TCP, 这样它们就不会把响应大小限制在单个 UDP 分组可容纳的范围内.
-
递归服务器 (或转发器) 实现 MUST 支持 TCP, 这样它们就不会阻止来自支持 TCP 的服务器的大型响应到达其支持 TCP 的客户端.
-
存根解析器实现 (例如操作系统的 DNS 解析库) MUST 支持 TCP, 因为否则会限制其自身客户端与上游服务器之间的互操作性.
关于何时使用 UDP 或 TCP 的选择, RFC 1123 第 6.1.3.2 节还说:
... a DNS resolver or server that is sending a non-zone-transfer query MUST send a UDP query first.
此要求在此放宽. 存根解析器和递归解析器 MAY 根据本地运行原因选择发送 TCP 或 UDP 查询. TCP MAY 在发送任何 UDP 查询之前使用. 如果解析器已经有一条到服务器的打开 TCP 连接, 它 SHOULD 复用该连接. 本质上, TCP 应被视为 UDP 的一种有效替代传输, 而不只是重试选项.
此外需要注意, 所有递归服务器和权威服务器 MUST 使用查询到达时所用的同一传输来发送响应. 对于 TCP, 这也 MUST 是同一条连接.