DNS 域名解析过程?

2025年 阅读约 10 分钟 面试指南 · 计算机网络

深入解析DNS域名解析过程:递归查询与迭代查询、DNS缓存层级、CDN与DNS智能调度、DNS安全(DNS劫持/DNSSEC),附面试模拟问答。

一句话总结

DNS 解析过程:浏览器缓存 → OS 缓存(hosts)→ 本地 DNS 服务器 → 根域名服务器 → 顶级域名服务器 → 权威域名服务器 → 返回 IP。两种查询方式:递归查询(客户端 → 本地 DNS,本地 DNS 负责到底)和迭代查询(本地 DNS 逐级询问,根→顶级→权威)。CDN 利用 DNS 智能解析,根据用户 IP 返回最近的 CDN 节点。DNS 安全问题:DNS 劫持(篡改解析结果)、DNS 污染(伪造响应)、DNSSEC(数字签名验证)。

初级理解

DNS 解析完整过程

# 浏览器输入 www.example.com 的 DNS 解析过程: # 1. 浏览器 DNS 缓存 # 浏览器先查自己的 DNS 缓存(chrome://net-internals/#dns) # 2. 操作系统 DNS 缓存 # Windows: ipconfig /displaydns # Linux: systemd-resolved 缓存 # 3. hosts 文件 # Windows: C:\Windows\System32\drivers\etc\hosts # Linux: /etc/hosts # 4. 本地 DNS 服务器(递归查询) # 如 8.8.8.8(Google)、114.114.114.114(国内) # 本地 DNS 服务器收到请求后,如果缓存没有: # 5. 根域名服务器(.) # 本地 DNS → 根服务器:www.example.com 的 IP? # 根服务器:我不知道,但 .com 的服务器知道 # 返回 .com 顶级域名服务器地址 # 6. 顶级域名服务器(.com) # 本地 DNS → .com 服务器:www.example.com 的 IP? # .com 服务器:我不知道,但 example.com 的权威服务器知道 # 返回 example.com 权威服务器地址 # 7. 权威域名服务器(example.com) # 本地 DNS → 权威服务器:www.example.com 的 IP? # 权威服务器:IP 是 93.184.216.34 # 返回 IP 地址 # 8. 本地 DNS 缓存结果 → 返回给客户端 # 客户端拿到 IP → 发起 HTTP 请求

中级深入

递归查询 vs 迭代查询

# 递归查询(Recursive Query): # 客户端 → 本地 DNS:"帮我查 www.example.com,我只要结果" # 本地 DNS 负责到底,逐级查询,最终返回 IP # 客户端只发一次请求,等待结果 # 迭代查询(Iterative Query): # 本地 DNS → 根服务器:"www.example.com 的 IP?" # 根服务器:"我不知道,你去问 .com 服务器(地址是xxx)" # 本地 DNS → .com 服务器:"www.example.com 的 IP?" # .com 服务器:"我不知道,你去问 example.com 服务器" # 本地 DNS → 权威服务器:"www.example.com 的 IP?" # 权威服务器:"IP 是 93.184.216.34" # 实际过程: # 客户端 → 本地 DNS:递归查询(客户端只等结果) # 本地 DNS → 各级服务器:迭代查询(逐级询问) # DNS 记录类型: # A 记录:域名 → IPv4 # AAAA 记录:域名 → IPv6 # CNAME 记录:域名 → 另一个域名(别名) # MX 记录:邮件服务器 # NS 记录:域名服务器 # TXT 记录:文本信息(SPF、域名验证)

DNS 缓存

# DNS 缓存层级: # 1. 浏览器缓存(几十秒到几分钟) # 2. 操作系统缓存 # 3. 路由器缓存 # 4. ISP(运营商)DNS 缓存 # 5. 本地 DNS 服务器缓存 # TTL(Time To Live):DNS 记录的缓存时间 # 权威服务器设置 TTL,各级缓存按 TTL 过期 # 常见 TTL:600 秒(10分钟) # 查看 DNS 缓存: # Windows: ipconfig /displaydns # 清除 DNS 缓存: ipconfig /flushdns # Linux: systemd-resolve --statistics # DNS 解析工具: nslookup www.example.com # Windows/Linux dig www.example.com # Linux(更详细) host www.example.com # Linux(简洁)

高级进阶

CDN 与 DNS 智能调度

# CDN 如何利用 DNS 实现就近访问? # 1. 用户访问 www.example.com # 2. DNS 解析 → CNAME 指向 CDN 域名 # www.example.com CNAME www.example.com.cdn.com # 3. CDN 的 DNS 服务器(GSLB 全局负载均衡) # 根据用户 Local DNS 的 IP 判断用户地理位置 # 4. 返回离用户最近的 CDN 边缘节点 IP # 5. 用户请求到达 CDN 边缘节点 # 6. 边缘节点有缓存 → 直接返回 # 7. 边缘节点无缓存 → 回源到源站获取 # GSLB(全局负载均衡)策略: # 1. 地理位置最近 # 2. 网络延迟最低 # 3. 节点负载最低 # 4. 运营商最优(电信/联通/移动)

DNS 安全

# DNS 劫持: # 攻击者篡改 DNS 解析结果,将用户引导到钓鱼网站 # 常见方式: # 1. 篡改路由器 DNS 设置 # 2. 攻击 DNS 服务器 # 3. 运营商 HTTP 劫持(插入广告) # DNS 污染/投毒: # 攻击者伪造 DNS 响应,在合法响应到达前发送伪造响应 # DNS 服务器缓存了伪造结果 → 所有用户受影响 # DNSSEC(DNS Security Extensions): # 通过数字签名验证 DNS 响应真实性 # 原理:从根到权威服务器逐级签名 # 客户端验证签名 → 确认响应未被篡改 # DoH(DNS over HTTPS)/ DoT(DNS over TLS): # 加密 DNS 查询,防止被窃听和篡改 # DoH:DNS 查询走 HTTPS(端口 443) # DoT:DNS 查询走 TLS(端口 853) # 浏览器支持:Chrome/Firefox 设置中开启

实战场景

# 场景1:网站更换服务器 IP # 修改 DNS A 记录,指向新 IP # 注意 TTL:如果 TTL=600,最多等 10 分钟全球生效 # 建议:迁移前先降低 TTL(如 60 秒),迁移后再恢复 # 场景2:DNS 解析故障排查 # 1. ping 域名看是否解析 ping www.example.com # 2. nslookup 查看 DNS 服务器 nslookup www.example.com # 3. dig 查看详细解析过程 dig www.example.com +trace # 4. 检查 hosts 文件是否被篡改 # 5. 更换 DNS 服务器测试(8.8.8.8) # 场景3:配置 CDN # 1. 源站:origin.example.com(A 记录指向源站 IP) # 2. 加速域名:www.example.com # CNAME 指向 CDN 提供的域名 # www.example.com CNAME www.example.com.cdn.com

面试模拟

面试官:浏览器输入 URL 后,DNS 解析的完整过程?

你:先查浏览器缓存 → OS 缓存(hosts)→ 本地 DNS 服务器。本地 DNS 如果没缓存,从根域名服务器开始迭代查询:根 → .com 顶级 → example.com 权威 → 返回 IP。客户端到本地 DNS 是递归查询,本地 DNS 到各级服务器是迭代查询。

面试官:什么是 DNS 劫持?如何防范?

你:DNS 劫持是篡改 DNS 解析结果,将用户引导到恶意网站。防范措施:1)使用 DNSSEC 数字签名验证;2)使用 DoH/DoT 加密 DNS 查询;3)使用可信 DNS 服务器(8.8.8.8);4)HTTPS 证书验证(即使 DNS 被劫持,证书不匹配浏览器会警告)。