“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 服务器的直接信息。
就我个人而言,我看到更改会在几个小时内立即“生效”,在某些情况下,某些大脑受损的 ISP 会在几天后生效。对 TTL 进行退避并注意流程的工作方式将增加您对成功的更改,但您永远无法确定某些善意的白痴可能会对他们的递归 DNS 服务器做什么。
“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 服务器的直接信息。
就我个人而言,我看到更改会在几个小时内立即“生效”,在某些情况下,某些大脑受损的 ISP 会在几天后生效。对 TTL 进行退避并注意流程的工作方式将增加您对成功的更改,但您永远无法确定某些善意的白痴可能会对他们的递归 DNS 服务器做什么。