我正在尝试深入了解 Windows 客户端如何与 DNS 配合使用。例如,假设我为网络适配器配置了主 DNS 服务器和辅助 DNS 服务器。
如果主 DNS 服务器发生故障,需要多长时间才能进行故障转移并开始使用辅助 DNS 服务器?
一旦主 DNS 服务器恢复在线,它需要做什么才能开始使用主 DNS 服务器?这最终会自动发生吗?
答案1
如果对主 DNS 服务器的查询结果类似于主机无法访问,则客户端解析器将自动尝试对下一个 DNS 服务器执行相同的查询,依此类推,直到成功联系到 DNS 服务器或尝试的服务器用尽。因此,从本质上讲,故障转移到辅助服务器所需的时间与与第一个服务器的连接超时所需的时间一样长。
我相信 Windows 解析器将继续使用任何服务器应答 15 分钟(或直到通过重新启动或某种方式重置 TCP/IP 堆栈),然后将从列表顶部重新开始。
请注意,此故障转移仅在服务器无法访问时发生,而不是在查询的记录无法解析时发生。如果可以访问主服务器但响应“无此主机”答案,则不会发生故障转移。
这是一篇知识库文章其中提到了 XP 的 15 分钟的事情。
答案2
这里有一系列关于 Windows XP DNS 客户端低级行为的流程图:http://technet.microsoft.com/en-us/library/bb457118.aspx
我没有找到针对 Windows Vista 和较新解析器的相同级别的文档,尽管我希望它在资源工具包中(因为它们会在 Windows 的每个新版本中得到修订)。
(我稍微简化了这一点...如果你想知道它实际上是如何工作的,你真的应该阅读这篇文章,因为它的逻辑有点复杂。)
XP DNS 客户端首先通过主网络适配器上指定的主 DNS 服务器尝试每个名称解析请求。如果超时(一秒钟内),它会使用每个适配器上指定的主 DNS 服务器尝试对计算机中的每个适配器进行相同的查询,一次全部尝试,等待每个响应 2 秒钟。如果没有响应,它会向所有适配器上指定的所有 DNS 服务器发送请求并等待 4 秒钟。它会再次执行此操作,等待 8 秒钟,然后如果仍未收到响应则返回超时(并且将在接下来的 30 秒内继续返回超时,而不会发出任何新查询)。
我怀疑 Vista 和较新的操作系统中的解析器没有发生很大变化,但可能存在一些细微的差别。
有趣的是,资源工具包没有提及 Squillman 链接的 KB 文章中描述的行为。我敢打赌,这是资源工具包的疏忽。