答案1
“DNS 传播”本身并不是一个真实现象。相反,它是 DNS 协议中指定的缓存功能的明显效果。说更改在 DNS 服务器之间“传播”是一种方便的谎言,可以说,它比描述 DNS 协议的所有细节更容易向非技术用户解释。不过,这并不是协议的真正工作原理。
递归 DNS 服务器代表客户端进行查询。递归 DNS 服务器通常由 ISP 或 IT 部门运行,供客户端计算机解析 Internet 资源的名称。递归 DNS 服务器会缓存其查询结果以提高效率。无需进行任何额外查询即可回答已缓存信息的查询。结果缓存的持续时间(以秒为单位)为应该基于可配置的值,称为生存时间 (TTL)。此值由查询记录的权威 DNS 服务器指定。
由于 DNS 是一种分布式协议,因此无法对所有问题给出统一的答案。DNS 的行为取决于给定记录的权威 DNS 服务器的配置、代表客户端计算机进行查询的递归 DNS 服务器的配置以及客户端计算机操作系统内置的 DNS 缓存功能。
指定一个足够短的 TTL 值以适应 DNS 记录的日常更改,但又足够长以在缓存中取得“胜利”是一种很好的做法(即,不要太短以致缓存过快过期而无法提供任何效率改进)。采用平衡的 TTL 值策略将使每个人都“获胜”。它减少了给定域的权威 DNS 服务器、根服务器和 TLD 服务器的负载和带宽利用率。它减少了递归 DNS 服务器运营商的上游带宽利用率。它使客户端计算机的查询响应更快。
当 DNS 记录的 TTL 设置较低时,权威 DNS 服务器上的负载和带宽利用率将会增加,因为递归 DNS 服务器无法长时间缓存结果。当记录的 TTL 较高时,对记录的更改不会很快“生效”,因为客户端计算机将继续接收存储在其递归 DNS 服务器上的缓存结果。设置最佳 TTL 归结为利用率与快速更改记录并看到这些更改反映在客户端上的能力之间的平衡。
值得注意的是,一些 ISP 存在滥用行为,会忽略权威 DNS 服务器指定的 TTL 值(用自己的管理权替代,这违反了 RFC)。从技术角度来看,对此无能为力。如果可以找到滥用 DNS 服务器的运营商,向其系统管理员投诉可能会导致他们实施最佳实践(对于任何熟悉 DNS 的网络工程师来说,这可以说是常识)。这种特殊类型的滥用不是技术问题。
如果每个人都“遵守规则”,DNS 记录就会发生变化能“生效”非常快。例如,在更改分配给“A”记录的 IP 地址的情况下,将执行 TTL 值的指数退避,直至进行更改的时间。例如,TTL 可能从 1 天开始,然后减少到 24 小时内的 12 小时,然后减少到 12 小时内的 6 小时,6 小时内的 3 小时等,直到某个合适的小间隔。一旦 TTL 被退避,就可以更改记录并将 TTL 恢复到日常操作所需的值。(没有必要使用指数退避,但是这种策略可以最大限度地减少记录具有低 TTL 的时间并减少权威 DNS 服务器上的负载。)
在创建 DNS 记录后,应监控更改日志,以查找由于旧 DNS 记录而进行的访问尝试。在将“A”记录更改为引用新 IP 地址的示例中,服务器应保留在旧 IP 地址上,以处理仍使用旧“A”记录的客户端计算机导致的访问尝试。一旦基于旧记录的访问尝试达到可接受的低水平,就可以放弃使用旧 IP 地址。如果与旧记录相关的请求没有迅速减少,则可能是(如上所述)递归 DNS 服务器忽略了权威 TTL。但是,知道访问尝试的源 IP 地址并不能直接提供有关负责提供旧记录的递归 DNS 服务器的信息。如果错误访问尝试的 IP 地址都与单个 ISP 相关,则可能可以找到有问题的 DNS 服务器并联系其运营商。
就我个人而言,我见过更改立即生效,在几个小时内生效,而对于某个脑子有问题的 ISP,某些更改甚至会在几天后生效。对 TTL 进行退后处理并注意流程的工作原理将增加更改的成功率,但您永远无法确定某些好心的白痴可能会用他们的递归 DNS 服务器做什么。