简介
DNS(Domain Name System)即域名系统也常叫做域名解析协议,是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析。DNS协议常运行在UDP协议之上,使用端口号53。
封包格式及各字段分析
封包格式
![](https://img-blog.csdnimg.cn/20181117114917560.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTk2MTk2,size_16,color_FFFFFF,t_70)
字段分析
事务ID:占16位、由客户端设置,由服务器返回。客户端使用它来匹配响应和查询。
标志,占16位:
查询/响应:占1位、0表示查询消息; 1表示响应消息。
操作码:占4位、查询和响应中的正常值是0(标准查询)。4(通知), 5 (更新)。其他值(1-3)是弃用的,在运作过程中不会出现。
授权回答:占1位、与缓存回答相对。
截断回答:占1位、使用UDP时,它表示当应答的总长度超过512字节时,只返回前512个字节。
期望递归:占1位、该字段可以在一个查询中设置, 并在响应中返回。它告诉服务器执行递归查询。如果该字段没有设置,且被请求的名称服务器没有授权回答,则被请求的名称服务器就返回一个可以联系获取回答的其他名称服务器的列表。此时,全部的查询可能通过联系其他名称服务器来继续。这被称为迭代查询。
递归可用:占1位、如果服务器支持递归查询, 则在响应中设置该字段。根服务器一般不支持递归,因此强制客户端执行迭代查询来完成名称解析。
保留位:占1位、目前z位字段必须是0,但是为将来使用而保留。
真实数据:占1位、如果包含的信息是已授权的,则该字段设置为真。
禁止校验:占1位、如果禁用安全检查,则该字段设置为真。
操作码:占4位、在下表中给出了前面11个错误代码(11-15的值未定义)。
查询数:占16位、查询区段中条目的数目。
回答数:占16位、回答区段中条目的数目。
授权记录数:占16位、授权区段中条目的数目。
额外信息数:占16位、额外信息区段中条目的数目。
数据:问题区段,回答区段,授权区段,额外信息区段。用于DNSUPDATE:区域,先决条件,更新,额外信息。所有的其他区段都包含零个或多个RR。RR包含名字、类型和类信息,也包含控制数据缓存时间的TTL值。
数据包分析
请求:
响应:
其他相关
互联网域名结构
早期的互联网使用了非等级的名字空间,其优点是名字简短。但当互联网上的用户数急剧增加时,用非等级的名字空间来管理一个很大的而且是经常变化的名字集合是非常困难的。因此,互联网后来就采用了层次树状结构的命名方法,就像全球邮政系统和电话系统那样。采用这种命名方法,任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。这里,“域”是名字空间中一个可被管理的划分。域还可以划分为子域,而子域还可继续划分为子域的子域,这样就形成了顶级域、二级域、三级域,等等。
域名都由标号序列组成,而各标号之间用点隔开,在最后面的串是顶级域名,倒数第二个是二级域名,以此类推。
通用顶级域名
域名服务器
互联网上的DNS域名服务器也是按照层次安排的。每一个域名服务器都只对域名体系中的一部分进行管辖。根据域名服务器所起的作用,可以把域名服务器划分为以下四种不同的类型:
(1)根域名服务器:根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。根域名服务器是最重要的域名服务器,因为不管是哪一个本地域名服务器,若要对互联网上任何一个域名进行解析,只要自己无法解析,就首先要求助于根域名服务器。假定所有的根域名服务器都瘫痪了,那么整个互联网中的DNS系统就无法工作。据统计,到2016年2月,全世界已经在588个地点(地点数值还在不断增加)安装了根域名服务器,但这么多的根域名服务器却只使用13个不同P地址的域名,即 a.rootservers.net,b.rootservers.net ,…, m.rootservers.net。每个域名下的根域名服务器由专门的公司或美国政府的某个部门负责运营。但请注意,虽然互联网的根域名服务器总共只有13个域名,但这不表明根域名服务器是由13台机器所组成(如果仅仅依靠这13台机器,根本不可能为全世界的互联网用户提供令人满意的服务)。实际上,在互联网中是由13套装置(13 installations 构成这13组根域名服务器[ W-ROOT ]。每一套装置在很多地点安装根域名服务器(也可称为镜像根服务器),但都使用同一个域名。负责运营根域名服务器的公司大多在美国,但所有的根域名服务器却分布在全世界。为了提供更可靠的服务,在每一个地点的根域名服务器往往由多台机器组成(为了安全起见,有些根域名服务器的具体地点还是保密的)。现在世界上大部分DNS域名服务器,都能就近找到一个根域名服务器查询IP地址(现在这些根域名服务器都已增加了IPv6地址)。为了方便,人们常用从A到M的前13个英文字母中的一个,来表示某组根域名服务器。
(2)顶级域名服务器:这些域名服务器负责管理在该顶级域名服务器 注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的IP地址)
(3)权限域名服务器:负责一个区的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪一个权限域名服务器。
(4)本地域名服务器:当一台主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。由此可看出本地域名服务器的重要性。每一个互联网服务提供者ISP,或一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器,这种域名服务器有时也称为默认域名服务器。本地域名服务器离用户较近,一般不超过几个路由器的距离。当所要查询的主机也属于同一个本地ISP时,该本地域名服务器立即就能将所查询的主机名转换为它的P地址,而不需要再去询问其他的域名服务器。为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中的一个是主域名服务器,其他的是辅助域名服务器。当主域名服务器出故障时,辅助域名服务器可以保证DNS的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性。
DNS查询流程
本地域名服务器采用迭代查询的步骤:
1.主机 m.xyz.com 先向其本地域名服务器 dns.xyz.com进行递归查询
2.本地域名服务器采用迭代查询。它先向一个根域名服务器查询
3.根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器dns.com的IP地址。
4.本地域名服务器向顶级域名服务器dns.com进行查询。
5.顶级域名服务器dns.com告诉本地域名服务器,下一次应查询的权限域名服务器dns.abc.con的IP地址
6.本地域名服务器向权限域名服务器dns.abc.com 进行查询。
7.权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。
8.本地域名服务器最后把查询结果告诉主机m.xyz.com
本地域名服务器采用递归查询的步骤:
1.主机 m.xyz.com 先向其本地域名服务器 dns.xyz.com进行递归查询。
2.本地域名服务器采用递归查询。向一个根域名服务器查询。
3.根域名服务器。向顶级域名服务器查询。
4.顶级域名服务器查询向权限域名服务器查询。
5.权限域名服务器将结果返回给顶级域名服务器。
6.顶级域名服务器将结果返回给根域名服务器。
7.根域名服务器将结果返回给本地域名服务器。
8.本地域名服务器将结果返回主机m.xyz.com。
为了提高DNS查询效率,并减轻根域名服务器的负荷和减少互联网上的DNS查询报文数量,在域名服务器中广泛的使用高速缓存(有时也称为高速缓存域名服务器)。高速缓存用来存放最近查询过的域名以及从何处获得得域名映射信息记录。
名称和标签
DNS消息末尾的可变长度区段包含问题、回答、授权信息(包含某些数据授权信息的名称服务器的名称)和可能减少必要查询次数的额外信息。每一个问题和RR以它所涉及的名称开始。每个名称由一系列的标签组成。标签类型有两种:数据标签和压缩标签。数据标签包含构成一个标签的字符;压缩标签充当指向其他标签的指针。当相同字符串的多个副本在多个标签中出现时, 压缩标签有助于节省DNS信息的空间。
数据标签
每个数据标签以1字节的计数开始,该计数指定了紧随其后的字节数目。名称以值为0的字节结束, 0也是一个标签,其长度值为0,例如,名称为www.sdut.edu.cn的编码:{3www4abcd2cn0}
压缩标签
在许多情况下, DNS响应消息在回答、授权以及与相同域名相关的额外信息区段中携带信息。如果使用了数据标签,当涉及相同的名称时, DNS消息中的相同字符就会重复。为了避免这种冗余和节省空间,使用了一种压缩机制。DNS消息中,在域名的标签部分能出现的任意位置,前面的单一计数字节(通常在0和63之间)的2个高位置1,剩余的位与随 后的字节中的位组合形成一个14位的指针(偏移量)。偏移量给出了距离DNS消息开始处的字节数,在那里可以我到一个用于替代压缩标签的数据标签(称为压缩目标)。因此压缩标签能够指向距离开始处多达16 383个字节的位置。使用压缩标签编码域名usc.edu和ucla.edu: