DNS,这篇给你讲明白了( 四 )


表 7-1
DNS 有两种报文,一种是查询报文,一种是响应报文,并且这两种报文有着相同的格式,下面是 DNS 的报文格式 。

DNS,这篇给你讲明白了

文章插图
 
图 7-8
下面我们就来看一下详细的报文字段 。
报文段首部
报文段首部是 DNS 报文的基础结构部分,下面我们对报文段首部中的每个字节进行描述 。
 
  • 事务 ID: TransactionID 由客户端设置,由服务器返回 。TransactionID 占用 2 个字节 。它是 DNS 的标识,对于同一个请求报文和响应报文来说,这个字段的值是相同的,以此来区分客户端请求和响应 。
  • 标志:标志字段占用 2 个字节 。标志字段有很多,而且也比较重要,下面我给你列出来了所有的标志字段 。
 
DNS,这篇给你讲明白了

文章插图
 
图 7-9
每个字段的含义如下
 
  • QR(Response): 1 bit 的 QR 标识报文是查询报文还是响应报文,查询报文时 QR = 0,响应报文时 QR = 1 。
  • OpCode: 4 bit 的 OpCode 表示操作码,这个值通常是 0,代表标准的请求和响应 。OpCode = 4 表示这是一个通知;OpCode = 5 表示这是一个更新请求 。而其他值(1-3)是被弃用的 。
  • AA(Authoritative): 1 bit 的 AA 代表授权应答,这个 AA 只在响应报文中有效,值为 1 时,表示名称服务器是权威服务器;值为 0 时,表示不是权威服务器 。
  • TC(Truncated): 截断标志位,值为 1 时,表示响应已超过 512 字节并且已经被截断,只返回前 512 个字节 。
  • RD(Recursion Desired): 这个字段是期望递归字段,该字段在查询中设置,并在响应中返回 。该标志告诉名称服务器必须处理这个查询,这种方式被称为一个递归查询 。如果该位为 0,且被请求的名称服务器没有一个授权回答,它将返回一个能解答该查询的其他名称服务器列表 。这种方式被称为迭代查询
  • RA(Recursion Available): 可用递归字段,这个字段只出现在响应报文中 。当值为 1 时,表示服务器支持递归查询 。
  • Z: 保留字段,在所有的请求和应答报文中,它的值必须为 0 。
  • AD: 这个字段表示信息是否是已授权,已授权就是 true 。
  • CD: 这个字段表示是否禁用安全检查,禁用检查就是 true 。
  • rcode(Reply code):这个字段是返回码字段,表示响应的差错状态 。当值为 0 时,表示没有错误;当值为 1 时,表示报文格式错误(Format error),服务器不能理解请求的报文;当值为 2 时,表示域名服务器失败(Server failure),因为服务器的原因导致没办法处理这个请求;当值为 3 时,表示名字错误(Name Error),只有对授权域名解析服务器有意义,指出解析的域名不存在;当值为 4 时,表示查询类型不支持(Not Implemented),即域名服务器不支持查询类型;当值为 5 时,表示拒绝(Refused),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答 。
 
相信读者跟我一样,只看这些字段没什么意思,下面我们就通过抓包的方式,看一下具体的 DNS 报文 。
DNS,这篇给你讲明白了

文章插图
 
图 7-10
现在我们可以看一下具体的 DNS 报文,通过 Query 可知这是一个请求报文,这个报文的标识符是 0xcd28,它的标志如下 。