10. 命名问题 (Naming issues)
有时从 DNS 规范 [RFC1034, RFC1035] 的几个部分推断出, 主机或可能主机的接口被允许拥有恰好一个权威或官方名称, 称为规范名称 (canonical name)。DNS 没有这样的要求。
10.1. CNAME 资源记录 (CNAME resource records)
DNS CNAME ("规范名称", canonical name) 记录的存在是为了提供与别名名称关联的规范名称。对于任何一个别名, 可能只存在一个这样的规范名称。该名称通常应该 (should) 是 DNS 中其他地方存在的名称。别名名称 (CNAME 记录的标签) 如果使用 DNSSEC, 可以 (may) 具有 SIG、NXT 和 KEY RR, 但不能有其他数据。也就是说, 对于 DNS 中的任何标签 (任何域名), 以下之一为真:
- 存在一个 CNAME 记录, 可选地伴随 SIG、NXT 和 KEY RR
- 存在一个或多个记录, 其中没有一个是 CNAME 记录
- 名称存在但没有任何类型的关联 RR
- 名称根本不存在
10.1.1. CNAME 术语 (CNAME terminology)
将 CNAME 记录的标签称为"a CNAME"是传统做法。这是不幸的, 因为"CNAME"是"canonical name"(规范名称) 的缩写, 而 CNAME 记录的标签肯定不是规范名称。但这是已确立的用法。因此, 必须非常清楚地说明是指 CNAME 资源记录的标签还是其值 (规范名称)。在本文档中, CNAME 资源记录的标签始终称为别名 (alias)。
10.2. PTR 记录 (PTR records)
关于规范名称的混淆导致了 PTR 记录在其 RRSet 中应该恰好有一个 RR 的信念。这是不正确的。RFC1034 的相关部分 (第 3.6.2 节) 表明 PTR 记录的值应该是规范名称, 即它不应该 (should not) 是别名。该部分没有任何内容暗示一个名称只允许有一个 PTR 记录。不应该 (should not) 推断这样的限制。
10.3. MX 和 NS 记录 (MX and NS records)
用作 NS 资源记录值的域名, 或用作 MX 资源记录值的一部分的域名, 不得 (must not) 是别名。规范不仅在这一点上很清楚, 而且在这些位置使用别名不会按预期工作, 也不会成功实现可能导致这种方法的目标。该域名必须 (must) 具有一个或多个地址记录作为其值。目前这些将是 A 记录, 但将来可能接受提供地址信息的其他记录类型。它可以有其他 RR, 但绝不能是 CNAME RR。
NS 或 MX 记录的查找会触发"附加部分处理 (additional section processing)", 将与查找记录的值关联的地址记录添加到响应中。这有助于避免在进行初始查询时容易预见的不必要的额外查询。
附加部分处理不包括 CNAME 记录, 更不包括可能与从别名派生的规范名称关联的地址记录。因此, 如果别名用作 NS 或 MX 记录的值, 则不会随 NS 或 MX 值一起返回地址。这可能导致每次查询都需要额外的查询和额外的网络负担。