在浏览器里输入一个域名后,首先要解决的问题是:应该连接哪一个 IP 地址?DNS 提供的是名称到记录的查询服务。它可以帮助找到服务器地址,但网站能否打开,还取决于网络连通性、端口、TLS 和应用服务。
一次解析经过哪些环节
常见情况下,浏览器、操作系统或本地解析服务先检查缓存,再把查询交给递归解析器。浏览器也可能使用自己配置的 DNS over HTTPS 服务,因此它的查询结果不一定来自系统默认 DNS。
- 本地缓存:如果已有尚未过期的结果,可以直接使用,减少网络查询。
- 递归解析器:它代替客户端寻找答案,例如运营商 DNS 或公共 DNS。若自身缓存有效,也可以直接返回结果。
- 根与顶级域服务器:在缓存不足时,解析器逐步获得下一层名称服务器的指引。
- 权威名称服务器:返回该域名实际配置的记录,递归解析器把结果交给客户端,并按规则缓存。
这个过程并不意味着每次访问都从根服务器开始。缓存和已经知道的委派信息会省去许多步骤。修改域名记录时,“权威端已经更新”和“所有客户端都拿到新记录”也不是同一时刻发生的事。
A、AAAA 与 CNAME 的区别
| 记录 | 作用 | 排查重点 |
|---|---|---|
| A | 把名称映射到 IPv4 地址。 | 地址是否属于当前服务器。 |
| AAAA | 把名称映射到 IPv6 地址。 | IPv6 服务与云端规则是否同步配置。 |
| CNAME | 把一个名称指向另一个名称。 | 需要继续解析目标名称,检查别名链是否正确。 |
| NS | 指明权威名称服务器。 | 域名委派与正在修改的 DNS 服务是否一致。 |
配置了 A 记录,不代表必须同时配置 AAAA。反过来,如果发布了 AAAA,但服务器的 IPv6 路径没有准备好,一些客户端可能走到无法使用的地址。使用 CDN 时,地址还可能根据解析器位置或调度策略不同而变化,不能把“不同 IP”直接当成错误。
TTL 与缓存为什么影响生效时间
TTL 表示记录可以在缓存中保留多久,单位是秒。修改记录后,已经缓存了旧结果的解析器仍可能在旧 TTL 到期前继续使用它。临时把 TTL 调低,也不会追溯缩短此前已缓存结果的有效期。
此外,“域名不存在”或“该类型记录不存在”的结果也可能被缓存,这称为负缓存。因此,新增记录之后短时间查不到,不一定是配置没有保存。应比较权威记录与几个递归解析器的结果,再判断是记录问题还是缓存问题。
把问题拆成几层来检查
下面的命令适合先确认记录。nslookup 在 Windows 和多数桌面环境都可用;dig 常见于 Linux,可按需要安装对应的 DNS 工具包。
nslookup example.com 1.1.1.1
nslookup -type=AAAA example.com 1.1.1.1
dig example.com A +short
dig example.com AAAA +short
dig example.com NS +short
确认 IP 之后,再检查 TCP 端口、TLS 证书和 HTTP 响应。若 DNS 已返回正确地址,但连接 443 超时,应转向云防火墙、安全组、系统防火墙与服务监听排查;若连接成功而返回 404,则更接近站点路由或文件路径问题。
参考资料
本文根据以下资料整理撰写,详细规范与版本行为请以原文为准。