外观
一句话答案
DNS 解析:浏览器缓存→OS 缓存→本地 DNS→根服务器→顶级域→权威 DNS,递归+迭代结合。
核心要点
DNS 解析的完整过程(查询 www.example.com):
1. 浏览器缓存
浏览器先查自身 DNS 缓存 → 有则直接返回 IP
2. 操作系统缓存
查 OS 的 DNS 缓存(如 /etc/hosts 文件)→ 有则返回
3. 本地 DNS 服务器(递归解析器,通常是运营商/公司提供)
缓存未命中 → 向本地 DNS 服务器发起递归查询
本地 DNS 服务器检查自身缓存 → 有则返回
4. 迭代查询阶段(本地 DNS 代替客户端依次查询):
① 本地 DNS → 根域名服务器(.)
返回:".com" 的顶级域名服务器地址
② 本地 DNS → .com 顶级域名服务器
返回:"example.com" 的权威域名服务器地址
③ 本地 DNS → example.com 权威域名服务器
返回:www.example.com 的 IP 地址(如 93.184.216.34)
5. 本地 DNS 服务器将结果缓存(TTL 时间内有效),返回给客户端
6. 客户端缓存结果,向该 IP 发起 TCP 连接递归查询 vs 迭代查询:
| 维度 | 递归查询 | 迭代查询 |
|---|---|---|
| 发起方 | 客户端 → 本地 DNS | 本地 DNS → 各级 DNS 服务器 |
| 方式 | "你帮我查到底",一直等最终结果 | "我告诉你下一步该找谁",自己一步步查 |
| 谁承担查询压力 | 本地 DNS 服务器 | 查询压力分散到各级服务器 |
| 实际使用 | 客户端到本地 DNS 用递归 | 本地 DNS 到各级权威服务器用迭代 |
DNS 缓存层级(从快到慢):
浏览器缓存(秒级 TTL)
→ OS 缓存(hosts 文件 + systemd-resolved)
→ 本地 DNS 服务器缓存(分钟~小时级 TTL)
→ 各级 DNS 服务器缓存面试衔接点: 这一步是"输入 URL 到页面展示"(Q13)的第一步,面试官经常从 URL 全流程开始追问 DNS 细节。
追问与易错
追问方向:
- DNS 缓存在哪些层?
- DNS 劫持怎么防?
- HTTPDNS 是什么?
易错点:
- ❌ DNS 每次都要查根服务器——有多层缓存
- ❌ DNS 只返回一个 IP——可以返回多个做负载均衡
💡 记忆锚点
DNS 像逐级问路:先问自己记不记得(浏览器/OS缓存),不记得就问小区保安(本地DNS,递归帮你跑腿),保安再挨个问:交警总队(根)说"去.com管辖区",.com片区说"去example.com派出所",派出所给出门牌号(IP)。一路问下来,沿途每人都记一下(TTL缓存),下次不用再跑。