DNS報文格式

2021-07-03 05:23:18 字數 2846 閱讀 5064

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位址對應的網域名稱),型別列表如下:

型別 助記符

說明1a 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抓的:

對應的報文:

就不再分析了,對比wireshark的分析應該能找到各個字段。

DNS報文格式

dns協議執行在應用層,tcp ip需要使用ip位址,不能使用網域名稱,因此應用層需要將網域名稱轉換成ip位址。dns使用tcp或者udp,一般使用udp,port都是53.dns協議存在諸多rfc文件,每個rfc文件介紹其乙個側面,比如rfc 1035介紹的是網域名稱的實現和規範,rfc 1886...

mysql報文格式 Mysql 報文格式

mysql client和server端之間的的資料根據不同的協議規則的進行組織傳送。每包資料在傳送的時候都要新增上協議頭。mysql原始碼採用5.7.10版本 協議頭 每個協議頭共4個位元組 包資料長度 前三個位元組表示資料部分的長度 不包括協議頭 三位元組能表示的最大長度是16m 1 2 24 ...

mysql報文格式 Mysql 報文格式

mysql client和server端之間的的資料根據不同的協議規則的進行組織傳送。每包資料在傳送的時候都要新增上協議頭。mysql原始碼採用5.7.10版本 協議頭 每個協議頭共4個位元組 包資料長度 前三個位元組表示資料部分的長度 不包括協議頭 三位元組能表示的最大長度是16m 1 2 24 ...