DNS 是什麼?網域名稱系統介紹 – 系統設計 06

system-design-系統設計06-系統設計元件-what-is-dns-hogantech-hoganblab

DNS 的起源

首先我們先使用手機來做舉例,其中每個聯絡人都有一個唯一的手機號碼。如果今天我們需要打電話給朋友,我們可以單純輸入電話號碼,撥通電話。然而,隨著聯絡人數量的增加,我們不太可能記住所有的電話號碼,因此我們會將通訊錄處存在手機裡,當我們需要撥通電話時,我們只需要找到對應的聯絡人資訊,就可以撥通電話。

那麼,在資訊領域,電腦則是由 IP 位址來當作聯絡用的號碼,例如:140.112.0.0 就是一個 IP 位址。 我們可以使用 IP 位址來存取電腦上託管的網站。 不過,如同前面舉例的,人類不方便辨識出這麼多由數字構成的 IP 位址,因此我們有了網域名稱。例如:google.com 是一個 Google 的網站,他對應的 IP 為142.250.191.78 。我們也需要一個類似通訊錄的地方,來將 IP 位址以及網域名稱做紀錄。

什麼是 DNS?

網域名稱系統 (DNS) 是網際網路命名服務(Domain Name System),此 DNS 系統會將可以閱讀的網域名稱對應到機器可讀的 IP 位址,例如:google.com 對應的IP為 142.250.191.78 。當使用者在瀏覽器中輸入網域名稱時,瀏覽器必須透過 DNS 將網域名稱轉換為 IP 位址。一旦獲得所需的 IP 位址,使用者的請求就會轉送到目標伺服器。

DNS需要知道的名詞

名稱伺服器 (Name Server)

其實 DNS 不是單一伺服器,而是大量伺服器構成的 Block,其中回應使用者查詢的 DNS 伺服器稱為名稱伺服器。

資源記錄(Resource Record)

DNS 資料庫會以資源記錄 (Resource Record) 的形式儲存網域名稱到 IP 位址的對應。 RR 是使用者從名稱伺服器請求的最小資訊單元,並且資源紀錄有不同類型。這邊提供以下幾種不同的資源紀錄來提供讀者做參考。

system-design-06-table

快取(Caching

DNS 使用不同層的快取,來減少使用者的請求延遲。快取在減輕 DNS 負擔方面發揮著重要功能,因為它必須滿足整個全球網際網路的查詢。

層次結構(Hierarchy)

DNS 名稱伺服器採用層次結構形式。 由於其規模和查詢負載不斷增加,分層結構使 DNS 具有高度可擴展性。

DNS 如何運作?

AWS 圖示與描述

首先提供 AWS 圖示以及原文描述,接下來會分別針對一些專有名詞做講解。

system-design-06-what-is-dns
  1. 使用者開啟 Web 瀏覽器,在網址列中輸入 www.example.com,然後按 Enter 鍵。
  2. www.example.com 的請求將路由到 DNS 解析器,該解析器通常由使用者的 Internet 服務供應商 (ISP) 管理,例如有線 Internet 供應商、DSL 寬頻供應商或公司網路。
  3. ISP 的 DNS 解析器將對 www.example.com 的請求轉送至 DNS 根名稱伺服器。
  4. ISP 的 DNS 解析器再次轉送 www.example.com 的請求,這次轉送至 .com 網域的 TLD 名稱伺服器之一。 .com 網域的名稱伺服器使用與 example.com 網域關聯的四個 Amazon Route 53 名稱伺服器的名稱來回應請求。
  5. ISP 的 DNS 解析器選擇 Amazon Route 53 名稱伺服器,並將 www.example.com 的請求轉送到該名稱伺服器。
  6. Amazon Route 53 名稱伺服器在 example.com 託管區域中尋找 www.example.com 記錄,取得關聯值(例如 Web 伺服器的 IP 位址 192.0.2.44),並將 IP 位址傳回給 DNS解析器。
  7. ISP 的 DNS 解析器最終獲得使用者所需的 IP 位址。 解析器將該值傳回給 Web 瀏覽器。 DNS 解析器也會將 example.com 的 IP 位址快取(儲存)一段您指定的時間,以便下次有人瀏覽 example.com 時它可以更快地回應。 有關詳細信息,請參閱生存時間 (TTL)。
  8. Web 瀏覽器向從 DNS 解析器取得的 IP 位址發送對 www.example.com 的請求。 例如,您的內容就是在 Amazon EC2 執行個體上執行的 Web 伺服器或配置為網站終端節點的 Amazon S3 儲存桶。
  9. 位於 192.0.2.44 的 Web 伺服器或其他資源將 www.example.com 的網頁傳回給 Web 瀏覽器,並且 Web 瀏覽器顯示該頁面。

DNS層次結構(Hierarchy)

如前面所描述,DNS 不是接受請求並回應使用者查詢的單一伺服器,而是由非常多伺服器結合而成,大型的系統,具有不同層次結構的名稱伺服器。

DNS Hierarchy 四種伺服器

DNS 解析器(Resolver)

解析器用來將查詢的字串變成一個查詢序列,請求轉送至其他 DNS 名稱伺服器。正常情況下,DNS 解析器本身就存在於用戶的網路。

根級名稱伺服器(Root-level Name Server)

這些伺服器接收來自本機伺服器的請求。 根名稱伺服器維護基於頂級網域的名稱伺服器,例如 .com、.edu、.us 等。 例如,當使用者要求 educative.io 的 IP 位址時,根級名稱伺服器將傳回保存 .io 網域的 IP 位址的頂級網域 (TLD) 伺服器清單。

頂級網域名稱伺服器(Top-level Domain Server)

這些伺服器保存權威名稱伺服器的 IP 位址。 查詢方將獲得屬於該組織的權威伺服器的 IP 位址清單。

權威名稱伺服器(Authoritative Name Server

這些是一些大公司的 DNS 名稱伺服器,提供網路或應用程式伺服器的 IP 位址。

迭代與遞歸查詢

有兩種方法可以執行 DNS 查詢,這邊也附上 CloudFlare 的 DNS 簡化流程圖,仔細看也可以發現是與 AWS 的圖很相像的。

迭代查詢

本機伺服器向根伺服器(Root server)、頂級網域名稱伺服器(TLD) 和權威伺服器(Authoritative Name Server)請求 IP 位址。

遞歸查詢

最終用戶請求本地伺服器。本機伺服器進一步請求根級名稱伺服器(Root-level Name Server)。 根級名稱伺服器(Root-level Name Server)將請求轉送到其他名稱伺服器。

system-design-06-how-dns-work

快取

什麼是快取呢?快取是指經常請求的資料,將它們儲存在某一個地方,需要的時候可以快速取得。

在 DNS 裡面,也是會有快取的!快取可以大幅減少用戶的回應時間並減少網路流量,當我們在不同的層次結構中使用快取時,它也可以減輕 DNS 基礎架構的大量查詢負擔。快取亦可以在瀏覽器、作業系統、使用者網路內的本機名稱伺服器或 ISP 的 DNS 解析器中看到。

DNS 之於分散式系統

之前的文章介紹了分散式系統的概念,也介紹一個好的軟體系統應該要有哪些特性。那們讓我們來聊聊,DNS 中與抽象、特性、需求有關的部分吧。

其實 DNS本身就是一個分散式系統,並且這些分散式特性具有以下優點:

  1. 它避免成為單點故障 (SPOF)。
  2. 它實現了低查詢延遲,因此用戶可以從附近的伺服器獲得回應。
  3. 它在維護和更新或升級過程中獲得更高程度的靈活性。 例如,如果一台 DNS 伺服器發生故障或負載過重,另一台 DNS 伺服器可以回應使用者查詢。

這邊也講解 DNS 如何提升擴展性(Scalability)、可靠性(Reliability)和一致性(Consistency)。

擴展性(Scalability)

DNS 是一個高度可擴展的系統。根據 Cloudflare 的文章,目前全球有 13 台根級名稱伺服器(Root-level Name Server) ,並且另外根據這些根伺服器而複製出來的實例,分佈在世界各地,用來處理使用者查詢。這些請求被分配到 TLD 和根伺服器來處理查詢,最後分配到由大公司自行管理的權威伺服器以使整個系統正常運作。

可靠性(Reliability)

快取

快取是在瀏覽器、作業系統和本機名稱伺服器中完成的,ISP DNS 解析器也維護著經常存取的服務的豐富快取。即使某些 DNS 伺服器暫時關閉,也可以提供快取記錄,使 DNS 成為可靠的系統。

伺服器複製

DNS 系統性地,複製了遍布全球的每個副本伺服器,用來降低延遲處理用戶請求,並且提高了整個系統的可靠性。

持續性(Consistency)

DNS 使用各種協定在層次結構中的複製伺服器之間更新和傳輸資訊。 DNS 則在一致性方面做出妥協以實現高效能。因為與寫入相比,從 DNS 的資料庫讀取資料的頻率更高。 不過,DNS 提供最終一致性並延遲更新複製伺服器上的記錄。

由於前面提到的快取機制,一致性也會受到影響。由於權威伺服器位於組織內,因此在組織中的伺服器發生故障的情況下,權威伺服器上的某些資源記錄可能會被更新。 因此,預設/本地和 ISP 伺服器上的快取記錄可能會過時。為了緩解此問題,每個快取記錄都帶有一個稱為生存時間 (TTL) 的過期時間。

後記

這一篇距離上一篇 系統設計元件介紹 Building Block – 系統設計 05 隔了一段時間,主要是因為花了比較多的時間了解 DNS 的原理,並且也認為 DNS 不管是在面試、日常工作都是需要知道的一個必備知識,因此花了不少篇幅,深度講解了 DNS 。

未來如果是範圍比較大的主題,也會依然花不少篇幅去做講解,謝謝閱讀!

引用

DNS Design: Scalability, Performance, Robustness

Cloudflare: What is a DNS root server?

AWS: What is DNS?

IBM: What is the DNS protocol?

相關文章

系統設計元件介紹 Building Block – 系統設計 05

Back-of-the-envelope 封底計算 – 系統設計 04

軟體設計非功能性特性 – 系統設計 03

抽象在系統設計中的應用 – 系統設計 02

現代系統設計介紹 – 系統設計 01

zh_TW繁體中文