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

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

Share facebook icon linkedin icon twitter icon email icon

DNS

學習目標

閱讀本文後,您將能夠:

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

什麼是 DNS?

網域名稱系統 (DNS) 是網際網路的電話簿。人們透過 nytimes.com 或 espn.com 等網域名稱線上存取資訊。網頁瀏覽器透過網際網路通訊協定 (IP) 位址進行互動。DNS 將網域名稱轉譯為 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)。網際網路上的每個裝置都被分配了一個 IP 位址,必須有該位址才能找到相應的網際網路裝置 - 就像使用街道地址來尋找特定住所一樣。若使用者想要載入網頁,使用者在網頁瀏覽器中輸入的內容(example.com)與機器方便使用的位址之間必須進行轉譯,才能讓機器找到 example.com 網頁。

為理解 DNS 解析過程,務必瞭解 DNS 查詢必須經過的不同硬體元件。對於網頁瀏覽器,DNS 查詢會在「幕後」發生,不需要使用者的電腦在初始請求之外另外進行互動。

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

  • DNS 遞迴程式 - 遞迴程式可視為被要求前往圖書館某處尋找特定書籍的圖書館員。DNS 遞迴程式是一種伺服器,其設計是為了透過網頁瀏覽器等應用程式接收來自用戶端機器的查詢。通常遞迴程式隨後會負責進行其他請求,以便滿足用戶端的 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 尋找鏈底部的伺服器,其將使用所查詢的資源記錄進行回應,從而最終允許發出請求的網頁瀏覽器達到存取網站或其他網頁資源所需的 IP 位址。權威名稱伺服器可以透過自己的資料滿足查詢,不需要查詢另一個來源,因為這就是特定 DNS 記錄的事實最終來源。

DNS query diagram

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

DNS query diagram

許多 DNS 服務和 Cloudflare 提供的服務之間有一項關鍵差異。不同的 DNS 遞迴解析程式(例如 Google DNS、OpenDNS)以及 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 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 資料,每一種位置都會儲存由存留時間 (TTL) 決定的設定時間長度的 DNS 記錄。

瀏覽器 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 提供者之間的區別。