【计算机网络】域名解析(DNS)过程

DNS报文

        DNS分为查询请求和查询响应,请求和响应的报文结构基本相同。DNS报文格式如图1所示。其中,会话标识、标志、问题计数、回答资源记录数、授权资源记录数、附加资源记录数这6个字段是DNS的报文首部。查询问题区域,回答问题区域,授权服务区域,附加信息区域是报文的正文部分。

在这里插入图片描述

报文头部

  1. 会话标识(2字节):是DNS报文的ID标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分DNS应答报文是哪个请求的响应。
  2. 标志(2字节):
    在这里插入图片描述
    标志段中每个字段的表示含义如下:
  • QR(Response):查询请求/响应的标志信息。查询请求时,值为0;响应时,值为1。
  • Opcode:操作码。其中,0表示标准查询;1表示反向查询;2表示服务器状态请求。
  • AA(Authoritative):授权应答,该字段在响应报文中有效。值为1时,表示名称服务器是权威服务器;值为0时,表示不是权威服务器。
  • TC(Truncated):表示是否被截断。值为1时,表示响应已超过512字节并已被截断,只返回前512字节。
  • RD(Recursion
    Desired):期望递归。该字段能在一个查询中设置,并在响应中返回。该标志告诉名称服务器必须处理这个查询,这种方式被称为一个递归查询。如果该位为0,且被请求的名称服务器没有一个授权回答,它将返回一个能解答该查询的其他名称服务器列表。这种方式被称为迭代查询。
  • RA(Recursion Available):可用递归。该字段只出现在响应报文中。当值为1时,表示服务器支持递归查询。
  • Zero:保留字段,在所有的请求和应答报文中,值为0。
  • rcode(Reply code):返回码字段,表示响应状态。当值为0时,表示没有错误;当值为1时,表示报文格式错误;当值为2时,表示域名服务器失败;当值为3时,表示名字错误;当值为4时,表示域名服务器不支持该查询类型;为5时,表示拒绝是服务器由于设置的策略拒绝给出应答。
  1. 数量字段(共8字节):Questions、Answer RRs、Authority RRs、Additional RRs 各自表示后面的四个区域的数目。Questions表示查询问题区域节的数量,Answers表示回答区域的数量,Authoritative namesversers表示授权区域的数量,Additional recoreds表示附加区域的数量。

报文正文

  • Queries区域:该部分是用来显示DNS查询请求的问题,通常只有一个问题。该部分包含正在进行的查询信息,包含查询名(被查询主机名字)、查询类型、查询类,如下图2所示。
    在这里插入图片描述
    该部分中每个字段含义如下:
  • 查询名:一般为要查询的域名,有时也会是IP地址,用于反向查询。
  • 查询类型:DNS查询请求的资源类型,具体内容如下表1所示.
    在这里插入图片描述
  • 查询类:地址类型,通常为互联网地址,值为1。
  • 资源记录区域,指 DNS 报文格式中的最后三个字段,包括回答问题区域、权威名称服务器区域、附加信息区域。这三个字段均采用一种称为资源记录的格式,格式如下图3所示。
    在这里插入图片描述
    资源记录格式中每个字段含义如下:
  • 域名:DNS 请求的域名。
  • 查询类型:资源记录的类型,与问题部分中的查询类型值是一样的。
  • 查询类:地址类型,与问题部分中的查询类是一样的。
  • 生存时间:以秒为单位,表示资源记录的生命周期,一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间。它同时也可以表明该资源记录的稳定程度,稳定的信息会被分配一个很大的值。
  • 资源数据长度:资源数据的长度。
  • 资源数据:表示按查询段要求返回的相关资源记录的数据。

域名服务器结构

        DNS的域名是呈倒状的树形结构,从高层到底层进行划分,可以分为根域名服务器,顶级域名服务器,权限域名服务器,本地域名服务器,如下图4所示。
        在最顶层是根服务器,它最高层次的域名服务器,也是最重要的域名服务器,本地域名服务器如果解析不了域名就会向根域名服务器求助。
        顶级域名服务器,负责管理在该顶级域名服务器下注册的二级域名。当根域名服务器告诉查询者顶级域名服务器地址时,查询者紧接着就会到顶级域名服务器进行查询。
        权限域名服务器,主要负责一个区的域名解析工作。
        本地域名服务器,当一个主机发出DNS查询请求的时候,这个查询请求首先就是发给本地域名服务器的。
在这里插入图片描述

域名解析过程

        域名解析是一个寻找IP地址的过程,可分为递归查询和迭代查询。当用户向DNS服务器发送域名解析请求时,DNS服务器首先会查询本地服务器资源中是否有要查询的域名记录,如果存在查询记录,则返回用户权威解析记录,如果不存在,DNS会继续查询本地缓存中是否有查询记录,若缓存中存在记录,返回用户非权威解析[1]。如果本地缓存中也不存在要查询的域名记录,则向远程DNS服务器进行递归查询和迭代查询。

递归查询

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

迭代查询

本地域名服务器向根域名服务器查询通常是采用迭代查询。
迭代查询的特点是这样的:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询(而不是代替本地域名服务器进行后续的查询)。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器。让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,那么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个权限域名服务器进行查询,本地域名服务器就这样进行迭代查询,最后,知道了所要解析的域名的IP地址,然后把这个结果返回给查询的主机。当然,本地域名服务器也可以采用递归查询,这取决于最初的查询请求报文的设置是要求使用哪一种查询方式。

参考链接:
https://jocent.me/2017/06/25/dns-protocol-implementation.html(自己动手实现DNS协议)
https://jocent.me/2017/06/18/dns-protocol-principle.html(DNS协议详解及报文格式分析)
https://blog.csdn.net/qq_37288477/article/details/86582130
http://www.codeceo.com/article/dns-guide.html(最全面的 DNS 原理入门)
参考文献:
[1] 李珊. 基于DNS日志的域名解析预处理方法的研究与实现[D].北京交通大学,2019.

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值