DNS 传播是否依赖于 TTL?
Does DNS propagation depend on TTL?
我对 TTL 和传播时间的概念有点困惑,我想澄清一些我未能在网络上找到具体答案的事情。
AFAIK,TTL(生存时间)表示世界各地的服务器为特定 DNS 更新其缓存值所需的(最高)时间。
所以...
如果我更改 DNS 记录,此更改是否会立即发生,需要 TTL 时间才能在全球范围内更新?或者只有在 TTL 时间过去之后,这些变化才会更新,然后开始在世界范围内传播?
每个服务器都会以TTL为间隔定期检查DNS,对吧?因此,如果服务器检查 TTL 为 14400 的 DNS 记录并且我随后立即更改它,服务器将在略小于 14400 之后更新其缓存。如果我恰好在检查之前更改它,它将更新几乎立即。
DNS 记录(例如 MX)的 TTL 值是否取决于其他 TTL 值或更一般元素的更新时间 override/extend 其实际生存时间(例如,SOA 刷新时间)?换句话说,如果我只关心更新 MX 记录并且我需要每 4 小时更新一次,我是否需要为这些 MX 记录设置除 TTL 之外的任何其他内容?
TTL 是特定 DNS 记录将在全球更新的(理论上的)限制吗?虽然实际更新时间有很大差异,据我所知,由于服务器保持自己的缓存时间。
- 没有"propagation",只有缓存。因此,当您在权威服务器上更新记录时,它会立即更改。一旦缓存过期,缓存服务器将更新它们的数据。
例如,我将在我公司的本地 DNS 服务器上查询我个人域中的一个主机名。我的域的权威名称服务器在 AWS,并且记录 ata3ias.test.bajic.nl 配置了 TTL 120 和 IP 地址 127.0.0.5:
首先我会查询权威的AWS名称服务器:
[root@foo ~]# dig ata3ias.test.bajic.nl @ns-1695.awsdns-19.co.uk
...
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 120 IN A 127.0.0.5
;; WHEN: Thu Dec 29 12:43:13 2016
我再把IP地址改成127.0.0.6再查询:
[root@foo ~]# dig ata3ias.test.bajic.nl @ns-1695.awsdns-19.co.uk
...
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 120 IN A 127.0.0.6
;; WHEN: Thu Dec 29 12:43:22 2016
接下来,我将查询我公司的内部 DNS 服务器(我可以安全地假设之前没有人尝试解析此地址并且 DNS 服务器的缓存中没有条目):
[root@foo ~]# dig ata3ias.test.bajic.nl @10.0.0.5
...
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 119 IN A 127.0.0.6
;; Query time: 26 msec
;; WHEN: Thu Dec 29 12:46:20 2016
注意TTL,还要注意查询时间:缓存服务器查询权威DNS服务器,得到TTL响应并记住该信息。
现在,如果我再做一次:
[root@foo ~]# dig ata3ias.test.bajic.nl @10.0.0.5
...
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 107 IN A 127.0.0.6
;; Query time: 0 msec
;; WHEN: Thu Dec 29 12:46:32 2016
这个答案是从缓存中提供的,你可以看到通过 TTL(所以缓存服务器不仅会在缓存中保留数据 TTL 时间,还会将有关剩余 TTL 的信息传递给客户端),并且您可以看到重新查询需要 0 毫秒(因为不需要联系权威名称服务器)。
然后我会去AWS控制台再次编辑IP地址并将其更改为127.0.0.7。为确认更改,我再次直接查询权威服务器:
[root@foo ~]# dig ata3ias.test.bajic.nl @ns-1695.awsdns-19.co.uk
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 120 IN A 127.0.0.7
;; WHEN: Thu Dec 29 12:47:10 2016
现在再次查询内部DNS服务器:
[root@foo ~]# dig ata3ias.test.bajic.nl @10.0.0.5
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 63 IN A 127.0.0.6
;; WHEN: Thu Dec 29 12:47:16 2016
它仍在提供旧数据,并将继续提供 63 秒。一分钟后:
[root@foo ~]# dig ata3ias.test.bajic.nl @10.0.0.5
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 3 IN A 127.0.0.6
;; WHEN: Thu Dec 29 12:48:16 2016
最后,几秒钟后,内部 DNS 服务器将提供新信息:
[root@foo ~]# dig ata3ias.test.bajic.nl @10.0.0.5
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 119 IN A 127.0.0.7
;; WHEN: Thu Dec 29 12:48:21 2016
- 完全正确。
- 一般来说,SOA TTL 值只与主要和辅助(从属)名称服务器之间的同步有关,所以不需要,除了 MX 记录的 TTL 之外,您不需要设置任何其他内容。您可以找到所有 SOA TTL 记录的详细解释 here
- 对于性能良好的服务器,是的。对于其他人,您无能为力。
我对 TTL 和传播时间的概念有点困惑,我想澄清一些我未能在网络上找到具体答案的事情。
AFAIK,TTL(生存时间)表示世界各地的服务器为特定 DNS 更新其缓存值所需的(最高)时间。
所以...
如果我更改 DNS 记录,此更改是否会立即发生,需要 TTL 时间才能在全球范围内更新?或者只有在 TTL 时间过去之后,这些变化才会更新,然后开始在世界范围内传播?
每个服务器都会以TTL为间隔定期检查DNS,对吧?因此,如果服务器检查 TTL 为 14400 的 DNS 记录并且我随后立即更改它,服务器将在略小于 14400 之后更新其缓存。如果我恰好在检查之前更改它,它将更新几乎立即。
DNS 记录(例如 MX)的 TTL 值是否取决于其他 TTL 值或更一般元素的更新时间 override/extend 其实际生存时间(例如,SOA 刷新时间)?换句话说,如果我只关心更新 MX 记录并且我需要每 4 小时更新一次,我是否需要为这些 MX 记录设置除 TTL 之外的任何其他内容?
TTL 是特定 DNS 记录将在全球更新的(理论上的)限制吗?虽然实际更新时间有很大差异,据我所知,由于服务器保持自己的缓存时间。
- 没有"propagation",只有缓存。因此,当您在权威服务器上更新记录时,它会立即更改。一旦缓存过期,缓存服务器将更新它们的数据。
例如,我将在我公司的本地 DNS 服务器上查询我个人域中的一个主机名。我的域的权威名称服务器在 AWS,并且记录 ata3ias.test.bajic.nl 配置了 TTL 120 和 IP 地址 127.0.0.5:
首先我会查询权威的AWS名称服务器:
[root@foo ~]# dig ata3ias.test.bajic.nl @ns-1695.awsdns-19.co.uk
...
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 120 IN A 127.0.0.5
;; WHEN: Thu Dec 29 12:43:13 2016
我再把IP地址改成127.0.0.6再查询:
[root@foo ~]# dig ata3ias.test.bajic.nl @ns-1695.awsdns-19.co.uk
...
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 120 IN A 127.0.0.6
;; WHEN: Thu Dec 29 12:43:22 2016
接下来,我将查询我公司的内部 DNS 服务器(我可以安全地假设之前没有人尝试解析此地址并且 DNS 服务器的缓存中没有条目):
[root@foo ~]# dig ata3ias.test.bajic.nl @10.0.0.5
...
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 119 IN A 127.0.0.6
;; Query time: 26 msec
;; WHEN: Thu Dec 29 12:46:20 2016
注意TTL,还要注意查询时间:缓存服务器查询权威DNS服务器,得到TTL响应并记住该信息。
现在,如果我再做一次:
[root@foo ~]# dig ata3ias.test.bajic.nl @10.0.0.5
...
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 107 IN A 127.0.0.6
;; Query time: 0 msec
;; WHEN: Thu Dec 29 12:46:32 2016
这个答案是从缓存中提供的,你可以看到通过 TTL(所以缓存服务器不仅会在缓存中保留数据 TTL 时间,还会将有关剩余 TTL 的信息传递给客户端),并且您可以看到重新查询需要 0 毫秒(因为不需要联系权威名称服务器)。
然后我会去AWS控制台再次编辑IP地址并将其更改为127.0.0.7。为确认更改,我再次直接查询权威服务器:
[root@foo ~]# dig ata3ias.test.bajic.nl @ns-1695.awsdns-19.co.uk
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 120 IN A 127.0.0.7
;; WHEN: Thu Dec 29 12:47:10 2016
现在再次查询内部DNS服务器:
[root@foo ~]# dig ata3ias.test.bajic.nl @10.0.0.5
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 63 IN A 127.0.0.6
;; WHEN: Thu Dec 29 12:47:16 2016
它仍在提供旧数据,并将继续提供 63 秒。一分钟后:
[root@foo ~]# dig ata3ias.test.bajic.nl @10.0.0.5
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 3 IN A 127.0.0.6
;; WHEN: Thu Dec 29 12:48:16 2016
最后,几秒钟后,内部 DNS 服务器将提供新信息:
[root@foo ~]# dig ata3ias.test.bajic.nl @10.0.0.5
;; ANSWER SECTION:
ata3ias.test.bajic.nl. 119 IN A 127.0.0.7
;; WHEN: Thu Dec 29 12:48:21 2016
- 完全正确。
- 一般来说,SOA TTL 值只与主要和辅助(从属)名称服务器之间的同步有关,所以不需要,除了 MX 记录的 TTL 之外,您不需要设置任何其他内容。您可以找到所有 SOA TTL 记录的详细解释 here
- 对于性能良好的服务器,是的。对于其他人,您无能为力。