dns的報文結構如下,其中黃色為基礎部分,綠色為問題部分,藍色為資源記錄部分。資源記錄部分只在響應包**現。
1.事務id
16bit,dns報文的標識,請求報文和對應的響應報文的事務id應該相同。
2. 標誌
16bit,分為8個字段:
字段長度/bit
作用qr
1查詢報文為0,響應報文為1
opcode
4標準查詢為0,反向查詢為2,請求伺服器狀態為2aa1
授權應答,在響應報文中有效
1表示名稱伺服器是權威伺服器
0表示不是權威伺服器tc1
是否被接斷
1表示響應超過512個位元組,只返回前512個位元組rd1
期望遞迴,在查詢報文中設定
1表示遞迴查詢
0表示迭代查詢ra1
可用遞迴,用於響應rd
1表示伺服器支援遞迴查詢
zero
3保留字段,全為0
rcode
4返回碼
0表示沒有錯誤
1表示請求報文格式錯誤
2表示網域名稱伺服器失敗
3表示解析的網域名稱不存在
4表示查詢型別不支援
5表示拒絕應答
3. 問題計數
16bit,dns查詢請求的數量
4. 回答資源記錄數
16bit,dns響應的數量
5. 權威名稱伺服器計數
16bit,權威名稱伺服器的數量
6. 附加資源記錄數
16bit,額外的記錄數目(權威伺服器對應的ip位址)
問題部分由三個字段組成:查詢名,查詢型別,查詢類
1. 查詢名
要查詢的網域名稱。長度不固定,由一段或多段識別符號組成,首位元組表示隨後識別符號的長度,單位為位元組;每個網域名稱結尾用乙個0位元組表示。例如baidu.com:5b
aidu
3com
0計數計數結尾
2. 查詢型別
16bit,表示要查詢的型別,常見的有:
值助記符說明1
a由網域名稱獲得ipv4位址
28aaaa
由網域名稱獲得ipv6位址
12ptr
由ip位址獲得網域名稱
3. 查詢類
16bit,表示位址型別,常用的是in(值為1),表示網際網路位址。
資源記錄部分包含回答問題區域、權威名稱伺服器區域、附加資訊區域。這三部分的格式都為網域名稱+型別+類+生存時間+資源資料長度+資源資料。
1. 網域名稱
長度可變,dns請求的網域名稱。當此網域名稱與前文重複時,為減小報文的長度可以將此網域名稱壓縮為16bit的指標,指向前文中已經出現過的網域名稱,方法為:
16bit指標的最高兩位均置1,剩餘14位的值表示前文中的網域名稱相對於dns報文頭的偏移位元組數。如:
在上圖中,回答問題區域的網域名稱與問題部分的網域名稱重複,因此使用了指標c0 0c。去掉最高兩位後,指標表示重複網域名稱距離dns的報文頭偏移了0c個位元組。從圖中可以看到,第十三個位元組開始被藍色框住的部分,即為問題部分的網域名稱資料。
2. 型別
16bit,與問題部分的查詢型別相同。
3. 類
16bit,與問題部分的查詢類相同。
4. 生存時間
32bit,表示資源記錄可以快取的時間,單位為秒。
5. 資源資料長度
16bit,資源資料的長度。
6. 資源資料
按要求返回的資源資料。
DNS報文格式
dns報文格式 借個圖貼過來 說明一下 並不是所有dns報文都有以上各個部分的。圖中標示的 12位元組 為dns首部,這部分肯定都會有,首部下面的是正文部分,其中查詢問題部分也都會有。除此之外,回答 授權和額外資訊部分是只出現在dns應答報文中的,而這三部分又都採用資源記錄 recource rec...
DNS報文格式
dns協議執行在應用層,tcp ip需要使用ip位址,不能使用網域名稱,因此應用層需要將網域名稱轉換成ip位址。dns使用tcp或者udp,一般使用udp,port都是53.dns協議存在諸多rfc文件,每個rfc文件介紹其乙個側面,比如rfc 1035介紹的是網域名稱的實現和規範,rfc 1886...
SNMP PDU報文格式解析
snmp規定了5種協議資料單元pdu 也就是snmp報文 用來在管理程序和 之間的交換。get request操作 從 程序處提取乙個或多個引數值 網管系統傳送 get next request操作 從 程序處提取緊跟當前引數值的下乙個引數值 網管系統傳送 set request操作 設定 程序的乙...