日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dns 报文格式

發布時間:2023/12/9 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dns 报文格式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近學習了下DNS的格式,發現很多內容都是轉載自同一個而且說的不是很清楚,特再整理下
具體可以查看RFC1035 http://www.ietf.org/rfc/rfc1035.txt有詳細的解釋
對于英語理解不是很好和懶得看這么長的可以看下本文

首先是DNS數據幀的格式

+---------------------+ |????????Header???????|?報文頭 +---------------------+ |???????Question??????|?查詢的問題 +---------------------+ |????????Answer???????|?應答 +---------------------+ |??????Authority??????|?授權應答 +---------------------+ |??????Additional?????|?附加信息 +---------------------+

其中header報文頭是必須有的,其他的有沒有在報文頭里有定義,報文頭格式:

??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位對應請求名,或者應答中的第一個主域名。

TC???? 截斷(TrunCation) - 用來指出報文比允許的長度還要長,導致被截斷。

RD???? 期望遞歸(Recursion Desired) - 這個比特位被請求設置,應答的時候使用的相同的值返回。如果設置了RD,就建議域名服務器進行遞歸解析,遞歸查詢的支持是可選的。

RA???? 支持遞歸(Recursion Available) - 這個比特位在應答中設置或取消,用來代表服務器是否支持遞歸查詢。

Z????? 保留值,暫時未使用。在所有的請求和應答報文中必須置為0。

RCODE? 應答碼(Response code) - 這4個比特位在應答報文中設置,代表的含義如下:

0??? 沒有錯誤。

1??? 報文格式錯誤(Format error) - 服務器不能理解請求的報文。

2??? 服務器失敗(Server failure) - 因為服務器的原因導致沒辦法處理這個請求。

3??? 名字錯誤(Name Error) - 只有對授權域名解析服務器有意義,指出解析的域名不存在。

4??? 沒有實現(Not Implemented) - 域名服務器不支持查詢類型。

5??? 拒絕(Refused) - 服務器由于設置的策略拒絕給出應答。比如,服務器不希望對某些請求者給出應答,或者服務器不希望進行某些操作(比如區域傳送zone transfer)。

6-15 保留值,暫時未使用。

QDCOUNT 無符號16位整數表示報文請求段中的問題記錄數。

ANCOUNT 無符號16位整數表示報文回答段中的回答記錄數。

NSCOUNT 無符號16位整數表示報文授權段中的授權記錄數。

ARCOUNT 無符號16位整數表示報文附加段中的附加記錄數。

然后是question的格式:

??0??1??2??3??4??5??6??7??8??9??0??1??2??3??4??5 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |???????????????????????????????????????????????| |?????????????????????QNAME?????????????????????| |???????????????????????????????????????????????| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |?????????????????????QTYPE?????????????????????| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |?????????????????????QCLASS????????????????????| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

QNAME?? 域名被編碼為一些labels序列,每個labels包含一個字節表示后續字符串長度,以及這個字符串,以0長度和空字符串來表示域名結束。注意這個字段 可能為奇數字節,不需要進行邊界填充對齊。比如www.isnowfy.com表示為03www07isnowfy03com00

QTYPE?? 2個字節表示查詢類型,取值可以為任何可用的類型值,以及通配碼來表示所有的資源記錄。

QCLASS? 2個字節表示查詢的協議類。

?

其中QTYPE類型有

A?????????????? 1 a host address

NS????????????? 2 an authoritative name server

MD????????????? 3 a mail destination (Obsolete - use MX)

MF????????????? 4 a mail forwarder (Obsolete - use MX)

CNAME?????????? 5 the canonical name for an alias

SOA???????????? 6 marks the start of a zone of authority

MB????????????? 7 a mailbox domain name (EXPERIMENTAL)

MG????????????? 8 a mail group member (EXPERIMENTAL)

MR????????????? 9 a mail rename domain name (EXPERIMENTAL)

NULL??????????? 10 a null RR (EXPERIMENTAL)

WKS???????????? 11 a well known service description

PTR???????????? 12 a domain name pointer

HINFO?????????? 13 host information

MINFO?????????? 14 mailbox or mail list information

MX????????????? 15 mail exchange

TXT???????????? 16 text strings

查詢類型出現在問題字段中,查詢類型是類型的一個超集,所有的類型都是可用的查詢類型,其他查詢類型如下:

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

?

其中QCLASS類型有

IN????????????? 1 the Internet

CS????????????? 2 the CSNET class (Obsolete - used only for examples in some obsolete RFCs)

CH????????????? 3 the CHAOS class

HS????????????? 4 Hesiod [Dyer 87]

查詢類是類的一個超集

*?????????????? 255 any class

?

應答格式:

??0??1??2??3??4??5??6??7??8??9??0??1??2??3??4??5 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |???????????????????????????????????????????????| |???????????????????????????????????????????????| |??????????????????????NAME?????????????????????| |???????????????????????????????????????????????| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |??????????????????????TYPE?????????????????????| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |?????????????????????CLASS?????????????????????| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |??????????????????????TTL??????????????????????| |???????????????????????????????????????????????| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |???????????????????RDLENGTH????????????????????| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--| |?????????????????????RDATA?????????????????????| |???????????????????????????????????????????????| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

NAME??? 資源記錄包含的域名

TYPE??? 2個字節表示資源記錄的類型,指出RDATA數據的含義

CLASS?? 2個字節表示RDATA的類

TTL???? 4字節無符號整數表示資源記錄可以緩存的時間。0代表只能被傳輸,但是不能被緩存。

RDLENGTH??????? 2個字節無符號整數表示RDATA的長度

RDATA?? 不定長字符串來表示記錄,格式根TYPE和CLASS有關。比如,TYPE是A,CLASS 是 IN,那么RDATA就是一個4個字節的ARPA網絡地址。

?

報文壓縮:

為了減小報文,域名系統使用一種壓縮方法來消除報文中域名的重復。使用這種方法,后面重復出現的域名或者labels被替換為指向之前出現位置的指針。

??0??1??2??3??4??5??6??7??8??9??0??1??2??3??4??5 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |?1?1?|????????????????OFFSET???????????????????| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

前兩個比特位都為1。因為lablels限制為不多于63個字節,所以label的前兩位一定為0,這樣就可以讓指針與label進行區分。(10 和 01 組合保留,以便日后使用) 。偏移值(OFFSET)表示從報文開始的字節指針。偏移量為0表示ID字段的第一個字節。

壓縮方法讓報文中的域名成為:

- 以0結尾的labels序列

- 一個指針

- 指針結尾的labels序列

指針只能在域名不是特殊格式的時候使用,否則域名服務器或解析器需要知道資源記錄的格式。目前還沒有這種情況,但是以后可能會出現。

如果報文中的域名需要計算長度,并且使用了壓縮算法,那么應該使用壓縮后的長度,而不是壓縮前的長度。

程序可以自由選擇是否使用指針,雖然這回降低報文的容量,而且很容易產生截斷。不過所有的程序都應該能夠理解收到的報文中包含的指針。

比如,一個報文需要使用域名F.ISI.ARPA,FOO.F.ISI.ARPA,ARPA,以及根。忽略報文中的其他字段,應該編碼為:

??+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 20|???????????1???????????|???????????F???????????|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 22|???????????3???????????|???????????I???????????|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 24|???????????S???????????|???????????I???????????|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 26|???????????4???????????|???????????A???????????|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 28|???????????R???????????|???????????P???????????|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 30|???????????A???????????|???????????0???????????|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--++--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 40|???????????3???????????|???????????F???????????|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 42|???????????O???????????|???????????O???????????|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 44|?1?1?|????????????????20???????????????????????|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--++--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 64|?1?1?|????????????????26???????????????????????|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--++--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 92|???????????0???????????|???????????????????????|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

偏移20的是域名F.ISI.ARPA。域名FOO.F.ISI.ARPA偏移40; 這樣表示FOO的label后面跟著一個指向之前F.ISI.ARPA的指針。域名ARPA偏移64,使用一個指針指向F.ISI.ARPA的ARPA。 注意可以用這個指針是因為ARPA是從偏移位置20開始的labels序列中的最后一個label。 根域名在位置92定義為一個0,沒有labels。

一個應答幀的例子:
0000 ?00 24 8c 87 39 7e 74 ea ?3a 5b fe a4 08 00 45 00 ? .$..9~t. :[....E.
0010 ?00 91 55 bd 00 00 30 11 ?62 82 08 08 08 08 c0 a8 ? ..U...0. b.......
0020 ?01 65 00 35 ee c4 00 7d ?78 64 3a 8b 81 80 00 01 ? .e.5...} xd:.....
0030 ?00 01 00 00 00 00 03 77 77 77 07 69 73 6e 6f 77 ? .......w ww.isnow
0040 ?66 79 03 63 6f 6d 00 00 ?1c 00 01 c0 0c 00 05 00 ? fy.com.. ........
0050 ?01 00 00 12 ab 00 02 c0 10 ? ? ? ? ? ? ? ? ? ? ? ?........ .
其中DNS幀從3a8b開始,3a8b是ID,flag8180,問題數1,回答數1,然后綠色部分是域名,回答是棕色部分,域名是c00c用的前面說的壓縮方式


轉載于:https://blog.51cto.com/maorui2005/1741031

總結

以上是生活随笔為你收集整理的dns 报文格式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。