1. 引言 (Introduction)
大多数 DNS [RFC1034] 事务通过 UDP [RFC768] 进行. TCP [RFC793] 始终用于完整区域传送 (使用 AXFR), 也常用于大小超过 DNS 协议最初 512 字节限制的报文. DNS Security (DNSSEC) 和 IPv6 的部署不断增长, 增大了响应大小, 因而也增加了 TCP 的使用. 由于 TCP 能够防范地址伪造, 从而防止 DNS 被用于反射/放大攻击, 增加 TCP 使用的需求也随之受到推动. 现在, TCP 已广泛用于 Response Rate Limiting [RRL1] [RRL2]. 此外, 近期关于 DNS 隐私解决方案 (如 [DNS-over-TLS]) 的工作, 也是重新审视 DNS-over-TCP 要求的另一个动因.
[RFC1123] 第 6.1.3.2 节指出:
DNS resolvers and recursive servers MUST support UDP, and SHOULD support TCP, for sending (non-zone-transfer) queries.
然而, 一些实现者把上面引用的文本理解为: TCP 支持是 DNS 协议的一项可选功能.
大多数 DNS 服务器运营者已经支持 TCP, 且大多数软件实现的默认配置也支持 TCP. 本文档的主要读者是那些 TCP 支持有限的实现者, 这种有限支持会限制互操作性并阻碍新的 DNS 功能部署.
因此, 本文档更新 DNS 核心协议规范, 规定自此以后, 对 TCP 的支持是完整 DNS 协议实现的 REQUIRED 组成部分.
增加 TCP 使用既有若干优点, 也有若干缺点 (见 Appendix A), 还需要考虑一些实现细节. 本文档处理这些问题, 并将 TCP 表述为 DNS 的一种有效传输替代方案. 它扩展了 [RFC5966] 的内容, 纳入了来自 DNS 以及其他 Internet 协议中 TCP 研究, 开发和实现经验的额外考量与经验教训.
虽然本文档没有对 DNS 服务器运营者提出必须满足的具体要求, 但确实为运营者提供了一些建议, 以帮助确保其服务器和网络上的 TCP 支持处于最佳状态. 需要注意的是, 不支持 TCP (或在网络层阻断 DNS over TCP) 很可能导致解析失败和/或应用层超时.