DNS查询总结

一、域名系统概述

由于网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能认识域名。我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需要的页面,这是因为有一个叫“DNS服务器”的计算机自动把我们的域名“翻译”成了相应的IP地址,然后调出IP地址所对应的网页;

域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为IP地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名”呢?这是因为在这种因特网的命名系统中使用了许多的“域(domain)”,因此就出现了“域名”这个名词。“域名系统”明确地指明这种系统是应用在因特网中。域名服务主要是基于UDP实现的,服务器的端口号为53

二、DNS域名结构

1、 域名的层次结构为了保证每一个域名都具有唯一性,域名采用了一种层次结构的命名方式:
(1)每一个域名都是一个标号(labels)序列,由字母(A-Z、a-z,大小写等价)、数字(0-9)和连接符(-)组成;
(2)标号序列的最大长度为255个字节,标号序列由点(.)符号分割成标号;
(3)每个标号的最大长度为63个字节,每个标号都可以看成一个层次的域名;
(4)级别最低的域名在左边,级别从左到右依次升高。
在这里插入图片描述

三、 域名服务器

因特网上的DNS服务器也是按照层次安排的。每一个域名服务器只对域名体系中的一部分进行管辖。根据域名服务器所起的作用,可以把域名服务器划分为下面四种不同的类型:
根域名服务器:最高层次的域名解析服务器,也是最重要的域名解析服务器。储存了负责每个域(如COM、NET、ORG等)的解析的域名服务器的地址信息,本地域名解析服务器无法解析的域名就会向根域名解析服务器求助。
顶级域名服务器:负责管理该顶级域名服务器下注册的二级域名。
权限域名服务器:负责一个区的域名解析工作。
本地域名服务器:当一个主机发起DNS请求时,首先请求的就是本地域名解析服务器。

如果采用“DNS域名结构”的树状结构,每一个节点都采用一个域名服务器,这样会使得域名服务器的数量太多,使域名服务器系统的运行效率降低。所以在DNS中,采用划分区的方法来解决。
一个服务器所负责管辖(或有权限)的范围叫做区(zone)。各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机到域名IP地址的映射。总之,DNS服务器的管辖范围不是以“域”为单位,而是以“区”为单位。区是DNS服务器实际管辖的范围。区 <= 域。
下图是区的不同划分方法的举例。假定abc公司有下属部门x和y,部门x下面有分三个分布们u,v,w,而y下面还有下属部门t。图a表示abc公司只设一个区abc.com。这是,区abc.com和域abc.com指的是同一件事。但图b表示abc公司划分为两个区:abc.com和y.abc.com这两个区都隶属于域abc.com,都各设置了相应的权限域名服务器。不难看出,区是域的子集。
在这里插入图片描述
下图是以上图b中abc公司划分的两个区为例,给出了DNS域名服务器树状结构图。这种DNS域名服务器树状结构图可以更准确地反映出DNS的分布式结构。图中的每一个域名服务器都能够部分域名到IP地址的解析。当某个DNS服务器不能进行域名到IP地址的转换时,它就会设法找因特网上别的域名服务器进行解析;
在这里插入图片描述

四、域名解析过程

在进行域名解析查询的时候,首先查询本地域名服务器,也就是ISP提供的DNS服务器,如果找不到,这时候就有两种查询方式:递归查询,迭代查询;
1、主机向本地域名服务器的查询一般都是采用递归查询(recursive query)。如果主机所查询的本地域名服务器不知道被查询域名的IP,那么本地域名服务器就以DNS客户端的身份,向其他的根域名服务器发出查询请求报文(即替代该主机继续查询),而不是让该主机自己进行下一步查询。因此递归查询返回的查询结果或者是要查的IP,或者是报错,表示无法查询到所需要的IP地址。

2、本地域名服务器向根域名服务器发出查询通常是采用迭代查询 (iterative query)。迭代查询的特点是:当根域名服务器收到本地域名服务器的迭代请求报文时,要么给出要查询的IP地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个个权限域名服务器进行查询。本地域名服务器就这样进行迭代查询。最后,知道了所要解析的域名的IP地址,然后把这个结果返回给发起查询的主机。
在这里插入图片描述
通俗地说,
(1)递归就是把一件事情交给别人,如果事情没有办完,哪怕已经办了很多,都不要把结果告诉我,我要的是你的最终结果,而不是中间结果;如果你没办完,请你找别人办完。
(2)迭代则是我交给你一件事,你能办多少就告诉我你办了多少,然后剩下的事情就由我来办。

当然,本地域名服务器也可以采用递归查询。这取决于最初的查询请求报文的设置是要求使用哪一种查询方式。
在这里插入图片描述
解析:
假定域名为m.xyz.com的主机想知道另一个主机(域名为y.abc.com)的IP地址,
左图本地域名服务器采用迭代查询:右图本地域名服务器采用递归查询
下面是左图的几个查询步骤:
1.主机m.xyz.com先向其本地域名服务器dns.xyz.com进行递归查询。
2.本地域名服务器采用迭代查询。它先向一个根域名服务器查询。
3.根域名服务器告诉本地域名服务器,下一次应查询的项级域名服务器dns.com的IP地址。
4.本地域名服务器向顶级域名服务器dns.com进行查询。
5.顶级域名服务器dns.com告诉本地域名服务器,下一次应查询的权限域名服务器dns.abc.com的IP地址。
6.本地域名服务器向权限域名服务器dns.abc.com进行查询。
7.权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。
8.本地域名服务器最后把查询结果告诉主机m.xyz.com
我们注意到,这8个步骤总共要使用8个UDP用户数据报的报文。本地域名眼务器经过三次迭代代查询后,从权限域名服务器dns.abc.com得到了主机y.abc.com的IP地址,最后把结果返回给发起查询的主机m.xyz.com

右图是本地域名服务器采用递归查询的情况。在这种情况下,本地域名服务器只需向根域名服务器查询一次,后面的几次查询都是在其他几个域名服务器之间进行的,只是在步骤7,本地域名服务器从根域名服务器得到了所需的IP地址。最后在步骤8,本地域名服务器把查询结果告诉主机m.xyz.com。整个的查询也是使用8个UDP报文。

3、递归查询是默认的DNS查询方式,但是如果有以下情况发生的话,则会使用迭代的查询方式进行。
情况一:DNS客户端的请求报文中没有申请使用递归查询,即在DNS请求报头部的RD字段没有置1。
情况二:DNS客户端的请求报文中申请使用的是递归查询(也就是RD字段置1了),但在所配置的本地名称服务器上是禁用递归查询了(即在应答DNS报文头部的RA字段置0)。

此时的迭代查询如图所示:
在这里插入图片描述
迭代查询的流程如下:
1.客户端向本机配置的本地名称服务器(在此仅以首先DNS服务器为例进行介绍,其它备用DNS服务器的解析流程完全一样)发出DNS域名查询请求。
2.本地名称服务器收到请求后,先查询本地的缓存,如果有该域名的记录项,则本地名称服务器就直接把查询的结果返回给客户端;如果本地缓存中没有该域名的记录,则向DNS客户端返回一条DNS应答报文,报文中会给出一些参考信息,如本地名称服务器上的根名称服务器地址等。
3.DNS客户端在收到本地名称服务器的应答报文后,会根据其中的根名称服务器地址信息,向对应的根名称服务器再次发出与前面一样的DNS查询请求报文。根名称服务器在收到DNS查询请求报文后,通过查询自己的DNS数据库得到请求DNS域名中顶级域名所对应的顶级名称服务器信息,然后以一条DNS应答报文返回给DNS客户端。
4.DNS客户端根据来自根名称服务器应答报文中的对应顶级名称服务器地址信息,向该顶级名称服务器发出与前面一样的DNS查询请求报文。顶级名称服务器在收到DNS查询请求后,先查询自己的缓存,如果有请求的DNS域名的记录项,则直接把对应的记录项返回给DNS客户端,否则通过查询后把对应域名中二级域名所对应的二级名称服务器地址信息以一条DNS应答报文返回给DNS客户端。
5.然后DNS客户端继续按照前面介绍的方法一次次地向三级、四级名称服务器查询,直到最终的权威名称服务器返回到最终的记录。如果权威名称服务器也找不到对应的域名记录,则会向DNS客户端返回一条查询失败的DNS应答报文。

当然,如果这个权威名称服务器上配置了指向其它名称服务器的转发器,则权威名称服务器还会在转发器指向的名称服务器上进一步查询。另外,如果DNS客户端上配置了多个DNS服务器,则还会继续向其它DNS服务器查询。

参考:
https://www.jianshu.com/p/fc14b1526605
https://www.cnblogs.com/lidabo/p/8426647.html
https://blog.51cto.com/369369/812889
https://blog.51cto.com/hxw168/1409219
https://blog.51cto.com/dg123/1619178
https://blog.csdn.net/john1337/article/details/82991472

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值