DNS请求头中设置的ARCOUNT

DNS请求头中设置的ARCOUNT,dns,packet-capture,Dns,Packet Capture,我正在用C编写一个DNS客户端,它可以向递归DNS服务器发出DNS查询并读取结果。我目前正在阅读RFC1035并查看tcpdump中的DIG的输出。我注意到,在DNS查询的hextump中,ARCOUNT字段似乎设置为1,带有QDCOUNT。但是,ANCOUNT和NSCOUNT已归零 我知道IP报头是20字节,UDP报头是8字节,因此DNS报头从0x266e开始,ID为9838-如DIG的输出所示。然后,0x120是元组(QR、操作码等),QDCOUNT从0x0020行开始,值为0x001。因此

我正在用C编写一个DNS客户端,它可以向递归DNS服务器发出DNS查询并读取结果。我目前正在阅读RFC1035并查看tcpdump中的DIG的输出。我注意到,在DNS查询的hextump中,ARCOUNT字段似乎设置为1,带有QDCOUNT。但是,ANCOUNT和NSCOUNT已归零

我知道IP报头是20字节,UDP报头是8字节,因此DNS报头从0x266e开始,ID为9838-如DIG的输出所示。然后,0x120是元组(QR、操作码等),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头中用零填写了源地址和目标地址。

这将是EDNS0的OPT伪RR。当很明显原来的DNS标准还不够时,为了不改变任何数据格式,我们选择在附加部分的特殊资源记录中粘贴新的标题字段和补充信息。这几乎可以肯定是你所看到的

有关详细信息,请参见RFC 6891