Skip to content

DNS

DNS 基础

DNS 过程

第一阶段

你联网发出请求的一瞬间,计算机并不会立刻冲向互联网,而是先翻看自己的“小本本”。

浏览器缓存:浏览器(如 Chrome)会先检查自己近期是否解析过该域名。

操作系统缓存:如果浏览器没找到,它会调用操作系统的解析库(Resolver)。OS 会检查自己的 DNS 缓存。

Hosts 文件:OS 会读取本地的映射文件(在 Linux 中是 /etc/hosts,Windows 中是 C:\Windows\System32\drivers\etc\hosts)。如果你在这里手动写了 1.1.1.1 google.com,解析到此结束。

第二阶段

如果本地缓存一无所获,解析器(Resolver)就需要向外界求助。这时,/etc/resolv.conf 成了关键的指路牌。

它的作用:它告诉系统“如果你不知道地址,去问哪台服务器”

核心内容:

nameserver:定义了递归 DNS 服务器的 IP 地址(通常是你的路由器、ISP 提供的 DNS,或 8.8.8.8 等公共 DNS)。

search:定义域名的搜索列表。如果你只输入 server1,它会自动补全为 server1.yourcompany.com 进行尝试。

options:控制超时(timeout)和重试次数(attempts)。

注意:在现代 Linux 发行版中,这个文件通常由 systemd-resolved 或 NetworkManager 自动管理。手动修改可能在重启后被覆盖

第三阶段

这是最核心的步骤。你配置的 nameserver(通常称为 Recursive Resolver,递归解析器)代你跑腿,去询问全球的 DNS 层级结构。

根域名服务器 (Root Server): 解析器首先问根服务器:“你知道 www.example.com 在哪吗?”。根服务器不直接回答,但它会说:“我不清楚,但 .com 后缀的域名归 TLD 服务器管,你去问它。”

顶级域名服务器 (TLD Server): 解析器转向 .com 的 TLD 服务器。TLD 服务器说:“我知道 example.com 这个域名,它是由 权威 DNS 服务器 维护的,地址是 ns1.example.com.”

权威域名服务器 (Authoritative Server): 这是终点站。解析器询问权威服务器,权威服务器查找自己的区域文件(Zone File),最终给出 www 对应的 A 记录(IP 地址)

假设你要访问 example.com,且所有缓存都失效了:

用户进程 (curl) -> 调用 系统库 (getaddrinfo)。

系统库 -> 发送 UDP 包给 /etc/resolv.conf 里的 IP(比如 192.168.1.1 路由器)。

路由器(通常只是转发器) -> 发送给 ISP 的递归服务器。

ISP 递归服务器(发现没缓存) -> 发送给 根服务器(询问 .com)。

根服务器 -> 回复 ISP 递归服务器(告诉它 .com 的地址)。

...后续依次询问 TLD 和 权威服务器...

ISP 递归服务器 -> 拿到最终 IP,回传给 你的路由器。

你的路由器 -> 回传给 你的系统。

你的系统 -> 给 用户进程。

关键点: 对你的电脑来说,它只完成了一次“一问一答”(发给 nameserver,拿到 IP)。复杂的“问根、问 TLD”过程是由 nameserver 在幕后完成的。

递归查询

如果你决定在本地运行一个完整的递归服务器(比如 BIND、Unbound 或 PowerDNS),你的机器就不再是那个“向 8.8.8.8 伸手要答案”的客户端,而是变成了一个真正的“互联网寻路人”

本地递归查询的全过程 假设你第一次尝试访问 www.example.com,且你的本地递归服务器缓存为空。

  1. 启动:寻找“根”的方向 所有的递归服务器程序里都内置了一份文件,叫 Root Hints(根提示文件)。

这个文件硬编码了全球 13 组根域名服务器(从 a.root-servers.net 到 m.root-servers.net)的 IP 地址。

动作:你的服务器从这 13 个 IP 中随机选一个,问道:“请问 www.example.com 在哪?”

  1. 第一站:根服务器(Root Servers) 根服务器虽然权力最高,但它不存储具体域名。

根的回应:它会看域名的后缀是 .com,然后回复:“我不负责这个,但 .com 区域的管理者是这几台 TLD 服务器,你去问它们。”

获取信息:你的服务器拿到了 .com TLD 服务器的 IP 列表。

  1. 第二站:顶级域名服务器(TLD Servers) 你的服务器马不停蹄,转向 .com 的 TLD 服务器(通常由 Verisign 等机构运行)。

提问:重复刚才的问题。

TLD 的回应:它检索自己的数据库,发现 example.com 已经注册,并且指向了特定的 权威服务器。它回复:“你去问 ns1.example.com 吧,它是这个域名的管家。”

获取信息:你的服务器拿到了 example.com 的 NS 记录。

  1. 第三站:权威域名服务器(Authoritative Servers) 这是最后的一里路。你的服务器询问 example.com 的权威服务器。

提问:你要找 www 这个主机的 A 记录(IPv4 地址)吗?

权威的回应:如果是有效的,它会给出最终答案:93.184.216.34。

  1. 终点:缓存与回复 缓存:你的递归服务器会非常细心地把这次跑腿的结果存入内存。它不仅存 www.example.com 的 IP,还会存下 .com 服务器在哪、example.com 的权威服务器在哪。

交付:把 IP 返回给发起请求的用户进程。