DNS报文格式
DNS报文封装格式
DNS报文封装格式
+------------------------------------------+
| Header |
+------------------------------------------|
| Question |
+------------------------------------------|
| Anser |
+------------------------------------------|
| Authority |
+------------------------------------------|
| Additianal |
+------------------------------------------+
DNS报文封装字段解释
| 字段 | 长度 | 描述 |
|---|---|---|
| Header | 12B | 头部字段,是必须存在的,它定义了报文是请求还是应答,也定义了其他段是否需要存在,以及是标准查询还是其他。 |
| Question | 变长 | 大多数查询中,Question段包含着问题(question),比如,指定问什么。这个段包含QDCOUNT(头部字段中的QDCOUNT字段,通常值是1)个问题。 |
| Anser | 变长 | 分别指应答,授权,附加字段。都共用相同的格式:多个资源记录,资源记录的个数由报文头段中对应的几个数值确定。 |
| Authority | 变长 | |
| Additianal | 变长 |
头部字段格式
Header段是必须存在的,它定义了报文是请求还是应答,也定义了其他段是否需要存在,以及是标准查询还是其他。
头部字段格式如下:
DNS头部字段格式
0 5 6 7 8 11 15
+---------------------------------------------+
| ID |
+---------------------------------------------|
| QR | Opcode | AA | TC | RD | RA | Z | RCODE |
+---------------------------------------------|
| QDCOUNT |
+---------------------------------------------|
| ANCOUNT |
+---------------------------------------------|
| NSCOUNT |
+---------------------------------------------|
| ARCOUNT |
+---------------------------------------------+
DNS头部字段解释
| 字段 | 长度 | 描述 |
|---|---|---|
| ID | 16 bit | 标识字段,客户通过标识字段来确定DNS响应是否与查询请求匹配。 |
| QR | 1bit | 操作类型: 0:查询报文 1:响应报文 |
| OPCODE | 4 bit | 查询类型: 0:标准查询 1:反向查询 2:服务器状态查询 3~15:保留未用 反向查询是客户端请求服务器根据回答生成导致此回答的问题,这个查询类型的使用并不多。 |
| AA | 1 bit | 若置位,则表示该域名解析服务器是授权回答该域的。 |
| TC | 1 bit | 若置位,则表示报文被截断。 使用UDP传输时,应答的总长度超过512字节时,只返回报文的前512个字节内容。 |
| RD | 1 bit | 客户端希望域名解析服务器采取的解析方式: 0:表示希望域名解析服务器采取迭代解析 1:表示希望域名解析服务器采取递归解析 |
| RA | 1 bit | 域名解析服务器采取的解析方式: 0:表示域名解析服务器采取迭代解析 1:表示域名解析服务器采取递归解析 |
| Z | 3 bit | 全部置0,保留未用。 |
| RCODE | 4 bit | 响应类型: 0:无差错 1:查询格式错 2:服务器失效 3:域名不存在 4:查询没有被执行 5:查询被拒绝 6-15: 保留未用 |
| QDCOUNT | 16 bit | 无符号16位整数表示报文请求段中的问题记录数。 |
| ANCOUNT | 16 bit | 无符号16位整数表示报文回答段中的回答记录数。 |
| NSCOUNT | 16 bit | 无符号16位整数表示报文授权段中的授权记录数。 |
| ARCOUNT | 16 bit | 无符号16位整数表示报文附加段中的附加记录数。 |
Question字段的格式
大多数查询中,Question段包含着问题(question),比如,指定问什么。这个段包含QDCOUNT(usually 1)个问题,每个问题为下面的格式:
Question字段的格式
0 15
+---------------------------------------------+
| QNAME |
+---------------------------------------------|
| QTYPE |
+---------------------------------------------|
| QCLASS |
+---------------------------------------------+
Question字段解释
| 字段 | 长度 | 描述 |
|---|---|---|
| QNAME | 变长 | 域名被编码为一些labels序列,每个labels包含一个字节表示后续字符串长度,以及这个字符串,以0长度和空字符串来表示域名结束。注意这个字段可能为奇数字节,不需要进行边界填充对齐。 |
| QTYPE | 2个字节 | 表示查询类型,.取值可以为任何可用的类型值,以及通配码来表示所有的资源记录。 |
| QCLASS | 2个字节 | 表示查询的协议类,比如,IN代表Internet。 |
资源记录字段的格式
资源记录字段的格式
0 15
+---------------------------------------------+
| NAME |
+---------------------------------------------|
| TYPE |
+---------------------------------------------|
| CLASS |
+---------------------------------------------|
| TTL |
+---------------------------------------------|
| RDLENGTH |
+---------------------------------------------|
| RDATA |
+---------------------------------------------+
应答,授权,附加段都共用相同的格式:多个资源记录,资源记录的个数由报文头段中对应的几个数值确定,每个资源记录格式如下:
资源记录字段解释
| 字段 | 长度 | 描述 |
|---|---|---|
| NAME | 不定长 | 资源记录包含的域名。 |
| TYPE | 2B | 表示资源记录的类型,指出RDATA数据的含义。 |
| CLASS | 2B | 表示RDATA的类。 |
| TTL | 4B | 无符号整数,表示资源记录可以缓存的时间。0代表只能被传输,但是不能被缓存。 |
| RDLENGTH | 2B | 无符号整数,表示RDATA的长度。 |
| RDATA | 不定长 | 字符串,表示记录,格式跟TYPE和CLASS有关。比如,TYPE是A,CLASS是IN,那么RDATA就是一个4个字节的ARPA网络地址。 |
参考标准
| 标准 | 描述 |
|---|---|
| DOMAIN NAMES - CONCEPTS AND FACILITIES | |
No comments to display
No comments to display