DNS及mDNS 名字(名稱)壓縮規則

2021-12-29 22:34:08 字數 1280 閱讀 1210

在網路上傳送時,如果資料的尺寸太大,就會占用網路很長時間進行傳送,這樣網路的效率就比較低。想要提高網路的使用效率,就可以減少傳送的資料的尺寸。當產生乙個mdns資料報, mdns執行程式應該對需要壓縮的資源記錄名字使用名字壓縮,當乙個資料報含多於乙個問題時,乙個資料報中的連續問題經常是相似的名字,就可以使用名稱壓縮來減少整個資料報的位元組數。傳輸壓縮之後的資料報,可以使網路更加有效率。

壓縮本質就是使用乙個兩位元組的指標,指向已有的名字,壓縮後的名字中包含這個指標,(這個指標並不是通常c語言中的記憶體位址,而是乙個偏移量)。

綠色框中的數字表示計數,占用乙個位元組(它的值表示隨後的識別符號位元組數),之後是標籤標示符長度在63位元組之內,最後後以字元 『\0』 結尾。

用乙個指向之前的指標來替代之前的出現的名字,這個指標使用位元組開頭的兩個位元是都是1。這就可以將這兩位元組的乙個指標從乙個標籤中區分出來,因為標籤限制在63個位元組或更少,標籤必須以00位元開始。(10和01組合留作將來使用)。offset段指定乙個從訊息開始(在域頭中id段的第乙個位元組)的偏移。零偏移指的是id段的第乙個位元組。

壓縮方法很簡單,當乙個網域名稱中的識別符號是壓縮的,它的「計數」位元組中的最高兩位將被設定為11。這表示它是乙個16 bit指標而不再是8 bit的計數位元組。指標中的剩下14 bit表示該識別符號在d n s報文中所在的位置偏移(相對於dns報文頭)。注意乙個指標可能指向乙個完整的網域名稱,也可能只指向網域名稱的結尾部分,並且乙個網域名稱也可以前半部分不壓縮,僅對後半部分才應用指標壓縮。此外巢狀壓縮也是存在的,即指標指向的網域名稱也可能是壓縮的(包含乙個指標)。

offset段指乙個從訊息開始(在域頭中id段的第乙個位元組)的偏移。零偏移指的是id段的第乙個位元組。

如乙個資料報中三個名字:

1)         youdian.jsj.com  (假如「y」在資料報中的偏移量為40)

總長度16個位元組

2)          xian.youdian.jsj.com

總長度21個位元組

3) youdian.jsj.com

第二個名字經過壓縮:

長度由原來的21個位元組縮短為現在的7個位元組。

第三個名字經過壓縮後:

長度有原來的16個位元組縮短為現在的兩個位元組

另外有兩點需要注意:

1.     乙個網域名稱僅能包含乙個指標,要麼只有兩個位元組就只包含乙個指標,要麼只在結尾部分跟隨乙個指標。

2.     包含指標的網域名稱無須以字元 『\0』 結尾。

rfc 1035 的4.1.4節所述massage compression

7 3 2 名字空間別名

1 名字空間別名定義根據下述語法為名字空間宣告了乙個可替代的名字 namespace alias identifier namespace alias definition namespace identifier qualified namespace specifier qualified na...

DNS及DNS有什麼作用

什麼是dns,dns有什麼作用 dns domain name system,網域名稱系統 全球資訊網上作為網域名稱和ip位址相互對映的乙個分布式資料庫,能夠使使用者更方便的訪問網際網路,而不用去記住能夠被機器直接讀取的ip數串。dns 全名叫domain name server,中文俗稱 網域名稱...

xml學習5 名字空間

我們知道我們在c 中為了防止函式名字重複我們可以設定名字空間 在 xml中也是一樣 當引用兩個 xml文件的時候 可能出現 元素名字相同 但是意義不同的2個元素 xml解析器無法處理這種情況 這時候為了處理這種情況 於是就出現了名字空間的概念,xml中的名字空間很簡單 看下面是乙個簡單的名字空間 w...