看着RFC 1035我正在尝试确定对于只包含 DNS 标头的数据包的正确响应是什么,其中所有“计数”都为零:
id short X
qdcount short 0
ancount short 0
nscount short 0
arcount short 0
<EOF>
这个数据包应该有任何响应吗?应该被视为错误吗?
答案1
qdcount
任何不等于的DNS 查询都1
将被 DNS 服务器拒绝。
返回的错误很可能是“格式错误”(FORMERR,rcode=1),这很合乎逻辑,因为毫无意义的 DNS 查询必须被视为格式错误。
找到官方资源非常困难。我确实找到了 NSD 服务器 错误报告 在那里进行了测试并注释:“QDCOUNT=0 使其成为 FORMERR”。
对于 BIND 服务器,StackOverflow 帖子 DNS RFC1035 中的 QD 代表什么 关于 QDCOUNT 的说法如下:
请注意,此字段现在无用,因为 BIND 始终拒绝 QDCOUNT != 1。
答案2
可能取决于标头中指定的操作码(有几个 - 查询、通知、更新等)。对于常规查询RFC 1034说:
标准查询指定目标域名 (QNAME)、查询类型 (QTYPE) 和查询类 (QCLASS),并要求匹配的 RR。
我会将单数“目标”等的使用解释为在问题部分始终只有一个记录的查询;其他任何内容都应该返回 FORMERR。
存在变化(例如,过时的 IQUERY 使用在答案部分至少有一条记录但问题部分为空的查询),但我找不到允许所有部分为空的任何操作码。
答案3
也许这是一个“毫无意义的查询”。 (没有实际经验来验证这一点。)
RFC-2671 第 4.5.4 节
响应者的最大有效载荷大小可以随着时间而改变,但可以合理地预期在两个连续事务之间保持不变;例如,一个无意义的查询来发现响应者的最大 UDP 有效载荷大小,紧接着是一个利用这个大小的更新。