DNS报文域名压缩

1 不压缩的DNS 域名示例

        示例一

3

www

6

google

3

com

\0

  

      示例二

2

ns

9

xinnetdns

3

com

\0

 

以上数字(绿色背景框)表示计数,占用一个字节(它的值表示随后的标识符字节数),接着是标识符,大小为163个字节,最后以字符 ‘\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’ 结尾。

 

DNS报文域名压缩规则 - libo.deng - libo.deng 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章