我刚刚意识到我对 DNS 缓存的理解至少有一点缺陷,我正在寻求纠正我的理解。
注册域名时,我知道它的名称服务器已添加到根名称服务器中。我还了解到我的区域文件包含带有 TTL 的 SOA 和 NS 记录。
假设我更新了 example.com 的名称服务器(并且不要从回答中删除旧的名称服务器),那么在忘记旧的名称服务器之前多长时间 - 即 DNS 使用哪些设置来缓存答案?[我可以想象那是 ns 记录 TTL,但我不确定这是正确的]。什么 RFC 的文档预期行为?
相关地,从递归服务器的角度来看,SOA 记录是用于任何事情,还是纯粹用于处理区域传输?
这是一个普遍的误解。根域名服务器只知道“顶级域”(TLD)域名服务器。您的
NS
记录已添加到您的 TLD的注册表中。注册机构反过来将这些NS
记录发布到您的 TLD 的“TLD 名称服务器”。如果您有权访问命令行
dig
实用程序,则可以通过运行来观察完整的委派路径dig +trace example.com NS
。.
代表根域名服务器,com.
是“dot com”TLD 的注册管理区域。是的。
NS
您需要注意两组记录。第一组在您的权威区域。另一组在由 TLD 名称服务器服务的委托中。(参考dig +trace example.com
前面例子的输出)更改名称服务器 IP 时,数据需要继续存在于旧服务器上,直到这两个 TTL 集中较大的一个过期。TLD 名称服务器通常具有以天为单位的 TTL。
如果这令人困惑,请这样想:您无法控制 Internet 上的服务器最近看到的这两个 TTL 中的哪一个。您也无法控制 DNS 服务器是否选择偏好一组
NS
记录而不是另一组记录。你唯一能做的就是确保你已经等待了两个间隔中较长的一个。记录中定义的数字间隔
SOA
主要用于主服务器和辅助服务器之间的通信。最后一个字段 SOA.MINIMUM 是特殊的,由递归 DNS 服务器在计算允许缓存不存在的 DNS 记录多长时间时使用。(公式为min(SOA TTL,SOA.MINIMUM)
,参见RFC 2308)