DNS消息:如何阅读查询和响应消息( 二 )

除了查询条目中找到的相同的3个部分外,答案条目还有3个额外的部分 。

  • 存活时间(TTL):记录可以存在的秒数
  • 数据长度:数据的长度
  • 数据:返回的数据,例如IP地址或CNAME
让我们来看看名称部分 , 它只有两个字节:c0 0c 。
域名如何在两个字节中编码?
原来 , 这些字节是偏移量,指向查询部分中编码的域名 。
c0是一个开始标记 , 而0c是实际的偏移量,为12 。
我们从消息的开始字节17(在屏幕截图中以红色标记)开始数12个字节 。最后,我们到达第13个字节05,这是image.google.com的开头 , 用黄色标记 。
不复杂,对吧?接下来是一个复杂的例子 。
DNS消息:如何阅读查询和响应消息

文章插图
在答案的第二个条目中,名称偏移量为2e,即46个字节 。
通过计算46个字节,我们找到了前一个条目的CNAME中编码的images 。
  • 06 → 接下来的6个字节属于同一组
  • 69 → i
  • 6d → m
  • 61 → a
  • 67 → g
  • 65 → e
  • 73 → s
在images的末尾,我们看到另一个偏移量引用c0 12 。这是18个字节 。
同样,通过计算18个字节,我们到达了绿色标记的引用部分——在前一个条目的名称中的google.com 。
偏移量的想法是一个令人鼓舞的设计 。有了它 , 消息可以节省大量空间 。
DNS消息:如何阅读查询和响应消息

文章插图
最后,我们可以解码最后一个答案条目中的地址 。
  • ac → 172
  • d9 → 217
  • 01 → 1
  • 0e → 14
要点
  • DNS消息中需要注意的是问题数、答案RR数、查询和答案 。前两者是计数,而其他两者是实际数据 。
  • 通过理解名称的编码方式,您可以轻松地读取消息的字节 。




推荐阅读