3. 域名空间和 RR 定义 (Domain Name Space and RR Definitions)
本章定义 DNS 中域名的编码方式以及资源记录 (Resource Record, RR) 的格式. 这是实现 DNS 时最核心的技术规范之一.
3.1. 名称空间定义 (Name Space Definitions)
域名编码 (Domain Name Encoding)
消息中的域名表示为一串标签 (label) 序列.
编码格式 (Encoding Format):
Each label is represented as:
[length byte (1 byte)][label content (N bytes)]
Example: www.example.com
Encoded as: 3www7example3com0
详细说明 (Detailed Explanation):
- 每个标签由一个八位组长度字段表示, 后跟该数量的八位组.
- 由于每个域名都以根的空标签结束, 域名由值为零的长度字节终止.
- 每个长度八位组的高两位必须为零.
- 长度字段剩余的六位把标签限制为最多 63 个八位组.
长度限制 (Length Limits):
Single label: <= 63 bytes
Complete domain name: <= 255 bytes (including length bytes)
标签内容规则 (Label Content Rules)
字节值 (Byte Values): 构成标签的八位组可以包含任意 8 位值.
强烈建议 (Strong Recommendation): 标签应遵循本备忘录其他位置描述的首选语法, 该语法与现有主机命名约定兼容.
比较规则 (Comparison Rules):
- 名称服务器和解析器必须以大小写不敏感方式比较标签.
- 假定使用零奇偶校验的 ASCII, 也就是 A=a.
- 非字母代码必须精确匹配.
3.2. RR 定义 (RR Definitions)
3.2.1. 格式 (Format)
所有 RR (Resource Record, 资源记录) 都具有如下相同的顶层格式:
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ /
/ NAME /
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| CLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TTL |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| RDLENGTH |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
/ RDATA /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
字段说明 (Field Descriptions):
- NAME: 所有者名称 (owner name), 即此资源记录所关联节点的名称.
- TYPE: 两个八位组, 包含一个 RR TYPE 代码.
- CLASS: 两个八位组, 包含一个 RR CLASS 代码.
- TTL: 32 位有符号整数, 指定资源记录在重新咨询信息来源前可以被缓存的时间间隔. 值为 0 表示该 RR 只能用于当前正在进行的事务, 不应缓存.
- RDLENGTH: 16 位无符号整数, 指定 RDATA 字段的八位组长度.
- RDATA: 可变长度八位组串, 描述该资源. 其格式随资源记录的 TYPE 和 CLASS 而变化.
3.2.2. TYPE 值 (TYPE Values)
TYPE 字段用于资源记录. 注意, 这些类型是 QTYPE 的子集.
| TYPE | 值 (Value) | 含义 (Meaning) |
|---|---|---|
| A | 1 | 主机地址 |
| NS | 2 | 权威名称服务器 |
| MD | 3 | 邮件目的地, 已废弃, 使用 MX |
| MF | 4 | 邮件转发器, 已废弃, 使用 MX |
| CNAME | 5 | 别名的规范名称 |
| SOA | 6 | 授权区域起点 |
| MB | 7 | 邮箱域名, 实验性 |
| MG | 8 | 邮件组成员, 实验性 |
| MR | 9 | 邮件重命名域名, 实验性 |
| NULL | 10 | 空 RR, 实验性 |
| WKS | 11 | 已知服务描述 |
| PTR | 12 | 域名指针 |
| HINFO | 13 | 主机信息 |
| MINFO | 14 | 邮箱或邮件列表信息 |
| MX | 15 | 邮件交换器 |
| TXT | 16 | 文本字符串 |
3.2.3. QTYPE 值 (QTYPE Values)
QTYPE 字段出现在查询的问题部分. QTYPE 是 TYPE 的超集, 因此所有 TYPE 都是有效 QTYPE.
| QTYPE | 值 (Value) | 含义 (Meaning) |
|---|---|---|
| AXFR | 252 | 请求传送整个区域 |
| MAILB | 253 | 请求邮箱相关记录, 即 MB, MG 或 MR |
| MAILA | 254 | 请求邮件代理 RR, 已废弃, 参见 MX |
| * | 255 | 请求所有记录 |
3.2.4. CLASS 值 (CLASS Values)
CLASS 字段出现在资源记录中.
| CLASS | 值 (Value) | 含义 (Meaning) |
|---|---|---|
| IN | 1 | Internet |
| CS | 2 | CSNET 类, 已废弃 |
| CH | 3 | CHAOS 类 |
| HS | 4 | Hesiod [Dyer 87] |
3.2.5. QCLASS 值 (QCLASS Values)
QCLASS 字段出现在查询的问题部分. QCLASS 值是 CLASS 值的超集.
| QCLASS | 值 (Value) | 含义 (Meaning) |
|---|---|---|
| * | 255 | 任意类 |
3.3. 标准 RR (Standard RRs)
以下 RR 定义预计会出现在所有实现中.
3.3.1. CNAME RDATA 格式
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ CNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
其中 (Where):
- CNAME: 一个域名, 指定所有者的规范名称或主名称. 该所有者名称是一个别名.
CNAME 用法 (Usage):
- CNAME RR 标识其所有者名称是别名.
- 在 RDATA 部分指定对应的规范名称.
- 如果某节点存在 CNAME RR, 该节点不应再存在其他数据.
- 这确保规范名称及其别名的数据不会彼此不同.
3.3.2. HINFO RDATA 格式
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ CPU /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ OS /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
其中 (Where):
- CPU: 指定 CPU 类型的字符串.
- OS: 指定操作系统类型的字符串.
用途 (Purpose): HINFO 记录用于获取主机的一般信息.
3.3.9. MX RDATA 格式
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| PREFERENCE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ EXCHANGE /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
其中 (Where):
- PREFERENCE: 16 位整数, 指定此 RR 相对于同一所有者下其他 RR 的偏好. 数值越低优先级越高.
- EXCHANGE: 一个域名, 指定愿意作为该所有者名称邮件交换器的主机.
MX 用法 (Usage):
- MX 记录会针对 EXCHANGE 指定的主机触发类型 A 的附加区处理.
- MX RR 的使用在 RFC-974 中有详细说明.
3.3.11. NS RDATA 格式
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ NSDNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
其中 (Where):
- NSDNAME: 一个域名, 指定应当对给定类和域具有权威性的主机.
NS 用法 (Usage):
- NS 记录会触发通常的附加区处理, 以定位类型 A 记录.
- 当用于引用时, 它们标识名称空间中的委派点.
3.3.12. PTR RDATA 格式
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ PTRDNAME /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
其中 (Where):
- PTRDNAME: 指向域名空间中某个位置的域名.
PTR 用法 (Usage):
- PTR 记录不会触发附加区处理.
- 这些 RR 用于特殊域, 指向域空间中的其他位置.
- 在 IN-ADDR.ARPA 域中用于反向 DNS 查询.
3.3.13. SOA RDATA 格式
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ MNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ RNAME /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| SERIAL |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| REFRESH |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| RETRY |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| EXPIRE |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| MINIMUM |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
其中 (Where):
- MNAME: 作为此区域数据原始来源或主来源的名称服务器的域名.
- RNAME: 指定负责此区域人员邮箱的域名.
- SERIAL: 原始区域副本的无符号 32 位版本号. 区域传送会保留该值.
- REFRESH: 区域应刷新前的 32 位时间间隔.
- RETRY: 刷新失败后再次尝试前应经过的 32 位时间间隔.
- EXPIRE: 32 位时间值, 指定区域不再具有权威性前允许经过的最大时间间隔.
- MINIMUM: 无符号 32 位最小 TTL 字段, 应随此区域中的任何 RR 一起导出.
3.3.14. TXT RDATA 格式
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ TXT-DATA /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
其中 (Where):
- TXT-DATA: 一个或多个字符串, 作为与该域名相关的文本信息.