DNS 资源数据类型区分

DNS 资源数据类型区分

RFC1035 中规定,在 DNS 响应中,如果资源数据是指针,则该资源数据的前两位应该是 11。如果是域名,则应该是 00。两个问题:

  1. 如果资源数据是 IP 地址,例如 201.1.2.3,其中 0d201 = 0b11001001 ,会发生什么情况?是否还考虑了其​​他字段?
  2. 前两个字节 11 和 00 之间的区别真的有必要吗?如果考虑资源数据长度字段,那么长度 2 不是可以唯一地标识资源中的指针吗?在 DNS 消息中使用的表示法中,域名不能是 2 个字节长。

答案1

您误读了 RFC。

它指出长度八位字节应设置为11或00。

更具体的说,如果这两个位是00,则该字节被视为长度,后面的6位表示后面的字节数。如果这两个位是11,则该字段是一个指针,后面的14位表示偏移量。

答案2

对于问题b:

DNS 响应中的资源记录中有一个名为“资源数据长度”的字段。通过这个字段,确实可以判断资源数据是指针、域名,还是域名的一部分,后面跟着指向域名其余部分的指针。但是,在每个资源记录的开头,还有一个字段,该字段应该包含客户端查询的域名/IP 地址/等。在这种情况下,使用问题中提到的两个位是唯一能判断该字段包含什么的方法:域名还是指针。

对于问题a:

资源记录中有一个“域类型”字段,在 PTR 响应的情况下,该字段将表示资源数据是 4(或 16)个八位字节地址。无需检查资源数据的前两位。

相关内容