14.1.4 DNS报文格式
DNS客户端与DNS服务器进行交互时,需要传送各种各样的数据报,这些数据报的总体格式如图14-6所示。DNS报文由12字节长的首部和4个长度可变的字段组成。标识字段由客户程序设置并由服务器返回结果,客户程序通过它来确定响应与查询是否匹配。标识字段包含了以下内容。
q 定义是查询报文还是响应报文;
q 查询类型是标准查询、反向查询还是服务器状态请求;
q 是否是权威回答;
q 查询方式是递归查询还是迭代查询;
q 是否支持递归查询;
q 查询是否有差错或要查的域名不存在。
问题部分中每个问题的格式如图14-7所示,通常只有一个问题。查询名是要查找的名字,它是一个或多个标识符的序列。每个标识符以首字节的计数值来说明随后标识符的字节长度,每个名字以最后字节为0结束,长度为0的标识符是根标识符。计数字节的值必须是0~63的数,因为标识符的最大长度仅为63。与其他常用报文格式不一样的是,该字段无需以整32bit边界结束,即无需填充字节。图14-8显示了如何存放域名www.wzvtc.cn。其中,3、5、2表示后续字符的个数。
图14-6 DNS数据报的总体格式
图14-7 DNS数据包问题部分格式
3 | w | w | w | 5 | w | z | v | t | c | 2 | c | n | 0 |
图14-8 域名www.wzvtc.cn的表示方法
每个问题都有一个查询类型,而每个应答(也称为一条资源记录)也有一个应答类型。大约有20个不同的类型值,有一些目前已经过时,表14-1列出了常用的一些值。其中有两种可以用于查询类型:一种是A类型,表示期望获得查询名的IP地址。还有一种是PTR类型,表示请求获得一个IP地址对应的域名,也称为指针查询。查询报文格式中的查询类通常是1,指互联网地址。
%注意:某些站点也支持其他非IP地址查询,此时查询类将是其他数值。
表14-1 DNS问题和响应的类型值和查询类型值
名 字 | 数 值 | 描 述 | 名 字 | 数 值 | 描 述 |
A | 1 | IP地址 | HINFO | 13 | 主机信息 |
NS | 2 | 名字服务器 | MX | 15 | 邮件交换记录 |
CName | 5 | 规范名称 | AXFR | 252 | 对区域转换的请求 |
PTR | 12 | 指针记录 | *或ANY | 255 | 对所有记录的请求 |
DNS报文一般格式中的最后3个字段是回答字段、授权字段和附加信息字段,它们均采用一种称为资源记录RR(Resource Record)的相同格式。图14-9显示了资源记录的格式,各个字段的含义如下:
图14-9 DNS资源记录格式
q 域名是记录中资源数据对应的名字,它的格式和前面介绍的查询名字段格式(图14-8)相同。
q 类型说明RR的类型码,它的值的取值及含义见表14-1。
q 类通常为1,指Internet数据。
q 生存时间字段是客户程序保留该资源记录的秒数,资源记录通常的生存时间值为 2天。
q 资源数据长度说明资源数据的数量。
q 资源数据的格式依赖于类型字段的值,对于类型1(A记录)资源数据是4字节的IP地址。