《DNS解析流程:在未知的迷雾中,开启一场精准定位的征程》

40 阅读3分钟

www.baidu.com域名从左至右图解:

domain.png 

当在浏览器中输入 www.baidu.com 并按下回车时,DNS(域名系统)解析过程会将域名转换为对应的 IP 地址。以下是详细的图解和流程:

dns process3.png





1. 浏览器缓存查询

  • 步骤:浏览器首先检查自己的缓存中是否有 www.baidu.com 对应的 IP 地址。
  • 结果:如果缓存命中(且未过期),直接使用该 IP;否则进入下一步。

2. 操作系统缓存查询(本地 hosts 文件)

  • 步骤:浏览器向操作系统发起 DNS 查询请求,操作系统会检查:

本地 hosts 文件(如 Windows 的 C:\Windows\System32\drivers\etc\hosts)。

本地 DNS 缓存(如 Windows 的 DNS Client 服务缓存)。

  • 结果:如果找到记录,直接返回;否则继续。

3. 向本地 DNS 服务器发起递归查询

  • 步骤:操作系统将请求发送到本地配置的 DNS 服务器(通常由 ISP 或公共 DNS 如 8.8.8.8 提供)。
  • 递归查询:本地 DNS 服务器负责代表用户完成整个解析过程,直到返回最终结果。

4. 本地 DNS 服务器的解析流程

4.1 检查本地 DNS 缓存

如果有且有效,直接返回 IP;否则继续。

4.2 迭代查询根域名服务器(Root DNS)

  • 查询根域名服务器:本地 DNS 服务器向根域名服务器(如 a.root-servers.net)发起请求,询问 .com 的顶级域名服务器(TLD DNS)地址。

根域名服务器返回 .com TLD 服务器的地址(如 [a-m].gtld-servers.net)。

4.3 查询顶级域名服务器(TLD DNS)

  • 查询 .com TLD 服务器:本地 DNS 服务器向 .com TLD 服务器请求 baidu.com 的权威域名服务器(Authoritative DNS)地址。

TLD 服务器返回 baidu.com 的权威服务器地址(如 ns[1-4].baidu.com)。

4.4 查询权威域名服务器(Authoritative DNS)

  • 查询 baidu.com 的权威服务器:本地 DNS 服务器向 ns1.baidu.com 等权威服务器请求 www.baidu.com 的 IP。

权威服务器返回 www.baidu.com 的 A 记录(如 220.181.38.150)或 CNAME 记录(如指向 www.a.shifen.com)。

如果是 CNAME,需进一步解析 www.a.shifen.com 的 IP(重复上述流程)。

4.5 返回最终 IP

  • 本地 DNS 服务器获得 IP 后:

缓存该记录(根据 TTL 设置)。

将 IP 返回给操作系统,操作系统再返回给浏览器。

5. 浏览器获取 IP 并建立连接

缓存该 IP(根据 TTL)。

通过 TCP/IP 向该 IP 发起 HTTP/HTTPS 连接(如 220.181.38.150:80)。

补充细节

  • DNS 记录类型

A 记录:域名到 IPv4 的映射。

CNAME:别名记录(如 www.baidu.com → www.a.shifen.com)。

NS 记录:指定域名的权威服务器。

  • TTL(Time-To-Live) :控制缓存时间,防止频繁查询。
  • DNS 优化

预解析()。

CDN 通过返回就近的 IP 实现负载均衡。

完整流程

浏览器 → 浏览器缓存 → 系统缓存 → hosts 文件 → 本地 DNS 服务器 → 根 DNS → TLD DNS → 权威 DNS → 返回 IP

通过以上步骤,DNS 解析完成,浏览器最终获取到 www.baidu.com 的 IP 并开始网页加载。



通过终端命令行模拟本地DNS服务解析www.baidu.com的过程

  • 命令行输入nslookup回车

cmd1.jpg



  • 设置查询类型为set type=ns(name server)输入.查询根域名(返回13个根域名)

cmd2.jpg

  • 设置type为a(ipv4类型)查询根域名ip,set type=a

cmd3.jpg

  • 因为根域名服务器知道.com域名服务器地址,所以与根服务器进行对话咨询com域名服务器的地址(输入server 192.112.36.4,set type=ns,输入com.回车)

cmd4.jpg

  • 找到g.gtld-servers.net的ipv4地址,与顶级通用域名服务器对话咨询baidu.com域名服务器的地址(输入server ipv4地址,set type=ns,输入baidu.com回车)返回的域名服务器有5个,是DNSPod平台提供的服务

cmd5.jpg

  • 与上述任意一个权威域名服务器进行对话咨询www.baidu.com域名服务器的IPv4地址(输入server 220.181.33.31,set type=a,输入www.baidu.com回车)返回的一般是cdn(内容分发网络)服务器地址

cmd6.jpg