DNS解析是互联网访问的第一步,无论是使用笔记本浏览器访问网站还是打开手机APP的时候,第一步必然要经过DNS解析流程。

DNS解析核心流程

1. 本地缓存查询

  1. 检查浏览器缓存 → 浏览器缓存近期访问的域名映射
  2. 检查系统缓存 → 查询本地 hosts 文件(如 /etc/hosts
  3. 检查路由器缓存 → 家用路由器可能缓存 DNS 记录
  4. 检查本地 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: 返回解析结果

  1. 根域名服务器查询

    • 本地 DNS 向根服务器(a.root-servers.net 等)发起请求
    • 根服务器返回 .com 顶级域(TLD)服务器的地址
  2. TLD 服务器查询

    • 本地 DNS 向 .com TLD 服务器查询
    • TLD 服务器返回 example.com 的权威 DNS 服务器地址
  3. 权威服务器查询

    • 本地 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. 关键技术点

  1. TTL(Time To Live)
    • 控制缓存有效期(如 3600 秒),过期后需重新查询
  2. DNSSEC
    • 通过数字签名验证响应真实性,防止 DNS 欺骗
  3. EDNS
    • 扩展 DNS 协议,支持更大的 UDP 数据包和客户端子网信息
  4. CDN 优化
    • 智能 DNS 返回离用户最近的服务器 IP(基于地理位置或 Anycast)

5. 优化建议

  1. 客户端侧
    • 配置多组 DNS 服务器(如 8.8.8.8 + 1.1.1.1
    • 启用 DNS 预加载(浏览器 prefetch)
  2. 服务端侧
    • 合理设置 TTL(平衡缓存效率与变更灵活性)
    • 部署 Anycast DNS 提高可用性
  3. 安全加固
    • 使用 DoH(DNS over HTTPS)或 DoT(DNS over TLS)
    • 配置 DNSSEC 签名