在名称解析(bind 的当前版本)中,当递归答案在回程中达到 ttl 0 时会发生什么?
答案1
TTL 值是缓存的 dns 条目在刷新之前保留在缓存中的时间(通常以秒为单位)。因此,一旦 TTL 值达到零,它将再次查询权威名称服务器以获取最新的 dns 条目。
您可以使用 dig 命令看到 dns 条目的刷新。下面是 dig 查询 google.com 域的示例(我选择这个域是因为它的 TTL 值很小,所以我不需要等待这么长时间来刷新 dns 条目):
$ dig google.com
; <<>> DiG 9.8.1-P1 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39327
;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 154 IN A 74.125.237.33 <== '154 is the TTL value'
... (ANSWERS TRUNCATED)
;; Query time: 16 msec <== notice that the query took 16ms to complete
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Dec 17 21:04:56 2012
;; MSG SIZE rcvd: 204
现在再次检查查询时间...
$ dig google.com
... (HEADER TRUNCATED)
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 103 IN A 74.125.237.35 <== TTL value gradually decreases over time
... (ANSWERS TRUNCATED)
;; Query time: 2 msec <== query time is much smaller!
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Dec 17 21:05:48 2012
;; MSG SIZE rcvd: 204
查询时间更短,因为返回的是 google.com 的本地缓存值。
现在让我们等待 TTL 值减小到零......
$ dig google.com @localhost
... (HEADER TRUNCATED)
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 5 IN A 74.125.237.34
... (ANSWERS TRUNCATED)
;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Dec 17 21:07:26 2012
;; MSG SIZE rcvd: 204
差不多了...
$ dig google.com @localhost
... (HEADER TRUNCATED)
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 1 IN A 74.125.237.39
... (ANSWERS TRUNCATED)
;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Dec 17 21:07:30 2012
;; MSG SIZE rcvd: 204
现在缓存的dns值被刷新了; TTL值再次开始倒计时...
$ dig google.com @localhost
... (HEADER TRUNCATED)
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 291 IN A 74.125.237.131
... (ANSWERS TRUNCATED)
;; Query time: 16 msec <== Notice the longer Query time again.
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Dec 17 21:07:32 2012
;; MSG SIZE rcvd: 204
答案2
您是否混淆了 IP 和 DNS 生存时间?
由数据报的发送者设置,并由到达其目的地的路由上的每个路由器减少。如果 TTL 字段在数据报到达目的地之前达到零,则数据报将被丢弃,并向发送方发送回 ICMP 错误数据报(11 - 超时)。
由权威名称服务器为特定资源记录设置。当缓存(递归)名称服务器向权威名称服务器查询资源记录时,它将将该记录缓存 TTL 指定的时间(以秒为单位)。
因此,DNS 记录的 TTL 永远不会达到零;而用于请求 DNS 记录的 IP 数据包可能会到达TTL=0
,这将导致发送方收到上述 ICMP 错误。