高 基础
DNS解析过程#
一句话答案#
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 连接plaintext递归查询 vs 迭代查询:
| 维度 | 递归查询 | 迭代查询 |
|---|---|---|
| 发起方 | 客户端 → 本地 DNS | 本地 DNS → 各级 DNS 服务器 |
| 方式 | ”你帮我查到底”,一直等最终结果 | ”我告诉你下一步该找谁”,自己一步步查 |
| 谁承担查询压力 | 本地 DNS 服务器 | 查询压力分散到各级服务器 |
| 实际使用 | 客户端到本地 DNS 用递归 | 本地 DNS 到各级权威服务器用迭代 |
DNS 缓存层级(从快到慢):
浏览器缓存(秒级 TTL)
→ OS 缓存(hosts 文件 + systemd-resolved)
→ 本地 DNS 服务器缓存(分钟~小时级 TTL)
→ 各级 DNS 服务器缓存plaintext面试衔接点: 这一步是 从URL输入到页面显示 的第一步,面试官经常从 URL 全流程开始追问 DNS 细节。
面试回答(2分钟版)
DNS 解析是将域名转换为 IP 地址的过程,采用递归加迭代的方式逐级查询。以访问 www.example.com ↗ 为例,浏览器先查自身 DNS 缓存,没有就查操作系统缓存包括 hosts 文件,还没有就向本地 DNS 服务器发起递归查询,也就是由本地 DNS 帮我们跑腿查到底。本地 DNS 先检查自身缓存,如果也没命中就开始迭代查询:先问根域名服务器,根返回 .com 顶级域名服务器地址;再问 .com 顶级域服务器,返回 example.com 的权威域名服务器地址;最后问权威 DNS,拿到 www.example.com ↗ 对应的 IP 地址。本地 DNS 将结果缓存一段时间(由 TTL 控制),再返回给客户端。整个过程中多层缓存大幅减少了实际查询次数。DNS 还可以返回多个 IP 实现负载均衡,或者结合 CDN 返回离用户最近的节点 IP。防止 DNS 劫持可以使用 HTTPDNS 直接通过 HTTP 向可信 DNS 服务器查询,绕过运营商的本地 DNS。
追问与易错
追问方向:
- “DNS 缓存在哪些层?”→ 浏览器缓存(秒级)→ OS 缓存(hosts 文件)→ 本地 DNS 服务器缓存(分钟~小时级 TTL)→ 各级 DNS 服务器缓存
- “DNS 劫持怎么防?”→ 使用 HTTPDNS 绕过运营商 DNS + DNSSEC 签名验证 + 定期比对解析结果检测异常
- “HTTPDNS 是什么?”→ 通过 HTTP 协议直接向可信 DNS 服务器查询(如阿里云 HTTPDNS),绕过运营商本地 DNS,防劫持且可精准调度
易错点:
- ❌ DNS 每次都要查根服务器——有多层缓存
- ❌ DNS 只返回一个 IP——可以返回多个做负载均衡