辅助 DNS 服务器的一般想法是,如果主 DNS 服务器没有回复(例如,它离线、无法访问、重新启动等),系统可以回退到辅助 DNS,因此不会在此期间无法解析 DNS 名称。不回复的意思是“根本不回复”,当primary说名字不详时,它不会问secondary。回答姓名未知是回复。
这里的问题是 DNS 使用 UDP,而 UDP 是无连接的。因此,如果 DNS 服务器处于脱机状态,系统将不会因为没有收到来自它的回复而注意到其他服务器。由于 UDP 数据包可能会丢失并且往返时间 (RTT) 未知,因此它必须重新发送请求几次,每次等待几秒钟,然后才能最终得出该服务器的结论死了。这意味着如果第一台 DNS 服务器死机,解析 DNS 名称可能需要整整一分钟或更长时间。
由于这似乎是不可接受的,不同的操作系统开发了不同的策略来更好地处理这个问题。由于两个 DNS 服务器都应该为同一个域提供相同的结果(如果不是,您的设置实际上是有缺陷的,因为辅助服务器应该是主服务器的一对一替换),哪个是无关紧要的正在使用。一些系统可能会向主系统发送请求,但如果在几秒钟内没有回复,它们不会重新发送,而是先尝试辅助系统(然后重新发送到主系统,依此类推)。有些人也可能同时查询两者,使更快的一方获胜,然后继续使用该一方一段时间(直到他们开始另一场比赛,看看它是否仍然是更快的一方)。有些人也可能更喜欢主服务器,但如果当前有超过一定数量的查询在主服务器上挂起,则进行某种负载平衡并切换到辅助服务器。有些只是在它们之间交替作为穷人的负载平衡。这一切实际上都是允许的。
但是,在您的情况下,恐怕您的主服务器有问题,因为默认情况下,macOS 只会使用主服务器。如果它不断地回退到次要的,它可能会认为主要的太慢了。每次发生这种情况时,辅助服务器都会成为主服务器,请参阅这篇较早的知识库文章。这篇 cnet 文章解释了如何禁用它,但我不确定这在当前系统中是否仍然可行。我无法找到任何关于此的参考,但 IIRC 从我的脑海深处,Apple 曾经在 WWDC 上提到他们现在在 DNS 查询方面更加积极,甚至可能尝试以最快的速度一次联系多个 DNS 服务器在某些情况下获胜,但我可能错了(也许这只是 iOS 左右)。