1. 程式人生 > >DNS報文格式(RFC1035)

DNS報文格式(RFC1035)

zone txt form 暫時 let gen 表示 字節 ron

2、資源記錄定義(RR definitions)
2.1 格式
後面分析報文的時候詳細解釋。
2.2 類型值(TYPE values)
類型主要用在資源記錄中,註意下面的值是QTYPE的一個子集。
類型 值和含義
A 1 a host address
NS 2 an authoritative name server
====
TXT 16 text strings
2.3 查詢類型(QTYPE values)

查詢類型出現在問題字段中,查詢類型是類型的一個超集,所有的類型都是可用的查詢類型,其他查詢類型如下:
AXFR 252 A request for a transfer of an entire zone
MAILB 253 A request for mailbox-related records (MB, MG or MR)
MAILA 254 A request for mail agent RRs (Obsolete - see MX)
* 255 A request for all records
====

二、報文

1、報文格式(Format)
dns請求和應答都是用相同的報文格式,分成5個段(有的報文段在不同的情況下可能為空),如下:
+---------------------+
| Header | 報文頭
+---------------------+
| Question | 查詢的問題
+---------------------+
| Answer | 應答
+---------------------+
| Authority | 授權應答
+---------------------+
| Additional | 附加信息
+---------------------+
Header段是必須存在的,它定義了報文是請求還是應答,也定義了其他段是否需要存在,以及是標準查詢還是其他。
Question段描述了查詢的問題,包括查詢類型(QTYPE),查詢類(QCLASS),以及查詢的域名(QNAME)。剩下的3個段包含相同的格式:一系列可能為空的資源記錄(RRs)。Answer段包含回答問題的RRs;授權段包含授權域名服務器的RRs;附加段包含和請求相關的,但是不是必須回答的RRs。
1.1 Header的格式


報文頭包含如下字段:
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ID |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| Opcode |AA|TC|RD|RA| Z | RCODE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QDCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ANCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| NSCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ARCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
各字段分別解釋如下:
ID 請求客戶端設置的16位標示,服務器給出應答的時候會帶相同的標示字段回來,這樣請求客戶端就可以區分不同的請求應答了。
QR 1個比特位用來區分是請求(0)還是應答(1)。
OPCODE 4個比特位用來設置查詢的種類,應答的時候會帶相同值,可用的值如下:
0 標準查詢 (QUERY)
1 反向查詢 (IQUERY)
2 服務器狀態查詢 (STATUS)
3-15 保留值,暫時未使用
AA 授權應答(Authoritative Answer) - 這個比特位在應答的時候才有意義,指出給出應答的服務器是查詢域名的授權解析服務器。
註意因為別名的存在,應答可能存在多個主域名,這個AA位對應請求名,或者應答中的第一個主域名。
  =====
1.2 Question的格式
在大多數查詢中,Question段包含著問題(question),比如,指定問什麽。這個段包含QDCOUNT(usually 1)個問題,每個問題為下面的格式:
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ QNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QTYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QCLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
字段含義如下
QNAME 域名被編碼為一些labels序列,每個labels包含一個字節表示後續字符串長度,以及這個字符串,以0長度和空字符串來表示域名結束。註意這個字段可能為奇數字節,不需要進行邊界填充對齊。
QTYPE 2個字節表示查詢類型,.取值可以為任何可用的類型值,以及通配碼來表示所有的資源記錄。
QCLASS 2個字節表示查詢的協議類,比如,IN代表Internet。

摘自:http://blog.csdn.net/tigerjibo/article/details/6827736

DNS報文格式(RFC1035)