DNS超时应该如何工作?

我最近有一个问题,请求我的服务器的IP地址(与托pipeDNS提供商)的远程服务正在响应:

DNS problem: SERVFAIL looking up A for mysql.xavamedia.nl 

(更新:这里提到的远程服务是Let's Encrypt;我提出了一个针对他们的问题跟踪器的错误 ,这使我走上了这条道路。)

在我的本地networking进行testing时,我发现我有时会从托pipeDNS服务器获得一个空的DNS响应。 显然这是间歇性的,因为只有当DNSlogging不在caching中时才会发生,而且当DNS服务器真的很忙时,这只是一个问题。

下面是一个空的响应消息的Wireshark描述:

Wireshark的空响应截图

当然,由于大多数DNS查询和响应是通过UDP发送的,本地parsing器只是等待响应,然后放弃。 我现在想知道的是,DNS响应时间有没有指导原则? 我的DNS主机有点耸耸肩,说我的本地parsing器发送空的响应太快了。 我从来没有遇到过这个问题,但是我对失败模式感到惊讶 – 一个没有错误代码的空的DNS响应。

有人知道一些指导原则应该如何工作,什么时候/如何certificate我的DNS托pipe是做错了什么?

您正在查看的空白回复是一个称为NODATA的合成状态。 NODATANXDOMAIN都表示该名称不存在,但NXDOMAIN也适用于指定logging的所有名称。 NODATAbuild议,不pipe这个名字是与一个未被请求的types的logging相关联,还是有其他logging在你正在请求的下面。 (即example.test.xavamedia.nl.

NODATANXDOMAIN在这种情况下是相同的:所请求的名称和types的logging不存在。 一个权威的域名服务器到达了请求的域名, 回复说,这个名字和types的logging不存在。 这不是通信错误。 权威的服务器说,它没有数据。 你所说的服务器很可能已经处理了这个请求,在过去的四个小时内,这个请求被否定了。 (14400秒是由xavamedia.nl.的SOAlogging定义的否定caching时间间隔)

在这种情况下, NXDOMAINNODATA 本身都不会导致超时,但是您的parsing器库可能会从这里继续添加DNSsearch后缀,这可能会触发search域的授权DNS服务器的超时。

应该注意的是,这些都不能解释为什么在查找mysql.xavamedia.nl.时遇到SERVFAIL响应mysql.xavamedia.nl. 。 这意味着recursion服务器从授权服务器获得答案的问题。 无论是授权服务器SERVFAIL回答,recursion服务器无法到达任何权威服务器,或recursion服务器确定返回的数据是无效的。 这些都不能certificate你提供的信息。

除了在RFC 1123的“6.1.3.3有效的资源使用”一节中定义的指南之外,我不知道任何具体的指导原则。http://tools.ietf.org/rfcmarkup?rfc=1123#page-77

有超时值“不less于5秒”被指定。 RFC还规定临时失败应该被caching。 这是为了防止客户端违反RFC第2.2节中的过多的DNS请求。 该部分指出,如果发生软故障,客户端应该在重试之间等待“合理”的时间。

还有一个关于这个主题的Stackoverflow线程,但是除了一些真实世界的观察外,它不包含更多的信息。 https://stackoverflow.com/questions/3036054/ideal-timeout-period-for-dns-lookup

我只能说这个话题。 如果别人有更多的补充,我也会感兴趣。