DNS字段详解
一、DNS基础结构

1. DNS头部(Header)
1.1 事务ID(Transaction ID)
含义: 用于标识每个DNS请求和响应的唯一标识符,在请求和响应中,该字段的值必须相同,以便区分不同的事务。

长度: 2字节
示例值: 0x9ad0
1.2 标志(Flags)
含义: 包含多个子字段,用于指示消息的类型、操作码、是否递归查询等。
长度: 2字节
子字段:
QR: 查询/响应标志(Query/Response)
Opcode: 操作码(Operation Code)
AA: 授权回答(Authoritative Answer)
TC: 截断标志(Truncated Message)
RD: 递归期望(Recursion Desired)

RA: 递归可用(Recursion Available)
Z: 保留位(Zero Bit)
Rcode: 返回码(Reply Code)
1.3 问题计数(Questions)
含义: 表示DNS报文中的问题部分数量。
长度: 2字节
示例值: 1
1.4 回答资源记录数(Answer RRs)
含义: 表示DNS响应中包含的资源记录数量。
长度: 2字节
示例值: 通常为0,除非是响应报文。
1.5 权威名称服务器计数(Authority RRs)
含义: 表示权威名称服务器的资源记录数量。
长度: 2字节
示例值: 通常为0,除非是响应报文。
1.6 附加资源记录数(Additional RRs)
含义: 表示附加资源记录的数量。
长度: 2字节
示例值: 通常为0,除非是响应报文。
二、DNS查询部分(Question Section)
2.1 QNAME(查询的域名)
含义: 要查询的域名。
长度: 可变长
编码方式: 每个标签的长度+标签内容,以ASCII码0结束。
示例: www.example.com
2.2 QTYPE(查询类型)
含义: 指定查询的资源记录类型。
长度: 2字节
常见值:
A: 地址记录
NS: 名称服务器记录
CNAME: 别名记录
PTR: 反向解析记录
MX: 邮件交换记录
2.3 QCLASS(查询类别)
含义: 指定查询的类别。
长度: 2字节
常见值: IN (Internet)
三、DNS响应部分(Answer Section)
3.1 ANCOUNT, ANCOUNT字段表示回答部分中的资源记录数量。
含义: 表示回答部分中的资源记录数量。
长度: 2字节
3.2 NAME, TYPE, TTL, RDLENGTH, and RDATA(回答部分的资源记录)
NAME: 域名(与查询部分格式相同)。
TYPE: 资源记录类型。
TTL: 生存时间(Time To Live),表示该记录的有效时间。
RDLENGTH: 资源数据长度。
RDATA: 实际的资源数据(如IPv4地址)。
四、权威部分(Authority Section)和附加部分(Additional Section)
4.1 格式与回答部分类似
包括NAME, TYPE, TTL, RDLENGTH, and RDATA字段。
提供权威服务器信息和附加记录,如DNSSEC签名等。
五、实例分析
5.1 DNS请求报文实例
| Transaction ID | Flags | Questions | Answer RRs | Authority RRs | Additional RRs | ||||||| | 0x9ad0 | ...0000... | 1 | 0 | 0 | 0 | | QNAME | www.example.com | QTYPE | A | QCLASS | IN |
5.2 DNS响应报文实例
| Transaction ID | Flags | Questions | Answer RRs | Authority RRs | Additional RRs | ||||||| | 0x9ad0 | ...8180... | 1 | 1 | 0 | 0 | | NAME | www.example.com | TYPE | A | TTL | 3600 | | RDLENGTH | 4 | RDATA | 93.184.216.34 | | |
DNS协议通过其精心设计的报文结构和丰富的字段定义,实现了域名到IP地址的高效映射,支持了多种查询方式和资源记录类型,为互联网的稳定运行提供了坚实的基础。