文章目錄
- 什么是DNS域名解析
- DNS服務器
- DNS域名解析流程
什么是DNS域名解析
我們首先要了解域名和IP地址的區別。IP地址是互聯網上計算機唯一的邏輯地址,通過IP地址實現不同計算機之間的相互通信,每臺聯網計算機都需要通過IP地址來互相聯系和分別。
但由于IP地址是由一串容易混淆的數字串構成,人們很難記憶所有計算機的IP地址,這樣對于我們日常工作生活訪問不同網站是很困難的。基于這種背景,人們在IP地址的基礎上又發展出了一種更易識別的符號化標識,這種標識由人們自行選擇的字母和數字構成,相比IP地址更易被識別和記憶,逐漸代替IP地址成為互聯網用戶進行訪問互聯的主要入口。這種符號化標識就是域名。
域名雖然更易被用戶所接受和使用,但計算機只能識別純數字構成的IP地址,不能直接讀取域名。因此要想達到訪問效果,就需要將域名翻譯成IP地址。而DNS域名解析承擔的就是這種翻譯效果。
DNS(Domain Name System)域名管理系統,是當用戶使用瀏覽器訪問網址之后,使用的第一個重要協議。DNS 要解決的是域名和 IP 地址的映射問題
。
DNS服務器
DNS 服務器自底向上可以依次分為以下幾個層級(所有 DNS 服務器都屬于以下四個類別之一):
- 根 DNS 服務器。根 DNS 服務器提供 TLD 服務器的 IP 地址。目前世界上只有 13 組根服務器,我國境內目前仍沒有根服務器。
- 頂級域 DNS 服務器(TLD 服務器)。頂級域是指域名的后綴,如com、org、net和edu等。國家也有自己的頂級域,如uk、fr和ca。TLD 服務器提供了權威 DNS 服務器的 IP 地址。
- 權威 DNS 服務器。在因特網上具有公共可訪問主機的每個組織機構必須提供公共可訪問的 DNS 記錄,這些記錄將這些主機的名字映射為 IP 地址。
- 本地 DNS 服務器。每個 ISP(互聯網服務提供商)都有一個自己的本地 DNS 服務器。當主機發出 DNS 請求時,該請求被發往本地 DNS 服務器,它起著代理的作用,并將該請求轉發到 DNS 層次結構中。嚴格說來,不屬于 DNS 層級結構。
世界上并不是只有 13 臺根服務器,這是很多人普遍的誤解,網上很多文章也是這么寫的。實際上,現在根服務器數量遠遠超過這個數量。最初確實是為 DNS 根服務器分配了 13 個 IP 地址,每個 IP 地址對應一個不同的根 DNS 服務器。然而,由于互聯網的快速發展和增長,這個原始的架構變得不太適應當前的需求。為了提高 DNS 的可靠性、安全性和性能,目前這 13 個 IP 地址中的每一個都有多個服務器,截止到 2023 年底,所有根服務器之和達到了 600 多臺,未來還會繼續增加
DNS域名解析流程
DNS 的查詢解析過程分為兩種模式:
- 迭代
- 遞歸
下圖是實踐中常采用的方式,從請求主機到本地 DNS 服務器的查詢是遞歸的,其余的查詢是迭代的。
現在,主機cis.poly.edu想知道gaia.cs.umass.edu的 IP 地址。假設主機cis.poly.edu的本地 DNS 服務器為dns.poly.edu,并且gaia.cs.umass.edu的權威 DNS 服務器為dns.cs.umass.edu。
-
首先,主機cis.poly.edu向本地 DNS 服務器dns.poly.edu發送一個 DNS
請求,該查詢報文包含被轉換的域名gaia.cs.umass.edu。 -
本地 DNS 服務器dns.poly.edu檢查本機緩存,發現并無記錄,也不知道gaia.cs.umass.edu的 IP地址該在何處,不得不向根服務器發送請求。
-
根服務器注意到請求報文中含有edu頂級域,因此告訴本地 DNS,你可以向edu的 TLD DNS 發送請求,因為目標域名的 IP
地址很可能在那里。 -
本地 DNS 獲取到了edu的 TLD DNS 服務器地址,向其發送請求,詢問gaia.cs.umass.edu的 IP 地址。
-
edu的 TLD DNS 服務器仍不清楚請求域名的 IP 地址,但是它注意到該域名有umass.edu前綴,因此返回告知本地
DNS,umass.edu的權威服務器可能記錄了目標域名的 IP 地址。 -
這一次,本地 DNS 將請求發送給權威 DNS 服務器dns.cs.umass.edu。
-
終于,由于gaia.cs.umass.edu向權威 DNS 服務器備案過,在這里有它的 IP 地址記錄,權威 DNS 成功地將 IP
地址返回給本地 DNS。 -
最后,本地 DNS 獲取到了目標域名的 IP 地址,將其返回給請求主機。
除了迭代式查詢,還有一種遞歸式查詢如下圖,具體過程和上述類似,只是順序有所不同。
除了迭代式查詢,還有一種遞歸式查詢如下圖,具體過程和上述類似,只是順序有所不同
另外,DNS 的緩存位于本地 DNS 服務器。由于全世界的根服務器甚少,只有 600 多臺,分為 13 組,且頂級域的數量也在一個可數的范圍內,因此本地 DNS 通常已經緩存了很多 TLD DNS 服務器,所以在實際查找過程中,無需訪問根服務器。根服務器通常是被跳過的,不請求的。這樣可以提高 DNS 查詢的效率和速度,減少對根服務器和 TLD 服務器的負擔。
參考鏈接:https://javaguide.cn/cs-basics/network/dns.html