目录

一、 第一层:核心定义(先建立认知框架)

为什么需要 DNS?

DNS 基本特性

二、 第二层:DNS 的层级结构(理解架构)

三类关键服务器

三、 第三层:DNS 完整解析流程(面试核心)

Step 1:检查浏览器 DNS 缓存

Step 2:检查操作系统缓存

Step 3:查询本地 DNS 服务器(递归解析器)

Step 4:本地 DNS 服务器发起迭代查询

Step 5:返回结果并缓存

完整流程图

四、 第四层:面试加分点(展现高阶认知)

1. 递归查询 vs 迭代查询的区别

2. TTL 的工程意义

3. DNS 负载均衡

4. HTTPDNS(移动端常用)

5. DNS 预解析(前端性能优化)

6. DNS 安全(DNSSEC)

五、 常见 DNS 记录类型

六、 面试简答模板(建议直接背诵)

七、 面试官常见追问


DNS 这道题在面试中通常作为"输入 URL 到页面展示"的深挖题出现,能把 DNS 讲清楚的候选人,会让面试官感受到你对底层网络协议有真实的理解,而不只是背八股。


一、 第一层:核心定义(先建立认知框架)

"DNS(Domain Name System,域名系统)本质上是一个分布式的、层级化的命名系统,它的核心职责就是把人类可读的域名(如 www.example.com)翻译成机器可识别的 IP 地址(如 93.184.216.34)。"

为什么需要 DNS?

  • IP 地址难以记忆
  • 域名与 IP 解耦,IP 变更时用户无感知
  • 支持负载均衡、CDN 调度、容灾切换

DNS 基本特性

  • 基于 UDP 协议,端口号 53
  • 数据包较大时(超过 512 字节)会降级为 TCP
  • 采用树状层级结构管理全球域名

二、 第二层:DNS 的层级结构(理解架构)

DNS 是一棵倒置的树:

.(根域)
                   / | \
             .com  .cn  .org  (顶级域 TLD)
             /
         example.com           (二级域)
         /
     www.example.com           (子域)

三类关键服务器

服务器类型 职责
根域名服务器 全球共 13 组,知道所有顶级域(.com/.cn)的地址
顶级域名服务器(TLD) 管理 .com.cn 等顶级域,知道下一级权威服务器
权威域名服务器 存储某个具体域名的真实 IP 映射关系
本地 DNS 服务器(递归解析器) 由 ISP 或企业提供,替用户做递归查询

三、 第三层:DNS 完整解析流程(面试核心)

以查询 www.example.com 为例,完整流程如下:

Step 1:检查浏览器 DNS 缓存

  • 浏览器自身会缓存 DNS 查询结果
  • 缓存时效由 TTL(Time To Live) 决定
  • Chrome 可在 chrome://net-internals/#dns 查看

Step 2:检查操作系统缓存

  • 操作系统维护自己的 DNS 缓存
  • 同时查找本地 hosts 文件/etc/hosts 或 C:\Windows\System32\drivers\etc\hosts
  • hosts 文件优先级高于 DNS 查询

Step 3:查询本地 DNS 服务器(递归解析器)

  • 如果前两步未命中,系统向配置的 本地 DNS 服务器 发起查询
  • 这台服务器通常由运营商(ISP)或公共 DNS(如 8.8.8.8)提供
  • 如果本地 DNS 有缓存,直接返回结果,流程结束

Step 4:本地 DNS 服务器发起迭代查询

这是整个流程的核心,本地 DNS 会依次向上游服务器发起查询:

① 本地 DNS → 根域名服务器
   询问:www.example.com 在哪里?
   回答:我不知道,去问 .com 顶级域名服务器,地址是 xxx

② 本地 DNS → .com 顶级域名服务器
   询问:www.example.com 在哪里?
   回答:我不知道,去问 example.com 的权威服务器,地址是 xxx

③ 本地 DNS → example.com 权威域名服务器
   询问:www.example.com 的 IP 是多少?
   回答:IP 是 93.184.216.34,TTL 是 300 秒

Step 5:返回结果并缓存

  • 本地 DNS 将结果返回给客户端
  • 同时根据 TTL 将结果缓存,下次直接命中

完整流程图

浏览器
  ↓ 未命中缓存
操作系统缓存 / hosts 文件
  ↓ 未命中
本地 DNS 服务器(递归解析器)
  ↓ 未命中缓存,发起迭代查询
根域名服务器 → 返回 TLD 服务器地址
  ↓
顶级域名服务器(.com)→ 返回权威服务器地址
  ↓
权威域名服务器 → 返回真实 IP
  ↓
本地 DNS 缓存结果,返回给浏览器
  ↓
浏览器拿到 IP,建立 TCP 连接

四、 第四层:面试加分点(展现高阶认知)

1. 递归查询 vs 迭代查询的区别

  • 递归查询:客户端发一次请求,由本地 DNS 全权代理查询,最终返回结果(客户端到本地 DNS 是递归)
  • 迭代查询:每次只返回下一步该去哪里问,由本地 DNS 自己逐步问下去(本地 DNS 到上游是迭代)

2. TTL 的工程意义

  • TTL 设置越短,DNS 切换生效越快,但查询压力越大
  • 大型变更前(如机房迁移)通常提前将 TTL 缩短,变更后再恢复
  • CDN 节点通常 TTL 设置较短,方便动态调度

3. DNS 负载均衡

  • 权威 DNS 可以对同一个域名返回多个 IP
  • 客户端通常选择第一个,或实现轮询
  • 这是最简单的全局负载均衡方式

4. HTTPDNS(移动端常用)

  • 传统 DNS 基于 UDP,容易被运营商劫持(返回错误 IP)
  • HTTPDNS 通过 HTTP/HTTPS 直接向 DNS 服务商查询,绕过运营商
  • 大厂 App 普遍使用,防劫持、精准调度

5. DNS 预解析(前端性能优化)

<!-- 提前解析可能用到的域名,减少后续请求延迟 -->
<link rel="dns-prefetch" href="//cdn.example.com">

6. DNS 安全(DNSSEC)

  • 传统 DNS 没有验证机制,存在 DNS 劫持和欺骗风险
  • DNSSEC 通过数字签名验证 DNS 数据的完整性
  • 但部署复杂,目前普及率还不高

五、 常见 DNS 记录类型

记录类型 含义
A 记录 域名 → IPv4 地址
AAAA 记录 域名 → IPv6 地址
CNAME 记录 域名 → 另一个域名(别名)
MX 记录 邮件服务器地址
TXT 记录 文本信息,常用于验证域名所有权
NS 记录 指定该域名的权威 DNS 服务器

六、 面试简答模板(建议直接背诵)

面试官:说说 DNS 是什么以及它的解析流程?

回答模板:

"DNS 是域名系统,本质上是互联网的'电话簿',它把便于记忆的域名映射成机器可识别的 IP 地址。

它的架构是一棵层级树,分为根域名服务器、顶级域名服务器和权威域名服务器三层,由全球分布式节点共同维护。

解析流程我会分五步来说:

第一步,查浏览器自身的 DNS 缓存;第二步,查操作系统缓存和 hosts 文件;第三步,向本地 DNS 服务器(即递归解析器,通常是运营商或公共 DNS)发起查询;如果本地 DNS 也没有缓存,第四步,由本地 DNS 代替客户端发起迭代查询,依次问根域名服务器、TLD 服务器、权威服务器,最终拿到真实 IP;第五步,本地 DNS 把结果按照 TTL 缓存并返回给浏览器。

在工程实践上,有几个点我会特别关注:

一是 TTL 的设置,它直接影响 DNS 变更的生效速度,大规模迁移前通常要提前压低 TTL;二是 HTTPDNS,它通过 HTTP 协议直接请求 DNS,绕过运营商 UDP 劫持,是大厂 App 的标配方案;三是前端性能层面的 DNS 预解析,通过 dns-prefetch 提前解析第三方域名,减少首次请求延迟。"


七、 面试官常见追问

追问 答题方向
"DNS 用的是 TCP 还是 UDP?" 默认 UDP 53,超过 512 字节切换 TCP
"什么是 DNS 污染 / 劫持?" 运营商篡改 DNS 返回结果,HTTPDNS 是解法
"TTL 设为 0 会怎样?" 每次都实时查询,无缓存,查询压力大但切换最快
"CNAME 和 A 记录的区别?" A 记录直接映射 IP,CNAME 是别名指向另一个域名
"为什么根域名服务器只有 13 组?" 历史和协议限制(UDP 512 字节),实际通过 Anycast 扩展了物理节点数
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐