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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DNS协议详解及报文格式分析

發(fā)布時間:2025/4/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DNS协议详解及报文格式分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

https://blog.csdn.net/tianxuhong/article/details/74922454

目錄

  • 一. DNS協(xié)議理論知識
    • 1.1. 域名結(jié)構(gòu)
    • 1.2. 域名服務(wù)器
    • 1.3. 域名解析過程
  • 二. DNS協(xié)議報文格式
    • 2.1 頭部
    • 2.2 正文
  • 三. Wireshark分析DNS協(xié)議
    • 3.1 請求報文
    • 3.2 響應(yīng)報文

解BUG的過程中碰到了DNS相關(guān)的內(nèi)容,折騰網(wǎng)站和域名郵箱時也對DNS做了一些配置,發(fā)現(xiàn)對一些細(xì)節(jié)有點記不清晰了,因此很有必要重新溫習(xí)一下這方面的知識。學(xué)過網(wǎng)絡(luò)的應(yīng)該記得現(xiàn)代計算機通信的基石是TCP/IP協(xié)議,計算機A想要與計算機B進行通信,首先就必須要知道計算機B的IP地址,就像打電話一樣,你給別人打電話首先必須得知道別人的電話號碼吧,電話號碼都不知道還搞個毛。但是問題來了,讓人們?nèi)ビ洃涍@又臭又長的IP地址或是電話號碼,無疑是不人道的,當(dāng)然,這個小問題也并莫有難倒勤勞勇敢的人民群眾。很快就發(fā)明了通訊錄這個東西,用于將人名與電話號碼聯(lián)系起來。在計算機領(lǐng)域也出現(xiàn)了DNS(Domain Name System),即域名系統(tǒng),用于將域名解析成對應(yīng)的IP地址。本文將介紹DNS協(xié)議的基本理論及其報文格式,最后給出了用Wireshark抓取DNS報文的記錄。如果需要了解更為詳細(xì)的內(nèi)容,請參考 RFC1034 和 RFC1035。


回到頂部

一. DNS協(xié)議理論知識

1.1. 域名結(jié)構(gòu)

域名系統(tǒng)并不像電話號碼通訊錄那么簡單,通訊錄主要是單個個體在使用,同一個名字出現(xiàn)在不同個體的通訊錄里并不會出現(xiàn)問題,但域名是群體中所有人都在用的,必須要保持唯一性。為了達到唯一性的目的,因特網(wǎng)在命名的時候采用了層次結(jié)構(gòu)的命名方法。每一個域名(本文只討論英文域名)都是一個標(biāo)號序列(labels),用字母(A-Z,a-z,大小寫等價)、數(shù)字(0-9)和連接符(-)組成,標(biāo)號序列總長度不能超過255個字符,它由點號分割成一個個的標(biāo)號(label),每個標(biāo)號應(yīng)該在63個字符之內(nèi),每個標(biāo)號都可以看成一個層次的域名。級別最低的域名寫在左邊,級別最高的域名寫在右邊。域名服務(wù)主要是基于UDP實現(xiàn)的,服務(wù)器的端口號為53。

比如:本網(wǎng)站的域名?jocent.me,由點號分割成了兩個域名jocent?和?me,其中?me是頂級域名(TLD,Top-Level Domain),?jocent是二級域名(SLD,Second Level Domain)。關(guān)于域名的層次結(jié)構(gòu),請看下面的示意圖。


注意:最開始的域名最后都是帶了點號的,比如?jocent.me?擱以前的話應(yīng)該是?jocent.me.?,最后面的點號表示根域名服務(wù)器,后來發(fā)現(xiàn)所有的網(wǎng)址都要加上最后的點,就簡化了寫法,干脆所有的都不加,但是你在網(wǎng)址后面加上點號也是可以正常解析的。

1.2. 域名服務(wù)器

有域名結(jié)構(gòu)還不行,還需要有一個東西去解析域名,手機通訊錄是由通訊錄軟件解析的,域名需要由遍及全世界的域名服務(wù)器去解析,域名服務(wù)器實際上就是裝有域名系統(tǒng)的主機。由高向低進行層次劃分,可分為以下幾大類:

  • 根域名服務(wù)器: ? ?最高層次的域名服務(wù)器,也是最重要的域名服務(wù)器,本地域名服務(wù)器如果解析不了域名就會向根域名服務(wù)器求助。全球共有13個不同IP地址的根域名服務(wù)器,它們的名稱用一個英文字母命名,從a一直到m。這些服務(wù)器由各種組織控制,并由 ICANN(互聯(lián)網(wǎng)名稱和數(shù)字地址分配公司)授權(quán),由于每分鐘都要解析的名稱數(shù)量多得令人難以置信,所以實際上每個根服務(wù)器都有鏡像服務(wù)器,每個根服務(wù)器與它的鏡像服務(wù)器共享同一個 IP 地址,中國大陸地區(qū)內(nèi)只有6組根服務(wù)器鏡像(F,I(3臺),J,L)。當(dāng)你對某個根服務(wù)器發(fā)出請求時,請求會被路由到該根服務(wù)器離你最近的鏡像服務(wù)器。所有的根域名服務(wù)器都知道所有的頂級域名服務(wù)器的域名和地址,如果向根服務(wù)器發(fā)出對?“jocent.me”?的請求,則根服務(wù)器是不能在它的記錄文件中找到與?“jocent.me”?匹配的記錄。但是它會找到?“me”?的頂級域名記錄,并把負(fù)責(zé)?“me”?地址的頂級域名服務(wù)器的地址發(fā)回給請求者。
  • 頂級域名服務(wù)器:負(fù)責(zé)管理在該頂級域名服務(wù)器下注冊的二級域名。當(dāng)根域名服務(wù)器告訴查詢者頂級域名服務(wù)器地址時,查詢者緊接著就會到頂級域名服務(wù)器進行查詢。比如還是查詢"jocent.me",根域名服務(wù)器已經(jīng)告訴了查詢者“me”頂級域名服務(wù)器的地址,“me”頂級域名服務(wù)器會找到?“jocent.me”的域名服務(wù)器的記錄,域名服務(wù)器檢查其區(qū)域文件,并發(fā)現(xiàn)它有與?“jocent.me”?相關(guān)聯(lián)的區(qū)域文件。在此文件的內(nèi)部,有該主機的記錄。此記錄說明此主機所在的 IP 地址,并向請求者返回最終答案。
  • 權(quán)限域名服務(wù)器:負(fù)責(zé)一個區(qū)的域名解析工作
  • 本地域名服務(wù)器:當(dāng)一個主機發(fā)出DNS查詢請求的時候,這個查詢請求首先就是發(fā)給本地域名服務(wù)器的。

1.3. 域名解析過程

域名解析總體可分為兩大步驟,第一個步驟是本機向本地域名服務(wù)器發(fā)出一個DNS請求報文,報文里攜帶需要查詢的域名;第二個步驟是本地域名服務(wù)器向本機回應(yīng)一個DNS響應(yīng)報文,里面包含域名對應(yīng)的IP地址。從下面對jocent.me進行域名解析的報文中可明顯看出這兩大步驟。注意:第二大步驟中采用的是迭代查詢,其實是包含了很多小步驟的,詳情見下面的流程分析。

其具體的流程可描述如下:

  • 主機10.74.36.90先向本地域名服務(wù)器10.74.1.11進行遞歸查詢
  • 本地域名服務(wù)器采用迭代查詢,向一個根域名服務(wù)器進行查詢
  • 根域名服務(wù)器告訴本地域名服務(wù)器,下一次應(yīng)該查詢的頂級域名服務(wù)器?dns.me的IP地址
  • 本地域名服務(wù)器向頂級域名服務(wù)器?dns.me進行查詢
  • 頂級域名服務(wù)器me告訴本地域名服務(wù)器,下一步查詢權(quán)限服務(wù)器dns.jocent.me?的IP地址
  • 本地域名服務(wù)器向權(quán)限服務(wù)器?dns.jocent.me進行查詢
  • 權(quán)限服務(wù)器?dns.jocent.me告訴本地域名服務(wù)器所查詢的主機的IP地址
  • 本地域名服務(wù)器最后把查詢結(jié)果告訴 10.74.36.90
  • 其中有兩個概念遞歸查詢和迭代查詢,其實在整個描述的過程中已經(jīng)體現(xiàn)的很明顯,這里再說明一下:

    • 遞歸查詢:本機向本地域名服務(wù)器發(fā)出一次查詢請求,就靜待最終的結(jié)果。如果本地域名服務(wù)器無法解析,自己會以DNS客戶機的身份向其它域名服務(wù)器查詢,直到得到最終的IP地址告訴本機
    • 迭代查詢:本地域名服務(wù)器向根域名服務(wù)器查詢,根域名服務(wù)器告訴它下一步到哪里去查詢,然后它再去查,每次它都是以客戶機的身份去各個服務(wù)器查詢
    回到頂部

    二. DNS協(xié)議報文格式

    2.1 頭部

  • 會話標(biāo)識(2字節(jié)):是DNS報文的ID標(biāo)識,對于請求報文和其對應(yīng)的應(yīng)答報文,這個字段是相同的,通過它可以區(qū)分DNS應(yīng)答報文是哪個請求的響應(yīng)
  • 標(biāo)志(2字節(jié)):
    QR(1bit)查詢/響應(yīng)標(biāo)志,0為查詢,1為響應(yīng)
    opcode(4bit)0表示標(biāo)準(zhǔn)查詢,1表示反向查詢,2表示服務(wù)器狀態(tài)請求
    AA(1bit)表示授權(quán)回答
    TC(1bit)表示可截斷的
    RD(1bit)表示期望遞歸
    RA(1bit)表示可用遞歸
    rcode(4bit)表示返回碼,0表示沒有差錯,3表示名字差錯,2表示服務(wù)器錯誤(Server Failure)
  • 數(shù)量字段(總共8字節(jié)):Questions、Answer RRs、Authority RRs、Additional RRs 各自表示后面的四個區(qū)域的數(shù)目。Questions表示查詢問題區(qū)域節(jié)的數(shù)量,Answers表示回答區(qū)域的數(shù)量,Authoritative namesversers表示授權(quán)區(qū)域的數(shù)量,Additional recoreds表示附加區(qū)域的數(shù)量
  • ?

    2.2 正文

  • Queries區(qū)域1.1 查詢名:長度不固定,且不使用填充字節(jié),一般該字段表示的就是需要查詢的域名(如果是反向查詢,則為IP,反向查詢即由IP地址反查域名),一般的格式如下圖所示。1.2 查詢類型:
    類型助記符說明
    1A由域名獲得IPv4地址
    2NS查詢域名服務(wù)器
    5CNAME查詢規(guī)范名稱
    6SOA開始授權(quán)
    11WKS熟知服務(wù)
    12PTR把IP地址轉(zhuǎn)換成域名
    13HINFO主機信息
    15MX郵件交換
    28AAAA由域名獲得IPv6地址
    252AXFR傳送整個區(qū)的請求
    255ANY對所有記錄的請求

    這里給一個域名,可用來模擬DNS的查詢類型,可以選擇不同的類型,比如A,PTR等玩一下,?https://www.nslookuptool.com/chs/ ??? ??
    1.3 查詢類:通常為1,表明是Internet數(shù)據(jù)

  • 資源記錄(RR)區(qū)域(包括回答區(qū)域,授權(quán)區(qū)域和附加區(qū)域)
  • 該區(qū)域有三個,但格式都是一樣的。這三個區(qū)域分別是:回答區(qū)域,授權(quán)區(qū)域和附加區(qū)域

    2.1. 域名(2字節(jié)或不定長):它的格式和Queries區(qū)域的查詢名字字段是一樣的。有一點不同就是,當(dāng)報文中域名重復(fù)出現(xiàn)的時候,該字段使用2個字節(jié)的偏移指針來表示。比如,在資源記錄中,域名通常是查詢問題部分的域名的重復(fù),因此用2字節(jié)的指針來表示,具體格式是最前面的兩個高位是 11,用于識別指針。其余的14位從DNS報文的開始處計數(shù)(從0開始),指出該報文中的相應(yīng)字節(jié)數(shù)。一個典型的例子,C00C(1100000000001100,12正好是頭部的長度,其正好指向Queries區(qū)域的查詢名字字段)。

    2.2 查詢類型:表明資源紀(jì)錄的類型,見1.2節(jié)的查詢類型表格所示?

    2.3 查詢類:對于Internet信息,總是IN

    2.4 生存時間(TTL):以秒為單位,表示的是資源記錄的生命周期,一般用于當(dāng)?shù)刂方馕龀绦蛉〕鲑Y源記錄后決定保存及使用緩存數(shù)據(jù)的時間,它同時也可以表明該資源記錄的穩(wěn)定程度,極為穩(wěn)定的信息會被分配一個很大的值(比如86400,這是一天的秒數(shù))。

    2.5. 資源數(shù)據(jù):該字段是一個可變長字段,表示按照查詢段的要求返回的相關(guān)資源記錄的數(shù)據(jù)。可以是Address(表明查詢報文想要的回應(yīng)是一個IP地址)或者CNAME(表明查詢報文想要的回應(yīng)是一個規(guī)范主機名)等。

    回到頂部

    三. Wireshark分析DNS協(xié)議

    下面給出wireshark抓包的記錄,感興趣的可以根據(jù)上面介紹的協(xié)議報文格式手動解析一下,相信會有很大收獲。

    3.1 請求報文

    3.2 響應(yīng)報文

    ?

    DNS相關(guān)的命令小貼士:

    • Windows環(huán)境下清空DNS緩存的命令是?ipconfig/flushdns?也可以通過重啟DNS client 和 DHCP client 兩項服務(wù)清空DNS緩存
    • Windows環(huán)境下可以用命令?ipconfig /displaydns? 來查看DNS緩存的內(nèi)容
    • nslookup?命令可以用來查看域名對應(yīng)的IP地址,比如?nslookup jocent.me

    本文撰寫過程中參考了以下幾篇博文的內(nèi)容,現(xiàn)列出鏈接如下:

    轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/articles/10660051.html

    總結(jié)

    以上是生活随笔為你收集整理的DNS协议详解及报文格式分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。