1

UDP 包就像一去不复返,你永远不知道它是否被接收。所以不是保证会收到天气包。我了解到大多数 DNS 使用 UDP 包来发送请求。如何处理使用 UDP 请求的 DNS 丢失?

4

2 回答 2

1

如果在一定时间内没有收到响应包,则重新发送请求。Dan Bernstein 建议大多数客户最多会重试四次。

于 2012-05-21T01:23:26.550 回答
1

有两种方法可以确定 UDP 数据报已丢失。两者都不是完全可靠的。

  • 最常见的是超时。您发送消息并等待响应。如果您在一段时间后没有收到响应,则您认为消息或响应已丢失。到时候你可以再试一次,或者放弃。消息或响应也可能需要很长时间才能通过网络,因此您必须考虑重复。请注意,包括 TCP 在内的所有分组交换通信都以这种方式工作。TCP 只是为您隐藏详细信息。

  • 另一种方法是查找告诉您数据包已被丢弃的 ICMP 消息。例如,ICMP_UNREACH_PORTICMP_UNREACH_HOSTICMP_UNREACH_HOST_PROHIB。但是,这些消息不仅很少发送并且本身会丢失,而且有时即使消息确实成功通过,您也可以收到它们。充其量,如果您收到 ICMP 消息,您可以将其视为可能发生的事情的建议。

大多数 DNS 实现都使用短超时,因为重复没什么大不了的。在对一台 DNS 服务器重复几次之后,它会尝试另一台(假设有多个服务器可用)。大多数实现还将缓存有关哪些服务器正在响应和哪些没有响应的信息。

于 2012-05-23T19:23:33.767 回答