一个域名可以有大量的域名注册商注册的域名服务器。 名称服务器是随机挑选的,不像预期的主要第一,次要第二等等。
知道这是否意味着当一个名称服务器closures时,有可能有50%的机会询问离线名称服务器将永远不会到达您的网站? 而另外的50%是能够浏览到您的网站就好了,所以影响服务器的可用性?
最后,为什么客户端在默认情况下不会默认在列表中的下一个名称服务器?
这同样适用于IPv4和IPv6。 如果其中一个名称服务器只支持IPv6,并且没有IPv4和没有IPv6连接的用户开始质疑特定的名称服务器,那么我认为该站点将无法访问。
另外,我正在详细讨论select授权服务器的方式,以及如果由于客户端和服务器之间的宕机或ipv4-ipv6不兼容问题而导致挑选的授权服务器不可用,那么处理失败。
最后,为什么客户端在默认情况下不会默认在列表中的下一个名称服务器?
这正是recursion服务器与权威服务器进行交stream时所要做的。 如果你有兴趣, RFC 1035§7.2描述了整个过程,但是下面的摘录是最直接相关的:
关键algorithm使用请求的状态信息来select要查询的下一个名称服务器地址,并计算一个超时,如果响应没有到达,将导致下一个动作。 下一个操作通常是传输到其他服务器,但可能是客户端的临时错误。
[剪断]
- 如果parsing器得到服务器错误或来自名称服务器的其他奇怪的响应,则应该将其从SLIST中移除,并且可能希望安排立即传输到下一候选服务器地址。
在权威服务器的select中还有其他一些因素,比如根据之前的通信历史观察到的响应时间。 如果你有兴趣,它在RFC中。
BCP 16涵盖了确保您不受域名服务器不可达影响的关键。 具体来说, 第3.1节指出:
辅助服务器必须放置在互联网上的拓扑和地理位置分散的位置,以最大限度地减less所有这些服务器发生单一故障的可能性。
也就是说,二级服务器应该位于地理位置较远的地方,因此,像电力损失等事件不太可能同时中断所有这些事件。 他们也应该通过相当多样的path连接到networking。 这意味着任何一个链路或networking某个部分(例如服务提供者)内的路由失败都不会使所有的服务器都无法访问。
这是为了说明域的弹性受到networking上单点故障或物理站点严重影响的事实。 理想的状态是拥有多个权威的域名服务器,这些域名服务器不受任何其他networking或物理状态变化的影响。
我想说的是对这个问题的整体情绪的回答是“不”。
首先,客户端机器传统上只有一个存根parsing器,盲目地将所有查询(“recursion所需”设置)发送到某个configuration的名称服务器地址( resolv.conf )。
实际上,下一步会发生什么情况,当名称服务器处理recursion请求时,会进行迭代查询,直到达到权限,您的问题才适用。
虽然在某种程度上具体实施的行为,但绝对是这样的,它有望通过权威的域名服务器自行工作,直到find一个响应的。
这里的警告是,会有一些总体超时,所以有可能无法及时完成。
也就是说,查看哪些服务器正在工作而哪些服务器不工作也是很常见的事情,增加了连续查询及时成功的机会,当然,查询已经caching的数据甚至不需要与权威服务器进行通信。
总而言之,不,如果有两个名称服务器,一个服务器出现故障,您不应该期望有50%的用户可见性错误。 更有可能在完全冷藏的情况下进行第一次查找会稍微慢一点。
说有问题的离线名字服务器的访问者有50%的机会永远不会到达您的网站是不准确的。 从Linux resolver man resolv.conf手册中,在描述nameserver选项的部分下,可以阅读:
如果有多个服务器,则parsing器库按照列出的顺序查询它们。 如果没有名称服务器条目,则默认使用本地计算机上的名称服务器。 所使用的algorithm是尝试一个名称服务器,如果查询超时,请尝试下一个,直到超出名称服务器,然后重复尝试所有名称服务器,直到最大数量的重试。
所以,他们会按照configuration文件中指定的顺序尝试。 说这并不意味着所有的解决scheme应该以同样的方式行事。