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 | 域名 → IPv4 | example.com → 93.184.216.34 |
| AAAA | 域名 → IPv6 | 同上,地址为 IPv6 |
| CNAME | 域名 → 另一个域名 | 常用于接入 CDN |
| NS | 指定域名的权威 DNS 服务器 | 域名解析的”管辖权” |
| MX | 邮件交换记录 | 收件域名的邮件服务器 |
前端关心的点
- TTL:解析结果会被缓存,TTL 决定缓存多久。改 DNS 配置后不会立即全量生效,就是 TTL 在起作用。
- 解析优化:
dns-prefetch和preconnect可以提前解析第三方域名,减少首屏请求前的等待。 - 排查思路:网络面板里 Waiting (TTFB) 偏长时,先怀疑 DNS / 连接建立,可用
nslookup或dig验证解析结果。
引出
DNS 解决了”找到服务器”的问题,找到之后就要和服务器建立可靠连接——这就是 TCP 三次握手要做的事。另外,HTTPDNS(绕过运营商 DNS 的方案)、CDN 如何借助 CNAME 就近调度,也值得继续了解。