DNS协议详解及报文格式分析——应用层

一、DNS协议理论知识

1、域名结构

域名是群体中所有人都在用的,必须要保持唯一性。为了达到唯一性的目的,因特网在命名的时候采用了层次结构的命名方法。每一个域名(本文只讨论英文域名)都是一个标号序列(labels),用字母(A-Z,a-z,大小写等价)、数字(0-9)和连接符(-)组成,标号序列总长度不能超过255个字符,它由点号分割成一个个的标号(label),每个标号应该在63个字符之内,每个标号都可以看成一个层次的域名。级别最低的域名写在左边,级别最高的域名写在右边。

比如:https://www.csdn.net/
由点号分割成了 www、csdn、net,其中 net 是顶级域名(TLD,Top-Level Domain),csdn是二级域名(SLD,Second Level Domain),www 是三级域名。
关于域名的层次结构,请看下面的示意图。
DNS协议详解及报文格式分析——应用层_第1张图片

注意:最开始的域名最后都是带了点号的,比如 www.360.cn 搁以前的话应该是 www.360.cn. ,最后面的点号表示根域名服务器,后来发现所有的网址都要加上最后的点,就简化了写法,干脆所有的都不加,但是你在网址后面加上点号也是可以正常解析的。(现在有的访问的是一样的,有的会重定向,有的不能访问)

2、域名服务器
在这里插入图片描述
有域名结构还不行,还需要有一个东西去解析域名,域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机。由高向低进行层次划分,可分为以下几大类:

  1. 根域名服务器:最高层次的域名服务器,也是最重要的域名服务器,本地域名服务器如果解析不了域名就会向根域名服务器求助。全球共有13个不同IP地址的根域名服务器,它们的名称用一个英文字母命名,从a一直到m。这些服务器由各种组织控制,并由 ICANN(互联网名称和数字地址分配公司)授权,由于每分钟都要解析的名称数量多得令人难以置信,所以实际上每个根服务器都有镜像服务器,每个根服务器与它的镜像服务器共享同一个 IP 地址,中国大陆地区内只有6组根服务器镜像(F,I(3台),J,L)。
  2. 顶级域名服务器:负责管理在该顶级域名服务器下注册的二级域名。当根域名服务器告诉查询者顶级域名服务器地址时,查询者紧接着就会到顶级域名服务器进行查询。
  3. 权威域名服务器:负责一个区的域名解析工作
  4. 本地域名服务器:当一个主机发出DNS查询请求的时候,这个查询请求首先就是发给本地域名服务器的。

3、域名解析过程

域名解析总体可分为两大步骤
第一个步骤是本机向本地域名服务器发出一个DNS请求报文,报文里携带需要查询的域名;
第二个步骤是本地域名服务器向本机回应一个DNS响应报文,里面包含域名对应的IP地址。

迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。
DNS协议详解及报文格式分析——应用层_第2张图片
递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机。
DNS协议详解及报文格式分析——应用层_第3张图片

二、DNS协议报文格式

DNS协议详解及报文格式分析——应用层_第4张图片

1、头部

(1)会话标识(2字节):是DNS报文的ID标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分DNS应答报文是哪个请求的响应

(2)标志(2字节):
在这里插入图片描述DNS协议详解及报文格式分析——应用层_第5张图片
(3)数量字段(总共8字节):Questions、Answer RRs、Authority RRs、Additional RRs 各自表示后面的四个区域的数目。Questions表示查询问题区域节的数量,Answers表示回答区域的数量,Authoritative namesversers表示授权区域的数量,Additional recoreds表示附加区域的数量

2、正文

2.1、Queries区域
DNS协议详解及报文格式分析——应用层_第6张图片
2.1.1、查询名
长度不固定,且不使用填充字节,一般该字段表示的就是需要查询的域名(如果是反向查询,则为IP,反向查询即由IP地址反查域名),一般的格式如下图所示。
DNS协议详解及报文格式分析——应用层_第7张图片
2.1.2、查询类型
DNS协议详解及报文格式分析——应用层_第8张图片
2.1.3、查询类
通常为1,表明是Internet数据

2.2、资源记录(RR)区域(包括回答区域,授权区域和附加区域)

DNS协议详解及报文格式分析——应用层_第9张图片
该区域有三个,但格式都是一样的。这三个区域分别是:回答区域,授权区域和附加区域

2.2.1、域名(2字节或不定长)
它的格式和Queries区域的查询名字字段是一样的。有一点不同就是,当报文中域名重复出现的时候,该字段使用2个字节的偏移指针来表示。比如,在资源记录中,域名通常是查询问题部分的域名的重复,因此用2字节的指针来表示,具体格式是最前面的两个高位是 11,用于识别指针。其余的14位从DNS报文的开始处计数(从0开始),指出该报文中的相应字节数。一个典型的例子,C00C(1100000000001100,12正好是头部的长度,其正好指向Queries区域的查询名字字段)。

2.2.2、查询类型
表明资源纪录的类型,见1.2节的查询类型表格所示

2.2.3、查询类
对于Internet信息,总是IN

2.2.4、生存时间(TTL)
以秒为单位,表示的是资源记录的生命周期,一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间,它同时也可以表明该资源记录的稳定程度,极为稳定的信息会被分配一个很大的值(比如86400,这是一天的秒数)。

2.2.5、资源数据
该字段是一个可变长字段,表示按照查询段的要求返回的相关资源记录的数据。可以是Address(表明查询报文想要的回应是一个IP地址)或者CNAME(表明查询报文想要的回应是一个规范主机名)等。

三、Wireshark分析DNS协议

下面给出wireshark抓包的记录,感兴趣的可以根据上面介绍的协议报文格式手动解析一下,相信会有很大收获。

1、请求报文
DNS协议详解及报文格式分析——应用层_第10张图片

2、响应报文
DNS协议详解及报文格式分析——应用层_第11张图片

DNS相关的命令小贴士

  1. Windows环境下清空DNS缓存的命令是 ipconfig/flushdns 也可以通过重启DNS client 和 DHCP client 两项服务清空DNS缓存
  2. Windows环境下可以用命令 ipconfig /displaydns 来查看DNS缓存的内容
  3. nslookup 命令可以用来查看域名对应的IP地址,比如 nslookup jocent.me

你可能感兴趣的:(计算机网络,DNS)