题 CNAME记录会导致第二次DNS查找吗?


假设我们有一个名为www.foo.com的子域,其CNAME记录指向foo.bar.cc.反过来,Foo.bar.cc有一条指向IP地址1.2.3.4的A记录。

现在,如果我对www.foo.com进行DNS查找,我会得到一个如下答案:

www.foo.com. IN CNAME foo.bar.cc.
foo.bar.cc. IN A 1.2.3.4

我的问题是,foo.bar.cc在什么阶段解决了?是否在将响应发送回客户端之前由递归DNS服务器完成?或者客户端是否向DNS服务器发出第二个请求,这次是针对foo.bar.cc?或者它取决于DNS服务器是否已经有foo.bar.cc的缓存条目?

我问,因为一个特定的递归DNS服务器只返回第一行,即它不解析CNAME。但是,在大概20秒之后,对同一主机的后续请求将包括两条线。


17
2017-08-21 12:25






答案:


2条记录在同一请求中一起返回。您可以通过以下命令找到它

dig +trace www.foo.com

例如我的域名photoblog.com有一个www的cname所以从photoblog的名称服务器给我的最后2个请求看起来像

photoblog.com.      172800  IN  NS  ns1.photoblog.com.
photoblog.com.      172800  IN  NS  ns2.photoblog.com.
;; Received 103 bytes from 192.43.172.30#53(i.gtld-servers.net) in 196 ms

www.photoblog.com.  600 IN  CNAME   photoblog.com.
photoblog.com.      600 IN  A   74.52.128.18
photoblog.com.      60  IN  NS  ns2.photoblog.com.
photoblog.com.      60  IN  NS  ns1.photoblog.com.
;; Received 133 bytes from 74.52.128.18#53(ns2.photoblog.com) in 59 ms

正如您所看到的那样,请求ns1 / ns2询问www.photoblog.com的ip是什么,它返回的很好,它是photoblog.com的cname,这里是该A记录的ip。


16
2017-08-21 12:35



在你的例子中,它只返回了CNAME,DNS服务器可能很难跟随CNAME,因此给了客户端任何信息。最终,它完成了CNAME,因此能够给出完整的答复。 - David Schwartz
是的 - 如果DNS服务器有更多信息,那么它将返回它 ADDITIONAL 部分答案。它没有返回它的情况意味着递归器没有它的缓存 - 可能是因为 CNAME 和 A 记录它指向具有不同的权威服务器(因此递归者的初始请求没有得到 CNAME 加上额外的 A 回应,只是 CNAME)。 - Shane Madden♦
@Mike:那么结论是什么? CNAME记录是否会导致第二次DNS查找?如果没有,为什么很多人建议增加CNAME记录TTL? - Marco Demaio
只要A记录与CNAME位于同一权威服务器中,它就是相同的查找 - Mike