解析过程

在Chrome浏览器上,DNS查找顺序一般是这样的:浏览器缓存→系统缓存→hosts→路由器缓存→ISP DNS 缓存→递归搜索。

如下,展示了一个可能的详细过程:

步骤名称 步骤描述
浏览器缓存 首先搜索浏览器的DNS缓存,看自身的缓存中是否有对应的条目,如果有且没有过期则解析到此结束。
(缓存时间比较短,TTL默认是1000,且只能容纳1000条缓存)

注:
查看浏览器的DNS缓存,可以使用 chrome://net-internals/#dns 来进行查看。
系统缓存 如果浏览器缓存里没有找到需要的记录,浏览器会调用系统缓存里的记录。如果有则解析成功。

注:
查看操作系统的DNS缓存,以Windows系统为例,可以在命令行下使用 ipconfig /displaydns 来进行查看。
hosts文件 如果在系统的DNS缓存也没有找到,那么尝试读取hosts文件,看看这里面有没有该域名对应的IP地址,如果有则解析成功。

注:
Windows上hosts文件位置,C:\Windows\System32\drivers\et。
路由器缓存 如果还是没有找到需要的缓存,将前面的查询请求发给路由器,它一般会有自己的DNS缓存。如果有则解析成功。
ISP DNS 缓存 如果还是没有,浏览器就会发起一个DNS的系统调用,向本地配置的首选DNS服务器发起域名解析请求。
运营商的DNS服务器首先查找自身的缓存,找到对应的条目,且没有过期,则解析成功。

注:
每一个ISP(网络服务提供商),或一个大学,甚至是一个大学里的系都会有一个自己的本地域名服务器,他会在url第一次访问时缓存该域名的指向。下次再访问时,他会从缓存里把这个url曾经指向的IP调出来。
递归搜索 如果没有需要的缓存,你的ISP的DNS服务器会代替我们的浏览器发起迭代DNS解析请求,从根域名开始进行递归查询。

递归查询:


主机向本地域名服务器的查询一般都是采用递归查询。
如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果可能是所要查询的IP地址,也可能是一个失败的响应,表示无法查询到所需的IP地址。

迭代查询:
本地域名服务器向根域名服务器的查询通常是采用迭代查询。
|

如果经过以上的步骤,还没有解析成功,那么会进行如下步骤:

步骤名称 步骤描述
NetBIOS名称缓存 操作系统就会查找 NetBIOS name Cache(NetBIOS名称缓存,就存在客户端电脑中的),那这个缓存有什么东西呢?
凡是最近一段时间内和我成功通讯的计算机的计算机名和Ip地址,就都会存在这个缓存里面。什么情况下该步能解析成功呢?就是该名称正好是几分钟前和我成功通信过,那么这一步就可以成功解析。
WINS 服务器 如果还没成功,那会查询WINS 服务器(是NETBIOS名称和IP地址对应的服务器)
广播查找 如果还没成功,那么客户端就要进行广播查找
LMHOSTS文件 那么客户端就读取LMHOSTS文件(和HOSTS文件同一个目录下,写法也一样)
解析失败 只要前面的这些步骤中有一步可以解析成功,那就可以成功和目标计算机进行通信。
但是如果还没有解析成功,那么这次解析失败,那就无法跟目标计算机进行通信。

递归查询

DNS域名解析的过程 - 图1
(图解:DNS递归解析)

迭代查询

DNS域名解析的过程 - 图2
(图解:DNS迭代解析图)

引用