1. 不压缩的DNS 域名示例
示例一
3 | www | 6 | | 3 | com | \0 |
示例二
2 | ns | 9 | xinnetdns | 3 | com | \0 |
以上数字(绿色背景框)表示计数,占用一个字节(它的值表示随后的标识符字节数),接着是标识符,大小为1~63个字节,最后以字符 ‘\0’ 结尾。
对于MX请求返回的域名,前面2个字节用来标记邮件服务器的preference(优先级),并且对于压缩的格式也一
样。
示例三
50 (preference,2字节) | 5 | tommx | 3 | 163 | 3 | net | \0 |
2. 压缩的DNS域名示例
DNS返回的报文可能包括多个重复的域名,因此使用压缩方式。
压缩方法很简单,当一个域名中的标识符是压缩的,它的“计数”字节中的最高两位将被设置为11。
这表示它是一个16 bit指针而不再是8 bit的计数字节。指针中的剩下14 bit表示该标识符在D N S报
文中所在的位置偏移(相对于DNS报文头)。注意一个指针可能指向一个完整的域名,也可能只指向
域名的结尾部分,并且一个域名也可以前半部分不压缩,仅对后半部分才应用指针压缩。此外嵌套压缩
也是存在的,即指针指向的域名也可能是压缩的(包含一个指针)。
另外有两点需要注意:
(1) 一个域名仅能包含一个指针,要么只有两个字节就只包含一个指针,要么只在结尾部分跟随一个指针。
(2) 包含指针的域名无须以字符 ‘\0’ 结尾。
原文连接如下: