- Published on
DNS:从域名到 IP 地址的解析
在互联网中,服务器之间通过 IP 地址(如 93.184.216.34
)进行通信,而人类则更习惯于使用易于记忆的域名(如 www.example.com
)。域名系统 DNS (Domain Name System) 的核心使命,就是充当“互联网的电话簿”,将这些域名“翻译”成机器可读的 IP 地址。这个看似瞬时完成的过程,背后是一套精密的、分层的、全球性的分布式数据库查询系统。
DNS 解析的核心参与者
一次完整的 DNS 查询涉及多个关键角色的协同工作:- 客户端存根解析器 (Client Stub Resolver): 通常是操作系统的一部分,它接收来自应用程序(如浏览器)的查询请求,并将其转发给一个配置好的递归 DNS 解析器。
- 客户端存根解析器 (Client Stub Resolver): 通常是操作系统的一部分,它接收来自应用程序(如浏览器)的查询请求,并将其转发给一个配置好的递归 DNS 解析器。
- 递归 DNS 解析器 (Recursive DNS Resolver): 这是 DNS 查询的“主力军”。它通常由用户的网络服务提供商(ISP)或公共服务(如 Google 的
8.8.8.8
)提供。它的任务是完整地、递归地回答客户端的查询,即使用户只问了一次,它也会负责完成后续所有必要的查询步骤。 - 根域名服务器 (Root Name Server): 位于 DNS 层次结构的顶端,全球仅有 13 组(由不同机构管理),管理全部顶级域名(如
.com
,.org
,.cn
)。它不存储具体域名的 IP 地址,但它知道所有顶级域名(TLD)服务器的地址。 - 顶级域名 (TLD) 服务器 (Top-Level Domain Name Server): 负责管理特定顶级域名 (如
.com
) 的服务器。它不知道example.com
的 IP 地址,但它知道example.com
的权威域名服务器在哪里。 - 权威域名服务器 (Authoritative Name Server): 负责管理特定域名(如
example.com
)的最终记录。它对该域名的信息拥有最终解释权,存储着诸如www.example.com
对应的 IP 地址等信息。
解析流程:缓存优先,迭代兜底
为了极致的效率,DNS 查询并非每次都从头开始。它遵循“缓存优先”的原则,只有当所有层级的缓存都未能命中时,才会启动一次完整的迭代查询。
DNS 缓存的层次结构:
- 浏览器缓存: 浏览器会缓存用户近期访问过的域名的 DNS 记录。
- 操作系统缓存: 操作系统(如 Windows, macOS)拥有自己的 DNS 缓存。
- 路由器缓存: 局域网内的路由器通常也会缓存 DNS 查询结果。
- 递归解析器缓存: ISP 的 DNS 服务器会对其处理过的所有查询结果进行大规模缓存。
只有当以上所有缓存都未命中(或已过期)时,递归解析器才会开始下面的流程:
查询类型详解
- 递归查询 (Recursive Query): 如图中步骤 1 和 10 所示。这是客户端对递归解析器的查询模式。客户端发出请求后,便等待最终答案,期间所有的复杂工作都由递归解析器代为完成。
- 迭代查询 (Iterative Query): 如图中步骤 3-8 所示。这是递归解析器与其他域名服务器之间的查询模式。每次查询,被查询的服务器如果不知道最终答案,就会返回一个“更好的下一个查询对象”的地址。递归解析器需要“迭代地”、一步步地去询问,直到找到最终的权威服务器并获得答案。
记录类型 (Record Type)
- NS 记录 (Name Server): 当向根服务器或 TLD 服务器查询时,它们返回的是 NS 记录,即下一级域名服务器的地址。
- A / AAAA 记录: 当向权威服务器查询时,它返回的是主机记录。
A
记录对应 IPv4 地址,AAAA
记录对应 IPv6 地址。