02 DNS详解

  • Post author:
  • Post category:其他


大家好!

我是小黄,很高兴又跟大家见面啦 !

今天更新的是:



创建时间

:2021年1月7日


软件

: eNsp_Client 、SecureCRT


  • 先放一张思维导图,大致知道操作系统的具体功能和目标,然后再一一展开叙述。

在这里插入图片描述



1. DNS :

在这里插入图片描述



1.1 什么是DNS?


  • 域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为IP地址。域名系统其实就是名字系统

    。为什么不叫“名字”而叫“域名”呢?这是因为在这种因特网的命名系统中使用了许多的“域(domain)”,因此就出现了“域名”这个名词。“域名系统”明确地指明这种系统是应用在因特网中。

  • 域名

    :IP地址对应的主机名。

  • label

    :域名由多个lable组成,label间常用符号"."连接。

  • DNS客户端

    :局域网内的用户程序(例如Ping、Tracert)向DNS Client发出请求,本地设备收到请求报文后,会向DNS

    Server发送查询报文。在收到DNS Server的应答报文后,本地会对报文进行解析,并决定下一步的操作,从而完成一次域名解析过程。

  • DNS代理

    :(DNS proxy)用来在DNS Client和DNS Server之间转发DNS请求和应答报文。局域网内的DNS Client把DNS proxy当作DNS Server,将DNS请求报文发送给DNS proxy。DNSproxy将该请求报文转发给真正的DNS Server,并将DNS Server的应答报文发送给DNS Client,从而实现域名解析。使用代理功能后,当DNS Server的地址发生变化时,只需要改变DNS proxy上的配置,无需改变整个局域网内每个DNS Client的配置,从而简化了网络管理。

  • DNS透明代理

    :可以修改部分DNS请求报文的目的地址,将其修改为其他ISP内的DNS服务器地址,DNS请求被转发到不同的ISP,解析后的Web服务器地址也就属于不同的ISP,所有上网流量将通过不同的ISP链路转发。这样就不会造成一个链路拥塞、其他链路却闲置的情况,充分利用了所有链路资源。

  • DDNS

    :(Dynamic Domain Name System动态域名系统)DNS仅提供了域名和IP地址之间的静态对应关系,当节点的IP地址发生变化时,DNS无法动态地更新域名和IP地址的对应关系。DDNS通过动态更新DNS服务器上域名和IP地址之间的对应关系,保证通过域名解析后得到正确的IP地址。

  • DNS64

    :将DNS查询信息中的A记录(ipv4地址)合成到AAAA记录(ipv6地址)中,返回合成的AAAA记录给ipv6侧用户。

  • 细粒度订阅

    :发布端(Subscriber)提供按需的数据发布机制,订阅端只需要订阅其关系的数据,一旦订阅的数据发生变化,发布者将相关数据实时发布到相关的订阅端。



1.2 从域名到IP地址的解析过程:

  • 当一个应用需要把主机名解析为IP地址时,该应用进程就调用地址解析程序,它自己就变为了DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP方式先发给本地域名服务器,本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回,应用程序获得目的主机的IP地址后即可进行通信。若本地域名服务器不能回答该请求,则此域名服务器就暂时称为DNS的另一个客户,并向其他域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止。
  • 当一个业务需要把域名解析为IP地址时,它就成为了DNS的一个客户端,调用地址解析程序,把待解析的域名加入到DNS请求报文中,通过UDP先发送给本地DNS服务器。本地DNS服务器查找得到对应的IP地址后,通过回应报文将该IP返回,客户端获得该IP地址后可继续后续操作。如果本地域名服务器不能回答该请求,则自身会称为一个新的DNS客户端,向其他DNS服务器发送请求报文。这个过程一直重复,直至得到回应报文为止。


主机 ——> 本地域名服务器:一般都是采用递归查询

  • 如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户端的身份(递归思想),向根域名服务器继续发出查询报文(替主机查询),不让主机自己进行查询。递归查询返回的结果或者是IP,或者报错。这是从上到下的递归查询过程。


本地域名服务器 ——> 根域名服务器:一般采用迭代查询

  • 当根域名服务器收到本地域名服务器的查询请求,要么给出ip,要么通知本地域名服务器下一步应该去请求哪一个顶级域名服务器查询(并告知本地域名服务器自己知道的顶级域名的IP),让本地域名服务器继续查询,而不是替他查询。同理,顶级域名服务器无法返回IP的时候,也会通知本地域名服务器下一步向谁查询(查询哪一个权限域名服务器)……这是一个迭代过程。



1.3 从IP地址到域名的解析过程:

  • 当在浏览器内输入URL时,便开始了DNS解析过程,最后会把找到后的IP地址告知浏览器客户端,方便它继续发出HTTP(s)请求。在这个过程中,浏览器提出的查询记录类型叫A记录(address)查询,主要是针对ipv4,如果是ipv6的化,就是AAAA。这个A记录意思是从域名解析得到IP地址。那么反过来,从IP地址得到域名的解析过程也需要一个记录,叫PTR记录(和A记录功能相反)。我们可以通过查询IP地址的PTR记录来得到该IP地址指向的域名,达到反查的目的。
  • 域名系统中,一个IP地址可对应多个域名,在Internet上是不会去傻傻的遍历整个域名树的。故DNS的顶级域名提供了一个特别的顶级域——arpa用来做反向域名解析,也称为反向域名。当一个主机加入网络,获得DNS授权,它的IP地址假设为33.13.252.140,它也顺便获得了对应IP地址的 in-addr.arpa(逆向解析域in-addr.arpa)空间的授权,注意DNS名由树底部向上组织,故它的DNS名字为33.13.252.140.in-addr.arpa。IP地址的第一字节一定位于in-addr的下一级。这样把待解析的IP地址就会被表达成一种像域名一样的形式,后缀以反向解析域名”in-addr.arpa”结尾。这就是反向域名解析的本质。



1.4 DNS查询的类型有哪些?

  • 在典型的DNS查找中,会发生三种类型的查询。通过使用这些查询的组合,用于DNS解析的优化过程可以导致行进距离的减少。在理想情况下,缓存记录数据将可用,允许DNS名称服务器返回非递归查询。


  • 3种类型的DNS查询


  • 递归查询

    – 在递归查询中,DNS客户端要求DNS服务器(通常是DNS递归解析程序)将使用请求的资源记录响应客户端,或者如果解析程序无法找到记录,则会响应错误消息。


  • 迭代查询

    – 在这种情况下,DNS客户端将允许DNS服务器返回它可以的最佳答案。如果查询的DNS服务器与查询名称不匹配,则它将返回对域名称空间的较低级别具有权威性的DNS服务器的引用。然后,DNS客户端将对引用地址进行查询。此过程将继续使用查询链中的其他DNS服务器,直到发生错误或超时。

在这里插入图片描述


  • 非递归查询

    – 通常在DNS解析器客户端向DNS服务器查询其有权访问的记录时会发生这种情况,因为它对记录具有权威性,或者记录存在于其缓存中。通常,DNS服务器将缓存DNS记录以防止额外的带宽消耗和上游服务器的负载。



1.5 加载网页涉及4个DNS服务器:


  • DNS-recursor

    :通过web浏览器等应用程序从客户端接收查询,

    相当于管理员找一本具体的书。

  • 根名称服务器

    :作为对其他更具体位置的参考,

    相当于指向图书的分类区域。

  • TLD名称服务器 – 顶级域名服务器(TLD)

    :是搜索特定IP地址的下一步,它托管主机名的最后一部分,

    相当于存放你想要的找的那本书的书架。

  • 权威名称服务器

    :它将请求的主机名称的IP地址返回给发出初始请求的DNS-recursor,

    相当于你具体想要找的那本书。

在这里插入图片描述



1.6 DNS查找的步骤是什么?

  1. 用户在Web浏览器中键入“www.baidu.com”,查询将进入Internet并由DNS递归解析程序接收。
  2. 解析器然后查询DNS根名称服务器。
  3. 然后,根服务器使用顶级域(TLD)DNS服务器(例如.com或.net)的地址响应解析器,该服务器存储其域的信息。在搜索www.baidu.com时,我们的请求指向.com TLD。
  4. 解析器然后向.com TLD提出请求。
  5. 然后,TLD服务器使用域名服务器www.baidu.com的IP地址进行响应。
  6. 最后,递归解析器向域的名称服务器发送查询。
  7. 然后,www.baidu.com的IP地址将从名称服务器返回到解析程序。
  8. 然后DNS解析器使用最初请求的域的IP地址响应Web浏览器。

    一旦DNS查找的8个步骤返回了www.baidu.com的IP地址,浏览器就能够发出对网页的请求:

在这里插入图片描述



1.7 实际上网时域名的解析过程?

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



1.8 什么是DNS缓存?DNS缓存在哪里发生?

  • 缓存的目的是将数据临时存储在一个位置,从而提高数据请求的性能和可靠性。DNS缓存涉及将数据存储在更靠近请求客户端的位置,以便可以更早地解析DNS查询,并且可以避免在DNS查找链中进一步查询,从而改善加载时间并减少带宽/

    CPU消耗。DNS数据可以缓存在各种位置,每个位置将存储DNS记录一段时间,该时间由生存时间(TTL)决定。


浏览器DNS缓存

  • 默认情况下,现代Web浏览器设计为在一段时间内缓存DNS记录。这里的目的很明显;DNS缓存越接近Web浏览器,为了检查缓存并对IP地址发出正确的请求,必须采取的处理步骤越少。当请求DNS记录时,浏览器缓存是为请求的记录检查的第一个位置。


操作系统(OS)级DNS缓存

  • 操作系统级DNS解析程序是DNS查询离开计算机之前的第二个也是最后一个本地停止。设计用于处理此查询的操作系统内部的进程通常称为“存根解析程序”或DNS客户端。当存根解析器从应用程序获取请求时,它首先检查自己的缓存以查看它是否具有该记录。如果没有,则它将本地网络外部的DNS查询(带有递归标志集)发送到Internet服务提供商(ISP)内的DNS递归解析器。


递归解析器DNS缓存

  • 当ISP内部的递归解析器收到DNS查询时,如同之前的所有步骤一样,它还将检查所请求的主机到IP地址转换是否已存储在其本地持久层内。
  • 递归解析器还具有其他功能,具体取决于它在缓存中的记录类型:
  1. 如果解析程序没有A记录,但确实拥有权威名称服务器的NS记录,它将直接查询这些名称服务器,绕过DNS查询中的几个步骤。此快捷方式可防止从root和.com名称服务器(在我们的example.com搜索中)中进行查找,并有助于更快地解析DNS查询。
  2. 如果解析器没有NS记录,它将向TLD服务器发送查询(在我们的例子中为.com),跳过根服务器。
  3. 万一解析器没有指向TLD服务器的记录,它将查询根服务器。此事件通常在清除DNS缓存后发生。

各位路过的朋友,如果觉得可以学到些什么的话,

点个赞

再走吧,欢迎各位路过的大佬评论,指正错误,也欢迎有问题的小伙伴评论留言,私信。

每个小伙伴的关注都是本人更新博客的动力!!!

请微信搜索【

在下小黄

】文章更新将在第一时间阅读 !

在这里插入图片描述


把握现在 ,展望未来 ,加油 !


由于水平有限 ,写的难免会有些不足之处 ,恳请各位大佬不吝赐教 !



版权声明:本文为weixin_44519789原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。