天天看點

系統設計基礎知識(十)—DNS

作者:喜歡編碼的社畜
DNS它是網際網路的核心服務。作為一個可以将域名和IP位址互相映射的分布式資料庫,它可以讓人們更容易通路網際網路

這是系統設計基礎知識系列第十章DNS。你可以閱讀我以前的文章

系統設計基礎知識(一) - 網絡

系統設計基礎知識(二)—資料庫

系統設計的基礎知識(三)吞吐量和延遲

系統設計基礎知識(四)—系統可用性

系統設計基礎知識(五)—緩存

系統設計基礎知識(六)—緩存區

系統設計基礎知識(七)—代理

系統設計基礎知識(八)了解IP位址和端口

系統設計基礎知識(九)—負載均衡器

域名系統(DNS)是網際網路的核心協定之一。了解基本的 DNS 原理有助于我們設計系統。

TCP/IP 基于 IP 位址進行通信,但 IP 位址很難記住。還有另一個辨別符——主機名。為計算機配置主機名,并在使用網絡通信時使用主機名指導,而不是輸入一長串 IP 位址。網絡系統通過一個名為hosts的檔案實作将主機名轉換為IP位址的功能。主機檔案是本地檔案。優點是搜尋響應快。主要用于存儲一些本地網絡的主機名和IP位址的對應資訊。當系統通過主機名通路主機時,會檢查本地主機檔案,從檔案中找到對應的IP位址,然後發送消息。如果在主機檔案中找不到相關資訊,則主機通路失敗。

系統設計基礎知識(十)—DNS

DNS原理

網絡通信基于 TCP/IP

TCP/IP 基于 IP 位址

計算機隻能識别網絡上的 IP 位址

我們無法記住超過 7 組 IP 位址的網站,是以當我們通路一個網站時,我們在浏覽器位址欄中輸入主機名即可通路所需的網頁。有一個DNS伺服器,可以将任何域名翻譯成對應的IP位址,并調用該IP位址對應的網頁。

系統設計基礎知識(十)—DNS

域名結構

頂級域包括 com、net、gov、mil 或任何标準國家頂級域。新的頂級域 (TLD) 一直在建立。

資源類型——頁面的類型

  • 典型的網頁是超文本傳輸協定 (HTTP)
  • HTTPS 是安全的 HTTP。
  • 其他資源包括檔案傳輸協定 (FTP)、GOPHER、遠端登入協定 (Telnet)、簡單郵件傳輸協定 (SMTP) 等
系統設計基礎知識(十)—DNS

機器名稱- 子域

  • 大多數網頁以 WWW 開頭。這不是一個絕對的規則。如果 DNS 設定正确,則大多數網頁都不需要 WWW。

頂級域名——一大群相似類型的域名

  • 有些僅限于某些機構,如 gov 或 int。

每個級别的域名由字母和數字組成。不區分大小寫,長度不能超過63位元組,一個完整的域名不能超過255位元組。

域名空間

域命名空間結構就像一棵倒置的樹。根域名是樹的根。根域名的下一層稱為頂級域名。是管理範圍的劃分。最大的域是根域,可以分為頂級域、二級域、三級域、四級域。對應的域名有根域名、頂級域名、二級域名、三級域名等。不同級别的域名以點号分隔,最低級的域名在最遠左邊,右邊是最進階别的域。

系統設計基礎知識(十)—DNS

頂級域名可以分為3類。

  1. ccTLD——國家頂級域名采用ISO3166的規定。現在大約有 200 個 ccTLD 正在使用中。
系統設計基礎知識(十)—DNS

2. gTLD(國際頂級域名) ——國際組織可以注冊.int。

有著名的頂級域名。他們是:

.com為公司,

.net代表網絡服務機構,

.org指非營利組織,

.edu指教育機構(僅限美國),

.gov表示政府部門(僅限美國),

.mil表示軍事部門(僅限美國)。

随着網際網路使用者的持續增長,又增加了七個gTLD。他們是:

.aero對于航空運輸業,

.biz對于公司和企業,

.coop對于合作團體,

.info在各種情況下使用,

.museum對于博物館,

.name供個人使用,

.pro對于自由職業者。

3.二級域名

注冊在國家自行确定的國家頂級域名下。它們分為 2 類:

  • 分類域名
  • 管理域名

4. 三級域名和四級域名

命名樹中任何一個節點的域名都是從這個節點到頂級域名的字元串,用“.”分隔。在域命名空間結構中,其所屬域中節點的主機名辨別可以相同,但域名必須不同。

域名解析流程

系統設計基礎知識(十)—DNS

DNS 是一種應用層協定。事實上,它也适用于其他應用層協定,包括但不限于 HTTP、SMTP 和 FTP。它用于将使用者提供的主機名解析為 IP 位址。

  1. 用戶端檢測到自己的緩存
  2. 如果不是,請檢查主機檔案
  3. 如果不是,則用戶端發送 DNS 請求以轉換 IP 位址或主機名
  4. DNS 伺服器接收用戶端的請求
  5. 檢查 DNS 伺服器的緩存,如果找到請求的位址或主機名,将向用戶端發送響應消息
  6. 如果沒有找到,将在資料庫中搜尋。如果找到請求的或主機名,将向用戶端發送響應消息
  7. 如果沒有找到,将向根域DNS伺服器發送請求
  8. 根域伺服器查找頂級域
  9. 從頂級域中找到二級域
  10. 二級域名找到三級
  11. 直到找到要解析的位址或主機名,才會向 DNS 伺服器發送響應消息
  12. DNS 伺服器将響應存儲在緩存中,然後将解析結果發送給用戶端
  13. 用戶端從 DNS 伺服器接收 IP 位址
  14. 如果未找到用戶端,則傳回錯誤消息。

域名解析

它可以分為2種。解析域名時,首先使用靜态域名解析。如果靜态域名解析不成功,則使用動态域名解析。

  1. 靜态域名解析——通過靜态域名解析表進行,手動建立域名與IP位址的對應表。DNS用戶端在查找域名對應的IP位址時,會在靜态域名解析表中查找指定的域名,進而獲得對應的IP位址,提高解析效率。
  2. 動态域名解析——需要專門的域名伺服器來運作域名解析伺服器程式,提供域名到IP位址的映射關系,負責接收用戶端的域名解析請求。

DNS 代理

它首先查找本地域名解析表。如果沒有查詢到對應的解析表項,則将DNS請求封包轉發給DNS伺服器,并在收到DNS伺服器的響應封包後傳回給DNS用戶端。這樣,當DNS伺服器的位址發生變化時,隻需要改變DNS代理上的配置,就不需要對區域網路中每個DNS用戶端的配置進行一一修改,進而簡化了網絡管理。

系統設計基礎知識(十)—DNS

DNS解析器

從應用程式的角度來看,通路網頁是通過解析器完成的。在發送 TCP 或 UDP 資料包之前,解析器必須将域名(主機名)轉換為 IP 位址。解析器必須至少注冊一個域名伺服器的 IP 位址。

DNS 伺服器

系統設計基礎知識(十)—DNS

域名解析是根據DNS層次結構的特點自上而下進行的。但是如果每一個域名解析都是從根DNS伺服器開始的,那麼根DNS伺服器可能承載不了海量的流量。實際上,大多數域名解析都是在本地 DNS 伺服器中完成的。

通過适當設定本地DNS伺服器,本地DNS伺服器負責大部分域名解析請求,提高域名解析效率。

DNS 命名空間的層次結構允許不同的名稱伺服器管理命名空間的不同部分。域名伺服器是管理其所在域的主機和軟體。它管理的層稱為區域。區域是 DNS 命名空間的子樹,可以獨立于其他區域進行管理。每層都有一個域名伺服器。

根 DNS 伺服器在檢索資料的功能中起着至關重要的作用。頂級 DNS 伺服器的 IP 位址注冊在根 DNS 伺服器中。如果頂級域名發生變化,您還必須在根 DNS 伺服器中進行更改。

同理,二級DNS伺服器的IP位址注冊在頂級DNS伺服器中。

主機名和 DNS 伺服器都必須分層設定。如果名稱伺服器出現故障,則主機名的 DNS 查詢将無法正常工作。是以,為了提高可用性,必須設定至少 2 個名稱伺服器。一旦第一個名稱伺服器無法提供查詢結果,它會自動轉到第二個甚至第三個名稱伺服器。

DNS 伺服器類型

  1. 本地 DNS 伺服器
  • 本地 DNS 伺服器更靠近用戶端。當用戶端發出查詢請求時,它會被發送到本地 DNS 伺服器。如果本地檔案中有對應的主機名資訊,則将其轉換為IP位址傳回給用戶端。
  • 如果不是,它會查詢根 DNS 伺服器。根 DNS 伺服器收到本地 DNS 伺服器的請求後,傳回相關主機名的 IP 位址。本地 DNS 伺服器從根 DNS 伺服器接收結果,然後向相關域名伺服器發送查詢請求。

2. 根名稱伺服器

  • 用于管理頂級域名。它本身并不解析域名,但它知道相關名稱伺服器的 IP 位址。全球共有 13 台 IPv4 域名伺服器。
  • 數字 13 是網絡可靠性和性能之間的折衷。它基于大多數網絡使用的 IPv4 限制。
  • 每個根 DNS 伺服器代表的不是一台計算機,而是一個由許多計算機組成的伺服器叢集。
  • 這 13 個 IPv4 根 DNS 伺服器可以支援多達 43 億個 IP 位址。
9 個根 DNS 伺服器在美國,2 個在歐洲(英國和瑞典),1 個在亞洲(日本)。
  • 所有名稱伺服器都必須使用根 DNS 伺服器的 IP 位址注冊,因為當 DNS 搜尋基于 IP 位址時。

3. 權威域名伺服器

  • 網際網路上的主機注冊在域名伺服器上,該域名伺服器是主機的域權威域名伺服器。
  • 主機将有 2 個名稱伺服器以防止單點故障。
  • 授權域名伺服器擁有注冊主機域名與IP位址的映射資訊。查詢注冊的主機名時,會傳回對應主機的IP位址。如果主機名和IP位址有一些變化,可以在授權的域名伺服器中進行處理。無需向其他域名伺服器申請或報告。
  • 主域名伺服器——主域名伺服器完成一個或多個區域的域名解析。它在區域中有源資料檔案(主機名和 IP 位址資訊)。
  • 二級域名伺服器——輔助主域名伺服器提供域名查詢服務,可有效降低主機多時主域名伺服器的流量壓力。當主域名伺服器出現故障時,從域名伺服器可以在資料有效期内繼續為主機提供域名解析服務。
  • 一個主域名伺服器可以有多個二級域名伺服器,一個二級域名伺服器也可以是其他地區的主域名伺服器。二級域名伺服器包含區域内主機位址資料的授權資訊,可以以區域配置檔案副本的形式存儲。是以,二級域名伺服器可以為其覆寫區域提供服務。
  • 二級域名伺服器不建立資料檔案,它擷取區域資料的唯一方式是通過區域傳輸的方式從一級域名伺服器擷取最新的區域資料副本。
  • 有兩種方法可以擷取資料的副本。

1. 二級域名伺服器定期主動擷取一級域名伺服器的副本,或更新副本中的資料

2. 一級域名伺服器通知二級域名伺服器及時更新副本中的資料當區域資料發生變化時。

DNS 傳輸層協定

系統設計基礎知識(十)—DNS

DNS 響應消息中有一個删除标志,用截斷響應 (TC)表示。當響應封包采用UDP 封裝且封包長度大于512位元組時,伺服器隻傳回前512位元組,并設定TC标志位,表示該封包已被删除。當用戶端收到 TC 設定的響應消息後,會使用 TCP 封裝查詢請求。DNS伺服器傳回的響應封包長度大于512位元組。

UDP 封包最大長度為 512 位元組,最多可包含 13 個根域名伺服器。是以,IPv4 域名伺服器的數量隻能限制在 13 台。每台伺服器以 A 到 M 的單個字母命名。

系統設計基礎知識(十)—DNS

當輔助 DNS 名稱伺服器啟動時,将從主 DNS 名稱伺服器執行區域傳輸。正常運作時,二級域名伺服器也會定期查詢主域名伺服器,了解主域名伺服器的資料是否發生變化。如果有變化,将執行區域轉移。傳輸的資料由 TCP 封裝。是以,UDP用于用戶端和伺服器之間的查詢和響應。TCP用于主從伺服器之間的傳輸。

DNS查詢方式

系統設計基礎知識(十)—DNS
  1. 遞歸查詢——如果DNS伺服器不能直接響應請求,它會繼續請求其他DNS伺服器,直到查詢到解析結果。查詢的結果可以是主機名的 IP 位址,也可以是主機名無法解析。無論結果如何,DNS 伺服器都會将結果傳回給用戶端。
  2. 疊代查詢——如果DNS伺服器找不到對應的記錄,它會傳回一個可能知道結果的域名伺服器IP位址給用戶端,用戶端會繼續向其他域名伺服器發送查詢請求。

用戶端查詢IP位址時,對本地域名伺服器進行遞歸查詢。如果本地檔案有對應的資料,則直接傳回對應的資料。如果沒有,則本地DNS伺服器對根DNS伺服器進行疊代查詢,直到找到具體的域名伺服器,并由域名伺服器傳回相應的資料。用戶端和本地 DNS 伺服器将接收到的資料存儲在緩存中,以優化每次查詢的性能。

DNS 正向查詢 & DNS 反向查詢

轉發查詢:用戶端知道主機名但不知道 IP 位址

反向查詢:用戶端知道 IP 位址,但不知道 hsotname

為了實作反向查詢/查找,網際網路的反向DNS資料庫植根于“ in-addr.arpa”級域。反向 DNS 解析 (rDNS)涉及搜尋域名系統資料庫和注冊商表。為了建立反向命名空間,“ in-addr.arpa”級域中的子域按照 IP 位址的逆序建構。例如,要對 IP 位址進行反向查找,将查找8.8.4.4域名的 PTR 記錄8.8.4.4.in-addr.arpa并發現指向dns.google。

系統設計基礎知識(十)—DNS

DNS的缺點

  1. 使用 DNS 時會有輕微的延遲,即使它可以通過緩存來緩解
  2. DNS伺服器的維護非常複雜
  3. DNS服務會受到DDoS攻擊,導緻使用者無法通路網頁

由于網際網路的擴充,整個域名系統(DNS)變得非常複雜,這導緻了DNS系統向多層架構演進。

如果你發現我的任何文章有幫助或有用,麻煩點贊或者轉發。 謝謝!

繼續閱讀