我对 DNS 核心功能的理解是在域名(例如blah-whatever.com
)和 IP 地址(例如100.2.3.4)。
此外,我对 Internet DNS 服务器工作原理的理解是,当域/IP 映射记录发生更改时(例如,更改blah-whatever.com
为现在指向105.2.3.4等),此更改需要传播到全球所有 DNS 服务器,然后更改才可视为“完成”。此传播时间有时可能长达 24 小时。
所以首先,如果我到目前为止所说的任何内容有误导性或不正确,请首先纠正我!
假设我或多或少是正确的,我不明白像 CloudFlare 或 DynamicDNS 这样的公司如何提供“即时更新”类型的服务,让你通过他们更改 DNS 记录,并且 -繁荣- 更改立即生效。
我知道有一种叫做“TTL”(生存时间,我猜是?!?)的东西在这种即时翻转功能中发挥着作用,但由于我对这种功能一开始就很模糊,所以很难理解这个 TTL 是什么或它有什么用途。
因此我想问:动态 DNS 及其竞争对手有什么特点,可以让他们立即更改 DNS 映射(而不必像其他人一样花 24 小时来传播 DNS 更改),TTL 如何适应这一过程?提前致谢。
答案1
我之前的回答包含错误信息,因为我对 DNS 更改如何传播有一些误解。所以这是第二次尝试。有关详细解释,我鼓励您阅读亚历克斯回答。
据我了解,DNS更改传播的速度涉及两个因素:
- 区域在对区域具有权威性的 DNS 服务器之间进行区域传输。
- 该区域中单个记录的 TTL 设置。
区域传输
鉴于您需要两个不同的名称服务器来管理一个区域,您希望这些服务器能够快速获得该区域的最新版本。
这可以通过以固定间隔拉取区域的最新版本来实现,或者等待通知来自授权的名称服务器。
鉴于该机制完全由运行名称服务器的人员控制,因此该领域的任何延迟都可以完全控制。
生存时间
这生存时间是针对区域中每个资源记录指定的超时时间。此值定义非授权 DNS 提供商应缓存该记录的时间。
请记住,此值仅在以下情况下才会发挥作用:现存的记录已更改。新记录尚无法缓存。
鉴于 TTL 也完全受区域控制者的控制,因此延迟也可以完全控制。
答案2
你有一些误解,所以我会尝试解释整个过程。(因为我参与运营过公共动态 DNS 服务,所以我对细节很在行)。
假设您的域名是示例.com,假设 example.com 域名由某个动态 DNS 公司托管,我们称之为lightfastdns.net(虚构名称)。您的域名包含 DNS 记录 -somehost.example.com,目前指向1.1.1.1。
当你更改 DNS 记录时,此更改首先提交给由 lightfastdns.net 运营的某个中间服务器,例如更新.lightfastdns.net。这几乎是瞬间发生的(几分之一秒内)。您可以通过 Web 界面或动态更新客户端或通过某些 API 提交更新。这无关紧要,无论如何,此更新都会到达处理 DNS 更新的某个服务器。
该更新服务器会推送你更新的记录(比如说,1.2.3.4) 到 ”掌握“您的域的 DNS 服务器。此 DNS 服务器也由lightfastdns.net。更新速度有多快:取决于 DNS 提供商如何设计其软件。(可以是即时更新,也可以是每 24 小时更新一次。例如,gandi.net 每小时推送一次 DNS 更新。)当然,我们的lightfastdns.net会立即执行。
这掌握DNS 服务器将推送更新至奴隶DNS 服务器示例.com域名。此服务器也由同一lightfastdns.net公司。这发生得有多快:借助现代软件掌握将立即发送 NOTIFY 消息到奴隶,它们将立即从主服务器获取更新的记录。在旧软件中,我们在 SOA 记录中有 REFRESH 和 RETRY 值,但今天它很少相关。当然,我们的lightfastdns.net实现 NOTIFY 并且更新立即传播。
现在,您域名的所有“权威”服务器都收到了更新的记录(1.2.3.4)。 为了lightfastdns.net大约花了两秒钟。
现在,我们将搬到伊万在俄罗斯的家,伊万想开一家“somehost.example.com“。如果他之前从未打开过,他的浏览器就不知道该地址,因此浏览器将问他的操作系统。但是,如果他最近访问过该网站,该地址可能仍存储在浏览器中,他将使用旧的(过时的)地址!多长时间? - 取决于浏览器,例如,Google Chrome 仅存储 DNS 记录最多 60 秒。我们有最多 60 秒的延迟. 鉴于这一事实,我认为 DNS 更改并没有传播尚未使用此浏览器。
无论如何,60 秒后或立即,浏览器最终会要求操作系统获取地址。操作系统可能已经知道(旧的、过时的)答案,并返回它,在这种情况下,我会说新记录没有传播尚未到 Ivan 的操作系统。操作系统将存储旧值多长时间 - 现代操作系统由生存时间范围。生存时间DNS 中的缓存定义了记录可以在缓存中存储多长时间。我们的lightfastdns.net允许使用相当低的 TTL - 30 秒,所以我们得到了一个新的延迟,总体而言,最多 30 秒 -90 秒迄今为止。
如果操作系统不知道答案,或者它所知道的答案现在已经过期,操作系统将询问 DNS 解析器(Ivan 的 ISP 为他分配了一个 DNS 解析器莫斯科电信)。 此处,旧记录可能被缓存最多 TTL 秒,或者莫斯科电信可能不知道地址。我们又有 30 秒的时间,因为 莫斯科电信缓存 DNS 的时间不会超过 TTL 值。我们有120 秒延迟。这就是所谓的新 DNS 记录尚未传播到莫斯科电信DNS 服务器。
如果 ISP 的 DNS 服务器不知道答案,或者它所知道的答案由于 TTL 已过期而已经过时 -莫斯科电信会问其中一个权威性DNS 服务器例子.net(你还记得它们吗?)。它们在大约 118 秒前得到了更改,并且它们将返回新的答案,该答案将立即通过链发送到 DNS 解析器、操作系统和 Ivan 的浏览器。
因此,传播记录需要 2 到 120 秒,具体取决于各种缓存的状态。TTL 越长,延迟可能越长。
为了使其完整 -一些ISP 违反标准并长期缓存记录。一些较旧的操作系统会长期保留旧记录,较旧的浏览器也是如此。但对于大多数用户来说,它会按预期工作。
答案3
不。变化确实不是需要传播到世界上每个 DNS 服务器。
如果您更改了某些内容并且有人在您的 DNS 服务器上查询更改后的记录,则会立即获得结果。
问题是,如果您之前查询过此名称并且它被缓存了。那么您将获得旧 IP,直到缓存过期。在 DNS 中,您可以设置旧查询的有效期,并且该期限通常设置为几天。对于 DynDNS,它通常设置得较低,但并非所有 DNS 解析器都遵守这一点。