说了这么多,协议头部,到底有哪些字段,其含义是什么都还不知道,那怎么去分析报文,下面我们一起再看看报文什么样子。
DNS 报文结构
基础结构部分:
DNS 报文基础部分为 DNS 首部。其中包含了事务 ID,标志,问题计数,回答资源计数,回答计数,权威名称服务器计数和附加资源记录数。
事务 ID:报文标识,用来区分 DNS 应答报文是对哪个请求进行响应。
标志:DNS 报文中标志字段。
问题计数:DNS 查询请求了多少次。
回答资源记录数:DNS 响应了多少次。
权威名称服务器计数: 权威名称服务器数目。
附加资源记录数: 权威名称服务器对应 IP 地址的数目。
重点!!!!基础结构中的标志字段细分如下:
标志字段
QR(Response):查询请求,值为 0;响应为 1。
Opcode: 操作码。0 表示标准查询;1 表示反向查询;2 服务器状态请求。
AA(Authoritative):授权应答,该字段在响应报文中有效。通过 0,1 区分是否为权威服务器。如果值为 1 时,表示名称服务器是权威服务器;值为 0 时,表示不是权威服务器。
TC(Truncated):表示是否被截断。当值为1的时候时,说明响应超过了 512字节并已被截断,此时只返回前512个字节。
RD(Recursion Desired):期望递归。该字段能在一个查询中设置,并在响应中返回。该标志告诉名称服务器必须处理这个查询,这种方式被称为一个递归查询。如果该位为 0,且被请求的名称服务器没有一个授权回答,它将返回一个能解答该查询的其他名称服务器列表。这种方式被称为迭代查询。
RA(Recursion Available):可用递归。该字段只出现在响应报文中。当值为 1 时,表示服务器支持递归查询。
Z:保留字段,在所有的请求和应答报文中,它的值必须为 0。
rcode(Reply code):通过返回只判断相应的状态。
当值为 0 时,表示没有错误;当值为 1 时,表示报文格式错误(Format error),服务器不能理解请求的报文;当值为 2 时,表示域名服务器失败(Server failure),因为服务器的原因导致没办法处理这个请求;当值为 3 时,表示名字错误(Name Error),只有对授权域名解析服务器有意义,指出解析的域名不存在;当值为 4 时,表示查询类型不支持(Not Implemented),即域名服务器不支持查询类型;当值为 5 时,表示拒绝(Refused),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答。
问题部分
该部分是用来显示 DNS 查询请求的问题,其中包含正在进行的查询信息,包含查询名(被查询主机名字)、查询类型、查询类。
查询名:一般为查询的域名,也可能是通过IP地址进行反向查询
查询类型:查询请求的资源类型。常见的如果为A类型,表示通过域名获取 IP。具体如下图所示。
查询类:地址类型,通常为互联网地址为 1。
资源记录部分
资源记录部分包含回答问题区域,权威名称服务器区域字段、附加信息区域字段,格式如下。