解析过程
在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递归解析)
迭代查询
(图解:DNS迭代解析图)
引用
当你在浏览器地址栏输入一个URL后回车,将会发生的事情?:https://www.cnblogs.com/wupeixuan/p/8747918.html