阅读本文大约需要10分钟,您可以先关注一下本君,避免下次想回顾的时候找不到我。
DNS的全称是Domain Name System也就是域名系统,或者常称为域名解析系统。
我们在上网的时候,经常要通过浏览器去访问一些网站,实际上就是访问网站所在的服务器IP地址,但是让用户记住设备的IP地址是非常困难的。我们常用的方式就是在浏览器中输入要访问的网址,例如www.baidu.com,然后浏览器就会通过解析这个域名地址,找到要访问的服务器,从而读取到需要访问的网站的数据。所以我们在因特网上,构建了域名和IP地址互相映射的分布式数据库,在IP地址和域名之间形成一种转换和查询机制。所以,DNS工作的过程可以简单描述为:域名地址经过DNS服务器解析后,得到对应的IP地址,通过该IP地址访问到服务器获取我们要访问的内容。
DNS通信主要使用UDP,TCP为辅,使用端口号53。当然,端口号可以修改,但是默认是使用53端口;在某些情况下,也会采用TCP协议。DNS是网络分层里的应用层协议,事实上他是为其他应用层协议工作的。
当一个业务需要把域名解析为IP地址时,它就成为了DNS的一个客户端,调用地址解析程序,把待解析的域名加入到DNS请求报文中,通过UDP先发送给本地DNS服务器。本地DNS服务器查找得到对应的IP地址后,通过回应报文将该IP返回,客户端获得该IP地址后可继续后续操作。如果本地域名服务器不能回答该请求,则自身会称为一个新的DNS客户端,向其他DNS服务器发送请求报文。这个过程一直重复,直至得到回应报文为止。
如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户端的身份(递归思想),向根域名服务器继续发出查询报文(替主机查询),不让主机自己进行查询。递归查询返回的结果或者是IP,或者报错。这是从上到下的递归查询过程。
当根域名服务器收到本地域名服务器的查询请求,要么给出IP地址,要么通知本地域名服务器下一步应该去请求哪一个顶,级域名服务器查询,并告知本地域名服务器自己知道的顶级域名的IP地址,让本地域名服务器继续查询,而不是替他查询。同理,顶,级域名服务器无法返回IP地址的时候,也会通知本地域名服务器下一步向谁查询(查询哪一个权限域名服务器),这是一个迭代过程。
实际使用中,DNS服务器会将接收到的DNS应答结果在本地缓存一段时间,直到数据老化才删除。当出现对相同域名的查询时,便可以通过缓存的结果直接进行回复,只有在本地缓存中找不到时才向DNS服务器发起查询请求。通过DNS缓存,大部分查询都只需要本地DNS服务器即可完成解析,可以提高效率。
在大多数情况下,DNS涉及将域名转换为适当的IP地址。要了解此过程的工作原理,有助于在从Web浏览器到DNS查找过程再次返回时遵循DNS查找的路径。我们来看看这些步骤。注意:DNS查找信息通常会在查询计算机内部缓存或在DNS基础结构中远程缓存。DNS查找通常有8个步骤。缓存DNS信息时,将从DNS查找过程中跳过步骤,这样可以更快地完成。下面的示例概述了没有缓存任何内容时的所有8个步骤。
上边我们提到了一个名词,DNS缓存,缓存的目的是将数据临时存储在一个位置,从而提高数据请求的性能和可靠性。DNS缓存涉及将数据存储在更靠近请求客户端的位置,以便可以更早地解析DNS查询,并且可以避免在DNS查找链中进一步查询,从而改善加载时间并减少带宽/CPU消耗。DNS数据可以缓存在各种位置,每个位置将存储DNS记录一段时间,该时间由生存时间(TTL)决定。c行间的DNS缓存有三类:
浏览器DNS缓存是说在默认情况下,Web浏览器设计为在一段时间内缓存DNS记录。这里的目的很明显;DNS缓存越接近Web浏览器,为了检查缓存并对IP地址发出正确的请求,必须采取的处理步骤越少。当请求DNS记录时,浏览器缓存是在为请求的记录检查的第,一个位置。在chrome中,您可以转到chrome://net-internals/#dns查看DNS缓存的状态。
操作系统DNS缓存是DNS查询离开计算机之前的第二个也是最,后一个本地停止。设计用于处理此查询的操作系统内部的进程通常称为“存根解析程序”或DNS客户端。当存根解析器从应用程序获取请求时,它首先检查是自己的缓存以查看它是否具有该记录。如果没有,那它将本地网络外部的DNS查询(带有递归标志集)发送到Internet服务提供商(ISP)内的DNS递归解析器。
递归解析器DNS缓存是指当ISP内部的递归解析器收到DNS查询时,如同之前的所有步骤一样,它还将检查所请求的主机到IP地址转换是否已存储在其本地持久层内。递归解析器还具有其他功能,具体取决于它在缓存中的记录类型:
总结下简化域名的解析过程: