一文读懂 DNS 解析流程、节点分布,掌握互联网寻址的底层密码
DNS解析是互联网访问的第一步,无论是使用笔记本浏览器访问网站还是打开手机APP的时候,第一步必然要经过DNS解析流程。
DNS解析核心流程
1. 本地缓存查询
- 检查浏览器缓存 → 浏览器缓存近期访问的域名映射
- 检查系统缓存 → 查询本地 hosts 文件(如
/etc/hosts) - 检查路由器缓存 → 家用路由器可能缓存 DNS 记录
- 检查本地 DNS 服务器缓存(如 ISP 提供的 DNS)
✅ 若缓存命中且未过期(根据 TTL),直接返回结果
❌ 若未命中,进入完整解析流程
2. 递归查询过程(客户端->本地DNS服务器)
sequenceDiagram
participant Client
participant LocalDNS
Client->>LocalDNS: 查询 www.example.com
LocalDNS->>RootServer: 请求根域名服务器
RootServer->>LocalDNS: 返回 .com TLD 服务器地址
LocalDNS->>TLD_Server: 请求 .com 服务器
TLD_Server->>LocalDNS: 返回 example.com 权威服务器地址
LocalDNS->>Auth_Server: 请求 www.example.com
Auth_Server->>LocalDNS: 返回最终 IP 地址
LocalDNS->>Client: 返回解析结果
根域名服务器查询
- 本地 DNS 向根服务器(
a.root-servers.net等)发起请求 - 根服务器返回
.com顶级域(TLD)服务器的地址
- 本地 DNS 向根服务器(
TLD 服务器查询
- 本地 DNS 向
.comTLD 服务器查询 - TLD 服务器返回
example.com的权威 DNS 服务器地址
- 本地 DNS 向
权威服务器查询
本地 DNS 向
example.com的权威服务器(如ns1.example.com)请求权威服务器返回
www.example.com的 A 记录(IPv4)或 AAAA 记录(IPv6)
3. 记录类型与响应
| 记录类型 | 作用 | 示例返回值 |
|---|---|---|
| A | IPv4 地址 | 192.0.2.1 |
| AAAA | IPv6 地址 | 2001:db8::1 |
| CNAME | 域名别名 | cdn.example.com |
| MX | 邮件服务器 | 10 mail.example.com |
| NS | 权威 DNS 服务器 | ns1.example.com |
4. 关键技术点
- TTL(Time To Live)
- 控制缓存有效期(如
3600秒),过期后需重新查询
- 控制缓存有效期(如
- DNSSEC
- 通过数字签名验证响应真实性,防止 DNS 欺骗
- EDNS
- 扩展 DNS 协议,支持更大的 UDP 数据包和客户端子网信息
- CDN 优化
- 智能 DNS 返回离用户最近的服务器 IP(基于地理位置或 Anycast)
5. 优化建议
- 客户端侧
- 配置多组 DNS 服务器(如
8.8.8.8+1.1.1.1) - 启用 DNS 预加载(浏览器 prefetch)
- 配置多组 DNS 服务器(如
- 服务端侧
- 合理设置 TTL(平衡缓存效率与变更灵活性)
- 部署 Anycast DNS 提高可用性
- 安全加固
- 使用 DoH(DNS over HTTPS)或 DoT(DNS over TLS)
- 配置 DNSSEC 签名
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.