Skip to main content

6. 资源记录的规范形式和顺序 (Canonical Form and Order of Resource Records)

本节定义了资源记录的规范形式、DNS名称的规范排序以及RRset内资源记录的规范排序。需要规范名称顺序来构造NSEC名称链。需要规范RR形式和RRset内的排序来构造和验证RRSIG RR。

6.1. 规范DNS名称顺序 (Canonical DNS Name Order)

出于DNS安全的目的,所有者名称通过将各个标签视为无符号左对齐八位字节字符串来排序。八位字节的缺失排在零值八位字节之前,并且大写US-ASCII字母被视为小写US-ASCII字母。

要计算一组DNS名称的规范排序,首先根据其最重要的 (最右侧的) 标签对名称进行排序。对于最重要标签相同的名称,继续根据其次最重要标签进行排序,依此类推。

例如,以下名称按规范DNS名称顺序排序。最重要的标签是"example"。在此级别,"example"首先排序,其次是以"a.example"结尾的名称,然后是以"z.example"结尾的名称。每个级别内的名称以相同的方式排序。

          example
a.example
yljkjljk.a.example
Z.a.example
zABC.a.EXAMPLE
z.example
\001.z.example
*.z.example
\200.z.example

6.2. 规范RR形式 (Canonical RR Form)

出于DNS安全的目的,RR的规范形式是RR的线格式,其中:

  1. RR中的每个域名都完全扩展 (无DNS名称压缩) 且完全限定;

  2. RR所有者名称中的所有大写US-ASCII字母都替换为相应的小写US-ASCII字母;

  3. 如果RR的类型是NS、MD、MF、CNAME、SOA、MB、MG、MR、PTR、HINFO、MINFO、MX、HINFO、RP、AFSDB、RT、SIG、PX、NXT、NAPTR、KX、SRV、DNAME、A6、RRSIG或NSEC,则RDATA内包含的DNS名称中的所有大写US-ASCII字母都替换为相应的小写US-ASCII字母;

  4. 如果RR的所有者名称是通配符名称,则所有者名称采用其原始未扩展形式,包括"*"标签 (无通配符替换);并且

  5. RR的TTL设置为其在原始权威区域中出现的原始值或覆盖RRSIG RR的Original TTL字段。

6.3. RRset内的规范RR排序 (Canonical RR Ordering within an RRset)

出于DNS安全的目的,具有相同所有者名称、类和类型的RR通过将每个RR规范形式的RDATA部分视为左对齐无符号八位字节序列进行排序,其中八位字节的缺失排在零八位字节之前。

[RFC2181]规定不允许RRset包含重复记录 (具有相同所有者名称、类、类型和RDATA的多个RR)。因此,如果实现在将RRset置于规范形式时检测到重复RR,则必须 (MUST) 将其视为协议错误。如果实现选择本着健壮性原则的精神 (对接受的内容宽松) 处理此协议错误,则出于计算RRset规范形式的目的,它必须 (MUST) 删除除一个之外的所有重复RR。


相关章节导航: