轉(zhuǎn):https://jocent.me/2017/06/18/dns-protocol-principle.html
解BUG的過程中碰到了DNS相關(guān)的內(nèi)容玷坠,折騰網(wǎng)站和域名郵箱時(shí)也對(duì)DNS做了一些配置,發(fā)現(xiàn)對(duì)一些細(xì)節(jié)有點(diǎn)記不清晰了,因此很有必要重新溫習(xí)一下這方面的知識(shí)。學(xué)過網(wǎng)絡(luò)的應(yīng)該記得現(xiàn)代計(jì)算機(jī)通信的基石是TCP/IP協(xié)議泳猬,計(jì)算機(jī)A想要與計(jì)算機(jī)B進(jìn)行通信蛾娶,首先就必須要知道計(jì)算機(jī)B的IP地址,就像打電話一樣均澳,你給別人打電話首先必須得知道別人的電話號(hào)碼吧,電話號(hào)碼都不知道還搞個(gè)毛符衔。但是問題來了找前,讓人們?nèi)ビ洃涍@又臭又長(zhǎng)的IP地址或是電話號(hào)碼,無疑是不人道的判族,當(dāng)然躺盛,這個(gè)小問題也并莫有難倒勤勞勇敢的人民群眾。很快就發(fā)明了通訊錄這個(gè)東西五嫂,用于將人名與電話號(hào)碼聯(lián)系起來颗品。在計(jì)算機(jī)領(lǐng)域也出現(xiàn)了DNS(Domain Name System)肯尺,即域名系統(tǒng),用于將域名解析成對(duì)應(yīng)的IP地址躯枢。本文將介紹DNS協(xié)議的基本理論及其報(bào)文格式则吟,最后給出了用Wireshark抓取DNS報(bào)文的記錄。如果需要了解更為詳細(xì)的內(nèi)容锄蹂,請(qǐng)參考 RFC1034 和 RFC1035氓仲。
一. DNS協(xié)議理論知識(shí)
1.1. 域名結(jié)構(gòu)
域名系統(tǒng)并不像電話號(hào)碼通訊錄那么簡(jiǎn)單,通訊錄主要是單個(gè)個(gè)體在使用得糜,同一個(gè)名字出現(xiàn)在不同個(gè)體的通訊錄里并不會(huì)出現(xiàn)問題敬扛,但域名是群體中所有人都在用的,必須要保持唯一性朝抖。為了達(dá)到唯一性的目的啥箭,因特網(wǎng)在命名的時(shí)候采用了層次結(jié)構(gòu)的命名方法。每一個(gè)域名(本文只討論英文域名)都是一個(gè)標(biāo)號(hào)序列(labels)治宣,用字母(A-Z急侥,a-z,大小寫等價(jià))侮邀、數(shù)字(0-9)和連接符(-)組成坏怪,標(biāo)號(hào)序列總長(zhǎng)度不能超過255個(gè)字符,它由點(diǎn)號(hào)分割成一個(gè)個(gè)的標(biāo)號(hào)(label)绊茧,每個(gè)標(biāo)號(hào)應(yīng)該在63個(gè)字符之內(nèi)铝宵,每個(gè)標(biāo)號(hào)都可以看成一個(gè)層次的域名。級(jí)別最低的域名寫在左邊华畏,級(jí)別最高的域名寫在右邊鹏秋。域名服務(wù)主要是基于UDP實(shí)現(xiàn)的,服務(wù)器的端口號(hào)為53唯绍。
比如:本網(wǎng)站的域名?jocent.me拼岳,由點(diǎn)號(hào)分割成了兩個(gè)域名jocent?和?me枝誊,其中?me是頂級(jí)域名(TLD况芒,Top-Level Domain),?jocent是二級(jí)域名(SLD叶撒,Second Level Domain)绝骚。關(guān)于域名的層次結(jié)構(gòu),請(qǐng)看下面的示意圖祠够。
注意:最開始的域名最后都是帶了點(diǎn)號(hào)的压汪,比如?jocent.me擱以前的話應(yīng)該是?jocent.me.,最后面的點(diǎn)號(hào)表示根域名服務(wù)器古瓤,后來發(fā)現(xiàn)所有的網(wǎng)址都要加上最后的點(diǎn)止剖,就簡(jiǎn)化了寫法腺阳,干脆所有的都不加,但是你在網(wǎng)址后面加上點(diǎn)號(hào)也是可以正常解析的穿香。
1.2. 域名服務(wù)器
有域名結(jié)構(gòu)還不行亭引,還需要有一個(gè)東西去解析域名,手機(jī)通訊錄是由通訊錄軟件解析的皮获,域名需要由遍及全世界的域名服務(wù)器去解析焙蚓,域名服務(wù)器實(shí)際上就是裝有域名系統(tǒng)的主機(jī)。由高向低進(jìn)行層次劃分洒宝,可分為以下幾大類:
根域名服務(wù)器:最高層次的域名服務(wù)器购公,也是最重要的域名服務(wù)器,本地域名服務(wù)器如果解析不了域名就會(huì)向根域名服務(wù)器求助雁歌。全球共有13個(gè)不同IP地址的根域名服務(wù)器宏浩,它們的名稱用一個(gè)英文字母命名,從a一直到m靠瞎。這些服務(wù)器由各種組織控制绘闷,并由 ICANN(互聯(lián)網(wǎng)名稱和數(shù)字地址分配公司)授權(quán),由于每分鐘都要解析的名稱數(shù)量多得令人難以置信较坛,所以實(shí)際上每個(gè)根服務(wù)器都有鏡像服務(wù)器印蔗,每個(gè)根服務(wù)器與它的鏡像服務(wù)器共享同一個(gè) IP 地址,中國(guó)大陸地區(qū)內(nèi)只有6組根服務(wù)器鏡像(F丑勤,I(3臺(tái))华嘹,J,L)法竞。當(dāng)你對(duì)某個(gè)根服務(wù)器發(fā)出請(qǐng)求時(shí)耙厚,請(qǐng)求會(huì)被路由到該根服務(wù)器離你最近的鏡像服務(wù)器。所有的根域名服務(wù)器都知道所有的頂級(jí)域名服務(wù)器的域名和地址岔霸,如果向根服務(wù)器發(fā)出對(duì)?“jocent.me”?的請(qǐng)求薛躬,則根服務(wù)器是不能在它的記錄文件中找到與?“jocent.me”?匹配的記錄。但是它會(huì)找到“me”的頂級(jí)域名記錄呆细,并把負(fù)責(zé)?“me”?地址的頂級(jí)域名服務(wù)器的地址發(fā)回給請(qǐng)求者型宝。
頂級(jí)域名服務(wù)器:負(fù)責(zé)管理在該頂級(jí)域名服務(wù)器下注冊(cè)的二級(jí)域名。當(dāng)根域名服務(wù)器告訴查詢者頂級(jí)域名服務(wù)器地址時(shí)絮爷,查詢者緊接著就會(huì)到頂級(jí)域名服務(wù)器進(jìn)行查詢趴酣。比如還是查詢"jocent.me",根域名服務(wù)器已經(jīng)告訴了查詢者“me”頂級(jí)域名服務(wù)器的地址坑夯,“me”頂級(jí)域名服務(wù)器會(huì)找到?“jocent.me”的域名服務(wù)器的記錄岖寞,域名服務(wù)器檢查其區(qū)域文件,并發(fā)現(xiàn)它有與?“jocent.me”?相關(guān)聯(lián)的區(qū)域文件柜蜈。在此文件的內(nèi)部仗谆,有該主機(jī)的記錄指巡。此記錄說明此主機(jī)所在的 IP 地址,并向請(qǐng)求者返回最終答案隶垮。
權(quán)限域名服務(wù)器:負(fù)責(zé)一個(gè)區(qū)的域名解析工作
本地域名服務(wù)器:當(dāng)一個(gè)主機(jī)發(fā)出DNS查詢請(qǐng)求的時(shí)候厌处,這個(gè)查詢請(qǐng)求首先就是發(fā)給本地域名服務(wù)器的。
1.3. 域名解析過程
域名解析總體可分為兩大步驟岁疼,第一個(gè)步驟是本機(jī)向本地域名服務(wù)器發(fā)出一個(gè)DNS請(qǐng)求報(bào)文阔涉,報(bào)文里攜帶需要查詢的域名;第二個(gè)步驟是本地域名服務(wù)器向本機(jī)回應(yīng)一個(gè)DNS響應(yīng)報(bào)文捷绒,里面包含域名對(duì)應(yīng)的IP地址瑰排。從下面對(duì)jocent.me進(jìn)行域名解析的報(bào)文中可明顯看出這兩大步驟。注意:第二大步驟中采用的是迭代查詢暖侨,其實(shí)是包含了很多小步驟的椭住,詳情見下面的流程分析。
其具體的流程可描述如下:
主機(jī)10.74.36.90先向本地域名服務(wù)器10.74.1.11進(jìn)行遞歸查詢
本地域名服務(wù)器采用迭代查詢字逗,向一個(gè)根域名服務(wù)器進(jìn)行查詢
根域名服務(wù)器告訴本地域名服務(wù)器京郑,下一次應(yīng)該查詢的頂級(jí)域名服務(wù)器?dns.me的IP地址
本地域名服務(wù)器向頂級(jí)域名服務(wù)器?dns.me進(jìn)行查詢
頂級(jí)域名服務(wù)器me告訴本地域名服務(wù)器,下一步查詢權(quán)限服務(wù)器dns.jocent.me?的IP地址
本地域名服務(wù)器向權(quán)限服務(wù)器?dns.jocent.me進(jìn)行查詢
權(quán)限服務(wù)器?dns.jocent.me告訴本地域名服務(wù)器所查詢的主機(jī)的IP地址
本地域名服務(wù)器最后把查詢結(jié)果告訴 10.74.36.90
其中有兩個(gè)概念遞歸查詢和迭代查詢葫掉,其實(shí)在整個(gè)描述的過程中已經(jīng)體現(xiàn)的很明顯些举,這里再說明一下:
遞歸查詢:本機(jī)向本地域名服務(wù)器發(fā)出一次查詢請(qǐng)求,就靜待最終的結(jié)果俭厚。如果本地域名服務(wù)器無法解析户魏,自己會(huì)以DNS客戶機(jī)的身份向其它域名服務(wù)器查詢,直到得到最終的IP地址告訴本機(jī)
迭代查詢:本地域名服務(wù)器向根域名服務(wù)器查詢挪挤,根域名服務(wù)器告訴它下一步到哪里去查詢叼丑,然后它再去查,每次它都是以客戶機(jī)的身份去各個(gè)服務(wù)器查詢
二. DNS協(xié)議報(bào)文格式
2.1 頭部
會(huì)話標(biāo)識(shí)(2字節(jié)):是DNS報(bào)文的ID標(biāo)識(shí)扛门,對(duì)于請(qǐng)求報(bào)文和其對(duì)應(yīng)的應(yīng)答報(bào)文鸠信,這個(gè)字段是相同的,通過它可以區(qū)分DNS應(yīng)答報(bào)文是哪個(gè)請(qǐ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)請(qǐng)求
AA(1bit)表示授權(quán)回答
TC(1bit)表示可截?cái)嗟?/p>
RD(1bit)表示期望遞歸
RA(1bit)表示可用遞歸
rcode(4bit)表示返回碼贞铣,0表示沒有差錯(cuò),3表示名字差錯(cuò)沮明,2表示服務(wù)器錯(cuò)誤(Server Failure)
數(shù)量字段(總共8字節(jié)):Questions、Answer RRs窍奋、Authority RRs荐健、Additional RRs 各自表示后面的四個(gè)區(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 查詢名:長(zhǎng)度不固定,且不使用填充字節(jié)址否,一般該字段表示的就是需要查詢的域名(如果是反向查詢餐蔬,則為IP,反向查詢即由IP地址反查域名)佑附,一般的格式如下圖所示樊诺。1.2 查詢類型:
類型?????????????????????????助記????????????????????????????????符說明
1????????????????????????????????A????????????????????????????????由域名獲得IPv4地址
2????????????????????????????????NS?????????????????????????????查詢域名服務(wù)器
5????????????????????????????????CNAME? ? ? ? ? ? ? ? ? ? ? 查詢規(guī)范名稱
6????????????????????????????????SOA? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?開始授權(quán)
11????????????????????????????????WKS? ? ? ? ? ? ? ? ? ? ? ? ? ? ?熟知服務(wù)
12????????????????????????????????PTR? ? ? ? ? ? ? ? ? ? ? ? ? ?把IP地址轉(zhuǎn)換成域名
13????????????????????????????????HINFO? ? ? ? ? ? ? ? ? ? ? ? ? ?主機(jī)信息
15????????????????????????????????MX? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?郵件交換
28????????????????????????????????AAAA? ? ? ? ? ? ? ? ? ? ? ? 由域名獲得IPv6地址
252????????????????????????????????AXFR? ? ? ? ? ? ? ? ? ? ? ?傳送整個(gè)區(qū)的請(qǐng)求
255????????????????????????????????ANY? ? ? ? ? ? ? ? ? ? ? ? ?對(duì)所有記錄的請(qǐng)求
這里給一個(gè)域名,可用來模擬DNS的查詢類型音同,可以選擇不同的類型词爬,比如A,PTR等玩一下权均,https://www.nslookuptool.com/chs/?
1.3 查詢類:通常為1顿膨,表明是Internet數(shù)據(jù)
資源記錄(RR)區(qū)域(包括回答區(qū)域,授權(quán)區(qū)域和附加區(qū)域)
該區(qū)域有三個(gè)叽赊,但格式都是一樣的恋沃。這三個(gè)區(qū)域分別是:回答區(qū)域,授權(quán)區(qū)域和附加區(qū)域
2.1. 域名(2字節(jié)或不定長(zhǎng)):它的格式和Queries區(qū)域的查詢名字字段是一樣的必指。有一點(diǎn)不同就是芽唇,當(dāng)報(bào)文中域名重復(fù)出現(xiàn)的時(shí)候,該字段使用2個(gè)字節(jié)的偏移指針來表示取劫。比如匆笤,在資源記錄中,域名通常是查詢問題部分的域名的重復(fù)谱邪,因此用2字節(jié)的指針來表示炮捧,具體格式是最前面的兩個(gè)高位是 11,用于識(shí)別指針惦银。其余的14位從DNS報(bào)文的開始處計(jì)數(shù)(從0開始)咆课,指出該報(bào)文中的相應(yīng)字節(jié)數(shù)。一個(gè)典型的例子扯俱,C00C(1100000000001100书蚪,12正好是頭部的長(zhǎng)度,其正好指向Queries區(qū)域的查詢名字字段)迅栅。
2.2 查詢類型:表明資源紀(jì)錄的類型殊校,見1.2節(jié)的查詢類型表格所示?
2.3 查詢類:對(duì)于Internet信息,總是IN
2.4 生存時(shí)間(TTL):以秒為單位读存,表示的是資源記錄的生命周期为流,一般用于當(dāng)?shù)刂方馕龀绦蛉〕鲑Y源記錄后決定保存及使用緩存數(shù)據(jù)的時(shí)間呕屎,它同時(shí)也可以表明該資源記錄的穩(wěn)定程度,極為穩(wěn)定的信息會(huì)被分配一個(gè)很大的值(比如86400敬察,這是一天的秒數(shù))秀睛。
2.5. 資源數(shù)據(jù):該字段是一個(gè)可變長(zhǎng)字段,表示按照查詢段的要求返回的相關(guān)資源記錄的數(shù)據(jù)莲祸□灏玻可以是Address(表明查詢報(bào)文想要的回應(yīng)是一個(gè)IP地址)或者CNAME(表明查詢報(bào)文想要的回應(yīng)是一個(gè)規(guī)范主機(jī)名)等。
三. Wireshark分析DNS協(xié)議
下面給出wireshark抓包的記錄锐帜,感興趣的可以根據(jù)上面介紹的協(xié)議報(bào)文格式手動(dòng)解析一下田盈,相信會(huì)有很大收獲。
3.1 請(qǐng)求報(bào)文
3.2 響應(yīng)報(bào)文
DNS相關(guān)的命令小貼士:
Windows環(huán)境下清空DNS緩存的命令是?ipconfig/flushdns也可以通過重啟DNS client 和 DHCP client 兩項(xiàng)服務(wù)清空DNS緩存
Windows環(huán)境下可以用命令ipconfig /displaydns來查看DNS緩存的內(nèi)容
nslookup?命令可以用來查看域名對(duì)應(yīng)的IP地址抹估,比如?nslookup jocent.me
本文撰寫過程中參考了以下幾篇博文的內(nèi)容缠黍,現(xiàn)列出鏈接如下:
http://blog.csdn.net/yipiankongbai/article/details/25031461
http://blog.chinaunix.net/uid-24875436-id-3088461.html
??禁用安全模式
Outlook關(guān)閉時(shí)最小化插件的實(shí)現(xiàn)??
Categories:?OTHER
Tags:?,?網(wǎng)絡(luò)
3?Comments
Pingback:?自己動(dòng)手實(shí)現(xiàn)DNS協(xié)議 – JOCENT BLOG
Pingback:?(Linux 高性能服務(wù)器) – TCP/IP 協(xié)議 | Ddayzzz - 展望未來,腳踏實(shí)地
?TREE SMITH
關(guān)于 資源記錄 區(qū)域的內(nèi)容药蜻,我發(fā)現(xiàn)某些 DNS 服務(wù)器返回的報(bào)文中瓷式,即使不是一個(gè)完整的域名,也會(huì)用一個(gè)偏移指針來代替重復(fù)字段语泽,比如: com 字段贸典,當(dāng)然,目前也只發(fā)現(xiàn)這一個(gè)踱卵。
Comments are closed.
? 2020 Jocent Zhou.