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

如果沒有找到,則會向網絡中的某臺DNS服務器查詢,DNS服務器中有域名和IP地映射關系的數據庫。當DNS服務器收到DNS查詢報文后,在其數據庫中查詢,之后將查詢結果發送給用戶主機。

現在,用戶主機中的瀏覽器可以通過Web服務器的IP地址對其進行訪問了。
image-20220216124548675.png
3、域名的層級關系
層級關系特點
- 因特網采用層次樹狀結構的域名結構
- 域名的結構由若干個分量組成,各分量之間用點隔開,分別代表不同級別的域名。
- 每一級的域名都由英文字母和數字組成,不超過63個字符,不區分大小寫字母。
- 級別最低的域名寫在最左邊,而級別最高的頂級域名寫在最右邊。
- 完整的域名不超過255個字符。
- 域名系統既不規定一個域名需要包含多少個下級域名,也不規定每一級的域名代表什么意思。
- 各級域名由其上一級的域名管理機構管理,而最高的頂級域名則由因特網名稱與數字地址分配機構ICANN進行管理。
因特網的域名空間
在這里插入圖片描述
上圖展示了 DNS 服務器的部分層次結構,從上到下依次為根域名服務器、頂級域名服務器和權威域名服務器。域名和IP地址的映射關系必須保存在域名服務器中,供所有其他應用查詢。顯然不能將所有信息都儲存在一臺域名服務器中。DNS使用分布在各地的域名服務器來實現域名到IP地址的轉換。
域名服務器可以劃分為以下四種不同的類型:
根域名服務器根域名服務器是最高層次的域名服務器。每個根域名服務器都知道所有的頂級域名服務器的域名及其IP地址。因特網上共有13個不同IP地址的根域名服務器。當本地域名服務器向根域名服務器發出查詢請求時,路由器就把查詢請求報文轉發到離這個DNS客戶最近的一個根域名服務器。這就加快了DNS的查詢過程,同時也更合理地利用了因特網的資源。頂級域名服務器這些域名服務器負責管理在該頂級域名服務器注冊的所有二級域名。當收到DNS查詢請求時就給出相應的回答(可能是最后的結果,也可能是下一級權限域名服務器的IP地址)。權限域名服務器這些域名服務器負責管理某個區的域名。每一個主機的域名都必須在某個權限域名服務器處注冊登記。因此權限域名服務器知道其管轄的域名與IP地址的映射關系。另外,權限域名服務器還知道其下級域名服務器的地址。本地域名服務器本地域名服務器不屬于上述的域名服務器的等級結構。當一個主機發出DNS請求報文時,這個報文就首先被送往該主機的本地域名服務器。本地域名服務器起著代理的作用,會將該報文轉發到上述的域名服務器的等級結構中。本地域名服務器離用戶較近,一般不超過幾個路由器的距離,也有可能就在同一個局域網中。本地域名服務器的IP地址需要直接配置在需要域名解析的主機中。
4、DNS域名解析過程
域名解析包含兩種查詢方式,分別是遞歸查詢和迭代查詢。
遞歸查詢
如果主機所詢問的本地域名服務器不知道被查詢域名的 IP 地址,那么本地域名服務器就以 DNS 客戶端的身份,向其他根域名服務器繼續發出查詢請求報文,即替主機繼續查詢,而不是讓主機自己進行下一步查詢。
我們以一個例子來了解DNS遞歸查詢的工作原理,假設圖中的主機 (IP地址為m.xyz.com) 想知道域名y.abc.com的IP地址。
- 1、主機首先向其本地域名服務器進行
遞歸查詢。 - 2、本地域名服務器收到遞歸查詢的委托后,也采用
遞歸查詢的方式向某個根域名服務器查詢。 - 3、根域名服務器收到遞歸查詢的委托后,也采用
遞歸查詢的方式向某個頂級域名服務器查詢。 - 4、頂級域名服務器收到遞歸查詢的委托后,也采用
遞歸查詢的方式向某個權限域名服務器查詢。
過程如圖所示

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

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

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

如果本地域名服務器不久前已經有用戶查詢過域名為y.abc.com的IP地址,則本地域名服務器的高速緩存中應該存有該域名對應的IP地址。因此,直接把高速緩存中存放的上次查詢結果(即y.abc.com的IP地址)告訴用戶。
6、DNS相關面試問題
- 1、DNS為什么用UDP?
更正確的答案是 DNS 既使用 TCP 又使用 UDP。當進行區域傳送(主域名服務器向輔助域名服務器傳送變化的那部分數據)時會使用 TCP,因為數據同步傳送的數據量比一個請求和應答的數據量要多,而 TCP 允許的報文長度更長,因此為了保證數據的正確性,會使用基于可靠連接的 TCP。
當客戶端向 DNS 服務器查詢域名 ( 域名解析) 的時候,一般返回的內容不會超過 UDP 報文的最大長度,即 512 字節。用 UDP 傳輸時,不需要經過 TCP 三次握手的過程,從而大大提高了響應速度,但這要求域名解析器和域名服務器都必須自己處理超時和重傳從而保證可靠性。
- 2、遞歸查詢和遞歸查詢區別?
遞歸查詢: 如果主機所詢問的本地域名服務器不知道被查詢域名的 IP 地址,那么本地域名服務器就以 DNS 客戶端的身份,向其他根域名服務器繼續發出查詢請求報文,即替主機繼續查詢,而不是讓主機自己進行下一步查詢。迭代查詢: 當根域名服務器收到本地域名服務器發出的迭代查詢請求報文時,要么給出所要查詢的IP 地址,要么告訴本地服務器下一步應該找哪個域名服務器進行查詢,然后讓本地服務器進行后續的查詢。- 3、使用域名訪問web服務器過程
具體請看本專欄的這篇文章:面試官問我:從地址欄輸入URL到顯示頁面都發生了什么?
- 4、講講DNS解析過程?
詳細解析過程請看上文DNS域名解析過程,這里我們做一個總結:
瀏覽器緩存—-->系統hosts文件—-->本地DNS解析器緩存—-->本地域名服務器(本地配置區域資源、本地域名服務器緩存)—-->根域名服務器—-->主域名服務器—-->下一級域名域名服務器 客戶端—-->本地域名服務器(遞歸查詢) 本地域名服務器-->DNS服務器的交互查詢是迭代查詢
VSole
網絡安全專家