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 

 

 

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