UDP报文的结构
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ QNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QTYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QCLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- QNAME:一般就是查询的域名了。被编码成labels序列,每个label包括:1byte表示后续字符串长度+字符串。最后一个label以0长度+空字符串表示域名结束
- QNAME可能是奇数个btyes,不需要填充完整
- 使用label的原因是为了压缩报文,因为可能一个域名查询多个TYPE,所以后面的重复label可以用指针代替
- 在目前的DNS实现中,对一个报文发送多个查询的情况,要求QNAME必须一致,否则递归查询碰上两个不同QNAME权威NS不一致的情况就完蛋鸟~
- QTYPE:查询类型
- QCLASS:查询协议