DNS协议浅析

我们都知道,在上网时需要在浏览器中输入相应的ip地址才能访问到需要的页面。但是ip地址由32位的二进制来表示,很显然,这很难记。但是用户更愿意记www.baidu.com这样直观的名称。因此这就需要DNS(域名服务器)来进行ip与名称的映射。首先说一下,采用DNS有两个好处:一是之前说的,用户只需记住直观的名称而不用去记一堆32bit的数字。二是,当一台服务器要更换ip地址时,只要改变相应的映射表,而对应的名称不需要变动,利于维护。下面我们就从几个方面来详细解析一下DNS的工作原理。

(一)根域

就是所谓的“.”,其实我们的网址www.sohu.com在配置当中应该是www.sohu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯。以点“ . ”结尾的域名称为绝对域名或完全合格的域名 ,例如s u n . t u c . n o a o . e d u . 。如果一个域名不以点结尾,则认为该域名是不完全的。
如何使域名完整依赖于使用的 D N S软件。如果不完整的域名由两个或两个以上的标号组成,则认为它是完整的;或者在该域名的右边加入一个局部后缀。例如域名 s u n通过加上局部后缀. t u c . n o a o . e d u . 成为完整的。
根域服务器我们知道有13台,但是这是错误的观点。根域服务器只是具有13个IP地址,但机器数量却不是13台,因为这些IP地址借助了任播的技术,所以我们可以在全球设立这些IP的镜像站点,你访问到的这个IP并不是唯一的那台主机。 

(二)域名结构


                              (图片来源

1、顶级域被分为三个部分:

1) arpa是一个用作地址到名字转换的特殊域。
2) 7个3字符长的普通域。有些书也将这些域称为组织域,com、gov、edu、net、mil、org、int。
3) 所有2字符长的域均是基于ISO3166中定义的国家代码,这些域被称为国家域,或地理域。

Sohu.com就是一个顶级域名,而www.sohu.com却不是顶级域名,他是在sohu.com 这个域里的一叫做www的主机。一级域之后还有二级域,三级域,只要我买了一个顶级域,并且我搭建了自己BIND服务器(或者其他软件搭建的)注册到互联网中,那么我就可以随意在前面多加几个域了(当然长度是有限制的)。比如a.www.sohu.com,在这个网址中,www.sohu.com变成了一个二级域而不是一台主机,主机名是a。 

(三)域名服务器

1、根域名服务器:最高层次的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助根域名服务器。所以根域名服务器是最重要的域名服务器。假定所有的根域名服务器都瘫痪了,那么整个DNS系统就无法工作。需要注意的是,在很多情况下,根域名服务器并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。

2、顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。

3、权限域名服务器:负责一个“区”的域名服务器。

4、本地域名服务器:本地服务器不属于下图的域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。                       

                                           (图片来源

(四)域名的解析过程          

1、主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。

2、本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。

下图给出了这两种查询的差别

          

下面举一个例子演示整个查询过程:

    假定域名为m.xyz.com的主机想知道另一个主机y.abc.com的IP地址。例如,主机m.xyz.com打算发送邮件给y.abc.com。这时就必须知道主机y.abc.com的IP地址。下面是上图a的几个查询步骤:

    1、主机m.abc.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个UDP报文。

    为了提高DNS查询效率,并减轻服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。

    例如,在上面的查询过程中,如果在m.xyz.com的主机上不久前已经有用户查询过y.abc.com的IP地址,那么本地域名服务器就不必向根域名服务器重新查询y.abc.com的IP地址,而是直接把告诉缓存中存放的上次查询结果(即y.abc.com的IP地址)告诉用户。

    由于名字到地址的绑定并不经常改变,为保持告诉缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如每个项目两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器绑定信息。当权限服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名解析的正确性。

    不仅在本地域名服务器中需要高速缓存,在主机中也需要。许多主机在启动时从本地服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机应当定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删除无效的项。由于域名改动并不频繁,大多数网点不需花精力就能维护数据库的一致性。

五、总结

1、DNS在53端口上监听请求并提供响应的服务。出于性能的考虑,DNS查询请求用UDP协议交互并且每个请求的大小小于512字节,但是如果返回的请求大小大于512字节,交互双方会协商使用TCP协议。

2、DNS系统中有三中查询:递归查询(客户端到本地服务器),迭代查询(DNS服务器之间交互查询)和反向查询(反向查询是根据一个资源记录查询域名。为了实现反向查询,DNS中有一个特殊的域名IN-ADDR.ARPA来专门作反向查询定义)

3、从应用的角度上看,对 D N S的访问是通过一个地址解析器(resolver)来完成的。在UNIX主机中,该解析器主要是通过两个库函数 gethostbyname(3) 和gethostbyaddr(3)来访问的,它们在编译应用程序时与应用程序连接在一起。前者接收主机名字返回 I P地址,而后者接收I P地址来寻找主机名字。解析器通过一个或多个名字服务器来完成这种相互转换。


参考链接:http://www.cnblogs.com/cobbliu/archive/2013/03/24/2979521.html

          http://blog.chinaunix.net/uid-28216282-id-3757849.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些关于使用Wireshark分析DNS协议的指导。 首先,打开Wireshark并启动捕捉。在捕捉过程中,您可以使用过滤器 "dns" 来仅显示DNS协议的数据包。在Wireshark的过滤器栏中输入 "dns",然后按回车键即可。 现在,您应该能够看到所有DNS协议的数据包。您可以使用Wireshark的详细信息面板来查看每个数据包的详细信息。您可以展开每个数据包以查看其各个部分的详细信息。 下面是一些您可以查看和分析的DNS协议的重要信息: 1. DNS查询类型和查询名称:DNS查询消息通常包括查询类型和查询名称。查询类型可以是A记录、MX记录、CNAME记录等。查询名称是在DNS服务器上查找的主机名。 2. DNS响应类型和响应名称:DNS响应消息通常包括响应类型和响应名称。响应类型可以是A记录、MX记录、CNAME记录等。响应名称是DNS服务器提供的主机名。 3. DNS查询和响应中的标志:DNS查询和响应消息中包含了一些标志,这些标志包括返回代码、授权回答、递归查询等等。这些标志可以帮助您了解DNS查询和响应的详细信息。 4. DNS消息头:DNS消息头包含了一些重要的信息,包括消息ID、查询/响应标志、问题数、回答数、授权回答数和附加记录数。这些信息可以帮助您了解DNS消息的结构和内容。 以上是一些关于使用Wireshark分析DNS协议的指导。希望这些信息能够对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值