一、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服务器(如运营商提供的
- 递归解析器的工作:
- 若本地服务器无缓存,会代替客户端向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.com
→192.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)。