DNS 性能 · 测试与选型

DNS 性能怎么测?
从 dig 到 DNSPerf 的完整指南

"哪个 DNS 快"不是玄学。搞懂延迟由哪几段构成、用 dig 的 Query time 实测、参考 DNSPerf 全球榜单,再按决策表对号入座。

Query timedig 输出的耗时字段
RTT × 查询链延迟两大来源
缓存命中快与慢的分水岭
实测为王别凭感觉选 DNS
TL;DR · 核心结论

DNS 解析延迟 = 你到解析器的网络 RTT + 递归查询链跳数 + 缓存命中与否。测量方法:用 dig @指定DNS 域名 看输出末尾的 Query time(毫秒),先预热缓存再连测 5–10 次取平均;横向比较可参考 DNSPerf 全球公共 DNS 测速榜。结论:缓存命中时各家差距很小(个位数毫秒),真正拉开差距的是你到解析器的物理距离与可用性——国内日常选就近的阿里/DNSPod 加密端点,隐私优先选 Cloudflare,自建 DNS 只在你出口质量好时才可能更快。

Anatomy of Latency

DNS 解析延迟由哪几段构成?

先理解延迟从哪来,才知道该优化哪里

一次解析耗时不是单一数字,而是几段叠加。理解它,你就能解释"为什么同一台 DNS 有时快如闪电、有时突然变慢":

  • ① 网络往返 RTT:你的设备到递归解析器之间的网络延迟。解析器节点离你越近(同城/同运营商),这一段越小;跨网、跨境时这一项就能到几十上百毫秒。
  • ② 递归查询链:缓存未命中时,解析器要逐级问根、TLD、权威服务器。每一级都是一次额外 RTT,未命中冷查询可能比缓存命中慢 3–10 倍。
  • ③ 本地与解析器缓存:操作系统、浏览器、递归解析器都会缓存结果。命中缓存时整个查询只剩你→解析器这一跳,通常 1–10 毫秒。

由此得到一个反直觉但重要的结论:日常浏览中 90% 以上的解析都是缓存命中,所以公共 DNS 的"榜单速度"和你实际体感未必一致——真正影响体感的是缓存未命中时的那几次冷查询,以及解析器在高峰期是否会超时、丢包。

CLI Measurement

用 dig / nslookup 实测延迟

Query time 字段就是你要的答案

# 指定阿里公共 DNS 解析 example.com,看末尾 Query time dig @223.5.5.5 example.com # 输出末尾长这样: # ;; Query time: 12 msec # ;; SERVER: 223.5.5.5#53(223.5.5.5) # 只看答案与耗时,干净一点: dig @223.5.5.5 example.com +short # 连测 10 次求平均(bash): for i in $(seq 1 10); do dig @223.5.5.5 example.com | grep "Query time"; done # Windows 用 nslookup 指定服务器: nslookup example.com 223.5.5.5

测准的四个要点

  • 先预热再测:第一次查询必冷启动(缓存未命中),测出来的是"坏成绩"。先跑 2–3 次让缓存热起来,再开始计时。
  • 多测取平均:单次 Query time 波动很大,连测 10 次去掉最大最小值再平均,才有可比性。
  • 固定对比条件:测 A vs B 时,用同一个测试域名、同一时段、同一网络,否则变量没控制。
  • 换"没见过"的域名测冷查询:缓存全命中时各家都快,想测递归链速度,用 +tries=1 随机子域名测未命中场景。

dig 的完整参数说明可参考 Arch Wiki 的 Dig 条目;Windows 用户用 nslookup 域名 DNS服务器IP 同样能指定服务器对比。

Third-party Tools

第三方测速工具:DNSPerf 怎么用

本机之外,看全球监测点的长期数据

本机实测只反映你这一条网络路径。想看"这个公共 DNS 在全球/全国范围内到底快不快、稳不稳",权威做法是参考 DNSPerf(dnsperf.com)——它从全球多个监测点持续向各大公共 DNS 发起解析查询,统计平均延迟与成功率,按国家和地区排出榜单。

用法很简单:打开 DNSPerf 站点,找到对应国家/地区的排名表,看你候选的几家(如 8.8.8.8、1.1.1.1、223.5.5.5、119.29.29.29)的 Average latency 与可用性评分。注意榜单是"全球均值视角",和你本机实测可能不一致——它的价值在于看长期稳定性和量级差距,最终决策仍要结合本机 dig 结果。

Decision Matrix

选型决策表:公共 DNS vs 自建 DNS

按你的实际场景对号入座

维度公共 DNS(阿里/DNSPod/Cloudflare)自建递归 DNS(Unbound/AdGuard Home)
部署成本填两个 IP 即用,零运维需要一台常开设备 + 配置上游
延迟(缓存命中)就近 Anycast,通常 5–20ms本地解析器,理论上再省一跳
延迟(缓存未命中)大缓存、全球节点,冷查询也快冷查询走自己的递归链或加密上游,可能更慢
可用性专业 SLA,几乎不会挂取决于你的设备与出口,断电断网即失效
隐私查询交给服务商(选零日志的)查询内容与缓存完全自控
过滤能力普通版不过滤(Cloudflare 有过滤版)可自由加广告/恶意域名规则
适合谁大多数个人用户、追求省心有运维能力、要隐私与过滤的玩家/小团队

实操建议

先用公共 DNS 加密端点打底(省心、稳定),再在路由器上跑一层 AdGuard Home 做广告过滤——它本身就是一个本地递归/转发解析器,上游指向加密 DoH/DoT。这样你同时拿到了"公共 DNS 的全球就近 + 本地过滤缓存 + 加密传输"。是否自建纯递归,取决于你出口带宽与运维精力:带宽小、又要走跨境加密上游,实测很可能不如就近的公共 DNS 快。

FAQ

常见问题

用 dig 怎么看 DNS 解析延迟?+
dig 输出最后一行的 Query time 即为本次解析耗时,单位毫秒。例如 dig www.example.com 末尾显示 "Query time: 12 msec"。注意首次查询通常因缓存未命中偏慢,应先预热再测,并多测几次取平均。
DNS 解析延迟主要由哪几部分构成?+
主要三块:①网络往返时间 RTT(你到递归解析器的距离);②递归查询链(缓存未命中时要逐级问根/TLD/权威服务器);③本地与解析器缓存命中情况。缓存命中时通常只需 1 个 RTT,未命中时可能翻数倍。
DNSPerf 是什么工具?+
DNSPerf(dnsperf.com)是全球公共 DNS 测速排行榜:它从全球多个监测点持续测量各公共 DNS 的平均解析延迟与可用性,按国家/地区排名,是横向比较 8.8.8.8、1.1.1.1、223.5.5.5 等服务商的权威参考。
自建 DNS 一定比公共 DNS 快吗?+
不一定。自建递归解析器(如 Unbound/AdGuard Home)省掉了到公共 DNS 的一跳,但如果你本地出口带宽小、上游又走加密 DNS 绕远路,实测可能更慢。公共 DNS 胜在全球 Anycast 就近接入和大缓存。最终快慢以本机实测为准,不要凭感觉。
浏览器体感慢,但 dig 很快,问题出在哪?+
dig 只测 DNS 解析这一跳。浏览器体感还包括 TCP 建连、TLS 握手、服务器响应、页面资源加载。DNS 正常却打开慢,多半是目标站点本身、CDN 调度或网络带宽问题,而不是 DNS。可以用浏览器开发者工具的网络面板分段定位。
References

参考来源