UDP报文的结构
- 报头
1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ID | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |QR| Opcode |AA|TC|RD|RA| Z | RCODE | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | QDCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ANCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | NSCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ARCOUNT | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
这张图大家都用,汗~顶上一个数字表示这列是1bit,后面10-15bit分成两行写了,……
- ID:占2bytes,客户端生成,服务器端返回时靠这个对应客户端的请求
- QR(Question Response):占1bit,0代表查询,1代表响应
- Opcode:占4bits,0代表标准查询,1代表反向查询,2代表服务器状态查询,3-15没啥用,过去还有个完全查询已经废弃了
- AA(Authoritative Answer):占1bit,1代表权威响应,0代表非权威响应
- TC(TrunCation):占1bit,是否截断报文——UDP一个报文只有512bytes
- RD(Recursion Desired):占1bit,客户端生成,服务器端沿袭,1代表启用递归查询
- RA(Recursion Available):占1bit,服务器端生成,1代表服务器支持递归查询
- 这里我们看到实际没有关于迭代的设置,所以RFC中更多的把迭代叫成非递归
- Z:占3bits,保留字段,设0
- RCODE:占4bits,服务器端生成的响应返回码。0:正常,1:格式错误,2:DNS错误,3:域名不存在,4:查询类型不支持,5:拒绝查询
- QDCOUNT:占2bytes,查询记录的个数
- ANCOUNT:占2bytes,回复记录的个数
- NSCOUNT:占2bytes,权威记录的个数
- ARCOUNT:占2bytes,额外记录的个数