DNS 解析全流程

一文看懂 DNS 解析全流程(工程视角版)

一、DNS 是什么?先说清楚它解决什么问题

DNS(Domain Name System)解决的是一个非常简单、但极其重要的问题:

把人类可读的域名,转换为机器可通信的 IP 地址。

例如:

text 复制代码
www.baidu.com  →  180.101.xx.xx

DNS 本质上是一个分布式、分层、可缓存的命名系统


二、DNS 解析涉及的核心角色

在理解流程之前,必须先分清几个角色,否则后面一定会混:

1️⃣ 客户端(Stub Resolver)

  • 浏览器 / 操作系统中的 DNS 客户端
  • 功能非常简单:发请求、收结果
  • 不具备完整解析能力

2️⃣ 递归解析器(Recursive Resolver)

  • 通常是:

    • 运营商 DNS
    • 公共 DNS(8.8.8.8 / 114.114.114.114)
  • 核心职责

    客户端只问一次,它负责跑完整个解析流程,返回最终结果

DNS 中所谓的"递归",指的是查询语义和职责委托,而不是编程意义上的函数递归。


3️⃣ 权威 DNS(Authoritative DNS)

  • 对某个域(zone)拥有最终解释权
  • 只回答自己负责的数据
  • 不帮你继续查

三、DNS 查询的两种语义:递归 vs 迭代

这是 DNS 的核心概念之一。

🔹 递归查询(Recursive Query)

含义是:

"你别管中间过程,直接给我最终答案。"

  • 发生在:
    客户端 → 递归解析器
  • 通过 DNS 报文中的 RD(Recursion Desired) 位表达

🔹 迭代查询(Iterative Query)

含义是:

"我不知道答案,但我告诉你下一步该问谁。"

  • 发生在:
    递归解析器 → 根 / TLD / 权威 DNS

四、DNS 解析的完整流程(无缓存理想情况)

下面以解析 www.baidu.com 为例,忽略缓存,展示最完整的链路。


第一步:客户端发起递归查询

text 复制代码
客户端 → 本地递归 DNS

请求内容大致是:

"请帮我解析 www.baidu.com,我需要最终结果。"

客户端从此不再关心中间过程,只等待返回。


第二步:递归解析器查询根服务器

text 复制代码
递归 DNS → 根 DNS
  • 全球逻辑上只有 13 组根服务器(A--M)
  • 实际通过 Anycast 部署了大量实例

根服务器不会返回 IP,而是返回:

text 复制代码
".com 的顶级域名服务器在哪里"

第三步:查询顶级域名服务器(TLD)

text 复制代码
递归 DNS → .com TLD DNS

.com 服务器不会返回 www.baidu.com 的 IP,而是返回:

text 复制代码
"baidu.com 的权威 DNS 是哪些"

返回内容主要是:

  • NS 记录(权威服务器是谁)
  • 以及必要时的 glue 记录(权威服务器的 IP)

第四步:查询权威 DNS

text 复制代码
递归 DNS → baidu.com 权威 DNS

这一步,递归解析器终于问到了真正负责该域的服务器

权威 DNS 返回:

  • www.baidu.com 的 A / AAAA 记录
  • 或者 CNAME(需要继续解析)

这一步返回的结果是最终权威答案


第五步:结果返回与缓存

text 复制代码
权威 DNS → 递归 DNS → 客户端

同时:

  • 递归 DNS 按 TTL 缓存结果
  • 客户端 / OS / 浏览器也可能缓存

这一步是 DNS 高性能的关键。


五、NS 与 Glue 记录的作用(关键但常被忽略)

NS 记录

  • 表示:某个域由哪些权威 DNS 负责

例如:

text 复制代码
baidu.com.   NS   ns1.baidu.com.

Glue 记录

  • 当 NS 的名字本身位于被委派域内部时
  • 上级 DNS 会"顺手"返回 NS 的 IP

作用只有一个:

防止解析权威 DNS 名字时产生死循环

Glue 不是最终权威数据,只是解析链路中的"连接器"。


六、DNS 缓存机制(为什么它这么快)

DNS 性能的核心,不是服务器多强,而是缓存策略

缓存可能存在于:

  • 递归解析器(最重要)
  • 操作系统
  • 浏览器

缓存由 TTL 控制:

  • 权威 DNS 设置 TTL
  • 表示"这个结果可以信多久"

七、为什么普通用户感受不到这些复杂性?

因为:

  • 你只发出 一次请求
  • 递归 DNS 帮你跑完所有流程
  • 你只看到最终结果

这正是 DNS 设计的初衷:

把复杂性集中在少数节点,换取整个互联网的可用性和性能。


八、一段面试级总结(可直接背)

DNS 解析过程中,客户端向递归解析器发起递归查询,请求返回最终结果;递归解析器在本地无缓存的情况下,通过对根服务器、顶级域名服务器以及权威 DNS 进行迭代查询,逐级定位目标域名的权威服务器并获取最终解析记录,结果按 TTL 缓存后返回客户端。


九、结语

DNS 并不是一个"复杂协议",

它真正厉害的地方在于:

  • 清晰的分层设计
  • 极强的缓存友好性
  • 对失败和延迟的高度容忍

这也是为什么它能在几十年内支撑整个互联网,而核心设计几乎没有改变。

相关推荐
三水不滴9 小时前
有 HTTP 了为什么还要有 RPC?
经验分享·笔记·网络协议·计算机网络·http·rpc
崎岖Qiu13 小时前
【计算机网络 | 第九篇】PPP:点对点协议
网络·笔记·计算机网络·ppp
爱编码的傅同学14 小时前
【计算机网络】初识网络
网络·计算机网络
崎岖Qiu15 小时前
【计算机网络 | 第十篇】以太网的 MAC 层
网络·笔记·计算机网络·mac地址
AEIC学术交流中心15 小时前
【快速EI检索 | ICPS出版】2026年计算机技术与可持续发展国际学术会议(CTSD 2026)
人工智能·计算机网络
君鼎15 小时前
计算机网络第九章:无线网络与移动网络学习总结
网络·计算机网络
三水不滴1 天前
计网ping原理
经验分享·笔记·计算机网络
CSCN新手听安2 天前
【linux】高级IO,I/O多路转接之poll,接口和原理讲解,poll版本的TCP服务器
linux·运维·服务器·c++·计算机网络·高级io·poll
石去皿2 天前
【嵌入式就业7】计算机网络核心协议与嵌入式应用:从理论到IoT实战
物联网·计算机网络
崎岖Qiu2 天前
【计算机网络 | 第七篇】数据链路层及三个基本问题
网络·网络协议·计算机网络·数据链路层