为什么我们在DNS系统中使用规范主机名?

为什么我们在DNS系统中使用规范主机名?,dns,alias,hostname,canonical-link,Dns,Alias,Hostname,Canonical Link,我读过一篇文档,其中说具有复杂主机名的主机可以有一个或多个别名。例如,relay1.west coast.media.com是标准主机名,而media.com是别名。它们都通过DNS系统中的'A'记录和'CNAME'记录相互关联,如下所示: media.com CNAME relay1.west-coast.media.com relay1.west-coast.media.com A 210.23.25.32 是什么让我们使用复杂的规范主机名?我们不能简单地通过在DNS系统中添加记录'

我读过一篇文档,其中说具有复杂主机名的主机可以有一个或多个别名。例如,
relay1.west coast.media.com
是标准主机名,而
media.com
是别名。它们都通过DNS系统中的
'A'
记录和
'CNAME'
记录相互关联,如下所示:

media.com CNAME  relay1.west-coast.media.com  
relay1.west-coast.media.com A 210.23.25.32
是什么让我们使用复杂的规范主机名?我们不能简单地通过在DNS系统中添加记录
'A'
将别名与ip地址关联起来,如下所示:

media.com A 210.23.25.32

在一台服务器上运行多个服务时,CNAME条目非常有用。例如,您可以将www.media.com、ftp.media.com和mud.media.com全部指向relay1.west-coast.media.com

如果中继1的IP地址。。。如果需要更改,则只需对a记录进行一次更新,而不是多次更新。

是的,您可以

首先,正如Lanexbg所解释的那样,您的具体示例是错误的,因为您不能在区域的顶点(根)拥有CNAME,因为根据定义CNAME记录不能与任何其他记录共存(我们将在这里忘记例外情况),并且在顶点,您的区域需要有SOA和NS记录才能正常工作

因此,让我们使用适当的名称来满足配置/文档需求,并讨论
www.example.com A
www.example.com CNAME www.example.net+www.example.net A

www.example.com解决方案的最终结果对于最终用户来说是相同的,除了在第一种方法中可以忽略的各个点(如性能问题)

如果您同时维护
example.com
example.net
的权威名称服务器,您可以在这两种情况中自由选择。正如ChrisMeueur所指出的,最大的区别是当您需要更改记录的数据(IPv4地址)时。在第一种情况下,您需要更改它的次数与您有记录的次数相同,而在第二种情况下,您只需要更改一次,所有其他CNAME指向
www.example.net
的记录将自动更新

CNAME
也有它们的缺点:它们会影响性能,您需要避免它们之间的链条,甚至更多的循环,它们不能像记录中的名称一样在任何地方使用,等等

因此,这是一种妥协

但还有另一种情况需要考虑:如果您是
example.com
的管理员,而不是
example.net
的管理员。ExampleNET Inc.可能是一家大型托管公司或CDN。您想将他们的服务用于您的
www.example.com
网站。如果他们给你一个记录放在你的区域中,他们的问题是,如果他们需要,他们基本上永远无法更改它,因为他们所有的客户都会在他们所有的区域文件中硬编码其当前值,因此这对敏捷性是一个大问题,有时你需要能够快速重新计算,比如在DDOS攻击期间。 相反,如果他们建议你做一个CNAME,他们将可以自由地更改他们的a记录,而无需做任何其他事情,并且结果“立即”适用于所有人

这是一种非常常见的情况,特别是对于CDN

许多人在询问
www.microsoft.com
时看到了这个实例:

;; ANSWER SECTION:
www.microsoft.com.  3600    IN  CNAME   www.microsoft.com-c-3.edgekey.net.
www.microsoft.com-c-3.edgekey.net. 20499 IN CNAME www.microsoft.com-c-3.edgekey.net.globalredir.akadns.net.
www.microsoft.com-c-3.edgekey.net.globalredir.akadns.net. 3600 IN CNAME e13678.dspb.akamaiedge.net.
e13678.dspb.akamaiedge.net. 3600 IN A   23.67.120.106
(当然,高级设置也可以用于负载平衡和/或故障转移和/或根据源的地理位置改变结果)


这不是唯一的方法(例如,相反,他们可能会要求您更改
example.com
区域的权威名称服务器,以便他们可以控制它),而且它也有限制(最重要的一点是开头概述的一点:你不能在apex上放置CNAME,因此如果你还想在
http://example.com/
(注意
www
)您需要其他解决方案).

你确定记录示例是正确的吗?不可能有这样的记录
media.com CNAME relay1.west coast.media.com
,可能这是
A
记录,另一个是
CNAME
?但是Chris Meurer的回答是正确的。只需补充一下,在你的示例中这是可以的,但如果有,就不太好了只有一个主机名指向一个
CNAME
,因为这样会发出两个请求,而不是一个请求。在这种情况下,使用记录会更快,在这种情况下,当记录更改时编辑记录的IP没有问题。@Lanexbg这是一个巨大的简化。DNS有缓存,DNS查询所花费的时间通常更少给定交换所占用的所有时间中的一个(当一切正常时)。