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,且你的本地递归服务器缓存为空。
- 启动:寻找“根”的方向 所有的递归服务器程序里都内置了一份文件,叫 Root Hints(根提示文件)。
这个文件硬编码了全球 13 组根域名服务器(从 a.root-servers.net 到 m.root-servers.net)的 IP 地址。
动作:你的服务器从这 13 个 IP 中随机选一个,问道:“请问 www.example.com 在哪?”
- 第一站:根服务器(Root Servers) 根服务器虽然权力最高,但它不存储具体域名。
根的回应:它会看域名的后缀是 .com,然后回复:“我不负责这个,但 .com 区域的管理者是这几台 TLD 服务器,你去问它们。”
获取信息:你的服务器拿到了 .com TLD 服务器的 IP 列表。
- 第二站:顶级域名服务器(TLD Servers) 你的服务器马不停蹄,转向 .com 的 TLD 服务器(通常由 Verisign 等机构运行)。
提问:重复刚才的问题。
TLD 的回应:它检索自己的数据库,发现 example.com 已经注册,并且指向了特定的 权威服务器。它回复:“你去问 ns1.example.com 吧,它是这个域名的管家。”
获取信息:你的服务器拿到了 example.com 的 NS 记录。
- 第三站:权威域名服务器(Authoritative Servers) 这是最后的一里路。你的服务器询问 example.com 的权威服务器。
提问:你要找 www 这个主机的 A 记录(IPv4 地址)吗?
权威的回应:如果是有效的,它会给出最终答案:93.184.216.34。
- 终点:缓存与回复 缓存:你的递归服务器会非常细心地把这次跑腿的结果存入内存。它不仅存 www.example.com 的 IP,还会存下 .com 服务器在哪、example.com 的权威服务器在哪。
交付:把 IP 返回给发起请求的用户进程。