我在C中编写DNS客户端,可以向递归DNS服务器发出DNS查询并读取结果。我目前正在阅读RFC 1035,并在tcpdump中查看DIG的输出。我注意到在DNS查询的hexdump中,ARCOUNT字段似乎设置为1,带有QDCOUNT。但是,ANCOUNT和NSCOUNT归零。
我知道IP头是20个字节,UDP头是8个字节,因此DNS头从0x266e开始,ID为9838 - 如DIG输出所示。然后,0x120是元组(QR,OPCODE等),QDCOUNT从行0x0020开始,值为0x001。因此,ARCOUNT似乎也是1。为什么DIG会将此字段设置为1?请求中可能包含哪些附加部分?
DIG bbc.co.uk
0x0000: 4500 0042 5164 0000 4011 d19e 0000 0000 E..BQd..@.....Qu
0x0010: 0000 0000 b325 0035 002e 6e3f 266e 0120 .....%.5..n?&n..
0x0020: 0001 0000 0000 0001 0362 6263 0263 6f02 .........bbc.co.
0x0030: 756b 0000 0100 0100 0029 1000 0000 0000 uk.......)......
0x0040: 0000
我用零填充了IP标头中的源地址和目标地址。
答案 0 :(得分:0)
这将是EDNS0的OPT伪RR。当很明显原始DNS标准不够时,为了不必更改任何数据格式,我们选择将新标题字段和补充信息粘贴到附加部分的特殊资源记录中。这几乎可以肯定你所看到的。
有关详细信息,请参阅RFC 6891.