经典 DNS 传输
传统 DNS 大量使用 UDP 53(低延迟、不加密),大响应/可靠传输/区域传送用 TCP 53;EDNS(0) 提供更大 UDP 载荷、DO 位、ECS、Cookie、Padding 与 Extended DNS Errors 等扩展。
#type / concept
#status / growing
#tech / network
#protocol / dns
[!info] related notes
经典 DNS 传输
一句话定义
经典 DNS 主要跑在 UDP 53(无连接、低延迟、不加密),在响应被截断、DNSSEC 大报文、区域传送或需要可靠传输时改用 TCP 53;EDNS(0)(RFC 6891)则提供可扩展机制来突破原始限制。
核心机制 / 工作原理
UDP 53
DNS → UDP → 端口 53
优点:无连接建立、延迟低、开销小。 缺点:不加密、易被观察/篡改、大报文可能 IP 分片、丢包靠应用层重试。
TCP 53
用于:
- UDP 响应被截断(TC 位置 1,客户端改用 TCP 重取)
- DNSSEC 导致响应变大
- 区域传送(AXFR/IXFR)
- 网络要求更可靠传输
现代 DNS 实现必须支持 TCP,运营网络不应拦截 TCP 53。
EDNS(0)
原始 DNS UDP 报文有大小限制,EDNS 提供扩展:
- 更大的 UDP Payload(如 1232/4096 字节)
- DO 位:请携带 DNSSEC 记录
- ECS:携带客户端子网(见 edns-client-subnet-ecs)
- Cookie:轻量防放大/防欺骗
- Padding:填充以混淆长度(隐私)
- Extended DNS Errors (EDE):给出更细的错误原因
最小例子 / 最小场景
dig +edns +dnssec anyrouter.top A # 启用 EDNS 并请求 DNSSEC 数据
dig +tcp anyrouter.top A # 强制走 TCP 53
边界与易混淆点
- 「永远只用 UDP」是误解:TCP 是标准路径之一,拦截 TCP 53 会破坏大响应与区域传送。
- 大 UDP 报文易分片,现代实践倾向限制 UDP 响应大小、必要时切 TCP(避免分片导致的丢包难排查)。
- UDP 明文 = 旁观可见、可篡改;要保密需 DoT/DoH/DoQ(见 dns-over-tls-dot 等)。
- EDNS 是「能力协商层」,DO/ECS/Padding 等都是它的选项,不是独立协议。