在dns解析流程前我们先要了解什么是dns
1、什么是dns
dns(domain name system) 是域名系统的英文缩写,是一种组织层域层次结构的计算机和网络服务命名的系统,用于TCP/IP网络。
简单的来说就是我们在浏览器输入一个URL地址时,浏览器要向这个URL 主机所对应的服务器发送请求,就知道这个服务器的ip,对于浏览器来说就是,dns的作用就是将主机名转换成ip地址。
2、dns解析流程
{dns解析流程} 简单的来说就是把域名翻译成ip地址。比如说www.baidu.com 把这个域名翻译成对应的ip 192.168.18.255。只是一个例子。
域名解析流程
在访问本地dns服务器之前会先(检查本地dns缓存和host文件解析)才会走上面图片的流程
浏览器缓存检查
浏览器会首先搜素浏览器本身dns缓存,缓存时间比较短,大概只有一分钟,且只能容纳1000条缓存,看自身所缓存的有所搜索的对应条目,而且没有过期,如果没有过期则解析到此结束。
操作系统缓存检查+host解析
如果浏览器缓存解析没有找到,操作系统也会有一个域名解析的过程,则浏览器会自动搜索操作系统的dns缓存是否有这个所对应的域名解析,如果没有有则解析到此结束。
在 Linux
中可以通过 /etc/hosts
文件来设置,可以将任何域名解析到任何能够访问的 IP
地址。如果在这里指定了一个域名对应的 IP
地址,那么浏览器会首先使用这个 IP
地址。当解析到这个配置文件中的某个域名时,操作系统会在缓存中缓存这个解析结果,缓存的时间同样是受这个域名的失效时间和缓存的空间大小控制的。
第一步
客户端通过浏览器访问域名为(www.baidu.com)的网站,发起查询该ip地址的请求。首先通过dns缓存+host文件中查询有无解析结果。如果有返回结果。如果没有则要查询本地dns服务器。
第二部
客户端通过浏览器访问域名为(www.baidu.com)的网站,发起该ip地址的请求。该请求发送到本地dns服务器上。本地服务器上首先会查询它的缓存记录,如果有缓存中有此条记录,就可以直接返回结果。如果没有则服务器会向根域发送请求进行查询。
第三部
本地dns服务器向根部服务器发送请求,请求域名为(www.baidu.com)的网站
第四部
经过查询,根服务器并没有有记录该域名的ip地址的对应关系,但是会告诉本地dns服务器,可以到顶级域域名服务器上进行查询,并给出服务器的地质(.com)
第五步
本地dns服务器向.com服务器发送dns请求,请求域名为www.baidu,com (baidu,com)的网站。
第六步
。com服务器收到请求后,不会直接返回域名和ip地址的对应关系,而是告诉本地dns服务器,该域名可以在baidu.com上进行解析获取ip地址,并告诉baidu.com域名服务器的地址。
第七步
本地 DNS
服务器向 baidu.com
域名服务器发送 DNS
请求,请求域名 www.baidu.com (http://www.baidu.com) 的 IP
地址。
第八步
baidu.com
服务器收到请求后,在自己的缓存表中发现了该域名和 IP
地址的对应关系,并将 IP
地址返回给本地 DNS
服务器。
第九步
本地 DNS
服务器将获取到与域名对应的 IP
地址返回给客户端,并且将域名和 IP
地址的对应关系保存在缓存中,以备下次别的用户查询时使用。
总结
最后引用大佬的一张图做下总结