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

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

學習目標

閱讀本文後,您將能夠:

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

相關內容


想要繼續瞭解嗎?

訂閱 TheNET,這是 Cloudflare 每月對網際網路上最流行見解的總結!

請參閱 Cloudflare 的隱私權政策,了解我們如何收集和處理您的個人資料。

複製文章連結

什麼是 DNS?

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

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

DNS——放大鏡檢查 IP 位址,找到 www.example.com

DNS 如何運作?

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

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

報告
用於 DNS 安全性的 GigaOm Radar
報告
閱讀 2023 年第四季 DDoS 威脅情勢報告

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

  • DNS 遞迴程式 - 遞迴程式可視為被要求前往圖書館某處尋找特定書籍的圖書館員。DNS 遞迴程式是一種伺服器,其設計是為了透過網頁瀏覽器等應用程式接收來自用戶端機器的查詢。通常遞迴程式隨後會負責進行其他請求,以便滿足用戶端的 DNS 查詢。
  • 根名稱伺服器 - 根伺服器是將人們可讀的主機名稱轉譯 (解析) 為 IP 位址的第一個步驟。可將其視為指向不同書架的圖書館中的索引 - 一般其作為對其他更具體位置的引用。
  • TLD 名稱伺服器 —— 頂層網域名稱伺服器(TLD)可看做是圖書館中一個特殊的書架。此名稱伺服器是搜尋特定 IP 位址的下一步,其代管主機名稱的最後一部分(例如,在 example.com 中,TLD 伺服器為「com」)。
  • 權威名稱伺服器 - 這個最終名稱伺服器可視為書架上的字典,其中特定名稱可轉譯為其定義。權威名稱伺服器是名稱伺服器查詢中的最後一站。如果權威名稱伺服器能夠存取請求的記錄,則其會將已請求主機名稱的 IP 位址傳回到發出初始請求的 DNS 解析程式 (圖書管理員)。
快速、安全的 DNS
所有 Cloudflare 方案中均包含免費 DNS

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

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

遞迴 DNS 解析程式

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

DNS 記錄請求序列——DNS 遞迴解析程式從用戶端獲取請求

權威 DNS 伺服器

簡言之,權威 DNS 伺服器是實際上保留並負責處理 DNS 資源記錄的伺服器。這是位於 DNS 尋找鏈底部的伺服器,其將使用所查詢的資源記錄進行回應,從而最終允許發出請求的網頁瀏覽器達到存取網站或其他網頁資源所需的 IP 位址。權威名稱伺服器可以透過自己的資料滿足查詢,不需要查詢另一個來源,因為這就是特定 DNS 記錄的事實最終來源。

DNS 記錄請求序列——DNS 查詢到達 cloudflare.com 的權威名稱伺服器

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

DNS 記錄請求序列——對子網域 blog.cloudflare.com 的 CNAME 記錄進行 DNS 查詢

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

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

DNS 尋找有哪些步驟?

在大部分的情況下,DNS 與轉譯為適當 IP 位址的網域名稱有關。要瞭解此過程的工作方式,在 DNS 尋找從網頁瀏覽器經過 DNS 尋找過程然後再返回時,追蹤 DNS 尋找的路徑會有所幫助。現在來看看步驟。

注意:通常會在查詢電腦內部本機快取或在 DNS 基礎結構遠端快取 DNS 尋找資訊。DNS 尋找中通常有 8 個步驟。快取 DNS 資訊時,會在 DNS 尋找過程中略過步驟,以加快速度。以下範例概述了沒有快取任何內容時的所有 8 個步驟。

DNS 尋找的 8 個步驟:

  1. 使用者在網頁瀏覽器中鍵入「example.com」,查詢傳輸到網際網路中,然後 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 位址回應網頁瀏覽器。

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

  10. 瀏覽器向該 IP 位址發出 HTTP 請求。
  11. 位於該 IP 的伺服器傳回將在瀏覽器中轉譯的網頁 (第 10 步)。
完整的 DNS 查閱和網頁查詢——10 個步驟

什麼是 DNS 解析程式?

DNS 解析程式是 DNS 尋找的第一站,其負責與發出初始請求的用戶端打交道。解析程式會開始進行查詢序列,最終導致 URL 被轉譯為必要的 IP 位址。

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

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

DNS 遞迴查詢從 DNS 用戶端前往 DNS 遞迴解析程式

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 快取

新式網頁瀏覽器被設計為預設將 DNS 記錄快取一段時間。目的很明顯;越靠近網頁瀏覽器進行 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 提供者之間的區別。