当DNS服务器为客户端查找IP地址,并且接收到多个要查询的DNS服务器的列表时,它是如何select的? 同样,当DNS客户端收到一个FQDN的多个IP地址列表时,它是如何select的? 它是特定于实现还是在RFC中涵盖?
parsing查询的DNS服务器可以基于历史响应时间数据(RFC1035第7.2节)来区分其使用列出的服务器的顺序。 也可以通过更接近的子网来优先考虑(我已经在RFC中看到了这一点,但不记得哪个)。 如果没有历史logging或子networking优先级可用,可以随机select,也可以只select第一个。 我已经看到了DNS服务器实现上面的各种组合。
从A / AAAAlogging列表中selectIP地址的客户端程序通常会按照DNS服务器(循环法)返回的顺序尝试地址。 如果客户端无法连接到返回的第一个IP地址,则应该尝试第二个,等等。 例如,所有主stream浏览器都这样做,但是许多其他Internet客户端程序“忘记”了这一步骤,如果无法连接到第一个IP地址,则会失败。
RFC 1794涵盖了您所要求的循环法问题。
就答案而言,大多数DNS客户端将使用列表中的第一个IP地址,一些做子网计算以找出更接近的,其他人select随机,但大多数依赖于DNS服务器发送列表。
这取决于客户端 – 与运行Windows商店的任何人特别相关的事实是,Vista \ Windows Server 2008将使用不同的机制(如果安装了ipv6堆栈)select地址到较早的Windows版本,这将select第一个地址。 在许多情况下,这意味着他们将总是select相同的一个,即他们不会像以前的版本那样“尊重”DNS循环响应。 在这个technet博客文章中有详细的解释。
链接的文章指出,Windows 7和Server 2008 R2再次改变这种默认行为,但我找不到任何支持。
另外值得指出的是,据我所知,这是ipv6的标准兼容行为,但我很乐意发现我错了。