经典 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 53EDNS(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 等都是它的选项,不是独立协议。
创建于 2026/7/31 更新于 2026/7/31