首页/网络/协议速查/EDNS(0) 与 1232 字节缓冲
DNS 与域名解析60 条

EDNS(0) 与 1232 字节缓冲

EDNS0 扩展把 UDP DNS 报文从 512 字节放大;怕分片被丢,社区共识(DNS Flag Day 2020)是协商值 ≥1232。

协议速查网络更新于 2026-10-13

EDNS 与缓冲协商

原始 DNS 规定 UDP 响应不超过 512 字节,超出就置 TC 标志让你改用 TCP。EDNS(0) 通过附加区里的 OPT 伪记录把上限拿出来协商,让大响应能直接走 UDP。问题是过大的 UDP 响应会被 IP 分片,而分片在中间设备上常被丢弃或拦截,于是业界形成共识:协商值 1232 字节(DNS Flag Day 2020),在减少 TCP 回退与避免分片之间取平衡。

基本信息

承载方式附加区 OPT 伪记录
协商内容UDP 载荷上限、扩展标志、EDE 等选项
社区共识值1232 字节
旧值512 字节(无 EDNS 时的硬上限)
超限后果置 TC 标志,解析器改用 TCP

验证协商结果

验证协商结果
dig +bufsize=1232 example.com +noall +comments   # 观察 udp 行通告的上限
dig +bufsize=4096 example.com +noall +comments   # 对比大缓冲的实际生效值
dig example.com +ignore                          # 忽略截断,看完整响应
dig +tcp example.com +noall +comments            # 强制 TCP 对照

常见缓冲值与含义

通告值来源含义
512无 EDNS 或老设备一旦超限就回 TC,强制走 TCP
1232现代解析器与服务端避免分片,同时覆盖绝大多数响应
4096 / 65535部分开放解析器容易被分片拦截,反而更易失败
0个别实现表示不支持 EDNS 扩展

典型使用场景

  • DNSSEC 环境:签名记录体积大,512 字节下几乎必然 TC 回退到 TCP
  • 大 MX、TXT 与 CDN 多值解析:记录集天然超过经典上限
  • 防火墙策略审查:确认是否误拦了必要的分片或 TCP 53
  • 解析器调优:核对服务端实际生效的缓冲值与文档写在纸面的是否一致
  • 排障对比:用固定 bufsize 复现问题,缩小变量范围
中间防火墙拦掉 IP 分片同时又禁掉 TCP 53,会让大响应域名的解析随机失败——这正是 1232 共识要解决的问题。若必须放宽 UDP 缓冲,请先确认链路上没有丢分片的策略。
OPT 记录还承载扩展错误码(EDE)等选项:服务端可以带上具体原因,如签名过期、网络不可达、被策略拦截,比只回一个 SERVFAIL 有用得多。抓包时若在附加区完全看不到 OPT 记录,说明对端根本不支持 EDNS,行为会回退到 512 字节的经典限制。

易错点

  • 只把服务端缓冲调大到 4096,却不管链路上丢分片:失败概率反而上升
  • 禁掉 TCP 53 出站后只测小记录:日常正常,遇到大响应就间歇解析失败
  • 以为 EDNS 是应用层可选项,忽略它是通过 OPT 记录在报文里真实协商的
  • 用 +ignore 抓到完整响应就判定链路无问题,忽略解析器本身仍在按 TC 走 TCP 重试

数据来源与参考

  • RFC 6891(EDNS0)
  • DNS Flag Day 2020 公告

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌