当在浏览器中输入 www.baidu.com 并按下回车时,DNS(域名系统)解析过程会将域名转换为对应的 IP 地址。以下是详细的图解和流程:
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 缓存
- 本地 DNS 服务器检查自身缓存是否有 www.baidu.com 的记录(含 TTL 是否过期)。
如果有且有效,直接返回 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 并建立连接
- 浏览器收到 www.baidu.com 的 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回车
- 设置查询类型为set type=ns(name server)输入.查询根域名(返回13个根域名)
- 设置type为a(ipv4类型)查询根域名ip,set type=a
- 因为根域名服务器知道.com域名服务器地址,所以与根服务器进行对话咨询com域名服务器的地址(输入server 192.112.36.4,set type=ns,输入com.回车)
- 找到g.gtld-servers.net的ipv4地址,与顶级通用域名服务器对话咨询baidu.com域名服务器的地址(输入server ipv4地址,set type=ns,输入baidu.com回车)返回的域名服务器有5个,是DNSPod平台提供的服务
- 与上述任意一个权威域名服务器进行对话咨询www.baidu.com域名服务器的IPv4地址(输入server 220.181.33.31,set type=a,输入www.baidu.com回车)返回的一般是cdn(内容分发网络)服务器地址