当我在 .NET 服务器上查询服务器时,答案总是按照相同的顺序:
dig ns google.net @F.GTLD-SERVERS.net +short
ns1.google.com.
ns2.google.com.
ns3.google.com.
ns4.google.com.
如果我不使用.net 服务器答案将会轮换:
dig ns google.net +short
ns4.google.com.
ns1.google.com.
ns2.google.com.
ns3.google.com.
dig ns google.net +short
ns2.google.com.
ns1.google.com.
ns4.google.com.
ns3.google.com.
com. servers 似乎像 net. servers 一样工作(无旋转),但 org. servers 和我尝试过的所有其他服务器似乎都会旋转答案。
为什么 net. 和 com. 服务器不轮换它们的答案?
答案1
简短的回答可能是“他们为什么要这样做?”或“其他人为什么这样做?”,但简短的回答有什么乐趣呢?
它主要取决于服务器上运行的软件配置,BIND 有一个名为的配置指令rrset-order
例如,如果你有:
rrset-order {order fixed;};
BIND 将始终按照区域文件中的顺序返回资源记录。
和 :
rrset-order {order random;};
记录将以随机顺序返回。
随机性的问题在于它并不存在于计算机中。操作系统花费大量精力通过收集“随机”事件(如中断、网络流量、键盘或鼠标事件等)来创建伪随机性。
但是调用的次数越多random(3)
,它给出的真正随机值就越少,并且其结果就越可预测。
在我们的案例中,DNS 查询结果的随机性,com. 和 net. 的服务器永远不会(好吧,它们可以,但您不想弄乱粘合剂)用于返回 www.google.com 的结果,这是 google.com 的名称服务器业务,因此,始终以相同的顺序返回 google.com 的名称服务器并没有什么坏处,一旦您的递归名称服务器获得它们,它就会按照循环顺序使用它们进行查询。