打开浏览器,域名输入一个网址,解析敲下回车,查询页面就跳出来了。域名这个过程快到让人来不及想中间发生了什么。解析实际上,查询在页面出现之前,域名你的解析电脑先得干一件事——把那个好记的域名,比如"example.com",查询翻译成机器能懂的域名IP地址。这个翻译过程,解析就是查询域名解析查询。
我第一次意识到这件事,域名是解析因为一个挺蠢的问题。当时给一个内部测试服务器配了个域名,查询本地怎么都访问不了,但直接用IP却没问题。查了半天,最后发现是hosts文件里一条旧记录在捣乱。那会儿才真正理解,域名解析不是"自动就好了"的东西,它有一套明确的查询顺序。
当你敲下域名,操作系统先看自己的缓存。浏览器有缓存,操作系统也有缓存,hosts文件优先级更高。如果这些地方都没有答案,才会向DNS服务器发起请求。
DNS服务器也不是一步到位的。它先问根域名服务器,根服务器说"我不知道,但.com的服务器地址在那边"。然后去问.com的顶级域服务器,它再指向example.com的权威服务器。最后权威服务器给出具体的IP。这一圈走下来,通常也就几十毫秒,但逻辑上确实绕了好几个弯。
递归查询和迭代查询的区别就在这里。你本地的DNS服务器(通常是运营商提供的那个)负责帮你跑腿,它去问根、问顶级域、问权威,这叫递归。而它跟那些服务器之间的对话,是迭代的——每次只告诉你下一步该找谁。
缓存让解析变快,但也带来麻烦。TTL值决定了缓存存活多久。设得太长,改了IP之后半天不生效;设得太短,DNS查询量暴涨,解析延迟反而上去。我见过有人把TTL设成86400秒,结果服务器迁移时痛苦不堪,只能干等一天。
还有本地缓存的问题。有时候你改了DNS记录,用在线工具查已经生效了,但自己电脑上还是旧IP。Windows下可以ipconfig /flushdns,macOS用sudo dscacheutil -flushcache。这些命令不复杂,但不知道的话就会怀疑人生。
常用的查询工具就那几个。nslookup老派但通用,dig信息更全,Windows上还有Resolve-DnsName这个PowerShell命令。在线工具像DNSChecker、WhatsMyDNS,能同时看全球多个节点的解析结果,排查地域性问题特别有用。
查询类型也不只是A记录。CNAME用于别名,MX管邮件路由,TXT常用来做验证,NS记录告诉你这个域名由谁管理。有时候网站打不开,不是A记录的问题,而是CNAME链路上某一环断了。用dig +trace能看到完整的委托路径,比单纯看最终结果有用得多。
运营商DNS劫持不算新鲜事。明明配了公共DNS,某些网络下还是被强制解析到广告页面。这时候换DoH或DoT能绕过,但得看设备和网络支持不支持。
还有DNS污染的问题。某些域名在国内查询会返回错误IP,用境外DNS服务器查又是另一个结果。做跨境业务的话,这个差异必须考虑进去,不然用户访问不了还以为是服务器挂了。
域名解析查询这件事,平时感觉不到它的存在,出问题的时候又特别隐蔽。花点时间搞清楚它的工作原理和排查方法,比出了问题干着急要强。至少下次网站打不开,你知道先dig一下,而不是急着重启服务器。