解析查询的 DNS 服务器可能会根据历史响应时间数据(RFC1035 第 7.2 节)优先考虑使用列出的服务器的顺序。它也可以通过更接近的子网来确定优先级(我在 RFC 中看到了这一点,但不记得是哪个)。如果没有可用的历史或子网优先级,它可以随机选择,或者直接选择第一个。我已经看到 DNS 服务器实现执行上述各种组合。
从(A/AAAA 记录)列表中选择 IP 地址的客户端程序通常会按照 DNS 服务器返回的顺序(循环)尝试这些地址。如果客户端无法连接到返回的第一个 IP 地址,它应该尝试第二个,依此类推。例如,所有主流浏览器都会这样做,但是许多其他 Internet 客户端程序“忘记”了这一步,如果它们无法连接到第一个 IP 地址,则会失败。
解析查询的 DNS 服务器可能会根据历史响应时间数据(RFC1035 第 7.2 节)优先考虑使用列出的服务器的顺序。它也可以通过更接近的子网来确定优先级(我在 RFC 中看到了这一点,但不记得是哪个)。如果没有可用的历史或子网优先级,它可以随机选择,或者直接选择第一个。我已经看到 DNS 服务器实现执行上述各种组合。
从(A/AAAA 记录)列表中选择 IP 地址的客户端程序通常会按照 DNS 服务器返回的顺序(循环)尝试这些地址。如果客户端无法连接到返回的第一个 IP 地址,它应该尝试第二个,依此类推。例如,所有主流浏览器都会这样做,但是许多其他 Internet 客户端程序“忘记”了这一步,如果它们无法连接到第一个 IP 地址,则会失败。
RFC 1794涵盖了您提出的循环问题。
就答案而言,大多数 DNS 客户端将使用列表中的第一个 IP 地址,一些进行子网计算以确定哪个更接近,另一些随机选择,但大多数依赖 DNS 服务器发送列表。
这取决于客户端 - 对于任何运行 Windows 商店的人来说,特别相关的是 Vista\Windows Server 2008 将使用与选择第一个地址的早期 Windows 版本不同的机制(如果安装了 ipv6 堆栈)来选择地址。 . 在许多情况下,这意味着他们将始终选择同一个,即他们不会以与早期版本相同的方式“尊重”DNS 循环响应。在这篇 technet 博客文章中有对此的详细解释。
链接的文章表明 Windows 7 和 Server 2008 R2 再次更改了此默认行为,但我找不到任何支持它的东西。
另外值得指出的是,据我所知,这是 ipv6 的标准兼容行为,尽管我很高兴发现我错了。