仅具有标头(没有问题或资源)的 DNS 数据包有效吗?

仅具有标头(没有问题或资源)的 DNS 数据包有效吗?

看着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 有效载荷大小,紧接着是一个利用这个大小的更新。

相关内容