跳到主要内容

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)
A1主机地址
NS2权威名称服务器
MD3邮件目的地, 已废弃, 使用 MX
MF4邮件转发器, 已废弃, 使用 MX
CNAME5别名的规范名称
SOA6授权区域起点
MB7邮箱域名, 实验性
MG8邮件组成员, 实验性
MR9邮件重命名域名, 实验性
NULL10空 RR, 实验性
WKS11已知服务描述
PTR12域名指针
HINFO13主机信息
MINFO14邮箱或邮件列表信息
MX15邮件交换器
TXT16文本字符串

3.2.3. QTYPE 值 (QTYPE Values)​

QTYPE 字段出现在查询的问题部分. QTYPE 是 TYPE 的超集, 因此所有 TYPE 都是有效 QTYPE.

QTYPE值 (Value)含义 (Meaning)
AXFR252请求传送整个区域
MAILB253请求邮箱相关记录, 即 MB, MG 或 MR
MAILA254请求邮件代理 RR, 已废弃, 参见 MX
*255请求所有记录

3.2.4. CLASS 值 (CLASS Values)​

CLASS 字段出现在资源记录中.

CLASS值 (Value)含义 (Meaning)
IN1Internet
CS2CSNET 类, 已废弃
CH3CHAOS 类
HS4Hesiod [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: 一个或多个字符串, 作为与该域名相关的文本信息.

TXT 用法 (Usage):

  • TXT RR 用于保存任意可读文本.
  • 多个 TXT RR 可与同一所有者名称关联.

3.3.3. MB RDATA 格式​

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ MADNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

其中 (Where):

  • MADNAME: 一个域名, 指定负责该邮箱的宿主主机.

MB 用法 (Usage):

  • MB 记录会触发对 MADNAME 的附加区处理, 以探测邮箱是否存在, 以及该主机是否能够接收邮件.

3.3.4. MD RDATA 格式​

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ MADNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

其中 (Where):

  • MADNAME: 一个域名, 指定接收发往该域名邮件的主机.

MD 用法 (Usage):

  • MD 记录为接收发往该域名邮件的主机指定邮件代理.
  • 由于现代 MX 记录的灵活性更高, MD 记录已不再使用.

3.3.5. MF RDATA 格式​

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ MADNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

其中 (Where):

  • MADNAME: 一个域名, 指定作为该域名邮件转发器的主机.

MF 用法 (Usage):

  • MF 记录为作为该域名邮件转发器的主机指定邮件代理.
  • 由于现代 MX 记录的灵活性更高, MF 记录已不再使用.

3.3.6. MG RDATA 格式​

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ MGMNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

其中 (Where):

  • MGMNAME: 一个域名, 指定该邮箱所属组中的成员.

MG 用法 (Usage):

  • MG 记录通过列出属于该组的邮箱成员, 来标识该邮箱的邮件组成员身份.

3.3.7. MINFO RDATA 格式​

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ RMAILBX /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ EMAILBX /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

其中 (Where):

  • RMAILBX: 一个域名, 指定负责该邮箱或邮件列表的邮箱域名.
  • EMAILBX: 一个域名, 指定接收与该邮箱或邮件列表相关问题的邮箱域名.

MINFO 用法 (Usage):

  • MINFO 记录用于标识负责邮箱或邮件列表、以及接收相关问题的邮箱. 该记录的主要应用场景是邮件列表.

3.3.8. MR RDATA 格式​

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ NEWNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

其中 (Where):

  • NEWNAME: 一个域名, 指定邮箱的正式名称或新名称.

MR 用法 (Usage):

  • MR 记录用于标识邮箱的正式名称或新名称. 它起到的作用类似于 CNAME, 但针对的是邮箱而非主机名.

3.3.10. NULL RDATA 格式​

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ <anything> /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

其中 (Where):

  • 任何内容都可作为 NULL 记录的 RDATA 存储或中转.

NULL 用法 (Usage):

  • NULL 记录可用于各种实验性用途, 但无论其实际内容如何, 解析器都不应尝试解释 NULL 记录的 RDATA.

3.4. 查询特定 RR 类型的说明 (Notes on Specific RR Types)​

3.4.1. HINFO RDATA 格式​

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ CPU /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ OS /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

其中 (Where):

  • CPU: 一个字符串, 指定 CPU 类型.
  • OS: 一个字符串, 指定操作系统类型.

HINFO 用法 (Usage):

  • HINFO RR 用于标识主机所使用的 CPU 与操作系统类型.
  • 不应假设本规范定义的字符串与硬件名称完全相同, 但期望这些字符串能够被人们识别.

3.4.2. WKS RDATA 格式​

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ADDRESS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| PROTOCOL | |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ <BIT MAP> /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

其中 (Where):

  • ADDRESS: 一个 32 位互联网地址.
  • PROTOCOL: 一个 8 位 IP 协议号 (详见 [RFC-1010]).
  • BIT MAP: 标识由 ADDRESS 给定的主机上、使用 PROTOCOL 提供的知名服务. 每个服务均由 1 个比特位表示, 其值取自该服务的端口号; 例如, TELNET 使用端口 23, 因此 BIT MAP 中第 23 位 (从 0 开始计数) 将被置位. 位图域的长度 (以字节计) 应为 (PROTOCOL 提供的服务最大端口号) / 8 + 1, 该域从零比特位开始, 逐位向上填充.

WKS 用法 (Usage):

  • WKS 记录用于描述已知在由 ADDRESS 标识的主机上、由 PROTOCOL 提供的知名服务. WKS 记录的主要应用场景是, 主机作为服务器提供若干种公认服务 (例如 SMPT (邮件), FTP, TELNET (远程登录) 等) 的情况.
  • 如果一个主机同时提供 TCP 和 UDP 上的服务, 则可以提供多条 WKS 记录.
  • WKS 记录应在满足以下条件时使用: 服务的提供方式已广为人知, 且信息对于使用主机名进行通用查询的普通用户具有价值. 例如, 已知某台主机是 SMTP 服务器, 则提供 WKS 记录是恰当的; 但如果主机只在该主机上特定的 HINFO 或 TXT 记录中"宣传"自身时, 则不需要 WKS 记录.

3.4.3. CNAME RDATA 格式​

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ CNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

其中 (Where):

  • CNAME: 一个域名, 指定此规范名称所指的规范或主名称.

CNAME 用法 (Usage):

  • CNAME RR 将一个别名标识为另一个规范名称的别名. 如果一个节点上存在 CNAME RR, 则不应存在其他数据; 此规则确保在规范名称存在时, 缓存的数据与区域中保持一致. 例如在查询邮件域名时, 应查找 CNAME RR, 然后应针对规范名称查询地址.
  • 对于真实数据, 规范主机名应能够通过 A 记录被解析为地址, 或者通过 MB 记录被解析为邮箱域名. 选择使用 CNAME 而不是规范名称进行响应, 是从这些可能性中做出的选择.

3.5. IN-ADDR.ARPA 域​

为支持网关定位, 以及使互联网地址与人类或组织名称之间能够相互映射, 定义了一个特殊的域, 称为 IN-ADDR.ARPA. IN-ADDR.ARPA 域中的名称采用带点的十进制表示法, 并以相反的顺序构建 (相对于正常的 host.domain 顺序), 外加后缀 IN-ADDR.ARPA. 例如, 若网络号为 10, 则对应于该网络上互联网地址 10.0.0.123 的域名应为:

    123.0.0.10.IN-ADDR.ARPA

此名称的 TCP 管理子域位于:

    0.0.10.IN-ADDR.ARPA

3.6. 定义新类型 (Defining New Types)​

可以通过定义新的类型, 并在适当的名称服务器或解析器软件中实现来支持该类型的方式, 来扩展 DNS. 新的类型应当拥有适合在 master 文件 (区域文件) 中使用的助记符 (例如 CNAME, MX 等), 并且所有使用新类型数据的软件都必须理解新的类型代码.

应当注意, 在 DNS 中扩展资源记录 (RR), 必须同时考虑主文件格式、区域传输机制, 以及能否在不破坏现有软件的情况下完成转换. 任何修改都应保持向后兼容, 或至少在现有软件无法识别新类型时, 能够安全忽略.

此外, 新的类型定义应参考 [RFC-1035] 第 3.3 节中现有 RR 类型的格式约定, 采用 <domain-name> 与定长字段相组合的布局, 并遵循 32 位边界对齐的规则.


下一篇 (Next): 4. 消息格式 (Messages)