DNS解析过程

7 阅读3分钟

一、DNS基础概念

1. 定义
DNS(Domain Name System,域名系统)是将域名转换为IP地址的分布式数据库系统,类似“网络通讯录”。
2. 核心作用

  • 解决域名(如www.example.com)与IP地址(如192.0.2.1)的映射关系,使浏览器能通过域名访问服务器。

二、DNS解析完整流程(从浏览器到服务器)

以访问www.example.com为例,解析过程如下:

1. 浏览器缓存查询(Local Cache)
  • 优先检查:浏览器会先查询自身缓存中是否有该域名对应的IP记录(缓存时间由DNS响应头TTL控制)。
  • 耗时:纳秒级,若命中则直接使用IP,无需后续步骤。
2. 操作系统缓存查询(OS Cache)
  • 若浏览器未命中:系统会查询本地DNS缓存(Windows在DNS Client服务,Linux在/etc/resolv.conf)。
  • 典型场景:同一设备上其他应用(如APP)曾解析过该域名,缓存可复用。
3. 本地hosts文件查询
  • 系统级配置:查询本地hosts文件(Windows在C:\Windows\System32\drivers\etc\hosts,Linux在/etc/hosts)。
  • 用途:手动绑定域名与IP(如开发环境指向本地服务器)。
4. 本地DNS服务器(递归解析器)查询
  • 运营商DNS/自定义DNS
    • 若上述步骤均未命中,浏览器会向本地DNS服务器(如运营商提供的114.114.114.114或自定义的8.8.8.8)发起递归查询。
  • 递归解析器的工作
    • 若本地服务器无缓存,会代替客户端向DNS根服务器发起迭代查询。
5. 根域名服务器(Root DNS)查询
  • 全球13组根服务器:负责告知.com.org等顶级域名(TLD)服务器的地址。
  • 示例:查询www.example.com时,根服务器返回.com TLD服务器的IP。
6. 顶级域名服务器(TLD DNS)查询
  • 管理顶级域名:如.com服务器负责解析所有.com域名。
  • 响应内容:告知example.com的权威域名服务器(Authoritative DNS)地址。
7. 权威域名服务器查询
  • 最终解析:权威服务器存储域名的IP映射记录(如www.example.com192.0.2.1)。
  • 返回结果:将IP地址沿原路返回给本地DNS服务器,并缓存至各层级。
8. 结果返回与缓存
  • 本地DNS服务器将IP返回给浏览器,同时缓存结果(TTL时间内可直接复用)。
  • 浏览器使用IP建立TCP连接,访问目标服务器。

三、关键概念与优化点

1. 解析类型

  • 递归解析:本地DNS服务器“代劳”所有查询步骤(用户常用模式)。
  • 迭代解析:客户端/本地服务器逐级查询根→TLD→权威服务器(DNS服务器间常用)。

2. 缓存机制

  • 各层级缓存:浏览器、系统、本地DNS服务器、各级域名服务器均会缓存解析结果,减少重复查询。
  • TTL(Time To Live):域名记录的缓存时间,过小会增加解析耗时,过大则修改IP时生效慢(建议10分钟~1小时)。

3. 性能优化手段

  • DNS预解析(Prefetch)
    <link rel="dns-prefetch" href="https://www.example.com">
    
    提前解析域名,减少后续访问延迟。
  • 使用CDN加速:CDN节点就近提供DNS解析服务,降低网络延迟。
  • HTTPS DNS(DoH)/DNS over TLS(DoT):加密DNS查询,防止劫持,提升安全性(如Chrome支持DoH)。

四、问题

1. 问:DNS污染/劫持是什么?如何解决?
  • 污染指恶意篡改DNS解析结果(如将www.google.com指向虚假IP)。
  • 解决方案:使用加密DNS(DoH/DoT)、切换公共DNS(如Cloudflare的1.1.1.1)、手动配置hosts文件。
2. 问:DNS解析耗时占页面加载时间的比例?
  • 首次访问时约占10%15%(典型耗时20120ms),可通过预解析优化。
  • 重复访问时因缓存命中,耗时可忽略。
3. 问:DNS负载均衡如何实现?
  • 权威服务器可对同一域名返回不同IP(如指向不同地区的服务器),实现流量分发(即DNS轮询)。
  • 优点:无需修改应用层代码;缺点:无法感知服务器状态(可能返回故障IP)。