如果 DNS 回复位于下一次尝试的中间,Linux 是否会接受配置的超时之后收到的 DNS 回复?

如果 DNS 回复位于下一次尝试的中间,Linux 是否会接受配置的超时之后收到的 DNS 回复?

/etc/resolv.conf配置为:

options timeout:1 attempts:5 rotate
nameserver A
nameserver B

两个配置的名称服务器均有 3 秒的延迟。发生以下消息交换:

  • 00:00 - 查询 #1 发送给 A
  • 00:01 - 查询 #2 发送给 B
  • 00:02 - 查询 #3 发送给 A
  • 00:03 - 查询 #4 发送给 B
  • 00:03 - A 回复 #1

Linux 解析器是否会接受对查询#1 的回复,因为它仍在解析地址,或者是否会丢弃超出初始 1 秒超时的所有回复?

不幸的是人 resolf.conf并没有真正澄清这一点。

答案1

DNS 查询也基于 RTT(往返时间),就像 ICMP 一样。DNS 查询的 RTT 是之间的延迟DNS 查询发布 答案是已收到,这意味着回复(在您的例子中 - 从 A 收到的对 #1 的回复)必须在配置的最大超时之前到达,才能被视为有效。它与 ICMP 的工作方式非常相似。

从技术上讲,RTT 是发送信号所需的时间长度加上接收该信号确认所需的时间长度。

答案2

我已经在实验室中测试了这种行为。如果在 Linux 解析器仍在解析域名时收到成功回复,即使回复延迟超过 1 秒,它也会接受成功回复。在我的实验室中,我将 DNS 服务器延迟设置为 3 秒,并且设置了 {{options timeout:1 attempts:5}},客户端仍然解析了域名。数据包捕获证明,在客户端向两个配置的 DNS 服务器发出多个查询后,才收到回复。

将默认值或 {{options timeout:5 attempts:1}} 更改为 {{options timeout:5 attempts:1}} 从而减少 DNS 服务器故障转移延迟,同时仍允许慢速 DNS 服务器在相同时间内提供答案。

相关内容