跳到主要内容

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

本节定义 resource record 的 canonical form, DNS name 的 canonical ordering, 以及 RRset 内 resource record 的 canonical ordering. 构造 NSEC name chain 需要 canonical name order. 构造和验证 RRSIG RR 需要 canonical RR form 以及 RRset 内的 ordering.

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

出于 DNS security 的目的, owner name 的排序方式是将单个 label 视为 unsigned left-justified octet string. 比较 octet string 时, 缺少 octet 排在 zero-valued octet 之前, uppercase US-ASCII letter 按对应 lowercase US-ASCII letter 处理.

要计算一组 DNS name 的 canonical ordering, 从按其最高有效 (最右侧) label 排序开始. 对最高有效 label 相同的 name, 继续按下一个最高有效 label 排序, 依此类推.

例如, 以下 name 按 canonical DNS name order 排序. 最高有效 label 为 "example". 在这一层, "example" 排在第一位, 然后是以 "a.example" 结尾的 name, 再然后是以 "z.example" 结尾的 name. 每一层内部的 name 以相同方式排序.

          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 security 的目的, RR 的 canonical form 是该 RR 的 wire format, 其中:

  1. RR 中的每个 domain name 都完全展开 (无 DNS name compression) 且 fully qualified;

  2. RR owner name 中所有 uppercase US-ASCII letter 都替换为对应 lowercase US-ASCII letter;

  3. 如果 RR 的 type 是 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 name 中所有 uppercase US-ASCII letter 都替换为对应 lowercase US-ASCII letter;

  4. 如果 RR 的 owner name 是 wildcard name, 则 owner name 保持其原始未展开形式, 包括 "*" label (无 wildcard substitution); 并且

  5. RR 的 TTL 设置为其在原始 authoritative zone 中出现的原始值, 或设置为覆盖它的 RRSIG RR 的 Original TTL 字段值.

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

出于 DNS security 的目的, 对 owner name, class 和 type 相同的 RR 进行排序时, 将每个 RR 的 canonical form 中的 RDATA 部分视为 left-justified unsigned octet sequence, 其中缺少 octet 排在 zero octet 之前.

[RFC2181] 规定 RRset 不允许包含 duplicate record (owner name, class, type 和 RDATA 全部相同的多个 RR). 因此, 如果实现者在将 RRset 转换为 canonical form 时检测到 duplicate RR, 它必须将其视为 protocol error. 如果实现者选择按 robustness principle 的精神处理该 protocol error (即宽容接收), 则出于计算 RRset canonical form 的目的, 它必须移除 duplicate RR 中除一个以外的所有 RR.


相关章节导航: