是否与DNS规范不一致?

是否与DNS规范不一致?,dns,Dns,我对中的某些内容有点困惑 因此,我认为我非常理解规范,但我对一个DNS响应数据报包含一个消息头这一事实感到困惑,但显然它可以回答多个问题 因此,例如,DNS消息头包含大量指示响应信息的信息和标志。例如,DNS消息头包含一个响应代码标志,该标志指示各种错误代码,例如“未实现”错误代码,这意味着提问者要求提供服务器不支持的记录类型 但问题是,允许在一个数据报中发送多个问题(我的意思是,QDCOUNT字段还有什么用途?)我从未见过DNS客户端一次提出多个问题,但显然是允许的 所以。。。假设一个客户问了

我对中的某些内容有点困惑

因此,我认为我非常理解规范,但我对一个DNS响应数据报包含一个消息头这一事实感到困惑,但显然它可以回答多个问题

因此,例如,DNS消息头包含大量指示响应信息的信息和标志。例如,DNS消息头包含一个响应代码标志,该标志指示各种错误代码,例如“未实现”错误代码,这意味着提问者要求提供服务器不支持的记录类型

但问题是,允许在一个数据报中发送多个问题(我的意思是,
QDCOUNT
字段还有什么用途?)我从未见过DNS客户端一次提出多个问题,但显然是允许的

所以。。。假设一个客户问了两个问题-因此
QDCOUNT
设置为2。那么,DNS客户端如何确切地知道哪些答案指的是哪个问题?(可能有任意数量的答案。)或者就此而言,DNS客户端如何知道标题中的错误代码所指的问题

示例:

假设DNS客户端在单个查询中请求
一条
(IPv4)记录和一条
AAAA
(IPv6)记录。假设服务器支持
A
记录,但不实现
AAAA
记录

服务器应该做什么?返回只包含
a
记录答案的响应-或返回不包含任何答案并设置错误代码标志的响应


这在规范中似乎并不清楚。总体而言,问题似乎是,即使规范允许在单个查询数据报中包含多个问题,但似乎没有任何方法将特定问题映射到响应数据报中的特定答案。这是规格的问题吗?还是我误解了什么?也许这就是为什么在实践中,没有一个实际的DNS解析器似乎会在每个数据报上提交一个以上的问题。

您描述的问题并没有很好地描述为不一致性——规范本身并不冲突——相反,它更像是一个漏洞。我快速查看了一下,没有找到任何关于服务器应该如何响应包含多个问题的请求的规范,其中一个或多个问题要求错误响应

我可以想到几种可能的服务器行为,这些行为不一定由客户机区分,因此,客户机的最佳方法可能是避免这种情况,在同一条消息中不提出多个问题。RFC断言这是正常情况,我认为这是正确的,即使客户需要与同一名称关联的多种信息


我不知道特定的名字服务器是如何处理这种情况的,但是如果我自己执行一个,那么我会强烈考虑用错误代码5拒绝所有这样多问题的消息(因为服务器策略拒绝请求)。

< P>这是早期DNS规范中的一个缺陷,是的。实际上,如果您尝试向当前使用的任何权威名称服务器软件发送带有多个问题的请求,它将忽略除第一个问题以外的所有问题,或者给您一个错误响应(根据我的经验,通常是SERVFAIL或FORMERR)

如果你能在野外找到一台做其他事情的服务器,我很想听听