如果 ttl = 0,递归 dns 查询中会发生什么?

如果 ttl = 0,递归 dns 查询中会发生什么?

在名称解析(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 生存时间?

一个IP数据包的TTL...

由数据报的发送者设置,并由到达其目的地的路由上的每个路由器减少。如果 TTL 字段在数据报到达目的地之前达到零,则数据报将被丢弃,并向发送方发送回 ICMP 错误数据报(11 - 超时)。

DNS 记录的 TTL

由权威名称服务器为特定资源记录设置。当缓存(递归)名称服务器向权威名称服务器查询资源记录时,它将将该记录缓存 TTL 指定的时间(以秒为单位)。

因此,DNS 记录的 TTL 永远不会达到零;而用于请求 DNS 记录的 IP 数据包可能会到达TTL=0,这将导致发送方收到上述 ICMP 错误。

相关内容