Skip to main content

3. Domain Name Space and RR Definitions (域名空间和RR定义)

本章定义了DNS中域名的编码方式和资源记录的格式。这是实现DNS的核心技术规范。


3.1. Name space definitions (名称空间定义)

域名编码

消息中的域名以标签序列表示。

编码格式:

每个标签表示为:
[长度字节(1字节)][标签内容(N字节)]

示例: www.example.com
编码为: 3www7example3com0

详细说明:

  • 每个标签由一个八位字节长度字段表示,后跟该数量的八位字节
  • 由于每个域名都以根的空标签结尾,因此域名由零长度字节终止
  • 每个长度八位字节的高位两位必须为零
  • 长度字段的其余六位将标签限制为63个八位字节或更少

长度限制:

单个标签: ≤ 63字节
完整域名: ≤ 255字节 (包括长度字节)

标签内容规则

字节值: 标签可以包含八位字节中的任何8位值

强烈建议: 标签遵循本备忘录其他地方描述的首选语法,该语法与现有主机命名约定兼容

比较规则:

  • 名称服务器和解析器必须以大小写不敏感的方式比较标签
  • 假设ASCII零奇偶校验 (即 A=a)
  • 非字母代码必须完全匹配

示例编码:

域名: example.com
标签: ["example", "com", ""]

线格式编码:
0x07 'e' 'x' 'a' 'm' 'p' 'l' 'e' (长度7 + "example")
0x03 'c' 'o' 'm' (长度3 + "com")
0x00 (根标签,长度0)

十六进制: 07 65 78 61 6D 70 6C 65 03 63 6F 6D 00

完整示例:

域名: www.example.com
编码: 3www7example3com0

详细字节:
0x03 0x77 0x77 0x77 (长度3 + "www")
0x07 0x65 0x78 0x61 0x6D 0x70 0x6C 0x65 (长度7 + "example")
0x03 0x63 0x6F 0x6D (长度3 + "com")
0x00 (根标签)

3.2. RR definitions (RR定义)

3.2.1. Format (格式)

所有RR都具有相同的顶层格式:

                                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 /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

字段说明:

字段大小说明
NAME变长所有者名称,即此资源记录所属节点的名称
TYPE2字节RR TYPE代码之一
CLASS2字节RR CLASS代码之一
TTL4字节32位有符号整数,指定资源记录在重新咨询信息源之前可以缓存的时间间隔
RDLENGTH2字节无符号16位整数,指定RDATA字段的八位字节长度
RDATA变长描述资源的八位字节可变长度字符串,格式因TYPE和CLASS而异

TTL特殊值:

  • 0: RR只能用于正在进行的事务,不应缓存
  • 例如,SOA记录始终以零TTL分发以禁止缓存
  • 零值也可用于极易变的数据

3.2.2. TYPE values (TYPE值)

TYPE字段用于资源记录。这些类型是QTYPE的子集。

TYPE说明状态
A1主机地址标准
NS2权威名称服务器标准
MD3邮件目标废弃 - 使用MX
MF4邮件转发器废弃 - 使用MX
CNAME5别名的规范名称标准
SOA6标记授权区域的起始标准
MB7邮箱域名实验性
MG8邮件组成员实验性
MR9邮件重命名域名实验性
NULL10空RR实验性
WKS11众所周知的服务描述标准
PTR12域名指针标准
HINFO13主机信息标准
MINFO14邮箱或邮件列表信息实验性
MX15邮件交换标准
TXT16文本字符串标准

3.2.3. QTYPE values (QTYPE值)

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

额外的QTYPE:

QTYPE说明
AXFR252请求传输整个区域
MAILB253请求邮箱相关记录 (MB, MG或MR)
MAILA254请求邮件代理RR (废弃 - 参见MX)
*255请求所有记录

3.2.4. CLASS values (CLASS值)

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

CLASS说明
IN1Internet
CS2CSNET类 (废弃)
CH3CHAOS类
HS4Hesiod [Dyer 87]

3.2.5. QCLASS values (QCLASS值)

QCLASS字段出现在查询的问题部分。QCLASS是CLASS的超集。

额外的QCLASS:

QCLASS说明
*255任何类

3.3. Standard RRs (标准RR)

以下RR定义应该由所有实现支持。

3.3.1. CNAME RDATA format (CNAME RDATA格式)

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

字段:

  • CNAME: 域名,指定此RR所有者名称的规范或主名称

用途: CNAME RR将别名标识为规范名称

示例:

www.example.com.  3600  IN  CNAME  webserver.example.com.

重要规则: 如果CNAME RR存在于某个节点,则该节点不应存在其他数据。这确保规范名称及其别名的数据不会不同。

3.3.2. HINFO RDATA format (HINFO RDATA格式)

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

字段:

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

用途: HINFO记录用于获取主机的一般信息

示例:

host.example.com.  3600  IN  HINFO  "Intel-x86-64"  "Linux"

3.3.3. MB RDATA format (MB RDATA格式) - 实验性

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

字段:

  • MADNAME: 域名,指定具有指定邮箱的主机

状态: 实验性

3.3.4. MD RDATA format (MD RDATA格式) - 废弃

状态: 废弃 - 使用MX代替

3.3.5. MF RDATA format (MF RDATA格式) - 废弃

状态: 废弃 - 使用MX代替

3.3.6. MG RDATA format (MG RDATA格式) - 实验性

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

字段:

  • MGMNAME: 域名,指定属于由域名标识的邮件组的邮箱

状态: 实验性

3.3.7. MINFO RDATA format (MINFO RDATA格式) - 实验性

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

字段:

  • RMAILBX: 域名,指定负责邮箱的邮箱
  • EMAILBX: 域名,指定接收错误消息的邮箱

状态: 实验性

3.3.8. MR RDATA format (MR RDATA格式) - 实验性

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

字段:

  • NEWNAME: 域名,指定邮箱的正确名称

状态: 实验性

3.3.9. MX RDATA format (MX RDATA格式)

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| PREFERENCE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ EXCHANGE /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

字段:

  • PREFERENCE: 16位整数,指定此主机的优先级。较低的值优先
  • EXCHANGE: 域名,指定愿意充当邮件交换器的主机

示例:

example.com.  3600  IN  MX  10  mail1.example.com.
example.com. 3600 IN MX 20 mail2.example.com.

MX用途: MX记录为EXCHANGE指定的主机触发A类型附加部分处理。MX RR的使用在RFC-974中有详细说明。

3.3.10. NULL RDATA format (NULL RDATA格式) - 实验性

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

字段:

  • <anything>: 任意内容,最多65535字节

用途:

  • NULL RR不用于任何正常操作
  • 可用于实验性目的
  • 可包含任意数据

状态: 实验性

3.3.11. NS RDATA format (NS RDATA格式)

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ NSDNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

字段:

  • NSDNAME: 域名,指定对此域具有权威性的主机

示例:

example.com.  3600  IN  NS  ns1.example.com.
example.com. 3600 IN NS ns2.example.com.

NS用途:

  • NS记录触发常规附加部分处理以定位A类型记录
  • 在引用中使用时,它们标示命名空间中的委派点

3.3.12. PTR RDATA format (PTR RDATA格式)

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ PTRDNAME /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

字段:

  • PTRDNAME: 域名,指向域名空间中的某个位置

用途: 用于反向DNS查找

示例:

1.0.0.127.in-addr.arpa.  3600  IN  PTR  localhost.

PTR用途:

  • PTR记录不触发附加部分处理
  • 这些RR用于特殊域中以指向域名空间中的其他位置
  • 主要用于IN-ADDR.ARPA域中的反向DNS查找

3.3.13. SOA RDATA format (SOA RDATA格式)

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ MNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ RNAME /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| SERIAL |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| REFRESH |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| RETRY |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| EXPIRE |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| MINIMUM |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

字段说明:

字段类型说明
MNAME域名此区域数据的原始或主名称服务器
RNAME域名负责此区域的人员的邮箱 (@ 替换为 .)
SERIAL32位无符号区域的版本号,从服务器用它来确定何时需要区域传输
REFRESH32位有符号从服务器应该查询主服务器以查看区域是否已更改的时间间隔(秒)
RETRY32位有符号如果刷新失败,从服务器应该等待多长时间再尝试(秒)
EXPIRE32位有符号如果无法联系主服务器,从服务器应该停止响应查询的时间(秒)
MINIMUM32位无符号应该应用于此区域中所有RR的最小TTL

示例:

example.com.  3600  IN  SOA  ns1.example.com. admin.example.com. (
2024010101 ; Serial
3600 ; Refresh (1 hour)
1800 ; Retry (30 minutes)
604800 ; Expire (1 week)
86400 ) ; Minimum TTL (1 day)

3.3.14. TXT RDATA format (TXT RDATA格式)

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ TXT-DATA /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

字段:

  • TXT-DATA: 一个或多个字符串

用途: 用于保存描述性文本

示例:

example.com.  3600  IN  TXT  "v=spf1 mx -all"
example.com. 3600 IN TXT "google-site-verification=..."

TXT用途:

  • TXT RR用于保存描述性文本
  • 文本的语义取决于找到它的域
  • 常用于SPF、DKIM、域验证等

3.4. Internet specific RRs (Internet特定RR)

3.4.1. A RDATA format (A RDATA格式)

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ADDRESS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

字段:

  • ADDRESS: 32位Internet地址

用途: 将主机名映射到IPv4地址

示例:

www.example.com.  3600  IN  A  93.184.216.34

A记录用途:

  • 拥有多个Internet地址的主机将有多个A记录
  • A记录不触发附加部分处理
  • 主文件中A行的RDATA部分是表示为四个用点分隔的十进制数字的Internet地址

3.4.2. WKS RDATA format (WKS RDATA格式)

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

字段:

  • ADDRESS: 32位Internet地址
  • PROTOCOL: 8位IP协议号
  • BIT MAP: 可变长度位图,指示哪些端口上的服务可用。位图必须是8位的倍数

用途: WKS记录用于描述特定Internet地址上特定协议支持的众所周知服务

注意: WKS记录在现代DNS实践中很少使用


3.5. IN-ADDR.ARPA domain (IN-ADDR.ARPA域)

反向DNS查找

IN-ADDR.ARPA域用于将Internet地址映射到主机名。

格式: IP地址的八位字节以相反顺序表示,并附加.in-addr.arpa

结构:

  • 域按反向IP地址八位字节组织
  • 每个八位字节在域名中形成一个标签

示例:

IP地址: 192.0.2.1
反向域名: 1.2.0.192.in-addr.arpa

PTR记录:
1.2.0.192.in-addr.arpa. 3600 IN PTR host.example.com.

查询流程:

1. 应用程序请求: "192.0.2.1的主机名是什么?"
2. 解析器构造: 1.2.0.192.in-addr.arpa
3. 查询类型: PTR
4. 返回: host.example.com

用途:

  • IN-ADDR.ARPA域中的PTR记录指向规范主机名
  • 这允许应用程序从地址映射到名称
  • 常用于安全验证、日志记录和访问控制

3.6. Defining new types, classes, and special namespaces (定义新类型、类和特殊名称空间)

扩展性原则

DNS被设计为可扩展的。新的RR类型、类和特殊名称空间可以被定义。

要求:

  1. 新定义必须在RFC中发布
  2. 必须获得IANA分配的代码
  3. 必须向后兼容现有实现

指南:

  • 新类型和类应向IANA注册
  • 实现应能够优雅地处理未知类型
  • 名称服务器应保留并传递未知RR类型
  • RR的通用格式允许添加新类型而不破坏现有实现

实验性类型:

  • 可以在本地使用
  • 不应在Internet上使用
  • 应使用保留范围内的类型代码

私有使用:

  • TYPE 65280-65534: 私有使用
  • CLASS 65280-65534: 私有使用

未知类型处理:

  • 名称服务器必须能够加载和提供未知类型的RR
  • 解析器必须能够处理和缓存未知类型的RR
  • 未知类型在传输时保持其线格式

RR类型快速参考

常用RR类型

类型用途示例
AIPv4地址www.example.com. IN A 93.184.216.34
AAAAIPv6地址www.example.com. IN AAAA 2001:db8::1
CNAME别名www.example.com. IN CNAME server.example.com.
MX邮件服务器example.com. IN MX 10 mail.example.com.
NS名称服务器example.com. IN NS ns1.example.com.
PTR反向查找1.2.0.192.in-addr.arpa. IN PTR host.example.com.
SOA区域授权见上文SOA示例
TXT文本记录example.com. IN TXT "v=spf1 mx -all"

RR编码示例

A记录编码:

www.example.com.  3600  IN  A  93.184.216.34

编码:
NAME: 3www7example3com0 (压缩格式可能更短)
TYPE: 0x0001 (A)
CLASS: 0x0001 (IN)
TTL: 0x00000E10 (3600秒)
RDLENGTH: 0x0004 (4字节)
RDATA: 0x5DB8D822 (93.184.216.34)

下一章: 4. Messages (消息) - DNS消息格式和编码