当我读《DNS 和 BIND》 在权威域名服务器之间进行选择:
我们的读者群中,一些门萨会员可能会想知道,接收递归查询的名称服务器如何在该区域的权威名称服务器中进行选择。例如,我们说,目前互联网上有 13 个根名称服务器。名称服务器是否只是查询引荐中第一个出现的那个?它是随机选择的吗?
BIND 域名服务器使用一种称为往返时间 (RTT) 的指标来选择同一区域的权威域名服务器。往返时间是衡量远程域名服务器响应查询所需时间的指标。每次 BIND 域名服务器向远程域名服务器发送查询时,它都会启动内部秒表。当它收到响应时,它会停止秒表并记录远程域名服务器响应所需的时间。当域名服务器必须选择一组权威域名服务器中的哪一个进行查询时,它只需选择往返时间最短的那个。
在 BIND 域名服务器查询域名服务器之前,它会为其提供一个低于任何实际值的随机往返时间值。这可确保 BIND 域名服务器在偏袒任何域名服务器之前,以随机顺序查询给定区域的所有权威域名服务器。
总体而言,这种简单而优雅的算法允许 BIND 名称服务器快速“锁定”到最近的名称服务器,而无需带外机制的开销来衡量性能。
这一段我不明白,
在 BIND 域名服务器查询域名服务器之前,它会为其提供一个低于任何实际值的随机往返时间值。这可确保 BIND 域名服务器在偏袒任何域名服务器之前,以随机顺序查询给定区域的所有权威域名服务器。
为什么那里说gives it a random roundtrip time value lower than any real-world value
名称服务器会queries all nameservers authoritative for a given zone in a random order before playing favorites
?
我的猜测是,如果达到给定的低 RTT 时间,它将向下一个发送 DNS 查询,毕竟,它会获取所有名称服务器的 RTT 进行保存,对吗?
答案1
我认为 BIND 中名称服务器选择算法的具体细节不一定那么重要;它是一段完全特定于实现的代码,可能会随着时间的推移而改变。
关于这一点,本书第 5 版DNS 和 BIND您提到的这个时间已经是 14 年前的事了,所以它所涉及到的细节很可能并不反映当前的现实。
然而,无论具体如何实现,总体想法都是相关的(并且这个概念在各个方面也更相关):
跟踪哪些名称服务器有响应并锁定这些名称服务器是有益的,同时不要浪费时间尝试使用那些没有响应的名称服务器(而是不时重试它们)。
话虽如此,我认为书中描述的实现方式如下:
- 对于遇到的任何新名称服务器(来自 -set
NS
),分配一个接近于零的随机 RTT 值。 - 查询区域时,
NS
按 RTT 对集合进行排序。取第一个。收到响应后,更新 RTT 值。
这样,它将自行处理所有名称服务器并在不断查询时分配 RTT 值。
我相信还有一个衰减函数,可以随着时间的推移降低 RTT,以确保所有名称服务器(即使是某些时候“不好”的名称服务器)都能不时地用来找到当前可用的名称服务器。