DNS:域名是怎么变成 IP 的

引入

浏览器请求必须拿到 IP 才能建立连接,但用户记忆的是 example.com 这种域名。中间的翻译工作由 DNS 完成,它是整个请求链路的第一步——DNS 慢,后面的环节再快也白搭。

正文

定义

DNS(Domain Name System,域名系统)负责把域名解析成 IP 地址,是应用层协议,默认使用 UDP 53 端口。

查询过程

以解析 www.example.com 为例:

浏览器缓存
  ↓ 未命中
操作系统缓存 / hosts 文件
  ↓ 未命中
本地 DNS 服务器(运营商或公共 DNS,如 114、8.8.8.8)
  ↓ 未命中
根域名服务器 → 顶级域(.com)服务器 → 权威域名服务器

返回 IP 并逐级缓存

两种查询方式:

方式行为特点
递归查询客户端只问一次,本地 DNS 负责问到底浏览器 → 本地 DNS 通常是递归
迭代查询每级服务器只返回”下一步去问谁”本地 DNS → 各级服务器通常是迭代

记录类型

类型作用例子
A域名 → IPv4example.com → 93.184.216.34
AAAA域名 → IPv6同上,地址为 IPv6
CNAME域名 → 另一个域名常用于接入 CDN
NS指定域名的权威 DNS 服务器域名解析的”管辖权”
MX邮件交换记录收件域名的邮件服务器

前端关心的点

  • TTL:解析结果会被缓存,TTL 决定缓存多久。改 DNS 配置后不会立即全量生效,就是 TTL 在起作用。
  • 解析优化dns-prefetchpreconnect 可以提前解析第三方域名,减少首屏请求前的等待。
  • 排查思路:网络面板里 Waiting (TTFB) 偏长时,先怀疑 DNS / 连接建立,可用 nslookupdig 验证解析结果。

引出

DNS 解决了”找到服务器”的问题,找到之后就要和服务器建立可靠连接——这就是 TCP 三次握手要做的事。另外,HTTPDNS(绕过运营商 DNS 的方案)、CDN 如何借助 CNAME 就近调度,也值得继续了解。