RFC1035 中规定,在 DNS 响应中,如果资源数据是指针,则该资源数据的前两位应该是 11。如果是域名,则应该是 00。两个问题:
- 如果资源数据是 IP 地址,例如 201.1.2.3,其中 0d201 = 0b11001001 ,会发生什么情况?是否还考虑了其他字段?
- 前两个字节 11 和 00 之间的区别真的有必要吗?如果考虑资源数据长度字段,那么长度 2 不是可以唯一地标识资源中的指针吗?在 DNS 消息中使用的表示法中,域名不能是 2 个字节长。
答案1
您误读了 RFC。
它指出长度八位字节应设置为11或00。
更具体的说,如果这两个位是00,则该字节被视为长度,后面的6位表示后面的字节数。如果这两个位是11,则该字段是一个指针,后面的14位表示偏移量。
答案2
对于问题b:
DNS 响应中的资源记录中有一个名为“资源数据长度”的字段。通过这个字段,确实可以判断资源数据是指针、域名,还是域名的一部分,后面跟着指向域名其余部分的指针。但是,在每个资源记录的开头,还有一个字段,该字段应该包含客户端查询的域名/IP 地址/等。在这种情况下,使用问题中提到的两个位是唯一能判断该字段包含什么的方法:域名还是指针。
对于问题a:
资源记录中有一个“域类型”字段,在 PTR 响应的情况下,该字段将表示资源数据是 4(或 16)个八位字节地址。无需检查资源数据的前两位。