DNS报文结构全解析

DNS报文格式概述

DNS(Domain Name System)报文是用于域名解析的协议数据单元,分为查询报文和响应报文。所有DNS报文均采用统一的二进制格式,由头部(Header)、问题部分(Question)、回答部分(Answer)、授权部分(Authority)和附加部分(Additional)组成。


DNS报文头部(Header)

头部固定12字节,包含控制字段和计数字段:

复制代码
 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                     ID                        |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| Opcode |AA|TC|RD|RA| Z      |   RCODE      |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    QDCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    ANCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    NSCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    ARCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  • ID(16位):事务标识符,匹配查询与响应。
  • QR(1位):0表示查询,1表示响应。
  • Opcode(4位):操作码,0标准查询,1逆向查询,2服务器状态请求。
  • AA(1位):权威应答,表示服务器是权威服务器,仅响应报文有效。
  • TC(1位):截断标志,表示报文超过512字节被截断,只返回前512个字节。
  • RD(1位):递归查询请求。
  • RA(1位):响应中指示服务器是否支持递归。
  • Z(3位):保留字段,请求和应答报文中,它的值必须为 0。
  • RCODE(4位):响应码,0无错误,1格式错误,2服务器失败,3域名不存在,4查询类型不支持,5拒绝应答等。
  • QDCOUNT/ANCOUNT/NSCOUNT/ARCOUNT(各16位):分别表示问题、回答、授权和附加记录的数量。

问题部分(Question)

问题部分包含查询的域名和查询类型:

复制代码
+---------------------+
|        QNAME        | (可变长度,以0结尾的域名)
+---------------------+
|        QTYPE        | (16位,查询类型如A、MX等)
+---------------------+
|        QCLASS       | (16位,通常为IN表示Internet)
+---------------------+
  • QNAME :域名使用标签序列表示,如www.example.com编码为3www7example3com0
  • QTYPE:常见类型包括A(IPv4地址)、AAAA(IPv6地址)、MX(邮件交换记录)等。
  • QCLASS:通常为1(IN),表示Internet类。

资源记录(RR)格式

回答、授权和附加部分均采用资源记录(Resource Record)格式:

复制代码
+---------------------+
|        NAME         | (可变长度,与QNAME格式相同)
+---------------------+
|        TYPE         | (16位,记录类型)
+---------------------+
|        CLASS        | (16位,通常为IN)
+---------------------+
|        TTL          | (32位,生存时间,秒)
+---------------------+
|       RDLENGTH      | (16位,RDATA的字节长度)
+---------------------+
|        RDATA        | (可变长度,记录数据)
+---------------------+
  • RDATA内容
    • A记录:4字节IPv4地址。
    • AAAA记录:16字节IPv6地址。
    • MX记录:优先级(16位) + 邮件服务器域名。
    • CNAME记录:规范名字的域名。

压缩标签(Name Compression)

为减少报文大小,DNS支持域名压缩:

  • 使用2字节指针(格式11xxxxxx xxxxxxxx)指向报文中已出现的域名位置。
  • 例如,若之前出现过example.com,后续可用指针替代重复部分。

查询类型(QTYPE)常见值

  • A (1):请求主机的 IPv4 地址。
  • AAAA (28):请求主机的 IPv6 地址。
  • CNAME (5):请求规范名称(别名解析)。
  • MX (15):请求邮件交换服务器记录。
  • NS (2):请求权威名称服务器记录。
  • PTR (12):反向查询,将 IP 地址解析为域名。
  • SOA (6):请求域区的起始授权记录(包含管理信息)。
  • TXT (16):请求文本信息(如 SPF、DKIM 记录)。
  • SRV (33):请求提供服务的主机及端口号。

资源记录类别(QCLASS)常见值

  • IN (Internet, 1):默认类别,用于互联网资源记录(如A、AAAA、MX记录等)。
  • CS (CSNET, 2):历史遗留类别,原用于CSNET网络,现极少使用。
  • CH (CHAOS, 3):用于CHAOSNET网络的实验性类别。
  • HS (Hesiod, 4):用于Hesiod目录服务的类别。
  • ANY (255):通配符类别,表示查询所有类别的记录(需服务器支持)。

SRV的数据格式

  • **Priority (16位):**优先级,数值越低优先级越高。
  • **Weight (16位):**权重,用于相同优先级时的负载分配。
  • **Port (16位):**端口,服务运行的端口号。
  • **Target (16位):**目标(与QNAME格式相同),指向提供服务的主机。

请求服务器名称格式:_服务._协议.域名(如_sip._tcp.example.com)


示例:A记录查询报文

以下为查询www.example.com的A记录的简化报文(十六进制):

复制代码
Header:
00 01  - ID
01 00  - QR=0, Opcode=0, RD=1
00 01  - QDCOUNT=1
00 00  - ANCOUNT=0
00 00  - NSCOUNT=0
00 00  - ARCOUNT=0

Question:
03 77 77 77 07 65 78 61 6D 70 6C 65 03 63 6F 6D 00  - QNAME="www.example.com"
00 01  - QTYPE=A
00 01  - QCLASS=IN
相关推荐
TlSfoward1 天前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记1 天前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
LabVIEW开发1 天前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序
RD_daoyi1 天前
外链权重暴跌至13%,品牌提及反超传统链接——2026年不做Digital PR,你的独立站等于隐形
运维·网络·学习·机器学习·搜索引擎
张小姐的猫1 天前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
国科安芯1 天前
星间光链路:AS32S601型抗辐射MCU在空间激光通信终端控制中的技术实现
服务器·网络·单片机·嵌入式硬件·物联网·安全·信息与通信
可视化运维管理爱好者1 天前
nVisual Studio:数据中心网络智能规划设计工具
网络·ide·visual studio
天行健,君子而铎1 天前
知影-API风险监测系统:数据流转安全的核心防护方案
网络
其实防守也摸鱼1 天前
补天SRC新手入门指南:从0到1的漏洞挖掘之路
网络·python·学习·安全·web安全·数据挖掘·挖洞
运维行者_1 天前
如何查看每个IP的带宽使用情况?NetFlow 技术实战指南
开发语言·网络·分布式·后端·架构·带宽