dig 解析耗时与解析器对比
DNS 解析耗时直接影响新建连接的速度,也是不少「首次访问慢、之后正常」问题的根因。dig 输出的 Query time 给出单次查询的耗时,用同一个域名对比不同解析器,可以判断延迟来自本地转发链路还是上游解析器本身。
基本信息
| 基本查询 | dig +stats example.com @8.8.8.8 |
|---|---|
| 只看结果 | dig +short example.com |
| 强制 TCP | dig +tcp +stats example.com |
| 关注行 | SERVER 行与 Query time 行 |
| 前置确认 | 本机是否经本地缓存或 systemd-resolved 转发 |
典型使用场景
- 新建连接耗时偏高,确认解析环节是否拖慢
- 对比多个解析器的响应表现,为选型提供依据
- 排查解析超时导致的间歇性访问失败
- 验证不存在的域名是否快速返回而不是长时间等待
- 对比 TCP 与 UDP 查询的差异,判断是否走了回退
查询与对比
查询与对比
dig +stats example.com @8.8.8.8 # 指定解析器并输出耗时
dig +short example.com # 只看解析结果
dig +tcp +stats example.com # 强制 TCP 查询,观察差异
for s in 8.8.8.8 1.1.1.1; do dig +stats example.com @$s | grep -E 'SERVER|Query time'; done # 横向对比输出判读
| 输出项 | 含义 | 判读 |
|---|---|---|
| SERVER | 实际应答的解析器地址 | 确认查询是否被转发 |
| Query time | 本次查询耗时(毫秒) | 需多次采样后看稳定值 |
| ANSWER SECTION | 返回的记录内容 | 核对是否命中预期记录 |
| status | 应答状态码 | SERVFAIL 说明解析侧有问题 |
| flags | 应答标志 | 关注是否被截断或需重试 |
判读注意
- 先确认本机是否经本地缓存转发,否则对比的是转发链路而非远端解析器
- 同一域名对比多个解析器,避免本地缓存造成的偏差
- 单次查询受缓存命中状态影响,需要多次采样
- 把解析耗时与连接建立耗时放在一起看,才能定位完整瓶颈
查询结果被缓存时分母不同:命中缓存与回源查询的耗时差异很大,比较解析器质量时要固定条件,例如都查同一个不存在或未缓存的域名。
TCP 回退与高延迟同时出现时,通常指向应答被截断或链路丢包,而不是解析器本身慢,需要结合链路质量一起判断。