Skip to content
基础

一句话答案

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缓存),下次不用再跑。