域名与DNS解析全链路详解:从递归查询到缓存排障

发布时间:2026/9/7 11:12:54
域名与DNS解析全链路详解:从递归查询到缓存排障 这可能是整个互联网里最容易被 “会用但说不清” 的事情之一尤其当你买完域名、绑定服务器、改了 DNS 却一直不生效时你会发现域名和 DNS 看着像同一个东西实际上背后是一整套接力寻址系统。这篇我尽量用一次完整的用户访问过程把域名结构、DNS 解析链路、缓存机制、CDN 加速、常见故障排查一次讲透。适合刚接触建站、正在配域名邮箱、或者被“解析不生效”折磨过的人看。先说一个最关键的判断域名本身不“指向”任何东西它只是一串便于记忆的标识。真正完成“从域名到服务器 IP”的转换靠的是 DNS 系统。所以理解域名工作方式核心不是记住几十种记录类型而是搞清楚一个问题当你敲下example.com并按下回车背后有多少层服务在替你翻译翻译结果又在哪里被缓存、被信任、被使用。1. 域名的本质不是地址而是一套“分层命名法”很多人把域名和 IP 地址混为一谈这会直接导致后续排查思路混乱。域名解决的是“人类可读”问题IP 解决的是“设备可路由”问题。两者之间靠 DNS 协议翻译但翻译之前得先理解域名本身的结构。1.1 域名层级根、顶级、二级、子域一个完整的域名例如blog.example.com.cn从右往左看每一段都有自己的管理边界.根域最顶层全世界一共 13 组根服务器逻辑节点负责指引顶级域去哪查。.cn顶级域国家顶级域由中国互联网信息中心管理。.com.cn二级域属于cn下的注册域通常代表商业机构类别。example.com.cn注册域名你真正花钱买下来的名字。blog子域/主机记录在注册域名之下由域名所有者自己分配。这个结构意味着每一层只管自己下一层的“指向”。根域不需要知道blog.example.com.cn是哪台服务器它只需要告诉你“.cn的服务器在哪里”。逐级下沉最后才找到权威记录。这种分级设计不是麻烦而是为了分散管理压力。如果全世界所有域名都放在一张表里这张表会大到无法同步任何一次更新都会导致全网瘫痪。1.2 关键记录类型A、CNAME、MX、NS、TXT实际配置域名时你面对的其实是 DNS 记录类型。不同类型负责不同业务记录类型作用常见使用场景A将域名指向 IPv4 地址服务器 IP 固定时的主记录AAAA将域名指向 IPv6 地址IPv6 环境、双栈部署CNAME将域名别名指向另一个域名指向 CDN、负载均衡域名MX指定邮件接收服务器企业邮箱收发TXT存放文本信息常用于验证域名归属验证、SPF/DKIMNS指定该域名的权威 DNS 服务器更改 DNS 托管商很多人会用错 A 记录和 CNAME 记录。A 记录直接给 IPCNAME 是“转发到另一个域名再解析”。给主域名根域名做 CNAME 在某些 DNS 服务商那里会有兼容性问题稳妥做法是主域名用 A 记录子域名用 CNAME。1.3 域名注册和 DNS 托管不是一回事这里有一个特别容易踩的坑你在阿里云、腾讯云、GoDaddy 买的域名和你在 Cloudflare、DNSPod 做的解析是两层不同服务。注册商负责向注册局提交你的域名信息并把域名 NS 记录指向你指定的 DNS 服务器。DNS 托管商才是真正存放解析记录并提供解析服务的系统。所以当你有“我在 A 平台买了域名为什么在 B 平台改了解析却没生效”的疑问时大概率是域名当前的 NS 记录仍然指向 A 平台的服务器。你需要在 A 平台把 NS 记录改成 B 平台提供的地址等待生效后B 平台的解析记录才开始对外提供结果。判断解析是否生效时第一件事永远是查当前 NS 记录指向哪里而不是反复刷新浏览器。2. 从敲下域名到页面出现中间经过哪些 DNS 查询这是整篇文章最核心的部分。理解了这一整条链路你后续排查任何域名解析问题都会有清晰顺序。用户访问www.example.com时操作系统和网络环境会按顺序向多级 DNS 发起查询。每一级既可能是独立服务器也可能是缓存设备。2.1 递归查询和迭代查询的差别整个过程可以分成两条路径从你的设备到本地递归服务器这一段叫递归查询本地递归服务器向根、顶级域、权威服务器逐级追问这一段叫迭代查询。说的更直白一点你的电脑不会直接找根服务器它只把问题抛给“本地 DNS”。本地 DNS 替你去跑腿先问根域再问顶级域最后问权威服务器。中间每一步都可能命中缓存所以不一定每次都要从头问到底。本地 DNS 是哪个取决于你的网络配置。家用路由器通常默认从运营商 DHCP 获取 DNS。手动改成223.5.5.5阿里 DNS、119.29.29.29腾讯 DNSPod、8.8.8.8Google等公共 DNS本地 DNS 就是其中一个。公司内网可能指定内网 DNS 服务器负责解析内部域名同时转发外部域名请求。2.2 一次完整解析的详细步骤假设本地 DNS 缓存为空所有步骤都要真实发生浏览器先检查自身缓存、操作系统 hosts 文件和系统 DNS 缓存如果找到结果就直接使用不再发网络请求。本地 DNS 收到www.example.com的查询请求先查自己的缓存没有命中则开始迭代。本地 DNS 请求根服务器“.com归谁管” 根服务器返回.com顶级域服务器的地址列表。本地 DNS 请求.com顶级域服务器“example.com归谁管” 顶级域服务器返回该域名权威 NS 记录的地址。本地 DNS 再请求example.com的权威服务器“www.example.com的 IP 是多少” 权威服务器返回 A 或 CNAME 记录。本地 DNS 把最终结果缓存起来并返回给你的电脑电脑再发起 HTTP 连接。注意第 4 步和第 5 步的边界顶级域服务器只告诉你“这个域名的 NS 记录在哪里”它不负责返回具体 IP。只有权威服务器才有最终答案。这个分层机制的巧妙之处在于哪怕某个权威 DNS 服务器挂了本地 DNS 也可以根据备用 NS 记录向另一台权威服务器发起请求不会导致全网无法访问。2.3 hosts 文件和本地 DNS 缓存的优先级在实际排查时很多人会忽略 hosts 文件的存在。它的优先级高于所有 DNS 网络查询。Windows 的 hosts 文件位于C:\Windows\System32\drivers\etc\hostsLinux 和 macOS 位于/etc/hosts。当你修改了 DNS 解析记录却发现本机访问域名一直指向旧服务器先不要怀疑 DNS 没生效试试在命令行执行nslookup example.com ping example.com如果nslookup返回新 IP但浏览器打开还是旧页面大概率是浏览器缓存或本地 hosts 文件被占用了。如果nslookup本身返回的是旧 IP才说明解析链路还没更新。排查常识ping 通并不能证明域名解析正确因为 ping 走的是 ICMP 协议而且有些服务器禁 ping。要看解析结果优先用nslookup或dig。3. 缓存和 TTL为什么改了解析老不生效“我已经改了解析为什么过了半小时还打不开新服务器”这个问题几乎每个站长都问过。答案通常不在你的域名配置而在层层缓存。3.1 浏览器、操作系统、路由器、本地 DNS 四级缓存缓存层级从上到下浏览器缓存Chrome、Edge 等浏览器内置 DNS 缓存存活时间通常在几十秒到几分钟关掉浏览器进程可能清空。操作系统缓存Windows 可通过ipconfig /flushdns清空Linux 的 systemd-resolved 服务可执行resolvectl flush-caches。路由器缓存部分家用路由器会缓存 DNS 结果重启路由器或登录后台清空。本地 DNS / 公共 DNS 缓存这是最容易造成“全世界生效了但你还没生效”或“你生效了但用户还没生效”的原因。所以当有人问“为什么我手机能访问、电脑不能访问”时最可能的原因是这两个设备的 DNS 缓存状态不同或者它们使用了不同的 DNS 服务器。3.2 TTL 参数该设多少TTLTime To Live决定了递归服务器缓存一条解析记录的时间单位是秒。经验取值场景推荐 TTL普通网站初始配置600 秒10 分钟网站已经稳定、不常变更3600 秒1 小时准备做服务器迁移或解析变更提前 1-2 天改成 60 秒CDN 加速记录跟随 CDN 厂商建议通常 60 到 300 秒很多人犯的错是等到要切换服务器时才临时把 TTL 调低然后等半小时就着急。正确的做法是提前至少一天调低 TTL让全球递归 DNS 在变更前把旧缓存自然过期再改解析记录。改完之后再把 TTL 调到适合长期运行的值。这条经验在正式生产环境非常重要因为如果你在 TTL 还很长的情况下直接改解析部分用户会持续访问旧 IP直到旧缓存到期。3.3 公共 DNS 之间的缓存差异不同公共 DNS 服务商的更新速度差异很大。有的能在几十秒内同步新解析有的需要几分钟甚至更长时间。这主要是它们针对热门域名做的预取策略不同不是你的配置问题。所以验证解析是否全球生效时可以用多个公共 DNS 轮流查询nslookup example.com 223.5.5.5 nslookup example.com 119.29.29.29 nslookup example.com 8.8.8.8如果有些 DNS 返回新 IP有些返回旧 IP说明新配置正在逐步生效等待即可。如果所有结果都一致就不用再刷新了。4. 一个域名背后不止一台服务器CDN、负载均衡和智能解析理解了基本解析流程后再看一个进阶问题域名只能指向一台服务器吗显然不是。4.1 A 记录和 CNAME 记录的工程化选择小型网站可能只有一个 IP直接用 A 记录。但一旦网站有一定流量或者静态资源较多通常会接入 CDN。这时最常见的做法是给子域名配置 CNAME 记录把域名指向 CDN 服务商提供的调度域名由 CDN 根据用户地理位置、运营商、服务器负载去返回离用户最近的节点 IP。CNAME 记录本身不直接返回 IP而是返回另一个域名再由那个域名的权威服务器返回结果。这增加了查询次数但换来了灵活性CDN 节点发生变化时你不需要修改自己的解析记录CDN 厂商会自动调整内部调度。主域名根域名用 CNAME 在某些 DNS 服务商无法配置因为根域记录同时承载了 MX、NS 等特殊需求。这种情况下可以直接用 A 记录指向 CDN 的固定入口 IP或使用服务商提供的“显性/隐性 URL 转发”功能。4.2 智能解析和加权负载均衡DNS 不仅能返回一个 IP还能根据不同条件返回不同结果按地理区域国内用户访问 A 机房海外用户访问 B 机房。按运营商联通用户解析到联通线路 IP电信用户解析到电信线路 IP。按权重比例多台服务器按 70%、20%、10% 分配流量便于灰度发布和服务器批次维护。这层能力叫“智能 DNS 解析”主流 DNS 托管平台基本都支持。配置时需要注意优先确认你的服务器是否支持按线路分别返回 IP。灰度发布时不要直接删掉旧记录先把新记录权重调低观察日志再逐步调整。加权解析的最终分配并不精确因为用户 DNS 缓存会抵消一部分权重变化。越是大量用户访问的场景这个误差越小小流量场景下权重可能会显得不太均衡。4.3 CDN 和证书绑定问题接入 CDN 后域名解析出的 IP 已经不是你源站的 IP而是 CDN 边缘节点 IP。HTTPS 证书就得特别注意。如果你用的是“域名型证书”CDN 厂商可以代签或者你上传证书到边缘节点。如果你用的是“IP 型证书”很多 CDN 不支持需要更换为基于域名的证书。另外回源配置要保证源站服务器上也能正确解析域名本身。如果源站把所有请求都按域名拦截而回源 Host 配置错误会出现一个奇特的现象外部访问正常但后台日志里大量 403 或者 502。遇到 CDN 接入后部分区域无法访问第一步不是找 CDN 客服而是在本地终端执行curl -I看返回的响应头确认是否真的命中了 CDN 节点再检查回源 Host。5. 域名故障排查实用命令和判断链路真正把域名问清楚靠的是命令行工具和一些基础网络检测方法。下面给出我自己实际定位问题的固定顺序。5.1 第一层确认记录是否存在用nslookup是最直接的nslookup example.com nslookup -typeA example.com nslookup -typeCNAME www.example.com nslookup -typeMX example.com nslookup -typeNS example.com如果返回Non-authoritative answer说明结果来自缓存不一定是最终状态。想看权威服务器直接给出的答案可以加上权威 NS 地址nslookup example.com ns1.dnspod.net如果你知道域名的 NS 服务器直接对着 NS 查可以绕过公共 DNS 缓存直接确认“源站记录到底是什么”。Linux 下也可以用dig信息更完整dig example.com A dig 8.8.8.8 example.com A dig example.com CNAMEdig结果里重点关注status字段NOERROR查询成功有记录。NXDOMAIN域名不存在。SERVFAIL权威服务器故障或配置错误。REFUSED服务器拒绝查询可能是防火墙或配置限制。5.2 第二层验证解析是否到达服务器记录存在不一定代表服务可用。从你的电脑到服务器 IP链路要经过网络路由、防火墙、WEB 服务软件。检查顺序ping IP判断网络通不通。telnet IP 80或telnet IP 443判断端口是否开放。curl -I http://example.com判断 HTTP 服务是否正常返回状态码。浏览器开发者工具看具体加载项先加载 HTML再加载 JS/CSS/图片失败项会提示具体域名或 IP。一个常见问题是域名解析没问题但curl只能访问 IP不能访问域名。这时大概率是 WEB 服务配置的 server_name 不包含当前域名或者没做默认站点绑定。解决方案不是改 DNS而是改 Nginx、Apache、IIS 的站点配置文件。5.3 第三层DNS 安全方面不可忽视的点DNS 默认是明文传输存在被篡改和注入的风险。最常见的表现是解析出的 IP 不是服务器真实 IP或者特定域名被指向广告页、非法页面。防护方向开启 DNSSEC对 DNS 记录做数字签名防止解析结果被中间人篡改。不过 DNSSEC 需要域名注册商和 DNS 托管商同时支持目前国内部分平台支持不够完整开启前先跟服务商确认清楚。使用公共 DNS 加密传输现代公共 DNS 通常支持 DoHDNS over HTTPS可以有效防止明文 DNS 请求被篡改。浏览器和操作系统的设置位置不同可以按需开启。定期检查域名 NS 记录是否被改动如果注册商账号被盗攻击者把 NS 指向自己的服务器就能完全控制你的域名解析结果。这是一类比较严重的域名安全事件。做一个周期性自检dig example.com NS dig example.com SOA如果你发现权威 NS 记录里出现了你完全不认识的服务器需要立刻登录注册商后台修改注册局层面的 NS 记录并排查账号安全问题。6. 从买域名到真正用起来新手最容易忽视的细节文章最后梳理一遍完整的流程和决策点这部分更像经验清单。6.1 完整流程注册、实名、备案、解析、部署在中国大陆地区使用域名建站流程大约是在注册商查询并购买域名。完成域名实名认证未实名域名会被暂停解析。如果服务器在大陆机房需要完成 ICP 备案备案通过前不能把域名解析到大陆服务器访问网站。决定 DNS 托管位置可以使用注册商自带 DNS也可以转到 Cloudflare、DNSPod 等更专业的平台。添加解析记录等待生效。在服务器上配置 WEB 服务绑定域名申请 HTTPS 证书。验证访问。有些人会跳过第 2 步然后在域名控制台看到serverHold状态这就是实名认证没通过导致的暂停解析。遇到这种情况不要反复改解析先查看域名状态。6.2 国内服务器和海外服务器在备案上的差别如果服务器在海外包括香港、澳门、台湾地区及海外机房通常不需要 ICP 备案可以直接解析访问。如果服务器在中国大陆机房域名必须备案才能正常使用 80/443 端口提供服务。备案期间域名不能解析到大陆服务器否则会被接入商拦截。所以有些人的做法是先在海外服务器完成调试和业务验证备案通过后再切回大陆服务器。这样业务不中断。备案的时间通常按工作日计算各地管局效率不同短则一周长则一个月。提交备案时注意把主体信息、网站名称、服务内容填准确否则容易被打回补充材料。6.3 域名续费、到期赎回和转移域名不是一次性买断而是按年租赁。到期后通常有一个续费宽限期宽限期内补钱还能保住域名。过了宽限期进入赎回期费用会大幅上涨。赎回期结束域名才会被释放重新注册。建议做法开启自动续费。把域名到期时间设置提醒。域名注册商和 DNS 托管商分开避免一个账号被侵入后域名和解析一起被控制。转移注册商时要首先确保域名已注册满 60 天不在锁定期并且邮箱有权限接收转移确认信。域名转移本身不影响解析服务因为你完全可以先在新服务商处把解析记录配置好再发起转移。很多人怕转移过程会中断网站实际上只要 NS 记录保持指向当前 DNS 服务商转移注册商不会影响网站访问。6.4 自建 DNS 服务器值不值得有些有一定规模业务的人会考虑自建 DNS。好处是内网域名解析快、可以自由控制记录、不受第三方服务商限制。代价是稳定性要自己负责一旦 DNS 服务挂了整个业务域名的解析都会瘫痪。自建 DNS 适合的场景内网存在大量内部域名服务器通过内网解析互相通信。需要对解析结果做实时修改且不希望经过第三方缓存。有独立的机房或多台云服务器具备高可用条件。如果只是个人博客或者普通企业官网直接使用云厂商的 DNS 托管服务更稳妥。云厂商天然分布式部署自带 DDoS 防护支持多种线路解析出了问题也更容易找人协助排查。结尾域名和 DNS 这套体系本质上就是互联网世界里最基础也最容易被忽略的“全局电话簿”。它通过分层管理、逐级查询、多层缓存把一个字符串翻译成网络设备真正认识的地址。理解了这一条链路以后再遇到“明明解析没错但就是访问不了”一类问题时你就会自然地从浏览器缓存、系统 hosts、本地 DNS、权威服务器一层层往下排查而不是反复刷新页面。如果这个主题之后想继续深入下一步可以研究 DNSSEC 部署、DoH 带来的隐私变化、以及基于 DNS 的灰度发布策略。先把基础链路跑通再看这些进阶方案会顺利很多。