DNS 是什麼?如何運作的?

我沒有三顆心臟發表於2021-02-08

前言

我們在上一篇說到,IP 地址的發明把我們紛亂複雜的網路裝置整齊劃一地統一在了同一個網路中。

但是類似於 192.168.1.0 這樣的地址並不便於人類記憶,於是發明了 域名(Domain Name) 來幫助解決這樣的問題。

對應的,我們也需要一個系統來幫助"翻譯":

Part 1. DNS 是什麼?

DNS (Domain Name System 的縮寫) 的作用非常簡單,就是根據域名查出對應的 IP 地址,你可以把它想象成一本巨大的電話本

換句話說,DNS 是將域名對映到響應 IP 地址的服務。

Part 2. DNS 是如何工作的?

DNS 是我們今天使用 Internet 的核心。

最新報告顯示,2020 年第三季度有 3.71 億個域名,如果沒有 DNS 將其對應解析成對應的 IP 地址,我們將會在網路世界中迷路。

當寧想要使用手機打電話給某人,寧幾乎不太可能背出確切的電話號碼,而是直接使用此人的名字進行搜尋和撥號。

當寧想要載入網站時,DNS 會執行類似的操作。

解析域名或者主機名需要經歷幾個不同的階段。

在某些情況下,DNS 解析是一個一步就完成的過程,而某些情況下,則需要聯絡多個 DNS 伺服器。

下圖就展示了這一過程必要的步驟,並且沒有考慮瀏覽器快取:

DNS 如何工作的示例

過程可能有些複雜,為了便於理解,我們在進一步說明之前需要先說明兩點:「DNS 伺服器和域名的分級」 以及 「DNS 快取」

Part 3. 域名和 DNS 伺服器的分級

域名的分級

我們日常上網輸入的網址,比如:https://www.google.com,其實可以拆成幾個部分看待:

預設支援的服務型別(HTTP/ HTTPS)、主機名(www)、埠號(80)、預設文件(index.html)是可以省略的,所以以上網址可以省略為:google.com

嚴格來說,google.com 才被稱為域名(全球唯一)www 是主機名,對應著一種服務,google.com 域名下不同的主機伺服器,可以提供很多不同的服務:

wwwblog 等很多服務可以部署在同一臺伺服器上,而一臺伺服器獨佔著一個 IP 地址,可見,域名和 IP 地址的對應關係可以是多對一的,或者一對多(負載均衡),也可以一對一

所有的域名都有一個的概念,所以整個網際網路的域名空間看起來會是這樣:

DNS 分級

把全世界所有的電話號碼儲存在同一個通訊錄裡面既不現實也效率低下。

DNS 也是類似,對應域名空間,DNS 也有類似的結構:

整個域名系統採取分散式儲存

全世界根域名伺服器總共有 13 個,其中 10 個在美國,英國瑞典各 1 個,日本 1 個:

來源:https://root-servers.org/

這是邏輯上的數量,這 13 個根域名器伺服器背後其實還是有很多臺物理的伺服器在工作。

根域名伺服器只負責管理頂級域名伺服器(Top Level Domain,簡稱 TLD),記錄所有 TLD 的位置。

而 TLD 則對應管理著所有註冊在當前頂級域名下的所有許可權伺服器,也就是真實提供服務的伺服器的真實 IP 地址。

這有點兒類似於我們真實的通訊錄,比如我們想要給 香克斯 打電話:

可以這樣想象:全世界的域名被根域名伺服器邏輯的統一在一個通訊錄中,而根域名伺服器就像右邊的導航一樣,儲存著不同標識對應列表的位置資訊;

而這些標識類似於頂級域名伺服器,儲存著註冊其下所有的許可權伺服器(比如 google.com 對應的伺服器)資訊;

只有查詢許可權伺服器,你才能拿到詳細的 IP 地址(不考慮快取的情況下);

Part 4. 為什麼需要 DNS 快取?

通過上面通訊錄的例子,我們已經足夠理解 DNS 查詢的主要過程了:(再來看一眼)

但實際上,真正訪問 DNS 伺服器之前,我們會在多個地方快取域名與 IP 之間的對應關係:

  1. 這樣可以減少對 DNS 伺服器的訪問,減緩 DNS 伺服器的訪問壓力;
  2. 這樣也能夠加快域名解析的過程;

涉及 DNS 的地方就會有快取,包括瀏覽器、作業系統、本地 DNS 伺服器、路由器、ISP 提供的遞迴路由器、根域名伺服器等,它們都會對 DNS 結果做一定程度的快取。

但是,DNS 快取也存在一些問題:

  1. DNS 更改重新整理需要時間來傳播,這意味著每一臺 DNS 伺服器快取更新到最新的 IP 需要一段時間;
  2. DNS 快取也是黑客潛在的攻擊手段;

Part 5. 一次請求的詳細過程

這一次我們來跟蹤一次詳細的過程,例如我們在瀏覽器輸入網址 www.example.com 並回車:

  1. 查詢瀏覽器快取,有結果則返回;(如果你使用 Chrome 瀏覽器可以輸入 chrome://net-internals/#dns 自行檢視)
  2. 查詢系統快取,通常存在於 host 檔案中,有結果則返回;
    • Mac:/etc/hosts
    • Windows:C:\Windows\System32\drivers\etc\hosts
  3. 本地 DNS 伺服器,通常是路由器,有結果則返回,否則向上查詢直連 ISP 的遞迴 DNS 伺服器;
  4. 查詢 ISP 提供的 「遞迴 DNS 伺服器」,有快取則返回,否則一直遞迴查詢到 「根伺服器」
  5. 「遞迴 DNS 伺服器」「根伺服器」 查詢 .com 權威 DNS 伺服器」 的地址;
  6. 「遞迴 DNS 伺服器」.com 權威 DNS 伺服器」 查詢 example.com 所使用權威 DNS 伺服器」 的地址;
  7. 「遞迴 DNS 伺服器」example.com 所使用權威 DNS 伺服器」 查詢解析獲得 DNS 記錄並快取
  8. 「遞迴 DNS 伺服器」 向瀏覽器返回結果;
  9. 瀏覽器拿到 IP 地址並向 www.example.com 傳送請求;(完畢)

結合上面的內容,我相信你已經對 DNS 如何工作不再陌生。

相關問題

為什麼根 DNS 只有 13 臺?

簡而言之:由於歷史和技術原因,對於 IPv4 來說,根 DNS 只能有 13 個。

不簡而言之的簡而言之

DNS 訊息使用 UDP 協議進行傳輸,這規定了訊息最大的長度在 512 位元組(不包含 IP 頭部、UDP 頭部)。

有了最大長度限制之後,一個 UDP 協議傳輸的 DNS 響應能夠返回的資源記錄數量就是有限的。

要讓所有的根伺服器資料能包含在一個 512 位元組的 UDP 包中,根伺服器只能限制在 13 個。(事實上改進之後才能容納 13 個,最開始也沒有 13 個這麼多)

擴充套件閱讀(下3)

當鍵入網址後,到網頁顯示,其間發生了什麼?

本文涉及輸入網址訪問,這是自然而然會聯想到的問題。但本文只是詳細說明了 DNS 查詢域名背後 IP 的過程。

來源:@小林coding

該問題涉及瀏覽器原理、網路協議等細節問題,感興趣可以戳這裡(下4)

美國如果把根域名伺服器封了,中國會從網路上消失嗎?

美國擁有最多的根域名伺服器,如果美國把根域名伺服器封了,中國會從網路上消失嗎?

答案是:不會。 因為雖然根不在我們手裡,但是我們有映象(備份)。

擴充套件閱讀(下5)

後記

這一篇文章我們又進一步揭開了一點網路關於 DNS 一角的神祕面紗:

也是使用了 PPT 製作了動圖幫助大家理解,希望大家能夠有所收穫。

後續也會繼續跟大家一起學習計算機網路的基礎知識,也會嘗試著跟著後端學習路線圖的腳步跟著大家一起學習進階。

https://roadmap.sh/backend

(完)

參考資料

  1. What Is A Domain Name System (DNS) & How Does It Work? - https://phoenixnap.com/kb/what-is-domain-name-system-works
  2. 域名報告 - https://www.verisign.com/assets/domain-name-report-Q32020.pdf
  3. 根域名伺服器只有 13 臺? - https://zhuanlan.zhihu.com/p/107492241
  4. 30張圖解:當鍵入網址後,到網頁顯示,其間發生了什麼? - https://zhuanlan.zhihu.com/p/113702574
  5. 美國如果把根域名伺服器封了,中國會從網路上消失? - https://segmentfault.com/a/1190000023696737
  • 本文已收錄至我的 Github 程式設計師成長系列 【More Than Java】,學習,不止 Code,歡迎 star:https://github.com/wmyskxz/MoreThanJava
  • 個人公眾號 :wmyskxz,個人獨立域名部落格:wmyskxz.com,堅持原創輸出,下方掃碼關注,2020,與您共同成長!

Hi,這裡是 我沒有三顆心臟,2021,與您在 Be Better 的路上共同成長!

相關文章