3. 区域内容 (Zone Contents)
本节描述哪些 DNS resource records (RRs) 会包含在 AXFR response 中, 以及哪些会被排除. 区域传输的内容并非任意数据; 是否包含特定内容由明确规则约束.
3.1. 要包含的记录 (Records to Include)
AXFR server 必须在 AXFR response 中包含以下 RRs:
-
SOA RR: 区域顶点的 SOA RR 必须作为第一条 response message 的 answer section 中第一个 RR 出现, 并作为最后一条 response message 的 answer section 中最后一个 RR 出现.
-
所有权威 RRs: 区域内域名所拥有的所有权威 RRs 必须被包含. 这包括但不限于以下 RR types:
- 区域顶点处的 NS RRs
- A, AAAA, MX, CNAME, TXT, 以及其他标准 RR types
- DNSSEC-related RRs (DNSKEY, RRSIG, NSEC, NSEC3, 如果存在则包括区域顶点处的 DS)
- 根据 [RFC3597] 定义的任何未知或实验性 RR types
-
RRsets: 具有相同 owner name, class, 和 type 的所有 RRs 构成一个 RRset. RRset 的所有成员必须包含在区域传输中. 为提高效率, 推荐同一 RRset 的所有 RRs 在 AXFR response 中连续出现.
-
Empty non-terminals: Empty non-terminal (ENT) domain names 不拥有任何 RRs, 但在域名树中充当占位符. 然而, 由于 ENTs 不拥有 RRs, 它们不会在 AXFR responses 中显式表示. 它们由下级名称的存在隐式定义.
AXFR server 不得在 AXFR response 中包含以下内容:
-
Out-of-zone data: 不属于区域内域名拥有的 RRs 不得被包含 (glue records 除外, 见第 3.3 节).
-
Non-authoritative data: 缓存数据, hints, 或任何其他非权威信息不得被包含.
-
Answer section 中的 OPT RRs: EDNS(0) OPT pseudo-RRs 不是区域数据, 不得出现在 answer section 中. 它们可以仅出现在 additional section 中.
3.2. 委派记录 (Delegation Records)
Zone cut (delegation point) 是区域中将权威性委派给另一区域的域名. 在 zone cut 处, NS RRs 表示该委派. AXFR 中对委派记录的处理具有细微差别.
Delegation NS RRs: zone cut 处的 NS RRs (将权威性委派给子区域) 必须包含在 AXFR response 中. 这些 NS RRs 对父区域是权威的, 并指明权威性被委派到何处.
示例: 如果区域 example.com 包含到 child.example.com 的委派, 则 child.example.com 的 NS RRs 必须包含在 example.com 的 AXFR response 中.
Zone cuts 处的 DS RRs: 对于 DNSSEC-signed zones, DS (Delegation Signer) RRs 可以出现在父区域的 zone cut 处. 委派点处的 DS RRs 必须包含在父区域的 AXFR response 中.
Zone cuts 处的其他 RR types: 在 zone cut 处, 只有 NS RRs (以及 DNSSEC 可选的 DS RRs) 在父区域中具有权威性. 同一域名处可能存在的其他 RR types 要么是:
- Glue records (见第 3.3 节), 或
- 被 zone cut 遮蔽 (见第 3.5 节).
在父区域的 zone cut 处不存在其他权威 RR types (除 NS 和 DS 之外).
3.3. Glue Records
Glue records 是存在于区域权威范围之外的地址记录 (A 或 AAAA), 但在解析区域名称服务器时为避免循环依赖而必需.
定义: Glue records 是 A 或 AAAA RRs, 为区域 NS RRs 中列出的名称服务器提供 IP 地址, 且这些名称服务器位于被委派的子区域内.
示例: 如果 example.com 委派给 child.example.com, 且 child.example.com 的某个 NS RR 是 ns1.child.example.com, 则 ns1.child.example.com 的 A 或 AAAA RR 在 example.com 区域上下文中就是 glue.
AXFR 行为:
-
Glue records 不得包含在 AXFR response 中. Glue records 是 out-of-zone data, 对正在传输的区域不具权威性. AXFR server 不得在 AXFR response 的 answer section 中发送 glue records.
-
AXFR client 负责通过其他方式获取 glue records (例如查询子区域或依赖缓存数据).
理由: 在 AXFR responses 中包含 glue records 会混合权威和非权威数据, 可能导致混淆和不一致. 排除 glue records 后, AXFR response 只包含该区域的权威数据.
历史说明: 一些较旧的 DNS 实现在 AXFR responses 中包含 glue records. 现代实现不得包含 glue records, 因为此行为并非标准行为, 且可能导致互操作性问题.
3.4. 名称压缩 (Name Compression)
DNS message format 支持名称压缩, 这是一种通过将重复域名替换为指向同一消息内较早出现位置的指针来减小 DNS messages 大小的技术.
AXFR 与名称压缩:
-
Name compression 可以在单个 AXFR response messages 内使用. AXFR sequence 中每条 DNS message 在名称压缩方面都是独立的; 指针不得引用之前或之后消息中的名称.
-
Name compression 对 AXFR responses 尤其有益, 因为许多 RRs 共享公共域名后缀 (例如区域名称本身).
-
AXFR server 应该使用 name compression 来减少带宽并提升效率, 但并不要求必须如此.
-
AXFR client 必须支持 name compression, 并能正确解压 AXFR responses 中的名称.
3.5. 被遮蔽名称 (Occluded Names)
Occluded name 是通常本应位于某一区域内, 但因 zone cut 而从该区域视图中隐藏的域名. Occluded names 位于某个委派点之下.
示例: 如果 example.com 委派给 child.example.com, 则 child.example.com 下级的任何域名 (例如 www.child.example.com 或 ftp.child.example.com) 都会从 example.com 区域视角中被遮蔽.
AXFR 行为:
-
对父区域的 AXFR response, occluded names 及其关联 RRs 不得被包含. 只包含 zone cut (委派点处的 NS RRs).
-
被委派区域的内容 (示例中的
child.example.com) 只通过专门针对该区域的 AXFR session 传输.
理由: 在父区域的 AXFR response 中包含 occluded names 会违反 DNS 的层级结构, 并混合来自多个区域的数据.
特殊情况 - DNAME: 如果区域包含 DNAME RR [RFC2672], DNAME 会创建重定向, 且 DNAME owner 下级的任何名称都会以与委派下级名称相同的方式被有效遮蔽. DNAME-occluded names 不得包含在 AXFR response 中.