dig +stats 提供精确的 query time(服务器响应时间)和缓存/递归信息,比 time dig 更准;server 显示本地地址说明命中缓存;查 ttl 需用 +noall +answer,权威值需直连 ns;+trace 可定位解析卡点。

用 dig +stats 看单次解析耗时和完整链路
延迟不是靠 time dig 估算的,dig 自带的统计信息更准:它会明确告诉你“QUERY TIME”(服务器响应时间),以及是否走了缓存、是否触发了递归。执行 dig example.com +stats 后,末尾会出现类似这样的输出:
;; Query time: 42 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Sat Sep 20 17:21:33 CST 2026 ;; MSG SIZE rcvd: 65
注意两点:
-
Query time是从发包到收到 DNS 响应的毫秒数,不包含本地处理开销,是真实网络+服务端延迟 - 如果
SERVER显示的是你本机或局域网地址(如127.0.0.53或192.168.x.x),说明命中了本地缓存或 stub resolver,这个时间不能代表公网 DNS 延迟 - 想绕过本地缓存直测上游,必须加
@DNS_IP,例如dig @8.8.8.8 example.com +stats
查 TTL 值确认记录是否已更新生效
DNS 修改后“到底有没有生效”,关键不是看能不能解析出 IP,而是看返回的 TTL 是否已变为你新设的值。TTL 决定了这条记录在各级缓存中还能活多久。
执行 dig example.com A +noall +answer,输出形如:
example.com. 300 IN A 93.184.216.34
其中 300 就是当前缓存中的 TTL(单位秒)。对比你刚在 DNS 控制台设置的 TTL(比如改成了 60),如果仍是旧值(比如 3600),说明权威服务器还没同步,或中间某层缓存还没过期。
- 若要确认权威服务器当前真实 TTL,强制查权威源:
dig @ns1.example.com example.com A +noall +answer(需先用dig example.com NS找出权威 NS) - 别依赖
dig +short,它不显示 TTL;也别只看ANSWER SECTION是否有结果,NXDOMAIN 也可能带 TTL - 不同地区看到的 TTL 可能不同——这是正常现象,说明各地递归服务器缓存未同步
用 dig +trace 定位卡在哪一级解析环节
当解析慢或失败,但 dig @8.8.8.8 又正常,说明问题出在本地到递归 DNS 的链路上,或者递归服务器本身行为异常。dig +trace 会模拟整个递归过程,逐级打印每一步查询结果和耗时。
运行 dig example.com +trace,你会看到类似:
; > DiG 9.16.1-Ubuntu > example.com +trace ;; global options: +cmd . 518400 IN NS a.root-servers.net. ;; Received 239 bytes from 127.0.0.53#53(127.0.0.53) in 0 ms com. 1728000 IN NS a.gtld-servers.net. ;; Received 488 bytes from 198.41.0.4#53(a.root-servers.net) in 22 ms example.com. 172800 IN NS ns1.example.com. ;; Received 169 bytes from 192.5.6.30#53(a.gtld-servers.net) in 143 ms
重点看每段的“Received … in X ms”:
- 根服务器响应慢(>100ms)→ 全球根节点或你到根的路由有问题
- TLD 服务器(如
com.的 NS)响应慢 → 顶级域服务商或你到它的链路异常 - 最后一跳权威 NS 响应慢或超时 → 权威服务器宕、防火墙拦截、或你被限速
- 如果卡在某一级没继续往下走,大概率是那台服务器没响应,或你的 UDP 53 被丢包
nslookup 不适合测延迟,但可快速验证递归行为
nslookup 默认不显示耗时,也没有内置统计字段,不能替代 dig +stats 测延迟。但它有个不可替代的用途:交互式切换 DNS 服务器,快速比对不同递归节点的行为差异。
例如:
$ nslookup > server 8.8.8.8 Default server: 8.8.8.8 > example.com > server 114.114.114.114 Default server: 114.114.114.114 > example.com
这种交互方式比反复敲 dig @xxx 更快,尤其当你需要连续测试多个域名、多个 DNS 地址时。
- 注意
server命令后不能加#53,否则会报错;端口只能通过set port=5353改 -
nslookup的timeout和重试次数默认较宽松,有时会掩盖真实超时问题;dig更可控(可用+timeout=1 +tries=1) - 某些老系统或容器镜像里
nslookup功能受限(如不支持set),优先确保dig可用











