Skip to content

DNS 查询是怎么走的? ​

DNS 把域名解析成 IP。浏览器先看自己的缓存和操作系统缓存,再问配置好的递归解析器。递归解析器从根域名服务器找到顶级域,再找到权威服务器,把结果交回来并按 TTL 缓存。

原理 ​

一次没缓存的查询大致是:

  1. 浏览器缓存、操作系统缓存、hosts。
  2. 递归解析器(通常是运营商或公共 DNS)。
  3. 根服务器返回顶级域(如 .com)的地址。
  4. 顶级域服务器返回这个域名的权威服务器。
  5. 权威服务器返回 A 或 AAAA 记录。

TTL 决定缓存能用多久。改 DNS 之后,旧记录要等 TTL 过期,所以迁移要提前把 TTL 调短。

DNS 历史上跑在 UDP 上。响应太大或要 DNSSEC 时会退到 TCP。浏览器和系统现在也使用加密的 DNS(DoH、DoT),本机抓包不一定还能看到明文查询。

页面预连接 preconnect 可以提前做 DNS 和 TCP/TLS,但只对确定会用到的源使用。

追问 ​

A 记录和 CNAME 呢?

A 指向 IPv4,AAAA 指向 IPv6。CNAME 是别名,还要再解析一次目标。CDN 常用 CNAME 把你的域名指到服务商的域名。

DNS 劫持是什么?

解析结果被换成攻击者的 IP,用户连上了假的服务器。HTTPS 的证书校验能发现「这个 IP 拿不出该域名的证书」。只做 HTTP 时,劫持后的页面可以被换掉。

易错点 ​

  • 说每次请求都从根服务器查起。缓存命中就停。
  • 把 DNS 和 HTTP 重定向混在一起。一个改的是 IP,一个改的是 URL。
  • 改完 DNS 立刻认为全世界生效。TTL 和各级缓存都要过。

相关 ​