以 Chrome 浏览器为例:(访问: www.google.com
1、 Chrome 浏览器 会首先搜索浏览器自身的 DNS 缓存(缓存时间比较短,大概只有 1 分钟,且只能容纳 1000 条缓存),看自身的缓存中是否有 www.google.com 对应的条目,而且没有过期,如果有且没有过期则解析到此结束。
注:我们怎么查看 Chrome 自身的缓存?可以使用 chrome://net-internals/#dns 来进行查看
2、如果浏览器自身的缓存里面没有找到对应的条目,那么 Chrome 会搜索操作系统自身的 DNS 缓存,如果找到且没有过期则停止搜索解析到此结束.
注:怎么查看操作系统自身的 DNS 缓存,以 Windows 系统为例,可以在命令行下使用 ipconfig /displaydns 来进行查看
3、如果在 Windows 系统的 DNS 缓存也没有找到,那么尝试读取 hosts 文件(位于 C:\Windows\System32\drivers\etc),看看这里面有没有该域名对应的 IP 地址,如果有则解析成功。
4、如果在 hosts 文件中也没有找到对应的条目,浏览器就会发起一个 DNS 的系统调用,就会向本地配置的首选 DNS 服务器发起域名解析请求。
(递归,通过的是 UDP 协议向 DNS 的 53 端口发起请求
4.1、运营商的 DNS 服务器首先查找自身的缓存,找到对应的条目,且没有过期,则解析成功
4.2、如果没有找到对应的条目,则有运营商的 DNS 代我们的浏览器发起迭代 DNS 解析请求
4.2.1、找根域的 DNS 的 IP 地址(这个 DNS 服务器都内置 13 台根域的 DNS 的 IP 地址),并发起请求,返回 com 域的 IP 地址
4.2.2、向 com 域的 IP 地址发起请求,返回 google.com 这个域的 DNS 地址
4.2.3、向 google.com 这个域名的 DNS 地址(这个一般就是由域名注册商提供的,像万网,新网等)发起请求,返回 www.google.com 这个域名对应的 IP 地址,并返回给 Windows 系统内核,内核又把结果返回给浏览器,终于浏览器拿到了 www.google.com 对应的 IP 地址
资料:
DNS 原理入门