DNS消息格式详解

本文最后更新于:2024年12月26日 下午

DNS消息格式规范 [RFC1035]

DNS(Domain Name System,域名系统)消息用于查询和应答域名解析服务,消息格式分为以下五个部分:

  1. Header(头部)
  2. Question(问题部分)
  3. Answer(回答部分)
  4. Authority(授权信息部分)
  5. Additional(附加信息部分)

1. Header(头部)

头部部分占用 12 字节,定义了消息的基础属性、状态以及数量信息。

Header字段解析:

缩写 全称 位数 描述
ID Identifier 16bit 查询或应答的唯一标识符,查询与应答的 ID 必须一致。
QR Query/Response Flag 1bit 消息类型标识:0 为查询,1 为应答。
Opcode Operation Code 4bit 查询操作码,表示查询类型:0(标准查询),1(反向查询),2(状态请求)。
AA Authoritative Answer Flag 1bit 指示应答是否由权威 DNS 服务器生成,1 为权威应答。
TC Truncation Flag 1bit 指示消息是否被截断,1 表示消息过长被截断。
RD Recursion Desired Flag 1bit 指示客户端是否需要递归查询,1 表示需要递归查询。
RA Recursion Available Flag 1bit 指示服务器是否支持递归查询,1 表示支持。
Z Reserved Flag 3bit 保留字段,必须为 0
Rcode Response Code 4bit 应答码,表示查询结果状态:无错误(0),格式错误(1),服务器错误(2)等。

计数字段(各占 16bit)

  • QDCOUNT: Question 部分的条目数量。
  • ANCOUNT: Answer 部分的资源记录数量。
  • NSCOUNT: Authority 部分的资源记录数量。
  • ARCOUNT: Additional 部分的资源记录数量。

2. Question(问题部分)

Question 部分包含查询的核心内容,定义了查询的目标域名和相关信息。

字段解析:

字段名称 描述
QNAME 查询的域名,采用标签(Label)形式表示。例如,www.example.com 表示为:3www7example3com0
QTYPE 查询的记录类型(16bit):如 1(A 记录),5(CNAME 记录)。
QCLASS 查询的类(16bit):如 1(IN,表示 Internet 类)。

3. Answer / Authority / Additional(回答/授权信息/附加信息部分)

这三个部分都以资源记录(Resource Record, RR)的形式存储,结构相同。

RR字段解析:

字段名称 描述
NAME 与 Question 部分的 QNAME 类似,表示资源记录对应的域名。
TYPE 记录类型(16bit):如 1(A 记录),15(MX 记录)。
CLASS 记录的类(16bit):如 1(IN,表示 Internet 类)。
TTL 生存时间(32bit),以秒为单位,表示记录的缓存时间。
RDLENGTH RDATA 的长度(16bit),以字节为单位。
RDATA 资源数据,根据记录类型决定具体内容:例如 A 记录的 IPv4 地址(4 字节)。

4. 标志字段详细说明

缩写 描述
QR 消息类型:0 为查询,1 为应答。
Opcode 查询操作类型:标准查询(0)、反向查询(1)、状态请求(2)。
AA 权威应答标志:1 表示应答来自权威服务器。
TC 截断标志:1 表示消息长度超过限制被截断。
RD 递归查询请求:1 表示客户端希望递归查询。
RA 递归查询可用:1 表示服务器支持递归查询。
Z 保留字段,必须为 0
Rcode 应答代码,表示查询结果状态:
0 - 无错误,1 - 格式错误,2 - 服务器失败,3 - 名字错误等。

5. 查询与应答流程

  1. 查询消息 包含 Header 和 Question 两部分:
    • Header 中的 QR=0 表示查询。
    • Question 中指定域名(QNAME)、记录类型(QTYPE)等信息。
  2. 应答消息 包含 Header、Question、Answer、Authority、Additional 五部分:
    • Header 中的 QR=1 表示应答。
    • Answer 部分包含查询结果。
    • Authority 部分提供权威 DNS 服务器的信息。
    • Additional 部分提供附加数据,如权威服务器的 IP 地址。

常见记录类型及描述

类型代码 名称 描述
1 A IPv4 地址记录。
5 CNAME 别名记录。
15 MX 邮件交换记录,指示邮件服务器优先级。
2 NS 权威名称服务器记录。
28 AAAA IPv6 地址记录。

通过这种统一的消息格式,DNS 系统实现了灵活、高效的域名解析功能。

DNS 协议总结

类别 优点 缺点
传统 DNS 速度快,实现广泛 传输透明,容易嗅探和审计
DoT 基于 TCP + TLS 层,因为标准化比较早,支持相对广泛 默认端口可能是一个明显的特征。可能存在的 SNI 阻断(这个端口还阻断就过分了吧)
DoH 可以做强鉴权,而且隐藏于 HTTPS 流量中,特征不明显 基于 HTTPS,部署开销较大,而且首次响应速度较慢,不过借助于 keep-alive,之后速度较快。可能 SNI 阻断。
H3 使用 QUIC 协议,基于 UDP 传输,速度较快,性能较好 仍然基于 HTTPS,开销略大,会被 SNI 阻断,UDP QoS
DoQ 使用 QUIC 协议,基于 UDP 传输,速度最快(理论),最接近于传统 DNS 的速度 暂时没发现缺点,如果有的话,那就是 UDP QoS 以及可能存在的 SNI 阻断(这个端口还阻断就过分了吧)

DNS消息格式详解
https://cdro.tech/notes/CS/dns-rfc/
作者
k9Q6CK42
发布于
2024年12月25日
更新于
2024年12月26日
许可协议