dns查询和响应报文解析
报文格式如下
报文详细说明
头部12字节说明
- 标识(2byte):由客户端请求的时候设置,用来唯一的确定请求和响应的报文,可以做请求id标识。
- 标志(2byte): 16个比特位,用来确定报文类型
标志位 | 说明 |
---|---|
QR | 报文类型 【0】 查询报文【1】 响应报文 |
opcode | 【0】标准查询 【1】反向查询 【2】服务器状态请求 |
AA | 表示授权回答(Authoritative Answer),只有响应报文能够用得到,【1】表示域名服务器是授权服务器。 |
TC | 可截断的(Truncated),当DNS报文使用UDP,UDP数据长度限制,过长报文被截断。【1】表示DNS报文超过512字节,被截断。 |
RD | 递归查询标志,【1】表示执行递归查询,目标DNS无法解析某个主机名,则该DNS将向其他DNS服务器继续查询,如此递归,直到获得结果并把该结果返回给客户端。【0】表示执行迭代查询,如果目标DNS无法解析某个主机名,则它将自己知道的其他DNS服务器的IP地址返回给客户端,供客户端参考。 |
RA | 允许递归标志,只有响应报文使用,【1】表示DNS服务器支持递归查询。 |
zero | 全零,必须为0 |
rcode | 返回码,表示应答状态。【0】 没有差错 【1】格式错误 【2】 域名服务器错误 【3】 名字错误,域名不存在。【4】查询类型不支持 【5】被禁止 【6-15】保留 |
问题数
资源记录数
授权资源记录数
额外资源记录数
4个长度可变的字段说明
查询问题
查询名:需要查找的名字, 可变长。当前对于每一级域名长度的限制是63个字符,域名总长度不能超过253个字符。查询名由一个或多个标识符序列组成,每个标识符序列用首字节数的计数值来说明标识符的长度,例如:【6】abcdef【2】cc。6标识后面6个字符是属于该序列的。计数值必须是0~63(每一级域名长度最多是63)。用【0】来表示该名称结束。然后下一个名字也可以用这种情况进行解析。
查询类型:
- 【A】值为1由域名查询IP地址,正向查询。
- 【NS】值为2名字服务器。
- 【CNAME】值为5,获得目标主机的别名。
- 【SOA】值为6,开始授权,标记一个区的开始。
- 【WKS】值为11定义主机提供的网络服务。
- 【PTR】值为12,获得IP地址对应的域名,反向查询。
- 【HINFO】13,主机信息,给出主机使用的硬件和操作系统的表述。
- 【MX】 15,邮件交换,把邮件改变路由送到邮件服务器。
- 【AAA】28,IPv6地址。
- 【AXFR】252,传送整个区的请求。
- 【ANY】255,对所有记录的请求。
查询类:2个字节,【IN】1,表示internet数据。
资源记录数说明:
回答、授权、额外信息字段都采用资源记录RR(ResourceRecord)格式,格式如下:
字段 | 说明 |
---|---|
域名 | 记录资源数据对应的名字,格式和查询问题中的查询名字字段格式一致 |
类型 | 说明RR的类型码 【1】Internet数据,和查询问题的类型字段含义相同 |
类 | 和查询问题中查询类含义相同。 |
生存时间 | 客户端保留该数据的秒数 |
资源数据长度 | 说明资源数据的长度的,如果是【A】类型(域名查询IP)。资源数据长度为4字节,然后资源数据中的4个字节为ip地址。如果是【PTR】类型(IP查类型),资源数据长度为ip地址对应的域名长度。 |
资源数据 | 存储资源数据,可能是ip,可能是域名。 |
- 回答
- 授权
- 额外信息
报文实例分析
DNS请求报文例子
1 |
DNS响应报文例子
1 |