8 張圖帶你徹底搞懂 DNS 域名解析過程
1、DNS
DNS(Domain Name System)是域名系統(tǒng)的英文縮寫,是一種組織成域?qū)哟谓Y(jié)構(gòu)的計算機和網(wǎng)絡(luò)服務(wù)命名系統(tǒng),用于 TCP/IP 網(wǎng)絡(luò)。
2、域名系統(tǒng) DNS 的作用
通常我們有兩種方式識別主機:通過主機名或者 IP 地址。人們喜歡便于記憶的主機名表示,而路由器則喜歡定長的、有著層次結(jié)構(gòu)的 IP 地址。為了滿足這些不同的偏好,我們就需要一種能夠進(jìn)行主機名到IP 地址轉(zhuǎn)換的目錄服務(wù),域名系統(tǒng)作為將域名和 IP 地址相互映射的一個分布式數(shù)據(jù)庫,能夠使人更方便地訪問互聯(lián)網(wǎng)。
因此,即使不使用域名也可以通過IP地址來尋址目的主機,但域名與IP地址相比,便于人們記憶。因此對于大多數(shù)網(wǎng)絡(luò)應(yīng)用,我們一般使用域名來訪問目的主機,而不是直接使用IP地址來訪問。
對于本例,簡單來說,當(dāng)我們在瀏覽器地址欄中輸入某個Web服務(wù)器的域名時。用戶主機首先用戶主機會首先在自己的DNS高速緩存中查找該域名所應(yīng)的IP地址。

如果沒有找到,則會向網(wǎng)絡(luò)中的某臺DNS服務(wù)器查詢,DNS服務(wù)器中有域名和IP地址映射關(guān)系的數(shù)據(jù)庫。當(dāng)DNS服務(wù)器收到DNS查詢報文后,在其數(shù)據(jù)庫中查詢,之后將查詢結(jié)果發(fā)送給用戶主機。

現(xiàn)在,用戶主機中的瀏覽器可以通過Web服務(wù)器的IP地址對其進(jìn)行訪問了。

3、域名的層級關(guān)系
層級關(guān)系特點
因特網(wǎng)采用層次樹狀結(jié)構(gòu)的域名結(jié)構(gòu)
域名的結(jié)構(gòu)由若干個分量組成,各分量之間用點隔開,分別代表不同級別的域名。
每一級的域名都由英文字母和數(shù)字組成,不超過63個字符,不區(qū)分大小寫字母。
級別最低的域名寫在最左邊,而級別最高的頂級域名寫在最右邊。
完整的域名不超過255個字符。
域名系統(tǒng)既不規(guī)定一個域名需要包含多少個下級域名,也不規(guī)定每一級的域名代表什么意思。
各級域名由其上一級的域名管理機構(gòu)管理,而最高的頂級域名則由因特網(wǎng)名稱與數(shù)字地址分配機構(gòu)ICANN進(jìn)行管理。
因特網(wǎng)的域名空間

上圖展示了 DNS 服務(wù)器的部分層次結(jié)構(gòu),從上到下依次為根域名服務(wù)器、頂級域名服務(wù)器和權(quán)威域名服務(wù)器。域名和IP地址的映射關(guān)系必須保存在域名服務(wù)器中,供所有其他應(yīng)用查詢。顯然不能將所有信息都儲存在一臺域名服務(wù)器中。DNS使用分布在各地的域名服務(wù)器來實現(xiàn)域名到IP地址的轉(zhuǎn)換。
域名服務(wù)器可以劃分為以下四種不同的類型:
根域名服務(wù)器:根域名服務(wù)器是最高層次的域名服務(wù)器。每個根域名服務(wù)器都知道所有的頂級域名服務(wù)器的域名及其IP地址。因特網(wǎng)上共有13個不同IP地址的根域名服務(wù)器。當(dāng)本地域名服務(wù)器向根域名服務(wù)器發(fā)出查詢請求時,路由器就把查詢請求報文轉(zhuǎn)發(fā)到離這個DNS客戶最近的一個根域名服務(wù)器。這就加快了DNS的查詢過程,同時也更合理地利用了因特網(wǎng)的資源。頂級域名服務(wù)器:這些域名服務(wù)器負(fù)責(zé)管理在該頂級域名服務(wù)器注冊的所有二級域名。當(dāng)收到DNS查詢請求時就給出相應(yīng)的回答(可能是最后的結(jié)果,也可能是下一級權(quán)限域名服務(wù)器的IP地址)。權(quán)限域名服務(wù)器:這些域名服務(wù)器負(fù)責(zé)管理某個區(qū)的域名。每一個主機的域名都必須在某個權(quán)限域名服務(wù)器處注冊登記。因此權(quán)限域名服務(wù)器知道其管轄的域名與IP地址的映射關(guān)系。另外,權(quán)限域名服務(wù)器還知道其下級域名服務(wù)器的地址。本地域名服務(wù)器:本地域名服務(wù)器不屬于上述的域名服務(wù)器的等級結(jié)構(gòu)。當(dāng)一個主機發(fā)出DNS請求報文時,這個報文就首先被送往該主機的本地域名服務(wù)器。本地域名服務(wù)器起著代理的作用,會將該報文轉(zhuǎn)發(fā)到上述的域名服務(wù)器的等級結(jié)構(gòu)中。本地域名服務(wù)器離用戶較近,一般不超過幾個路由器的距離,也有可能就在同一個局域網(wǎng)中。本地域名服務(wù)器的IP地址需要直接配置在需要域名解析的主機中。
4、DNS域名解析過程
域名解析包含兩種查詢方式,分別是遞歸查詢和迭代查詢。
遞歸查詢
如果主機所詢問的本地域名服務(wù)器不知道被查詢域名的 IP 地址,那么本地域名服務(wù)器就以 DNS 客戶端的身份,向其他根域名服務(wù)器繼續(xù)發(fā)出查詢請求報文,即替主機繼續(xù)查詢,而不是讓主機自己進(jìn)行下一步查詢。
我們以一個例子來了解DNS遞歸查詢的工作原理,假設(shè)圖中的主機 (IP地址為m.xyz.com) 想知道域名y.abc.com的IP地址。
1、主機首先向其本地域名服務(wù)器進(jìn)行遞歸查詢。
2、本地域名服務(wù)器收到遞歸查詢的委托后,也采用遞歸查詢的方式向某個根域名服務(wù)器查詢。
3、根域名服務(wù)器收到遞歸查詢的委托后,也采用遞歸查詢的方式向某個頂級域名服務(wù)器查詢。
4、頂級域名服務(wù)器收到遞歸查詢的委托后,也采用遞歸查詢的方式向某個權(quán)限域名服務(wù)器查詢。
過程如圖所示

當(dāng)查詢到域名對應(yīng)的IP地址后,查詢結(jié)果會在之前受委托的各域名服務(wù)器之間傳遞,最終傳回給用戶主機。
過程如圖所示

迭代查詢
當(dāng)根域名服務(wù)器收到本地域名服務(wù)器發(fā)出的迭代查詢請求報文時,要么給出所要查詢的IP 地址,要么告訴本地服務(wù)器下一步應(yīng)該找哪個域名服務(wù)器進(jìn)行查詢,然后讓本地服務(wù)器進(jìn)行后續(xù)的查詢。
迭代查詢過程如下
1、主機首先向其本地域名服務(wù)器進(jìn)行遞歸查詢。
2、本地域名服務(wù)器采用迭代查詢,它先向某個根域名服務(wù)器查詢。
3、根域名服務(wù)器告訴本地域名服務(wù)器,下一次應(yīng)查詢的頂級域名服務(wù)器的IP地址。
4、本地域名服務(wù)器向頂級域名服務(wù)器進(jìn)行迭代查詢。
5、頂級域名服務(wù)器告訴本地域名服務(wù)器,下一次應(yīng)查詢的權(quán)限域名服務(wù)器的IP地址。
6、本地域名服務(wù)器向權(quán)限域名服務(wù)器進(jìn)行迭代查詢。
7、權(quán)限域名服務(wù)器告訴本地域名服務(wù)器所查詢的域名的IP地址。
8、本地域名服務(wù)器最后把查詢的結(jié)果告訴主機。
過程如圖所示

由于遞歸查詢對于被查詢的域名服務(wù)器負(fù)擔(dān)太大,通常采用以下模式:從請求主機到本地域名服務(wù)器的查詢是遞歸查詢,而其余的查詢是迭代查詢。
5、高速緩存
為了提高DNS的查詢效率,并減輕根域名服務(wù)器的負(fù)荷和減少因特網(wǎng)上的DNS查詢報文數(shù)量,在域名服務(wù)器中廣泛地使用了高速緩存。高速緩存用來存放最近查詢過的域名以及從何處獲得域名映射信息的記錄。
由于域名到IP地址的映射關(guān)系并不是永久不變,為保持高速緩存中的內(nèi)容正確,域名服務(wù)器應(yīng)為每項內(nèi)容設(shè)置計時器并刪除超過合理時間的項(例如,每個項目只存放兩天)。
不但在本地域名服務(wù)器中需要高速緩存,在用戶主機中也很需要。許多用戶主機在啟動時從本地域名服務(wù)器下載域名和IP地址的全部數(shù)據(jù)庫,維護(hù)存放自己最近使用的域名的高速緩存,并且只在從緩存中找不到域名時才向域名服務(wù)器查詢。同理,主機也需要保持高速緩存中內(nèi)容的正確性。
如圖所示

如果本地域名服務(wù)器不久前已經(jīng)有用戶查詢過域名為y.abc.com的IP地址,則本地域名服務(wù)器的高速緩存中應(yīng)該存有該域名對應(yīng)的IP地址。因此,直接把高速緩存中存放的上次查詢結(jié)果(即y.abc.com的IP地址)告訴用戶。
6、DNS相關(guān)面試問題
1、DNS為什么用UDP?
更正確的答案是 DNS 既使用 TCP 又使用 UDP。當(dāng)進(jìn)行區(qū)域傳送(主域名服務(wù)器向輔助域名服務(wù)器傳送變化的那部分?jǐn)?shù)據(jù))時會使用 TCP,因為數(shù)據(jù)同步傳送的數(shù)據(jù)量比一個請求和應(yīng)答的數(shù)據(jù)量要多,而 TCP 允許的報文長度更長,因此為了保證數(shù)據(jù)的正確性,會使用基于可靠連接的 TCP。
當(dāng)客戶端向 DNS 服務(wù)器查詢域名 ( 域名解析) 的時候,一般返回的內(nèi)容不會超過 UDP 報文的最大長度,即 512 字節(jié)。用 UDP 傳輸時,不需要經(jīng)過 TCP 三次握手的過程,從而大大提高了響應(yīng)速度,但這要求域名解析器和域名服務(wù)器都必須自己處理超時和重傳從而保證可靠性。
2、遞歸查詢和迭代查詢區(qū)別?
遞歸查詢: 如果主機所詢問的本地域名服務(wù)器不知道被查詢域名的 IP 地址,那么本地域名服務(wù)器就以 DNS 客戶端的身份,向其他根域名服務(wù)器繼續(xù)發(fā)出查詢請求報文,即替主機繼續(xù)查詢,而不是讓主機自己進(jìn)行下一步查詢。
迭代查詢:當(dāng)根域名服務(wù)器收到本地域名服務(wù)器發(fā)出的迭代查詢請求報文時,要么給出所要查詢的IP 地址,要么告訴本地服務(wù)器下一步應(yīng)該找哪個域名服務(wù)器進(jìn)行查詢,然后讓本地服務(wù)器進(jìn)行后續(xù)的查詢。
3、使用域名訪問web服務(wù)器過程
具體請看本專欄的這篇文章:面試官問我:從地址欄輸入URL到顯示頁面都發(fā)生了什么?
4、講講DNS解析過程?
詳細(xì)解析過程請看上文DNS域名解析過程,這里我們做一個總結(jié):
瀏覽器緩存—-->系統(tǒng)hosts文件—-->本地DNS解析器緩存—-->本地域名服務(wù)器(本地配置區(qū)域資源、本地域名服務(wù)器緩存)—-->根域名服務(wù)器—-->主域名服務(wù)器—-->下一級域名域名服務(wù)器 客戶端—-->本地域名服務(wù)器(遞歸查詢) 本地域名服務(wù)器-->DNS服務(wù)器的交互查詢是迭代查詢
來源:入門小站
推薦閱讀:
不是你需要中臺,而是一名合格的架構(gòu)師(附各大廠中臺建設(shè)PPT)
企業(yè)IT技術(shù)架構(gòu)規(guī)劃方案
論數(shù)字化轉(zhuǎn)型——轉(zhuǎn)什么,如何轉(zhuǎn)?
企業(yè)10大管理流程圖,數(shù)字化轉(zhuǎn)型從業(yè)者必備!
【中臺實踐】華為大數(shù)據(jù)中臺架構(gòu)分享.pdf
