是否与DNS规范不一致?

时间:2014-10-23 15:27:21

标签: dns

我对 DNS Specification 中的某些内容感到有些困惑。

所以,我认为我很了解这个规范,但我对单个DNS响应数据报包含一个SINGLE消息头这一事实感到困惑,但显然可以解决多个问题。

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

但问题是DNS spec允许在一个数据报中发送多个问题(我的意思是QDCOUNT字段还有什么用途?)我从来没有真正看到DNS客户端询问一次不止一个问题,但显然是允许的。

所以...说客户问两个问题 - 这样QDCOUNT设置为2.然后DNS客户端究竟知道哪些答案涉及哪个问题? (可能有任意数量的答案。)或者就此而言,DNS客户端如何知道标题中的错误代码所指的哪些问题?

示例:

假设DNS客户端在单个查询中要求提供 A (IPv4)记录以及 AAAA (IPv6)记录。我们说服务器支持A条记录 - 但实现AAAA条记录。

服务器应该做什么?返回仅包含A条记录答案的回复 - 或者返回包含任何答案的回复并设置"Not Implemented"错误代码标记?

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

2 个答案:

答案 0 :(得分:1)

你所描述的问题没有很好地表征为不一致 - 规范不会与自身发生冲突 - 相反,它更像是一个漏洞。我快速浏览了一下,并没有找到服务器如何响应包含多个问题的请求的任何规范,其中一个或多个问题需要一个错误响应。

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

我不确定任何特定的名称服务器如何处理这种情况,但是我自己实现了一个,那么我强烈考虑拒绝所有这些带有错误代码5的多问题消息(由于服务器策略请求被拒绝)。

答案 1 :(得分:1)

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

如果您设法在野外找到其他服务器,我非常希望听到它。

相关问题