long blogs

进一步有进一步惊喜


  • Home
  • Archive
  • Tags
  •  

© 2025 long

Theme Typography by Makito

Proudly published with Hexo

dns查询和响应报文解析

Posted at 2020-12-04 计算机网络 dns 

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
2
3



DNS响应报文例子

1
2
3



Share 

 Previous post: <<算法奥秘 读书笔记>> Next post: docker学习 

© 2025 long

Theme Typography by Makito

Proudly published with Hexo