什麼是 DNS? | DNS 的工作方式

DNS 可使使用者使用網域名稱而不是 IP 位址連接到網站。瞭解 DNS 的工作方式。

Share facebook icon linkedin icon twitter icon email icon

DNS

學習目標

閱讀本文後,您將能夠:

  • 定義 DNS
  • 理解 DNS 的工作方式
  • 區分遞迴和反覆運算 DNS 尋找
  • 將權威名稱伺服器與遞迴 DNS 解析程式分開
  • 探索 DNS 快取的工作方式

什麼是 DNS?

網域名稱系統 (DNS) 是 Internet 電話簿。人們透過例如 nytimes.com 或 espn.com 等網域名稱線上存取資訊。Web 瀏覽器透過 Internet 通訊協定 (IP) 地址進行互動。DNS 將網域名稱轉換為 IP 位址 ,以便瀏覽器能夠載入 Internet 資源。

連接到 Internet 的每個裝置都有一個唯一 IP 位址,其他電腦可使用該 IP 位址尋找此裝置。DNS 伺服器使人們無需儲存例如 192.168.1.1(IPv4 中)等 IP 位址或更複雜的較新字母數字 IP 位址,例如 2400:cb00:2048:1::c629:d7a2(IPv6 中)。

DNS

DNS 的工作方式

DNS 解析過程涉及將主機名稱(例如 www.example.com)轉換為電腦友好的 IP 位址(例如 192.168.1.1)。Internet 上的每個裝置都被分配了一個 IP 位址,必須有該地址才能找到相應的 Internet 裝置 - 就像使用街道地址來尋找特定住所一樣。 當使用者想要載入網頁時,在使用者在 Web 瀏覽器 (example.com) 中鍵入的內容與尋找 example.com 網頁所需的機器友好地址之間必須進行轉換。

為理解 DNS 解析過程,務必瞭解 DNS 查詢必須經過的不同硬體元件。對於 Web 瀏覽器,DNS 尋找在「幕後」進行,除了初始請求外,不需要從使用者的電腦進行任何互動。

載入網頁涉及 4 個 DNS 伺服器:

  • DNS 解析程式 - 解析程式可被視為被要求去圖書館的某個地方尋找特定圖書的圖書館員。DNS 解析程式是一種伺服器,旨在透過 Web 瀏覽器等應用程式接收用戶端電腦的查詢。然後,解析程式一般負責發出其他請求,以便滿足用戶端的 DNS 查詢。
  • 根名稱伺服器 - 根伺服器是將人類可讀的主機名稱轉換(解析)為 IP 位址的第一步。可將其視為指向不同書架的圖書館中的索引 - 一般其作為對其他更具體位置的引用。
  • TLD 名稱伺服器 - 頂層網域伺服器 (TLD) 可被視為圖書館中的特定書架。此名稱伺服器是搜尋特定 IP 位址的下一步,其代管主機名稱的最後一部分(在 example.com 中,TLD 伺服器為 「com」)。
  • 權威名稱伺服器 - 可將這個最終名稱伺服器視為書架上的字典,其中特定名稱可被轉換成其定義。權威名稱伺服器是名稱伺服器查詢中的最後一站。如果權威名稱伺服器能夠存取請求的記錄,則其會將已請求主機名稱的 IP 位址返回到發出初始請求的 DNS 解析程式(圖書管理員)。

權威 DNS 伺服器與遞迴 DNS 解析程式之間的區別是什麼?

這兩個概念都是指 DNS 基礎結構不可或缺的伺服器(伺服器組),但每一個執行不同的角色,並且位於 DNS 查詢管道內的不同位置。考慮二者差異的一種方式是,遞迴解析程式位於 DNS 查詢的開頭,而權威名稱伺服器位於末尾。

遞迴 DNS 解析程式

遞迴解析程式是一種電腦,其回應來自用戶端的遞迴請求並花時間追蹤 DNS 記錄。為執行此操作,其發出一系列請求,直至到達用於所請求的記錄的權威 DNS 名稱伺服器為止(或者逾時,或者如果未找到記錄,則返回錯誤)。幸運的是,遞迴 DNS 解析程式並不總是需要發出多個請求才能追蹤回應用戶端所需的記錄;快取是一種資料持久性過程,可透過在 DNS 尋找中更早地服務於所請求的資源記錄來協助短路必要的請求。

DNS query diagram

權威 DNS 伺服器

簡言之,權威 DNS 伺服器是實際持有並負責 DNS 資源記錄的伺服器。這是位於 DNS 尋找鏈底部的伺服器,其將使用所查詢的資源記錄進行回應,從而最終允許發出請求的 Web 瀏覽器達到存取網站或其他 Web 資源所需的 IP 位址。權威名稱伺服器可滿足來自其本身資料的查詢,並且無需查詢其他來源,因為這是某些 DNS 記錄的最終真實來源。

DNS query diagram

值得一提的是,在查詢對象為子網域(例如 foo.example.com 或 blog.cloudflare.com )的情況下,將向權威名稱伺服器之後的序列新增一個附加名稱伺服器,其負責儲存該子網域的 CNAME 記錄

DNS query diagram

許多 DNS 服務與 Cloudflare 提供的服務之間存在一個關鍵區別。 Google DNS、OpenDNS 等不同 DNS 遞迴解析程式以及 Comcast 等提供者均保持 DNS 遞迴解析程式的資料中心安裝。這些解析程式可實現透過 DNS 最佳化電腦系統的最佳化群集快速輕鬆地進行查詢,但它們與 Cloudflare 代管的名稱伺服器截然不同。

Cloudflare 維護 Internet 功能不可或缺的基礎結構級名稱伺服器。一個主要範例是 Cloudflare 部分負責代管的 f-根伺服器網路。F 根是每天負責數十億個 Internet 請求的根級 DNS 名稱伺服器基礎結構元件之一。我們的 Anycast network 在處理大量 DNS 流量方面發揮著不可替代的作用,同時不會出現服務中斷。

DNS 尋找有哪些步驟?

大多數情況下,DNS 與正被轉換為相應 IP 位址的網域名稱有關。要瞭解此過程的工作方式,在 DNS 尋找從 Web 瀏覽器經過 DNS 尋找過程然後再返回時,追蹤 DNS 尋找的路徑會有所幫助。我們來看一下這些步驟。

注意:通常,DNS 尋找資訊將當地快取在查詢電腦內,或者遠端快取在 DNS 基礎結構內。DNS 尋找通常有 8 個步驟。快取 DNS 資訊時,將從 DNS 尋找過程中跳過一些步驟,從而使該過程更快。以下範例概觀了不快取任何內容如時的所有 8 個步驟。

DNS 尋找的 8 個步驟:

  1. 使用者在 Web 瀏覽器中鍵入 「example.com」,查詢傳輸到 Internet 中,然後 DNS 遞迴解析程式接收該查詢。
  2. 接著該解析程式查詢 DNS 根名稱伺服器 (.)。
  3. 然後根伺服器使用儲存其域資訊的頂層網域 (TLD) DNS 伺服器(例如 .com 或 .net)的地址回應該解析程式。在搜尋 example.com 時,我們的請求指向 .com TLD。
  4. 然後該解析程式向 .com TLD 發出請求。
  5. TLD 伺服器隨後使用該域的名稱伺服器 example.com 的 IP 位址進行回應。
  6. 最後,遞迴解析程式將查詢傳送到該域的名稱伺服器。
  7. 接著 example.com 的 IP 位址從名稱伺服器返回該解析程式。
  8. 然後 DNS 解析程式使用最初請求的域的 IP 位址回應 Web 瀏覽器。

  9. DNS 尋找的這 8 個步驟返回了 example.com 的 IP 位址後,瀏覽器便能夠發出對該網頁的請求:

  10. 瀏覽器向該 IP 位址發出 HTTP請求。
  11. 位於該 IP 的伺服器返回將在瀏覽器中呈現的網頁(第 10 步)。
DNS query diagram

什麼是 DNS 解析程式?

DNS 解析程式是 DNS 尋找的第一站,其負責與發出初始請求的用戶端打交道。解析程式啟動查詢順序,這最終將使 URL 轉換為必要的 IP 位址。

注意:典型的未快取 DNS 尋找將涉及遞迴查詢和反覆查詢。

務必區分遞迴 DNS 查詢和遞迴 DNS 解析程式。該查詢是指向需要解析該查詢的 DNS 解析程式發出的請求。DNS 遞迴解析程式是一種電腦,其接受遞迴查詢並透過發出必要的請求來處理回應。

DNS query diagram

DNS 查詢有哪些類型?

在典型 DNS 尋找中會出現三種類型的查詢。透過使用這些查詢的組合,最佳化的 DNS 解析過程可縮短傳輸距離。在理想情況下,快取的記錄資料將可用,從而使 DNS 名稱伺服器能夠返回非遞迴查詢。

3 種 DNS 查詢類型:

  1. 遞迴查詢 - 在遞迴查詢中,DNS 用戶端要求 DNS 伺服器(一般為DNS 遞迴解析程式)將使用所請求的資源記錄回應用戶端,或者如果解析程式無法找到該記錄,則返回錯誤訊息。

  2. 反覆查詢 - 在這種情況下,DNS 用戶端將允許 DNS 伺服器返回其能夠提供的最佳應答。如果所查詢的 DNS 伺服器與查詢名稱不相符,則其將返回對較低等級網域名稱空間具有權威性的 DNS 伺服器的引用。然後,DNS 用戶端將對引用地址進行查詢。此過程繼續使用查詢鏈中的其他 DNS 伺服器,直至發生錯誤或逾時為止。

  3. 非遞迴查詢 - 一般當 DNS 解析程式用戶端查詢 DNS 伺服器以獲得其有權存取的記錄時會進行此查詢,因為其對該記錄具有權威性,或者該記錄存在於其快取記憶體內 。一般 DNS 伺服器將快取 DNS 記錄,以防止更多頻寬消耗和上游伺服器上的負載。

什麼是 DNS 快取?DNS 快取發生在哪裡?

快取的目的是將資料臨時儲存在某個位置,從而提高資料請求的效能和可靠性。DNS 快取涉及將資料儲存在更靠近請求用戶端的位置,以便能夠更早地解析 DNS 查詢,並且能夠避免在 DNS 尋找鏈中進一步向下的額外查詢,從而縮短載入時間並減少頻寬/CPU 消耗。DNS 資料可快取在各個位置,每個位置均將儲存 DNS 記錄並儲存由存留時間 (TTL) 確定的一段時間。

瀏覽器 DNS 快取

新式 Web 瀏覽器被設計為預設將 DNS 記錄快取一段時間。目的很明顯;越靠近 Web 瀏覽器進行 DNS 快取,為檢查快取記憶體並向 IP 位址發出正確請求而必須採取的處理步驟就越少。發出對 DNS 記錄的請求時,瀏覽器快取記憶體是針對所請求的記錄而檢查的第一個位置。

在 Chrome 瀏覽器中,您可以切換到 chrome://net-internals/#dns 檢視 DNS 快取記憶體的狀態。

作業系統 (OS) 級 DNS 快取

作業系統級 DNS 解析程式是 DNS 查詢離開您電腦前的第二站,也是當地最後一站。作業系統內旨在處理此查詢的過程通常稱為「存根解析程式」或 DNS 用戶端。當存根解析程式獲得來自某個應用程式的請求時,其首先檢查自己的快取記憶體,以便檢視是否有此記錄。如果沒有,則其將當地網路外部的 DNS 查詢(設定了遞迴標記)傳送到網際網路服務提供者 (ISP) 內部的 DNS 遞迴解析程式。

與先前所有步驟一樣,當 ISP 內的遞迴解析程式收到 DNS 查詢時,其還將檢視所請求的主機到 IP 位址轉換是否已經儲存在其當地持久性層中。

根據其快取記憶體中具有的記錄類型,遞迴解析程式還具有其他功能:

  1. 如果解析程式沒有 A 記錄,但確實有針對權威名稱伺服器的 NS 記錄,則其將直接查詢這些名稱伺服器,從而繞過 DNS 查詢中的幾個步驟。此捷徑可防止從根和 .com 名稱伺服器(在我們對 example.com 的搜尋中)進行尋找,並且有助於更快地解析 DNS 查詢。
  2. 如果解析程式沒有 NS 記錄,其將向 TLD 伺服器(在我們這裡為 .com)傳送查詢,從而跳過根伺服器。
  3. 萬一解析程式沒有指向 TLD 伺服器的記錄,其將查詢根伺服器。這種情況通常在清除了 DNS 快取記憶體後發生。

瞭解 Cloudflare DNS 與其他 DNS 提供者之間的區別。