网络知识入门,探讨DNS服务器在网页请求中的作用(二)

北城以北 提交于 2020-01-25 19:56:45

    上一篇文章讲到网络请求是基于http协议传输的,消息请求包含了“对什么”和“做什么操作”,于是一个网页请求就这么发送出去了。但是在发送消息之前,我们还需要对域名进行解析,得到ip地址之后才可以发送请求,本文就来探讨一下网页请求中如何将域解析为ip地址。

[网络知识入门,探索一次网页请求的旅程(一)] https://blog.csdn.net/ck784101777/article/details/103729743

 

一、向DNS服务器查询Web服务器的IP地址

 

      生成HTTP消息之后,接下来我们需要委托操作系统将消息发送给Web服务器。尽管浏览器能够解析网址并生成HTTP消息,但它本身并不具备将消息发送到网络中的功能(浏览器本身也是借用本地操作系统来发送请求),因此这一功能需要委托操作系统来实现。在进行这一操作时,我们还有一个工作需要完成,那就是查询网址中服务器域名对应的IP地址。在委托操作系统发送消息时,必须要提供的不是通信对象的域名,而是它的IP地址。因此,在生成HTTP消息之后,下一个步骤就是根据域名查询IP地址。在讲解这一操作之前,让我们先来简单了解一下IP地址。

 

1.TCP/IP网络

     互联网和公司内部的局域网都是基于TCP/IP的思路来设计的,所以我们先来了解TCP/IP的基本思路。TCP/IP的结构如图所示,就是由一些小的子网,通过路由器连接起来组成一个大的网络。这里的子网可以理解为用集线器连接起来的几台计算机,我们将它看作一个单位,称为子网。将子网通过路由器连接起来,就形成了一个网络。

   路由器:一种对包进行转发的设备,是局域网与公网通信的必经之路
   集线器:一种对包进行转发的设备,分为中继式集线器和交换式集线器两种

   当计算机数量较少时,可以用一台集线器连接起来;当计算机数量较多时,一台集线器可能无法连接这么多计算机,可以增加集线器数量并将集线器相互连接起来,这时,凡是通过集线器连接起来的所有设备都属于同一个子网。一些家用路由器中已经内置了集线器功能,因此家用路由集成了路由器和集线器,在内部连接起来了。

                 

 

    在网络中,所有的设备都会被分配一个地址。这个地址就相当于现实中某条路上的“××号××室”。其中“号”对应的号码是分配给整个子网的,而“室”对应的号码是分配给子网中的计算机的,这就是网络中的地址。“号”对应的号码称为网络号,“室”对应的号码称为主机号,这个地址的整体称为IP地址。通过IP地址我们可以判断出访问对象服务器的位置,从而将消息发送到服务器。

    发送者发出的消息首先经过子网中的集线器,转发到距离发送者最近的路由器上。接下来,路由器会根据消息的目的地判断下一个路由器的位置,然后将消息发送到下一个路由器,即消息再次经过子网内的集线器被转发到下一个路由器。前面的过程不断重复,最终消息就被传送到了目的地。

 

2.ip的基本定义思路

 1)网络号和主机号

    前面这些就是TCP/IP中IP地址的基本思路。了解了这些知识之后,让我们再来看一下实际的IP地址。如图所示,实际的IP地址是一串32比特的数字,按照8比特(1字节)为一组分成4组,分别用十进制表示然后再用圆点隔开。这就是我们平常经常见到的IP地址格式,但仅凭这一串数字我们无法区分哪部分是网络号,哪部分是主机号。在IP地址的规则中,网络号和主机号连起来总共是32比特,但这两部分的具体结构是不固定的。在组建网络时,用户可以自行决定它们之间的分配关系,因此,我们还需要另外的附加信息来表示IP地址的内部结构。

                

   2)子网掩码

     这一附加信息称为子网掩码。子网掩码的格式如图所示,是一串与IP地址长度相同的32比特数字,其左边一半都是1,右边一半都是0。其中,子网掩码为1的部分表示网络号,子网掩码为0的部分表示主机号。

     那么IP地址为10.1.2.3的子网掩码就是255.255.255.0,网络号为10.1.2,主机号为3

     图中求网络号和主机号的方法是将ip地址和子网掩码的二进制数进行了反异或运算,我们知道二进制运算同号得0,异号得1,然后这里在异或操作后还进行了取反,即1异或0得1,取反得0。简单理解就是0加1得0,0加0得0,1加1得1。

   

 

       顺带一提,主机号部分的比特全部为0或者全部为1时代表两种特殊的含义。主机号部分全部为0代表整个子网而不是子网中的某台设备。此外,主机号部分全部为1代表向子网上所有设备发送包,即广播。

 

3.域名和ip并用的理由

     TCP/IP网络是通过IP地址来确定通信对象的,因此不知道IP地址就无法将消息发送给对方,这和我们打电话的时候必须要知道对方的电话号码是一个道理。因此,在委托操作系统发送消息时,必须要先查询好对方的IP地址。可能你会问“既然如此,那么在网址中不写服务器的名字,直接写IP地址不就好了吗?”实际上,如果用IP地址来代替服务器名称也是能够正常工作的。然而,就像你很难记住电话号码一样,要记住一串由数字组成的IP地址也非常困难。因此,相比IP地址来说,网址中还是使用服务器名称比较好
      那么又有人问了:“既然如此,那干脆不要用IP地址,而是用名称来确定通信对象不就好了吗?互联网中使用的是最新的网络技术,和电话那种老古董可不一样,这样的功能应该还是做得到的吧?”这样的想法其实并不奇怪。不过从运行效率上来看,这并不能算是一个好主意。互联网中存在无数的路由器,它们之间相互配合,根据IP地址来判断应该把数据传送到什么地方。那么如果我们不用IP地址而是改用名称会怎么样呢?IP地址的长度为32比特,也就是4字节,相对地,域名最短也要几十个字节,最长甚至可以达到255字节。换句话说,使用IP地址只需要处理4字节的数字,而域名则需要处理几十个到255个字节的字符,这增加了路由器的负担,传送数据也会花费更长的时间。

   可能有人会说:“那使用高性能路由器不就能解决这个问题了吗?”然而,路由器的速度是有极限的,而互联网内部流动的数据量已然让路由器疲于应付了,因此我们不应该再采用效率更低的设计。随着技术的发展,路由器的性能也会不断提升,但与此同时,数据量也在以更快的速度增长,在可预见的未来,这样的趋势应该不会发生变化。出于这样的原因,使用名称本身来确定通信对象并不是一个聪明的设计。

    于是,现在我们使用的方案是让人来使用名称,让路由器来使用IP地址。为了填补两者之间的障碍,需要有一个机制能够通过名称来查询IP地址,或者通过IP地址来查询名称,这样就能够在人和机器双方都不做出牺牲的前提下完美地解决问题。这个机制就是DNS(Domain Name System,域名服务系统)。

 

 

二、客户端解析器与DNS服务器的交互

 

1.客户端查询IP地址的方式

      查询IP地址的方法非常简单,就是调用本地的Socket库,只要询问最近的DNS服务器“www.lab.glasscom.com的IP地址是什么”就可以了,DNS服务器会回答说“该服务器的IP地址为xxx.xxx.xxx.xxx”。这一步非常简单,很多读者也都很熟悉,那么浏览器是如何向DNS服务器发出查询的呢?让我们把向Web服务器发送请求消息的事情放一放,先来探索一下DNS。向DNS服务器发出查询,也就是向DNS服务器发送查询消息,并接收服务器返回的响应消息。换句话说,对于DNS服务器,我们的计算机上一定有相应的DNS客户端,而相当于DNS客户端的部分称为DNS解析器,或者简称解析器。通过DNS查询IP地址的操作称为域名解析,因此负责执行解析(resolution)这一操作的就叫解析器(resolver)了

    解析器实际上是一段程序,它包含在操作系统的Socket库中,在介绍解析器之前,我们先来简单了解一下Socket库。首先,库到底是什么东西呢?库就是一堆通用程序组件的集合,其他的应用程序都需要使用其中的组件。库有很多好处。首先,使用现成的组件搭建应用程序可以节省编程工作量;其次,多个程序使用相同的组件可以实现程序的标准化。除此之外还有很多其他的好处,因此使用库来进行软件开发的思路已经非常普及,库的种类和数量也非常之多。

    Socket库中包含很多发送或接受数据的程序组件,但是在说这些组件之前,我们先说一下解析器。

 

2.DNS解析器

     解析器的用法非常简单。Socket库中的程序都是标准组件,只要从应用程序中进行调用就可以了。具体来说,在编写浏览器等应用程序的时候,只要像图中这样写上解析器的程序名称“gethostbyname”以及Web服务器的域名“www.lab.glasscom.com”就可以了,这样就完成了对解析器的调用(有过编程经验的读者应该知道这是对方法的调用)。

 
    在应用程序中编写上图中的一行代码后就能够调用解析器完成向DNS服务器查询IP地址的操作。调用解析器后,解析器会向DNS服务器发送查询消息,然后DNS服务器会返回响应消息。响应消息中包含查询到的IP地址,解析器会取出IP地址,并将其写入浏览器指定的内存地址中。只要运行图的这一行程序,就可以完成前面所有这些工作,我们也就完成了IP地址的查询。接下来,浏览器在向Web服务器发送消息时,只要从该内存地址取出IP地址,并将它与HTTP请求消息一起交给操作系统就可以了。

 

       

 

    解析器实则是一段程序,相信大家也能看的出来,下图隐藏了这段程序的代码,用描述信息来解释这一段程序。

                           

      

      在上图中,我们假设gethostbyname这个程序实现了解析器的全部功能,实际上,实现解析器的功能需要多个程序相互配合,可能还会从gethostbyname程序中调用其他的程序。但如果继续深挖下去的话会变得复杂难懂,因此在这里我们假设gethostbyname实现了解析器的全部功能。

    当代码执行到向DNS服务器发送查询消息时,将会调用一个函数并且的道返回结果。这个过程与浏览器生成要发送给Web服务器的HTTP请求消息的过程类似,解析器会根据DNS的规格,生成一条表示“请告诉我www.lab.glasscom.com的IP地址”的数据,并将它发送给DNS服务器。发送消息这个操作并不是由解析器自身来执行,而是要委托给操作系统内部的协议栈来执行。这是因为和浏览器一样,解析器本身也不具备使用网络收发数据的功能。解析器调用协议栈后,控制流程会再次转移,协议栈会执行发送消息的操作,然后通过网卡将消息发送给DNS服务器。

   协议栈:操作系统内部的网络控制软件,也叫“协议驱动”“TCP/IP驱动”

 

     当DNS服务器收到查询消息后,它会根据消息中的查询内容进行查询。这个查询的过程有点复杂,我们稍后会进行讲解,这里先不关心具体的方法。总之,如果要访问的Web服务器已经在DNS服务器上注册,那么这条记录就能够被找到,然后其IP地址会被写入响应消息并返回给客户端。接下来,消息经过网络到达客户端,再经过协议栈被传递给解析器,然后解析器读取出消息取出IP地址,并将IP地址传递给应用程序。实际上,解析器会将取出的IP地址写入应用程序指定的内存地址中,上图用“<内存地址>”来表示,在实际的程序代码中应该写的是代表这一内存地址的名称。到这里,解析器的工作就完成了,控制流程重新回到应用程序(浏览器)。现在应用程序已经能够从内存中取出IP地址了,所以说IP地址是用这种方式传递给应用程序的。计算机的内部结构就是这样一层一层的。也就是说,很多程序组成不同的层次,彼此之间分工协作。当接到上层委派的操作时,本层的程序并不会完成所有的工作,而是会完成一部分工作,再将剩下的部分委派到下层来完成

 

    顺带一提,向DNS服务器发送消息时,我们当然也需要知道DNS服务器的IP地址。只不过这个IP地址是作为TCP/IP的一个设置项目事先设置好的,不需要再去查询了。不同的操作系统中TCP/IP的设置方法也有差异,Windows中的设置如图所示,解析器会根据这里设置的DNS服务器IP地址来发送消息。

 

               

 

 

三、DNS服务器大接力

     前文介绍了解析器与DNS服务器之间的交互过程,下面来了解一下DNS服务器的工作。DNS服务器的基本工作就是接收来自客户端的查询消息,然后根据消息的内容返回响应。其中,来自客户端的查询消息包含以下3种信息。

  1)域名

         服务器、邮件服务器(邮件地址中@后面的部分)的名称

  2) Class

      在最早设计DNS方案时,DNS在互联网以外的其他网络中的应用也被考虑到了,而Class就是用来识别网络的信息。不过,如今除了互联网并没有其他的网络了,因此Class的值永远是代表互联网的IN

 3)记录类型

    表示域名对应何种类型的记录。例如,当类型为A时,表示域名对应的是IP地址;当类型为MX时,表示域名对应的是邮件服务器。对于不同的记录类型,服务器向客户端返回的信息也会不同。

   DNS服务器上事先保存有前面这3种信息对应的记录数据,如图所示。DNS服务器就是根据这些记录查找符合查询请求的内容并对客户端作出响应的。

 

           

 

例如,如果要查询www.lab.glasscom.com这个域名对应的IP地址,客户端会向DNS服务器发送包含以下信息的查询消息。

A记录类型:

  1)域名=www.lab.glasscom.com

  2)Class=IN

  3)记录类型=A

     然后,DNS服务器会从已有的记录中查找域名、Class和记录类型全部匹配的记录。假如DNS服务器中的记录如上图所示,那么第一行记录与查询消息中的3个项目完全一致。于是,DNS服务器会将记录中的192.0.2.226这个值返回给客户端。然而,Web服务器的域名有很多都是像www.lab.glasscom.com这样以www开头的,但这并不是一定之规,只是因为最早设计Web的时候,很多Web服务器都采用了www这样的命名,后来就形成了一个惯例而已。因此,无论是WebServer1也好,MySrv也好,只要是作为A记录在DNS服务器上注册的,都可以作为Web服务器的域名。

    A是Address的缩写。不仅是Web服务器,像邮件服务器、数据库服务器等,无论任何服务器,只要注册了A类型的记录,都可以作为服务器的域名来使用。准确来说,A类型的记录表示与IP地址所对应的域名,因此与其说是某个服务器的域名,不如说是被分配了某个IP地址的某台具体设备的域名。在查询IP地址时我们使用A这个记录类型,而查询邮件服务器时则要使用MX47类型。这是因为在DNS服务器上,IP地址是保存在A记录中的,而邮件服务器则是保存在MX记录中的。

 

    查询消息的内容如下。MX:MaileXchange,邮件交换。对于一个邮件地址tone@glasscom.com,当需要知道这个地址对应的邮件服务器时,我们需要提供@后面的那一串名称。

MX记录类型:

1)域名=glasscom.com

2)Class=IN

3)记录类型=MX

      DNS服务器会返回10和mail.glasscom.com这两条信息。当记录类型为MX时,DNS服务器会在记录中保存两种信息,分别是邮件服务器的域名和优先级(当一个邮件地址对应多个邮件服务器时,需要根据优先级来判断哪个邮件服务器是优先的。优先级数值较小的邮件服务器代表更优先。)。此外,MX记录的返回消息还包括邮件服务器mail.glasscom.com的IP地址。上表的第三行就是mail.glasscom.com的IP地址,因此只要用mail.glasscom.com的域名就可以找到这条记录。在这个例子中,我们得到的IP地址是192.0.2.227。

    综上所述,DNS服务器的基本工作就是根据需要查询的域名和记录类型查找相关的记录,并向客户端返回响应消息。DNS服务器会从域名与IP地址的对照表中查找相应的记录,并返回IP地址

 

更多的类型:

      前面只介绍了A和MX这两个记录类型,实际上还有很多其他的类型。例如根据IP地址反查域名的PTR类型,查询域名相关别名的CNAME类型,查询DNS服务器IP地址的NS类型,以及查询域名属性信息的SOA类型等。尽管DNS服务器的工作原理很简单,不过是根据查询消息中的域名和记录类型来进行查找并返回响应的信息而已,但通过组合使用不同的记录类型,就可以处理各种各样的信息。此外,虽然上图展示的是表格形式,但实际上这些信息是保存在配置文件中的,表格中的一行信息被称为一条资源记录。

 

 

域名结构的层次:

      前文中,我们假设要查询的信息已经保存在DNS服务器内部的记录中了。如果是在像公司内部网络这样Web和邮件服务器数量有限的环境中,所有的信息都可以保存在一台DNS服务器中,其工作方式也就完全符合我们前面讲解的内容。

     然而,互联网中存在着不计其数的服务器,将这些服务器的信息全部保存在一台DNS服务器中是不可能的,因此一定会出现在DNS服务器中找不到要查询的信息的情况。下面来看一看此时DNS服务器是如何工作的。直接说答案的话很简单,就是将信息分布保存在多台DNS服务器中,这些DNS服务器相互接力配合,从而查找出要查询的信息。不过,这个机制其实有点复杂,因此我们先来看一看信息是如何在DNS服务器上注册并保存的。

     首先,DNS服务器中的所有信息都是按照域名以分层次的结构来保存的。层次结构这个词听起来可能有点不容易懂,其实就类似于公司中的事业集团、部门、科室这样的结构。层次结构能够帮助我们更好地管理大量的信息。DNS中的域名都是用句点来分隔的,比如www.lab.glasscom.com,这里的句点代表了不同层次之间的界限,就相当于公司里面的组织结构不用部、科之类的名称来划分,只是用句点来分隔而已。在域名中,越靠右的位置表示其层级越高,比如www.lab.glasscom.com这个域名如果按照公司里的组织结构来说,大概就是“com事业集团glasscom部lab科的www”这样。其中,相当于一个层级的部分称为域。因此,com域的下一层是glasscom域,再下一层是lab域,再下面才是www这个名字。

     这种具有层次结构的域名信息会注册到DNS服务器中,而每个域都是作为一个整体来处理的。换句话说就是,一个域的信息是作为一个整体存放在DNS服务器中的,不能将一个域拆开来存放在多台DNS服务器中。不过,DNS服务器和域之间的关系也并不总是一对一的,一台DNS服务器中也可以存放多个域的信息。为了避免把事情搞得太复杂,这里先假设一台DNS服务器中只存放一个域的信息,后面的讲解也是基于这个前提来进行的。于是,DNS服务器也具有了像域名一样的层次结构,每个域的信息都存放在相应层级的DNS服务器中。

  

通过下级域划分关系:

      对于公司域来说,例如现在需要为每一个事业集团配备一台DNS服务器,分别管理各事业集团自己的信息,但我们之前也说过一个域是不可分割的,这该怎么办呢?没关系,我们可以在域的下面创建下级域(又称为子域),然后再将它们分别分配给各个事业集团。

     比如,假设公司的域为example.co.cn,我们可以在这个域的下面创建两个子域,即sub1.example.co.cn和sub2.example.co.cn,然后就可以将这两个下级域分配给不同的事业集团来使用。如果公司下级的组织不是事业部而是子公司,对于域来说也是没有区别的。在这个基础上,我们通过www.sub1.example.co.cn和www.sub2.example.co.cn就可以得到两台不同主机的ip结果。

     因为域并不代表“事业集团”这一特定组织,无论是子公司还是什么别的组织名称,都可以分配相应的域。实际上,互联网中的域也是一样,通过创建下级的域来分配给不同的国家、公司和组织使用。通过实际的域名可能更容易理解,比如www.nikkeibp.co.cn这个域名,最上层的cn代表分配给中国这个国家的域;下一层的co是中国国内进行分类的域,代表公司;再下层的nikkeibp就是分配给某个公司的域;最下层的www就是服务器的名称。

 

 

寻找DNS服务器并获取ip地址:

        下面再来看一看如何找到DNS服务器中存放的信息。这里的关键在于如何找到我们要访问的Web服务器的信息归哪一台DNS服务器管。互联网中有数万台DNS服务器,肯定不能一台一台挨个去找。

       我们可以采用下面的办法。首先,将负责管理下级域的DNS服务器的IP地址注册到它们的上级DNS服务器中,然后上级DNS服务器的IP地址再注册到更上一级的DNS服务器中,以此类推。也就是说,负责管理lab.glasscom.com 这个域的 DNS 服务器的 IP 地址需要注册到 glasscom.com 域的 DNS服务器中,而 glasscom.com 域的 DNS 服务器的 IP 地址又需要注册到 com
域的 DNS 服务器中。这样,我们就可以通过上级 DNS 服务器查询出下级DNS 服务器的 IP 地址,也就可以向下级 DNS 服务器发送查询请求了域的 DNS 服务器中。这样,我们就可以通过上级 DNS 服务器查询出下级DNS 服务器的 IP 地址,也就可以向下级 DNS 服务器发送查询请求了。

 

 

                       

根域DNS服务器:

      在互联网中,com 和 cn 的上面还有一级域,称为根域。根域不像 com、cn 那样有自己的名字,因此在一般书写域名时经常被省略,如果要明确表示根域,应该像 www.lab.glasscom.com. 这样在域名的最后再加上一个句点,而这个最后的句点就代表根域。不过,一般都不写最后那个句点,因此根域的存在往往被忽略,但根域毕竟是真实存在的,根域的 DNS 服务器中保管着com、cn 等的 DNS 服务器的信息。

    由于上级 DNS 服务器保管着所有下级DNS 服务器的信息,所以我们可以从根域开始一路往下顺藤摸瓜找到任意一个域的 DNS 服务器。除此之外还需要完成另一项工作,那就是将根域的 DNS 服务器信息保存在互联网中所有的 DNS 服务器中。这样一来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。因此,客户端只要能够找到任意一台DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器。

     分配给根域 DNS 服务器的 IP 地址在全世界仅有13个,而且这些地址几乎不发生变化,因此将这些地址保存在所有的 DNS 服务器中也并不是一件难事。实际上,根域DNS 服务器的相关信息已经包含在 DNS 服务器程序的配置文件中了,因此只要安装了 DNS 服务器程序,这些信息也就被自动配置好了。到这里所有的准备工作就都完成了。当我们配置一台 DNS 服务器时,必须要配置好上面这些信息,这样 DNS 服务器就能够从上万台 DNS 服务器中找到目标服务器。下面就来看一看这个过程是如何进行的。 根域 DNS 服务器在运营上使用多台服务器来对应一个 IP 地址,因此尽管IP地址只有 13 个,但其实服务器的数量是很多的。

                          

客户端访问DNS的实例跟踪:

     如下图所示,客户端首先会访问最近的一台 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址),假设我们要查询 www.lab.glasscom.com 这台 Web 服务器的相关信息(图①)。由于最近的 DNS 服务器中没有存放 www.lab.glasscom.com 这一域名对应的信息,所以我们需要从顶层开始向下查找。最近的 DNS 服务器中保存了根域 DNS 服务器的信息,因此它会将来自客户端的查询消息转发给根域 DNS 服务器(图②)。根域服务器中也没有 www.lab.glasscom.com 这个域名,但根据域名结构可以判断这个域名属于 com 域,因此根域 DNS 服务器会返回它所管理的 com 域中的DNS 服务器的 IP 地址(图③),意思是“虽然我不知道你要查的那个域名的地址,但你可以去 com 域问问看”。接下来,最的 DNS 服务器又会向 com 域的DNS 服务器发送查询消息。com 域中也没有 www.lab.glasscom.com这个域名的信息,和刚才一样,com 域服务器会返回它下面的 glasscom.com域的 DNS 服务器的 IP 地址(图④)。以此类推,只要重复前面的步骤,就可以顺藤摸瓜找到目标 DNS 服务器(图⑤),只要向目标 DNS 服务器发送查询消息,就能够得到我们需要的答案,也就是 www.lab.glasscom.com 的 IP 地址了。收到客户端的查询消息之后,DNS 服务器会按照前面的方法来查询 IP地址,并返回给客户端(图 ⑥)。这样,客户端就知道了 Web 服务器的 IP 地址,也就能够对其进行访问了(图⑦)。
 

                           

     

通过缓存实现DNS服务响应:          

       上述实例与真实互联网中的工作方式还是有一些区别的。在真实的互联网中,一台 DNS 服务器可以管理多个域的信息,因此并不是像上图中每个域都有一台自己的 DNS 服务器。图中,每一个域旁边都写着一台 DNS 服务器,但现实中上级域和下级域有可能共享同一台 DNS 服务器。在这种情况下,访问上级 DNS 服务器时就可以向下跳过一级 DNS 服务器,直接返回再下一级 DNS 服务器的相关信息。

     此外,有时候并不需要从最上级的根域开始查找,因为 DNS 服务器有一个较缓存的功能,可以记住之前查询过的域名。如果要查询的域名和相关信息已经在缓存中,那么就可以直接返回响应,接下来的查询可以从缓存的位置开始向下进行。相比每次都从根域找起来说,缓存可以减少查询所需的时间。并且,当要查询的域名不存在时,“不存在”这一响应结果也会被缓存。这样,当下次查询这个不存在的域名时,也可以快速响应。这个缓存机制中有一点需要注意,那就是信息被缓存后,原本的注册信息可能会发生改变,这时缓存中的信息就有可能是不正确的。因此,DNS 服务器指的是将使用过的数据存放在离使用该数据的地方较近的高速存储装置中,以便提高后续访问速度的技术。这一技术有很多应用,如 CPU和内存之间的缓存、磁盘和内存之间的缓存等,在网络中缓存也是一种用来提高访问速度的普遍性技术。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!