跳到主要内容

4. NSEC 资源记录 (NSEC Resource Record)

NSEC resource record 列出两项内容: 下一个 owner name (按 zone 的 canonical ordering), 该 owner name 包含 authoritative data 或 delegation point NS RRset; 以及 NSEC RR owner name 处存在的 RR type 集合 [RFC3845]. zone 中完整的 NSEC RR 集合指示该 zone 中存在哪些 authoritative RRset, 并形成该 zone 中 authoritative owner name 的链. 如 [RFC4035] 所述, 该信息用于提供 DNS data 的 authenticated denial of existence.

由于 zone 中每个 authoritative name 都必须是 NSEC chain 的一部分, NSEC RR 必须出现在包含 CNAME RR 的 name 处. 这是对传统 DNS 规范 [RFC1034] 的一项变更, 该规范曾说明如果某个 name 存在 CNAME, 则 CNAME 是该 name 处唯一允许的 type. 在 signed zone 中, RRSIG (参见第 3 节) 和 NSEC 必须与 CNAME resource record 存在于同一 name 处.

关于 zone signer 如何精确确定它必须在 zone 中包含哪些 NSEC RR, 参见 [RFC4035].

NSEC RR type 的 type value 为 47.

NSEC RR 与 class 无关.

NSEC RR 应该与 SOA minimum TTL 字段具有相同 TTL value. 这符合 negative caching ([RFC2308]) 的精神.

4.1. NSEC RDATA 线格式 (NSEC RDATA Wire Format) \

NSEC RR 的 RDATA 如下所示:

                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Next Domain Name /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Type Bit Maps /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

4.1.1. Next Domain Name 字段 (Next Domain Name Field) \

Next Domain 字段包含下一个 owner name (按 zone 的 canonical ordering), 该 owner name 拥有 authoritative data 或包含 delegation point NS RRset; 关于 canonical ordering 的说明见第 6.1 节. zone 中最后一个 NSEC record 的 Next Domain Name 字段值是 zone apex 的 name (zone 的 SOA RR 的 owner name). 这表示该 NSEC RR 的 owner name 是 zone canonical ordering 中的最后一个 name.

发送方在传输 NSEC RR 时不得对 Next Domain Name 字段使用 DNS name compression.

对于给定 zone 不具备 authoritative 的 RRset owner name (如 glue record), 除非同一 owner name 处至少存在一个 authoritative RRset, 否则不得将其列入 Next Domain Name.

4.1.2. Type Bit Maps 字段 (Type Bit Maps Field) \

Type Bit Maps 字段标识存在于 NSEC RR owner name 处的 RRset type.

RR type space 被拆分为 256 个 window block, 每个 block 表示 16-bit RR type space 的低 8 bit. 每个至少包含一个 active RR type 的 block 编码为一个 octet 的 window number (0 到 255), 一个 octet 的 bitmap length (1 到 32, 表示该 window block bitmap 使用的 octet 数), 以及最多 32 个 octet (256 bit) 的 bitmap.

block 在 NSEC RR RDATA 中按递增数值顺序出现.

   Type Bit Maps Field = ( Window Block # | Bitmap Length | Bitmap )+

where "|" denotes concatenation.

每个 bitmap 以 network bit order 编码 window block 内 RR type 的低 8 bit. 第一个 bit 为 bit 0. 对 window block 0, bit 1 对应 RR type 1 (A), bit 2 对应 RR type 2 (NS), 依此类推. 对 window block 1, bit 1 对应 RR type 257, bit 2 对应 RR type 258, 依此类推. 如果某个 bit 被设置, 表示 NSEC RR owner name 处存在该 type 的 RRset. 如果某个 bit 未设置, 表示 NSEC RR owner name 处不存在该 type 的 RRset.

表示 pseudo-type 的 bit 必须为空, 因为它们不会出现在 zone data 中. 如遇到这些 bit, 读取时必须忽略.

不得包含没有任何 type 存在的 block. bitmap 末尾的 zero octet 必须省略. 每个 block 的 bitmap 长度由 NSEC RR owner name 处存在的 RR type 集合中, 该 block 内数值最大的 type code 决定. 未明确指定的末尾 zero octet 必须解释为 zero octet.

delegation point 处 NSEC RR 的 bitmap 需要特别注意. 对应 delegation NS RRset 以及 parent zone 具有 authoritative data 的任何 RRset 的 bit 必须被设置; 对应 parent 不具备 authoritative 的任何非 NS RRset 的 bit 必须为空.

zone 不得为任何只保存 glue record 的 domain name 包含 NSEC RR.

4.1.3. NSEC RDATA 中包含 Wildcard Name (Inclusion of Wildcard Names) \

如果 zone 中出现 wildcard owner name, wildcard label ("*") 会被视为字面符号, 并且出于生成 NSEC RR 的目的, 按与其他 owner name 相同的方式处理. wildcard owner name 出现在 Next Domain Name 字段中时不进行任何 wildcard expansion. [RFC4035] 描述 wildcard 对 authenticated denial of existence 的影响.

4.2. NSEC RR 表示格式 (NSEC RR Presentation Format) \

RDATA 部分的 presentation format 如下:

Next Domain Name 字段表示为 domain name.

Type Bit Maps 字段表示为一系列 RR type mnemonic. 当 mnemonic 未知时, 必须使用 [RFC3597] 第 5 节描述的 TYPE 表示.

4.3. NSEC RR 示例 \

以下 NSEC RR 标识与 alfa.example.com. 关联的 RRset, 并标识 alfa.example.com. 之后的下一个 authoritative name.

alfa.example.com. 86400 IN NSEC host.example.com. (
A MX RRSIG NSEC TYPE1234 )

前四个文本字段指定 name, TTL, Class 和 RR type (NSEC). 条目 host.example.com. 是 canonical order 中 alfa.example.com. 之后的下一个 authoritative name. A, MX, RRSIG, NSEC 和 TYPE1234 mnemonic 表示 name alfa.example.com. 关联 A, MX, RRSIG, NSEC 和 TYPE1234 RRset.

上述 NSEC RR 的 RDATA section 将编码为:

         0x04 'h'  'o'  's'  't'
0x07 'e' 'x' 'a' 'm' 'p' 'l' 'e'
0x03 'c' 'o' 'm' 0x00
0x00 0x06 0x40 0x01 0x00 0x00 0x00 0x03
0x04 0x1b 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x20

假设 validator 能够认证该 NSEC record, 则它可用于证明 beta.example.com 不存在, 或证明 alfa.example.com. 没有关联 AAAA record. authenticated denial of existence 在 [RFC4035] 中讨论.


相关章节导航: