dns报文格式举例详解

DNS报文含头部(ID/标志/计数)、查询(QNAME/QTYPE/QCLASS)及回答(NAME/TYPE/CLASS/TTL/RDLENGTH/RDATA),如查询example.com的A记录,返回

DNS报文格式详解与实例分析

DNS协议

域名系统(Domain Name System, DNS)是互联网的核心基础设施,负责将人类可读的域名转换为机器可识别的IP地址,DNS基于UDP协议工作(标准端口53),采用分层查询机制,其核心数据单元为DNS报文,本文将通过报文格式解析和实例演示,深入剖析DNS通信原理。


DNS报文结构

DNS报文由头部(Header)查询问题(Question)资源记录(Resource Record)三部分组成,整体结构如下:

区域 长度(字节) 说明
头部 12 固定长度
查询问题 可变 包含域名和查询类型
资源记录 可变 回答部分(含多条记录)

头部格式(12字节)

字段名 长度(bit) 说明
标识符 16 唯一匹配请求与响应的编号
标志位 16 包含QR、Opcode、AA、TC、RD等控制位
问题计数 16 后续查询问题的数量(通常为1)
回答记录数 16 返回的回答记录数量
授权记录数 16 返回的权威记录数量
额外记录数 16 附加信息记录数量(如域名压缩指针)
标志位详解(16位)
位置(bit) 字段名 长度(bit) 说明
01 QR 2 00=查询,01=响应
23 Opcode 4 操作码(0=标准查询,1=反向查询,2=服务器状态请求等)
4 AA 1 权威应答标志(仅响应报文有效)
5 TC 1 报文截断标志(因UDP长度限制)
6 RD 1 递归查询标志(客户端要求递归查询)
715 RCODE 8 响应码(0=无错误,1=格式错误,2=服务器失败等)

查询问题(Question Section)

该部分包含待解析的域名和查询类型,格式如下:

dns报文格式举例详解

字段名 长度(字节) 说明
查询名称 可变 QNAME字段(域名的标签编码)
查询类型 2 QTYPE字段(如A=1,MX=15等)
查询类 2 QCLASS字段(通常为IN=1,即互联网)

QNAME编码规则

  • 域名按标签分割(如www.example.comwwwexamplecom
  • 每个标签长度(1字节)+ 标签内容(最多63字节)
  • 末尾添加0字节表示结束

资源记录(Resource Record)

资源记录包含以下字段,用于返回查询结果或附加信息:

字段名 长度(字节) 说明
NAME 可变 域名(与查询问题相同则用指针)
TYPE 2 记录类型(A=1,CNAME=5等)
CLASS 2 记录类别(通常为IN=1)
TTL 4 生存时间(秒)
RDLENGTH 2 RDATA字段长度
RDATA 可变 记录数据(如A记录的IP地址)

DNS报文实例分析

示例场景

客户端查询www.example.com的A记录(IPv4地址),服务器返回184.216.34

dns报文格式举例详解

查询报文(客户端→服务器)

头部(12字节)
字段名 十六进制值 十进制值 说明
标识符 0x1234 4660 随机生成的唯一ID
标志位 0x0100 256 QR=0(查询)、RD=1(递归)
问题计数 0x0001 1 1个查询问题
其他字段 0x0000 0 初始值为0
查询问题(QNAME)

域名:www.example.com → 编码为:

0x03 www 0x07 example 0x03 com 0x00
  • 0x03表示标签长度3,后跟www
  • 0x07表示标签长度7,后跟example
  • 0x03表示标签长度3,后跟com
  • 0x00结束符
QTYPE和QCLASS
  • QTYPE=0x0001(A记录)
  • QCLASS=0x0001(IN类)

响应报文(服务器→客户端)

头部(12字节)
字段名 十六进制值 说明
标识符 0x1234 与请求报文一致
标志位 0x8180 QR=1(响应)、AA=1(权威)
回答记录数 0x0001 1条回答记录
其他字段 0x0000 无授权/额外记录
回答记录(A记录)
  • NAME: 0xC00C(指针指向查询问题中的域名)
  • TYPE: 0x0001(A记录)
  • CLASS: 0x0001(IN类)
  • TTL: 0x0000003C(60秒)
  • RDLENGTH: 0x0004(4字节IP地址)
  • RDATA: 0x5C BC E0 FC(93.184.216.34)

常见问题与解答

Q1:为什么DNS报文头部需要标识符?

A1:标识符用于匹配请求与响应报文,客户端发送查询时生成随机16位ID,服务器需原样返回该ID,确保客户端能正确关联响应与原始请求,若ID不匹配,客户端会丢弃无效响应。

dns报文格式举例详解

Q2:DNS如何实现域名压缩?

A2:域名压缩通过指针(CNAME)实现,在回答记录中,若域名与查询问题完全相同,则用0xC0+偏移量替代完整域名,偏移量指向查询问题中的域名起始位置,可节省数十字节的重复数据,此机制对长域名链(如sub.longdomain.example.com

来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/202563.html

Like (0)
小编小编
Previous 2025年5月12日 03:22
Next 2025年5月12日 03:37

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注