DNS報文格式

 DNS報文格式 

DNS報文格式(借個圖貼過來): 
 
 
    說明一下:並不是所有DNS報文都有以上各個部分的。圖中標示的“12字節”爲DNS首部,這部分肯定都會有,首部下面的是正文部分,其中查詢問題部分也都會有。除此之外,回答、授權和額外信息部分是隻出現在DNS應答報文中的,而這三部分又都採用資源記錄(Recource Record)的相同格式,這個稍後會提到。下面逐個字段地分析DNS報文。
 
    標識(2字節):這個字段網上的解釋有點不清楚:“由客戶程序設置並有服務器返回結果。”看了下實驗室的程序和文檔,原來這個字段可以看作是DNS報文的ID,對於相關聯的請求報文和應答報文,這個字段是相同的,由此可以區分DNS應答報文是哪個請求報文的響應。
 
    標誌(2字節):這部分非常重要,需要逐比特分析。再借個圖:
 
 
 
    QR(1比特):查詢/響應的標誌位,1爲響應,0爲查詢。
 
    opcode(4比特):定義查詢或響應的類型(若爲0則表示是標準的,若爲1則是反向的,若爲2則是服務器狀態請求)。
 
    AA(1比特):授權回答的標誌位。該位在響應報文中有效,1表示名字服務器是權限服務器(關於權限服務器以後再討論)
 
    TC(1比特):截斷標誌位。1表示響應已超過512字節並已被截斷(依稀好像記得哪裏提過這個截斷和UDP有關,先記着)
 
    RD(1比特):該位爲1表示客戶端希望得到遞歸回答(遞歸以後再討論)
 
    RA(1比特):只能在響應報文中置爲1,表示可以得到遞歸響應。
 
    zero(3比特):不說也知道都是0了,保留字段。
 
   rcode(4比特):返回碼,表示響應的差錯狀態,通常爲0和3,各取值含義如下:
 
0          無差錯
 
1          格式差錯
 
2          問題在域名服務器上
 
3          域參照問題
 
4          查詢類型不支持
 
5          在管理上被禁止
 
6          -- 15 保留
 
 
    標誌段說完了,下面是問題數、資源記錄數、授權資源記錄數和額外資源記錄數,這四個字段都是兩字節,分別對應下面的查詢問題、回答、授權和額外信息部分的數量。一般問題數都爲1,DNS查詢報文中,資源記錄數、授權資源記錄數和額外資源記錄數都爲0.
 
    該說正文部分了。查詢問題部分格式如下:
 
 
    查詢名部分長度不定,一般爲要查詢的域名(也會有IP的時候,即反向查詢)。此部分由一個或者多個標示符序列組成,每個標示符以首字節數的計數值來說明該標示符長度,每個名字以0結束。計數字節數必須是0~63之間。該字段無需填充字節。還是借個例子來說明更直觀些,查詢名爲gemini.tuc.noao.edu的話,查詢名字段如下:
 
    查詢類型(2字節):通常查詢類型爲A(由名字獲得IP地址)或者PTR(獲得IP地址對應的域名),類型列表如下:

  類型

助記符

說明

1

A

IPv4地址。

2

NS

名字服務器。

5

CNAME

規範名稱。定義主機的正式名字的別名。

6

SOA

開始授權。標記一個區的開始。

11

WKS

熟知服務。定義主機提供的網絡服務。

12

PTR

指針。把IP地址轉化爲域名。

13

HINFO

主機信息。給出主機使用的硬件和操作系統的表述。

15

MX

郵件交換。把郵件改變路由送到郵件服務器。

28

AAAA

IPv6地址。

252

AXFR

傳送整個區的請求。

255

ANY

對所有記錄的請求。

 
   查詢類(2字節):通常爲1,指Internet數據。
 
前面說過,回答字段,授權字段和附加信息字段均採用資源記錄RR(Resource Record)的相同格式。該格式如下:
 
 
 
    域名字段(不定長或2字節):記錄中資源數據對應的名字,它的格式和查詢名字段格式相同。當報文中域名重複出現時,就需要使用2字節的偏移指針來替換。例如,在資源記錄中,域名通常是查詢問題部分的域名的重複,就需要用指針指向查詢問題部分的域名。關於指針怎麼用,TCP/IP詳解裏面有,即2字節的指針,最簽名的兩個高位是11,用於識別指針。其他14位從報文開始處計數(從0開始),指出該報文中的相應字節數。注意,DNS報文的第一個字節是字節0,第二個報文是字節1。一般響應報文中,資源部分的域名都是指針C00C(1100000000001100),剛好指向請求部分的域名。
 
    類型(2字節)、類(2字節):含義與查詢問題部分的類型和類相同。
 
    生存時間(4字節):該字段表示資源記錄的生命週期(以秒爲單位),一般用於當地址解析程序取出資源記錄後決定保存及使用緩存數據的時間。
 
    資源數據長度(2字節):表示資源數據的長度(以字節爲單位,如果資源數據爲IP則爲0004)
 
    資源數據:該字段是可變長字段,表示按查詢段要求返回的相關資源記錄的數據。
 
    基本上對DNS報文格式的分析就是這些了。貼個報文實例,用wireshark抓的:
 
 

 

 
    對應的報文:
  
來自: http://hi.baidu.com/hcq11/blog/item/5e3a1bed2ef1ced8b21cb179.html 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章