一、寫在開頭
在OSI七層協(xié)議模型中應(yīng)用層是距離我們最近,且日后開發(fā)使用到最多的一層,在上一篇博文中我們已經(jīng)學(xué)習(xí)了應(yīng)用層中的HTTP協(xié)議,在本文中我們再一起來學(xué)一下DNS。啥?DNS不是很了解?那還不快往下看!
?其實早幾年和一個朋友聊天,當(dāng)時,他是一個網(wǎng)絡(luò)條線的技術(shù)經(jīng)理,向我吐槽說,現(xiàn)在來面試的很多都是學(xué)不好編程語言的,轉(zhuǎn)來搞網(wǎng)絡(luò)了,結(jié)果問一個DNS,他都整不明白,就這還好意思干網(wǎng)絡(luò)?我當(dāng)時嚇得不敢說話,因為我自己對于網(wǎng)絡(luò)編程也是那種淺嘗輒止的心態(tài),生怕他回頭問我一個問題,哈哈。
?
二、DNS的定義
DNS(Domain Name System)域名管理系統(tǒng),是當(dāng)用戶使用瀏覽器訪問網(wǎng)址之后,使用的第一個重要協(xié)議。DNS 要解決的是域名和 IP 地址的映射問題。
DNS是一個聯(lián)機(jī)的分布式數(shù)據(jù)庫系統(tǒng),它具有分布式、層次化、模塊化等特點(diǎn),它屬于應(yīng)用層的協(xié)議,基于UDP傳輸,端口為53。
三、DNS服務(wù)器類別
我們上面說到DNS具有層次化結(jié)構(gòu),而這個層次化主要體現(xiàn)在它的服務(wù)器部署之上,DNS的域名層次結(jié)構(gòu)是一棵樹,從「根域名服務(wù)器」到「頂級域名服務(wù)器」、「權(quán)威域名服務(wù)器」,再到「本地域名服務(wù)器」,而我們所有遇到的DNS服務(wù)器,都囊括在這四類之中。
「根域名DNS服務(wù)器」:是為提供TLD服務(wù)器的IP地址,目前世界上僅有13組根服務(wù)器,我國境內(nèi)仍然沒有,不過后來任播應(yīng)用后,DNS分解出1089個根域名服務(wù)器節(jié)點(diǎn),而在我國便有了26個根域名服務(wù)器節(jié)點(diǎn)。
「頂級域名服務(wù)器(TLD服務(wù)器)」:頂級域名指的域名的后綴,像com、org、net等都是,不同國家也有自己的域名,如uk、ca、fr這些,我國的是cn。而頂級域名系統(tǒng)則是提供權(quán)威DNS服務(wù)器IP地址的。
「權(quán)威域名DNS服務(wù)器」:所有在因特網(wǎng)上具有公共可訪問主機(jī)的組織機(jī)構(gòu),必須提供可訪問的DNS記錄,而這些記錄里則保存著域名與IP映射等信息,而這些記錄則存儲在權(quán)威DNS服務(wù)器上。
「本地域名服務(wù)器」:每個 ISP(互聯(lián)網(wǎng)服務(wù)提供商)都有一個自己的本地 DNS 服務(wù)器。當(dāng)主機(jī)發(fā)出 DNS 請求時,該請求被發(fā)往本地 DNS 服務(wù)器,它起著代理的作用,并將該請求轉(zhuǎn)發(fā)到 DNS 層次結(jié)構(gòu)中。
那么了解了DNS的底層服務(wù)器結(jié)構(gòu),它們是如何合作的,或者說是通過怎樣的機(jī)制,達(dá)到解析域名,響應(yīng)到對應(yīng)的IP上的呢?繼續(xù)往下看!
四、DNS的解析過程
開局先上一張圖:
現(xiàn)在假設(shè)我們用瀏覽器去訪問“ www.baidu.com.cn” 的IP地址,那么DNS解析系統(tǒng)的整個解析過程大致可以分為如下這幾步:
第一步:客戶端向本地DNS服務(wù)器發(fā)送DNS請求報文,報文中包含域名 www.baidu.com.cn ,若本地DNS中有相應(yīng)的記錄,直接反饋客戶端,若沒有則訪問根DNS服務(wù)器,繼續(xù)處理請求;
第二步:本地DNS服務(wù)器向根域名服務(wù)器發(fā)送請求,根域名服務(wù)器是域名系統(tǒng)的最頂層,它負(fù)責(zé)管理所有頂級域名(如.com、.net、.org以及國家和地區(qū)代碼如.cn)。根域名服務(wù)器會返回所查詢域(在這個例子中是“.cn”域)的主域名服務(wù)器的地址;
第三步:本地DNS在接收到根服務(wù)器返回的地址后,便向cn頂級域名服務(wù)器發(fā)送請求,一般到這里是有可能找到了對應(yīng)的域名映射的IP地址的,但若還沒有,它會查詢自己的記錄以找到“.com.cn”域的主域名服務(wù)器(權(quán)威DNS服務(wù)器)地址返回;
第四步:本地DNS服務(wù)器只得繼續(xù)向權(quán)威DNS服務(wù)器發(fā)去請求,終于,www.baidu.com.cn已經(jīng)向權(quán)威域名DNS備案過了,在這里找到了它對應(yīng)的記錄,便把記錄返回給本地DNS;
第五步:本地dns服務(wù)器將收到的返回地址發(fā)給客戶端,同時寫入自己的緩存,以便下次查詢;
「需要注意的是:」 從請求主機(jī)到本地 DNS 服務(wù)器的查詢是遞歸的,其余的查詢時迭代的;當(dāng)找不到相應(yīng)記錄,會返回空結(jié)果,而不是超時信息。
五、DNS報文格式
DNS報文格式是DNS協(xié)議中用于客戶端和服務(wù)器之間通信的一種結(jié)構(gòu)化數(shù)據(jù)格式。DNS報文主要分為兩種:查詢報文和回答報文,它們具有相同的格式。
DNS(Domain Name System,域名系統(tǒng))報文是在域名解析過程中,DNS客戶端和DNS服務(wù)器之間傳輸?shù)南ⅲ鋱笪母袷街饕ㄒ韵聨讉€部分:
「我們可以將其分成三個部分來看:」
報文頭部
「標(biāo)識」:16位的標(biāo)識符,用于標(biāo)識該DNS報文,客戶端發(fā)送請求時會生成一個隨機(jī)的標(biāo)識,服務(wù)器在響應(yīng)時會使用相同的標(biāo)識,以便客戶端能夠?qū)㈨憫?yīng)與請求對應(yīng)起來。
「標(biāo)志」:16位的標(biāo)志字段,包含多個標(biāo)志位,用于表示報文的類型、操作碼、響應(yīng)狀態(tài)等信息。例如,QR位表示是查詢報文(0)還是響應(yīng)報文(1);OPCODE位表示操作碼,通常為標(biāo)準(zhǔn)查詢(0)等。
「問題數(shù)量」:16位的字段,指明報文中包含的問題記錄數(shù)量。
「回答數(shù)量」:16位的字段,指明報文中包含的回答記錄數(shù)量。
「權(quán)威機(jī)構(gòu)數(shù)量」:16位的字段,指明報文中包含的權(quán)威機(jī)構(gòu)記錄數(shù)量。
「附加信息數(shù)量」:16位的字段,指明報文中包含的附加信息記錄數(shù)量。
問題部分
回答部分、權(quán)威機(jī)構(gòu)部分和附加信息部分
這三個部分的格式基本相同,每個部分都可以包含多個資源記錄,每個資源記錄的格式如下:
「域名」:與問題部分的查詢名稱格式相同,通常是被查詢域名或相關(guān)域名。
「類型」:16位的字段,與問題部分的查詢類型相對應(yīng),表示該資源記錄的類型。
「類」:通常為1,表示Internet類。
「生存時間」:32位的字段,以秒為單位,表示該資源記錄在緩存中的有效時間。
「資源數(shù)據(jù)長度」:16位的字段,指明后面的資源數(shù)據(jù)的長度。
「資源數(shù)據(jù)」:可變長度字段,包含與該資源記錄類型相關(guān)的具體數(shù)據(jù),如A記錄的IP地址、NS記錄的域名服務(wù)器名稱等。
轉(zhuǎn)自https://www.cnblogs.com/JavaBuild/p/18613789
該文章在 2024/12/19 10:26:01 編輯過