赞
踩
DNS分为查询请求和查询响应,请求和响应的报文结构基本相同。DNS报文格式如图1所示。其中,会话标识、标志、问题计数、回答资源记录数、授权资源记录数、附加资源记录数这6个字段是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.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。