阅读本文大约需要10分钟,您可以先关注一下本君,避免下次想回顾的时候找不到我。

4.2 有它才有名

最优dns是什么(啥都玫说之网络篇-4.2有它才有名)(1)

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是什么(啥都玫说之网络篇-4.2有它才有名)(2)

  1. 用户在Web浏览器中输入“example.com”,查询将进入Internet并由DNS递归解析程序接收。
  2. 解析器然后查询DNS根名称服务器。
  3. 然后,根服务器使用顶,级域(TLD)DNS服务器(例如.com或.net)的地址响应解析器,该服务器存储其域的信息。在搜索example.com时,我们的请求指向.com TLD。
  4. 解析器然后向.com TLD提出请求。
  5. 然后,TLD服务器使用域名服务器example.com的IP地址进行响应。
  6. 最后,递归解析器向域的名称服务器发送查询。
  7. 然后,example.com的IP地址将从名称服务器返回到解析程序。
  8. 然后DNS解析器使用最初请求的域的IP地址响应Web浏览器。
  9. 一旦DNS查找的8个步骤返回了example.com的IP地址,浏览器就能够发出对网页的请求浏览器向IP地址发出HTTP请求。
  10. 该IP处的服务器返回要在浏览器中呈现的网页。

上边我们提到了一个名词,DNS缓存,缓存的目的是将数据临时存储在一个位置,从而提高数据请求的性能和可靠性。DNS缓存涉及将数据存储在更靠近请求客户端的位置,以便可以更早地解析DNS查询,并且可以避免在DNS查找链中进一步查询,从而改善加载时间并减少带宽/CPU消耗。DNS数据可以缓存在各种位置,每个位置将存储DNS记录一段时间,该时间由生存时间(TTL)决定。c行间的DNS缓存有三类:

  • [x] 浏览器DNS缓存
  • [x] 操作系统DNS缓存
  • [x] 递归解析器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地址转换是否已存储在其本地持久层内。递归解析器还具有其他功能,具体取决于它在缓存中的记录类型:

  • 如果解析程序没有A记录,但确实拥有权威名称服务器的NS记录,它将直接查询这些名称服务器,绕过DNS查询中的几个步骤。此快捷方式可防止从root和.com名称服务器(在我们的example.com搜索中)中进行查找,并有助于更快地解析DNS查询。
  • 如果解析器没有NS记录,它将向TLD服务器发送查询(在我们的例子中为.com),跳过根服务器。
  • 万一解析器没有指向TLD服务器的记录,它将查询根服务器。此事件通常在清除DNS缓存后发生。

总结下简化域名的解析过程:

  1. 当用户在地址栏输入一个URL之后,浏览器首先查询浏览器的缓存;
  2. 找不到就去查询Hosts文件和本地DNS缓存,如果hosts和本地DNS缓存都没有找到域名对应的IP,则自动进入路由器的缓存中检查;
  3. 以上均为客户端DNS缓存,若在客户端DNS缓存还是没找到,则进入ISP的DNS缓存中查询;
  4. 还是找不到,最终才向根DNS服务器发出DNS查询报文,再找不到就报错。
,