本文目录导读:
- 第1步:浏览器缓存检查
- 第2步:操作系统(OS)缓存检查
- 第3步:本地DNS服务器查询(递归查询)
- 第4步:迭代查询(根域名服务器 -> 顶级域名服务器 -> 权威域名服务器)
- 第5步:返回与缓存
- 整个流程图解(简化版)
- 常见概念补充
DNS解析是将人类可读的域名(如 www.example.com)转换为机器可读的IP地址(如 184.216.34)的过程,整个流程通常涉及递归查询和迭代查询,并且会利用缓存来加速。
下面是DNS解析的详细流程步骤(以用户在浏览器输入 www.example.com 为例):
第1步:浏览器缓存检查
用户在浏览器地址栏输入 www.example.com 并按回车。
- 浏览器首先检查自己的本地缓存中是否已经存储了这个域名对应的IP地址。
- 如果有且未过期(TTL未超时),则直接返回IP,流程结束。
- 如果没有,则进入下一步。
第2步:操作系统(OS)缓存检查
如果浏览器缓存中没有,浏览器会调用操作系统的解析器(如 gethostbyname)。
- 操作系统检查自己的Hosts文件,Windows、macOS、Linux系统都有一个本地hosts文件(如
C:\Windows\System32\drivers\etc\hosts),如果文件中手动配置了域名和IP的映射,则直接使用该IP。 - 如果hosts文件没有,操作系统会检查系统级的DNS缓存(即OS缓存)。
- 如果还是没有,操作系统会将请求发送给本地DNS服务器(通常是你的网络服务商ISP提供的DNS服务器,或者你手动设置的如
114.114.114或8.8.8)。
第3步:本地DNS服务器查询(递归查询)
本地DNS服务器(也叫递归解析器)收到请求。
- 检查自身缓存:它首先查看自己的缓存中是否有
www.example.com的记录,如果有且未过期,直接返回给操作系统。 - 发起递归查询:如果缓存中没有,它会代为进行后续的所有查询(这个过程叫递归查询),一直查到结果返回给用户。
第4步:迭代查询(根域名服务器 -> 顶级域名服务器 -> 权威域名服务器)
本地DNS服务器开始进行迭代查询,依次询问各级域名服务器:
-
问根域名服务器(Root Server)
- 本地DNS服务器向根域名服务器(全球有13台逻辑根服务器,由ICANN管理)询问:
请问 www.example.com 的IP是什么? - 根服务器不直接负责具体域名的解析,它只负责顶级域,它会回复:“我不知道具体的IP,但我知道
.com顶级域名服务器的地址,你去问它吧。”
- 本地DNS服务器向根域名服务器(全球有13台逻辑根服务器,由ICANN管理)询问:
-
问顶级域名服务器(TLD Server)
- 本地DNS服务器根据根服务器的指引,向
.com顶级域名服务器询问:请告诉我 www.example.com 的IP。 - 顶级域名服务器(由Verisign等管理)不负责具体的二级域名(example.com),它会回复:“我不知道
www.example.com,但我知道example.com的权威域名服务器地址(通常是ns1.example.com或dns.example.com),你去问它吧。”
- 本地DNS服务器根据根服务器的指引,向
-
问权威域名服务器(Authoritative Server)
- 本地DNS服务器根据顶级域服务器的指引,向
example.com的权威域名服务器询问:请告诉我 www.example.com 的IP地址。 - 权威域名服务器是域名注册商(如阿里云、GoDaddy)或自建DNS服务器,它拥有该域名下所有记录(A记录、CNAME记录等),它查看自己的数据库,找到
www.example.com对应的A记录(IPv4地址)或AAAA记录(IPv6地址),然后回复:“www.example.com的IP是184.216.34。”
- 本地DNS服务器根据顶级域服务器的指引,向
第5步:返回与缓存
- 返回结果:本地DNS服务器拿到了最终的IP地址,将其返回给用户的操作系统。
- 缓存结果:为了方便下次快速查找,本地DNS服务器会将这个映射关系(域名 -> IP)存到自己的缓存中,有效期由权威DNS服务器指定的TTL(Time To Live,生存时间)决定。
- 系统缓存:用户的操作系统收到IP后,也会将该结果暂存到OS缓存。
- 浏览器连接:浏览器收到操作系统返回的IP地址,开始通过TCP/IP协议与该IP地址的服务器(通常通过端口80或443)建立连接,发起HTTP请求。
整个流程图解(简化版)
用户浏览器
|
|---[1] 检查浏览器缓存
|
|---[2] 检查OS缓存 & Hosts文件
|
|---[3] 请求 -> 本地DNS服务器 (递归解析器)
|--- 检查自身缓存
|--- [4.1] 问:根名字服务器 -> 答:去问 .com 顶级服务器
|--- [4.2] 问:.com 顶级名字服务器 -> 答:去问 example.com 权威服务器
|--- [4.3] 问:example.com 权威名字服务器 -> 答:IP = 93.184.216.34
|
|--- [5] 返回 IP 给 OS -> 浏览器
常见概念补充
- 递归查询:用户设备向本地DNS服务器发起的是一次性查询,后续工作由服务器完成(用户等待最终结果)。
- 迭代查询:本地DNS服务器向根/顶级/权威服务器发起的多次“追问”过程,每次得到下一步的线索。
- TTL(生存时间):缓存记录的有效时长(通常为几分钟到几天),决定了DNS变更后多久全互联网生效。
- DNS缓存:这是提升网络效率的关键,但也可能导致域名更换IP后用户访问老IP(需等缓存过期或手动清除)。
- CDN智能调度:大型网站(如淘宝、B站)会利用DNS解析将用户指向最近的CDN节点IP,从而加速访问,这通常是权威DNS服务器根据用户的地理位置或源IP返回不同的IP。
标签: 递归解析