DNS 查询默认走 UDP 53:查询是典型的一问一答短事务,UDP 无握手、无连接状态,开销最小,一台服务器可支撑海量并发查询。但三种情况下切换到 TCP 53:1)响应超过 512 字节(传统限制,不含 DNS 扩展头)——服务器在 UDP 响应里置 TC(截断)位,客户端收到后改用 TCP 重新查询;2)区域传送(AXFR/IXFR)——主从 DNS 之间同步整个区域数据,数据量大且必须可靠完整,只能 TCP;3)现代 DNS 数据变大(DNSSEC 签名记录、大量 TXT 记录)使 TCP 查询越来越常见。
EDNS0(扩展 DNS)是对 512 字节限制的缓解:客户端在 OPT 伪记录里声明自己能接收更大的 UDP 报文(常见 1232 或 4096),避免轻易回退 TCP。但 UDP 大包又面临 IP 分片被中间设备丢弃的问题,所以实际部署中 UDP 缓冲尺寸的取值是一门平衡术。安全考点:UDP 无连接使 DNS 易被伪造源地址放大攻击(DDoS 反射放大的主力);DNS over TCP/TLS/HTTPS 改善了完整性与隐私但增加时延。追问方向:为什么 DNS 放大攻击不用 TCP(三次握手验证源地址)、DoT(853 端口)与 DoH(走 443 的 HTTPS)的区别与审查规避争议、DNS Cookie 对伪造的防护。
(约 460 字)