EDNS0 与尺寸协商
EDNS0 是域名系统的扩展机制:查询时会附带一条选项记录,声明本方一次能接收多大的 UDP 载荷(常见 1232 或 4096 字节),同时承载扩展结果码与一些标志位。这个协商值直接决定大响应会不会被截断——值偏小会让本可一次返回的答案被迫走截断与重试,值偏大在部分链路上又会触发分片,丢一片就得整体重来。排查「响应不完整」与「解析时快时慢」时,核对这个协商值是关键一步。
基本信息
| 适用平台 | Wireshark / tshark,解析 DNS 的扩展选项记录 |
|---|---|
| 相关字段 | dns.opt.udp_size、dns.opt.do |
| 常见声明值 | 1232、4096 |
| 无扩展时 | 回落到 512 字节上限,大响应必然截断 |
典型使用场景
- 解析结果不完整,确认是否为协商尺寸偏小导致的截断
- 解析偶尔变慢,判断是否因分片丢失而反复重试
- 核对设备是否剥离或改写了扩展选项记录
- 在 DNSSEC 场景确认关注标志位是否已置位
- 对比改造前后协商值的变化,验证配置是否生效
- 为解析器与中间设备的能力评估提供实测数据
过滤与查看
过滤与查看
dns.opt.udp_size > 1232 # 声明了较大的载荷
dns.opt.udp_size >= 4096 # 常见的大值声明
dns.opt.do == 1 # 关注标志位置位(DNSSEC 相关)
# 无 OPT 记录时上限回落到 512 字节,大响应必然截断
# 同一域名分别抓客户端侧与解析器上联口,核对协商值是否被改写字段逐项读法
| 字段 | 含义 | 异常信号 |
|---|---|---|
| udp_size | 本方声明的可接收载荷上限 | 明显偏小会让大响应反复截断 |
| do 标志 | 是否请求相关附加数据 | 置位后响应体积会增大,需配合尺寸协商 |
| 扩展结果码 | 承载更细的失败原因 | 与基础结果码不一致时按工具显示为准 |
| 记录是否存在 | 是否启用扩展机制 | 缺失说明基础实现,上限固定为 512 |
声明的上限大于路径可承载的最大长度时会依赖分片,分片中丢一片就导致整体重试,实际表现可能比小值更差。
中间设备可能改写或剥离扩展记录,判断以接收端实际看到的报文为准,单看发送端配置容易得出错误结论。