CNAME记录是否导致第二次DNS查找?


19

假设我们有一个子域名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

我的问题是,在什么阶段可以解析f​​oo.bar.cc?它是由递归DNS服务器完成的,然后将响应发送回客户端吗?还是客户端这次向foo.bar.cc向DNS服务器发出第二个请求?还是取决于DNS服务器是否已经为foo.bar.cc缓存了条目?

我问是因为一个特定的递归DNS服务器仅返回第一行,即它不解析CNAME。但是,大约20秒后,对同一主机的后续请求将同时包含这两行。

Answers:


16

这两个记录在同一请求中一起返回。您可以通过以下命令找出答案

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。


在OPs仅返回CNAME的示例中,DNS服务器可能很难跟踪CNAME,因此将其所拥有的所有信息提供给客户端。最终,它完成了对CNAME的关注,因此能够给出完整的答复。
大卫·史瓦兹

是的-如果DNS服务器具有更多信息,则它将ADDITIONAL在答案部分中将其返回。有时它不返回,这意味着递归程序在缓存中没有它-可能是因为CNAMEA记录所指向的具有不同的权威服务器(因此,递归程序的初始请求没有得到CNAME额外的A响应,只是CNAME)。
Shane Madden

@Mike:那么结论是什么?CNAME记录是否导致第二次DNS查找?如果不是,为什么有很多建议增加CNAME记录TTL?
Marco Demaio

10
只要A记录与CNAME在同一台权威服务器中,就可以进行相同的查找
Mike
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.