我总是听到系统管理员在谈论进行 DNS 更改时谈论等待 DNS 记录“在互联网上”或“在世界范围内”传播。事实是,我的 DNS 记录不会传播到除托管我的命名空间(主、次、三级)的名称服务器之外的任何其他 DNS 服务器。当我更改 DNS 记录(、、A
等)时,这些更改会立即反映在我的区域中,并且不会传播到任何地方。人们在谈论 DNS 记录传播时真正指的是 TTL 缓存。维基百科上的这篇文章简明扼要地解释了这一点:CNAME
MX
http://en.wikipedia.org/wiki/域名系统
DNS 传播的概念难道不是一个神话吗?那么,为什么称之为“传播”呢?
答案1
神话?有点儿像。
人们经常混淆两个方面。如果您通过域名注册商更改域名,例如更改名称服务器,该更改将被推送到您的 TLD(.com、.ca、.fr 等)的名称服务器。这就是传播发挥作用的地方。在过去的几年里,等待注册商获取您提供的信息可能需要数小时甚至数天,然后将其推送到他们的部署服务器,这些服务器将每天更新 TLD 根服务器两次。多年来,这一过程得到了迅速改善,通常对您的域名所做的更改几乎会立即生效。
另一方面,如果您对 DNS 区域进行更改,例如添加 A 记录或更改 MX,则这应该需要与 TTL 设置一样长的时间才能在所有地方更新。但这实际上不是传播,而是缓存。例如,Microsoft DNS 默认为 1 小时 TTL。
使用缓存后,如果您恰好在更改之前使用该域名,并且 TTL 为 1 小时,则需要 1 小时才能更新。但是,如果您在更改之前没有对域名进行任何测试,则更改将立即生效。(即添加一条您尚未测试的新 A 记录,它将立即生效)。
因此,如今几乎所有更改都会在一小时内生效(或您的 DNS TTL 设置为多少小时)。唯一的例外是,如果 DNS 服务器不遵守 TTL(垃圾邮件发送者通常不遵守),或者您的域名注册商的服务器未正确更新到互联网,并且您进行了注册商级别的更改。不过这种情况并不常见。
答案2
是的——当人们发表此类言论时,他们正在谈论 DNS 服务器缓存的缓存查找超时。
不幸的是,一些 DNS 服务器会无视 TTL 值,并将超过规定 TTL 的记录缓存一段时间。我见过 ISP DNS 服务器将 TTL(分钟)非常低的缓存记录保留长达 24 小时,而且可能有些非常不靠谱的服务器会将这些记录保留更长时间。
答案3
它们会“传播”到世界各地的 DNS 服务器,就像思想从一个头脑传播到另一个头脑一样。当查询进入时,本地 DNS 缓存需要学习信息(如果它尚未缓存,或者如果它已缓存但已过期)。因此,您刚刚推送到服务器的新值会显示在地图上,就像八卦会显示在博客上一样。好吧,不完全一样,但我认为这是一个很好的类比。
答案4
在原始 DNS 规范 (RFC 1034/1035) 中,需要执行两个步骤才能使区域更新在全球范围内可见。除了已经提到的全球缓存解析器的 TTL 到期之外,您首先需要等待 (所有) 辅助名称服务器刷新来自主区域的区域数据。
直到 1996 年指定了 DNS NOTIFY(RFC 1996)之后,才有一种标准的方法可以及时通知所有权威名称服务器有关区域更改的信息。
因此,也许“变更传播”这个原始短语在当时更为合适,因为这是一个两步过程。