天天看點

DNS(域名系統)是如何工作的?

作者:JAVA旭陽

前言

您是否想知道當您在浏覽器中鍵入任何網站的URL時幕後會發生什麼?每當我們鍵入網站位址(例如www.google.com)時,浏覽器都會在幾毫秒内為我們加載一個頁面。浏覽器執行多項操作,如網站 ip 位址查找、加密、響應解析等。最後我們有一個漂亮的網頁可以與之互動。

如果您使用的是 淘寶、微信 或 支付寶 等移動應用程式,您甚至不必輸入網址。該應用程式本身會處理所有事情并處理每個使用者請求。

任何用戶端裝置在通路網站之前執行的第一步是 DNS 查找。DNS 是域名伺服器,其工作是将網站名稱轉換為 IP 位址。它是最重要的元件,DNS 級别的中斷會導緻任何網站癱瘓。

在本文中,我們将深入探讨 DNS 的内部結構以及為什麼需要它。我們将了解處理 DNS 查詢所涉及的不同元件。此外,我們将了解這個過程中涉及的優化和漏洞。

為什麼要有域名伺服器?

網際網路上的每個網站都駐留在伺服器上。您可以将每個網站視為在網際網路上數百萬台計算機中的一台上運作的應用程式。當您鍵入www.google.com等網站名稱時,您的浏覽器如何知道要聯系哪台計算機?計算機隻處理 1 和 0,對網站名稱一無所知。

DNS(域名系統)是如何工作的?

計算機隻能了解 1 和 0

托管網站的每台計算機都由 IP 位址唯一辨別。與我們擁有家庭住址的方式類似,每個網站也駐留在具有 IP 位址的計算機上。就像一座建築可以有多間較高價的電梯大廈一樣,一台計算機可以托管多個網站。

對于連接配接到 Web 伺服器的任何裝置,它必須知道托管它的計算機的 IP 位址。有兩種類型的 IP 位址 IPV4 和 IPV6。IPV4 位址的格式為 10.45.0.98、10.32.64.32。2405:200:1602::312c:8220 是 IPV6 位址。我們很難記住 IP 位址。此外,網站可以從一台計算機移動到另一台計算機。在這種情況下,網站的 IP 位址會發生變化。

我們無法記住人們的電話号碼,是以我們将它們存儲在日記或我們的電話聯系人中。同樣的原則被擴充并應用于網站。DNS 就像所有網站的 IP 位址的主管。當在浏覽器中輸入新的 url 時,浏覽器會聯系 DNS 來解析 IP 位址,然後啟動與網站的通信。

DNS 有什麼作用?

DNS 是一組實體,負責存儲網際網路上每個網站的 IP 位址。任何實體都可以在任何網站上執行查找并擷取其 IP 位址。讓我們打開一個新的浏覽器頁籤并啟動開發人員工具。我通路了網站www.facebook.com,這些是網絡中時間部分的詳細資訊:

DNS(域名系統)是如何工作的?

加載網站所花費的時間

正如所觀察到的,有一段 DNS 查找需要12.25 毫秒才能完成,加載網站的總時間為419.41 毫秒。

現在,讓我們看看這個伺服器的 IP 位址。标頭部分将顯示本網站的 IP 位址。DNS 查找傳回網站的 IPV6,我們的浏覽器向同一伺服器發送請求。

DNS(域名系統)是如何工作的?

遠端位址是網站的IP位址

有一個名為 as 的指令行實用程式nslookup可幫助您查找任何網站的 IP 位址。讓我們嘗試nslookup在網站上執行一個www.google.com。

DNS(域名系統)是如何工作的?

www.google.com上的 nslookup 結果

上圖顯示了nslookup的結果,如果您在浏覽器中使用上述 IP 位址,您将被重定向到 google。

如下圖所示,我在浏覽器的 url 欄中輸入了 IP 位址,它把我重定向到了www.google.com。

DNS(域名系統)是如何工作的?

http 重定向到 www.google.com

DNS 的重要性

DNS 設計得非常好,它向最終使用者隐藏了很多複雜性。如果 DNS 停止工作,您将無法通路任何網站。

微軟經曆了一次中斷,因為它的 DNS 伺服器被查詢淹沒并且沒有響應。它影響了大多數微軟産品,如 Xbox、OneNote、OneDrive、Dynamics 365 等。

2021 年 10 月,Facebook (Meta) 出現故障,導緻 Instagram、Facebook 和 WhatsApp 近 6 小時無法使用。Facebook 在停電期間損失了近 1.6 億美元。這解釋了 DNS 在網際網路上扮演的重要角色。

DNS(域名系統)是如何工作的?

DNS 查找如何工作?

到目前為止,我們已經了解 DNS 的作用就像是世界上所有有效網站的目錄。您可能認為一台計算機足以儲存所有這些資訊。但 DNS 并非如此。現在讓我們了解 DNS 的内部工作原理。

如果單個伺服器存儲所有網站的映射會怎樣?每秒都有數萬億個用戶端發送的請求。單個伺服器無法處理這麼多請求。它将成為瓶頸和單點故障。是以,該系統由分布在全球各地的不同元件組成。

DNS 系統由多個元件組成。以下是涉及的不同元件:

  • DNS 解析器 (DNS resolver)
  • 根伺服器(Root Server)
  • TLD(頂級域)伺服器(TLD (Top-level Domain) Server)
  • 權威名稱伺服器(Authoritative Name Server)

讓我們了解請求處理流程并深入了解每個元件。

DNS 解析器

當您第一次在浏覽器中輸入 url 時,浏覽器并不知道該網站的 IP 位址。浏覽器首先聯系 DNS 解析器。解析器由 Internet 服務提供商 (ISP) 管理。

DNS(域名系統)是如何工作的?

浏覽器向 DNS 解析器發送請求

解析器檢查它是否具有與該網站對應的 IP 位址。如果是,則将相同的内容傳回給用戶端(浏覽器)。如果解析器找不到 IP 位址,則會向 DNS 根伺服器發送請求。

根伺服器

在了解根伺服器之前,讓我們做一個快速實驗。您可以通路任何已知網站并在末尾附加一個點 (.)。例如:如果網站是www.gmail.com,那麼它将是www.gmail.com.。

現在,在浏覽器的位址欄中輸入此網站(附有點, 您的浏覽器會将您帶到該網站并視為沒有附加點。如果您将點替換為任何其他字元,例如+, [,]等,請求将失敗。

DNS(域名系統)是如何工作的?

浏覽器無法打開我的部落格,最後有 ]

網站的 URL 由多個部分組成,以.. DNS 系統以層次結構的形式組織。(.點) 出現在頂部,頂級域如com, org, edu,gov等作為其子域。每個頂級域都引用實際的網站,例如www.wikepedia.org, www.google.com等。每個網站都可以定義自己的域。

下圖解釋了層次結構

DNS(域名系統)是如何工作的?

DNS層次結構

根伺服器出現在頂部,負責識别頂級域 (TLD) 伺服器。是以,如果您發送 的 DNS 查找查詢www.wikepedia.org,則本例中的頂級域為.org。是以,根伺服器現在将向頂級域伺服器發送查詢以解析 IP 位址。

DNS(域名系統)是如何工作的?

處理 DNS 查詢的根伺服器

有 13 個不同的根 DNS IP 位址。root DNS 伺服器由馬裡蘭大學、VeriSign、NASA 等不同組織管理。在幕後,有近 1000 個不同的根伺服器以確定高可用性和備援, 伺服器遍布全球。由于IPV4位址的原始限制,他們隻為root DNS伺服器配置設定了13個不同的IP。

頂級域伺服器

頂級域伺服器管理和存儲對每個網站的實際名稱伺服器的引用。一旦根伺服器識别出頂級域伺服器,它就會發送一個 DNS 查詢。

頂級域現在查找 url 的下一部分。url 在每個伺服器上以從右到左的方式周遊。是以,如果該網站是www.google.com,那麼頂級域伺服器将嘗試找到存儲google.com, 存儲網站與其 IP 位址的實際映射的伺服器稱為權威名稱伺服器。

一旦獲得權威名稱伺服器的 IP 位址,TLD 就會将請求委托給它。

DNS(域名系統)是如何工作的?

TLD 伺服器解析名稱伺服器

現在,您可能會問 TLD 伺服器如何知道權威名稱伺服器。這發生在域注冊期間。有一些實體稱為域注冊商,他們将此資訊釋出到每個 TLD 伺服器并使網站可用。

權威名稱伺服器

最後,請求到達權威名稱伺服器。然後名稱伺服器檢查網站名稱與其 IP 位址之間的映射是否存在。

DNS(域名系統)是如何工作的?

名稱伺服器傳回網站 IP 位址

如果是,則将其傳遞回用戶端。然後,用戶端使用 IP 位址并向托管該網站的伺服器發送請求。

DNS(域名系統)是如何工作的?

通路網站的浏覽器

如果該網站不存在,則不會傳回任何位址。客戶将無法通路該網站。如果無法擷取網站的 IP 位址,浏覽器會顯示以下錯誤。

DNS(域名系統)是如何工作的?

輸入www.invalidwebsite.com

DNS(域名系統)是如何工作的?

www.invalidwebsite.com上的 nslookup

同樣,nslookup也傳回類似的結果,無法擷取給定網站的 IP 位址。

DNS 查詢的類型

有兩種類型的 DNS 查詢——遞歸和疊代。

遞歸 DNS 查詢

我們在上一節中看到了這種類型的查詢。第一個請求轉到 DNS 解析器。如果 DNS 解析器找不到映射,它會将請求發送到根伺服器。此外,根伺服器将查詢發送到 TLD 伺服器。這一直持續到請求到達最終的權威名稱伺服器為止。

下圖說明了遞歸 DNS 查詢的工作原理。

DNS(域名系統)是如何工作的?

遞歸 DNS 查詢

響應從權威名稱伺服器傳播,直到它到達用戶端。是以,每個元件負責将請求轉發給後續元件。遞歸 DNS 查詢比疊代查詢更快。

疊代 DNS 查詢

在這種類型中,DNS 解析器首先向根伺服器發送請求。然後根伺服器回複 TLD 伺服器的資訊。解析器然後查詢 TLD 伺服器。此外,TLD 伺服器會将權威名稱伺服器傳回給解析器。最後,解析器将聯系權威名稱伺服器。

下圖說明了疊代 DNS 查詢的工作原理。

疊代 DNS 查詢

在疊代 DNS 查詢中,DNS 解析器主動參與向每個 DNS 元件發送請求。與遞歸查詢不同,DNS 元件之間沒有互動。每個元件隻是将下一個元件的位址發送給解析器。由于多次來回通信,這些類型的查詢需要更長的時間。

優化 DNS 查找查詢

我們在其中一個插圖中看到 DNS 查找時間為 12.25 毫秒。這因每個網站而異,取決于網際網路流量和地區。由于http是無狀态的,浏覽器每次通路一個新頁面都要向伺服器發送一個http請求。

浏覽器是否對您在網站上通路的每個頁面執行 DNS 查找?試想一下,如果它在每次通路網站資源時都執行 DNS 查找會發生什麼。

缺點是在通路任何頁面時會有 10-20 毫秒的額外延遲。此外,DNS 伺服器會被請求淹沒。此外,它還會增加處理不斷增加的負載的成本。

為了克服這個問題,緩存被廣泛用于 DNS 查找工作流程。緩存在多個地方被利用。執行成功查找後,浏覽器會緩存 IP 位址并設定 TTL(例如 24 小時)。添加了由用戶端裝置的作業系統維護的類似條目。

構成 DNS 系統的元件也會緩存查詢結果。如果未過期,每個元件都會傳回緩存的條目。如果伺服器在其緩存中找不到條目,它将向下一個伺服器發送請求(遞歸 DNS 查詢)。

DNS(域名系統)是如何工作的?

緩存 DNS 記錄

添加緩存可加快 DNS 查找過程。當一個網站第一次上線時,隻有第一個使用者會觀察到通路它的延遲。對于其他使用者,根伺服器将傳回緩存的結果,進而縮短頁面加載時間。

什麼是 DNS 緩存中毒?

我們現在将了解 DNS 查找過程中涉及的漏洞有哪些。DNS 緩存加速所有查找查詢。但是,現有設計存在一些缺點。

假設我是一名黑客并啟動了一個惡意網站。該網站将映射到某個 IP 位址,例如:116.243.41.130。讓 IP 位址www.google.com為118.45.54.23。如果使用者通路 google,那麼所有的 DNS 元件都會緩存 IP 位址118.45.54.23。如果我更改 DNS 解析器的緩存并将 IP 位址修改www.google.com為116.243.41.130(惡意的)怎麼辦?

DNS(域名系統)是如何工作的?

DNS正常工作

新使用者在其浏覽器中輸入 google 将被定向到惡意網站。對于新使用者,浏覽器和作業系統緩存查找将失敗。請求将到達 DNS 解析器,解析器将傳回更新後的 DNS 條目。現在,讓我們了解黑客如何更改此條目。

DNS(域名系統)是如何工作的?

DNS 緩存中毒

DNS 元件遵循特定的通信協定。他們使用 UDP 協定發送請求和處理響應。UDP 不是面向連接配接的,也沒有像 TCP 那樣的握手。

A裝置之間的 UDP 通信B如下圖所示。

DNS(域名系統)是如何工作的?

兩個裝置之間的UDP通信

我們可以引入一個新的實體C(惡意實體),它将欺騙 IP 位址和端口B并将資料包傳送到A。裝置A會假定資料包來自B。DNS 緩存中毒使用相同的概念。惡意使用者僞造權威域名伺服器的 IP 位址并将資料包發送到 DNS 解析器。

DNS(域名系統)是如何工作的?

解析器中添加了不正确的映射,使用者可能會被重定向到惡意網站。由于通信在幾毫秒内發生,是以攻擊的機會較少。此外,欺騙很困難,因為它們Source Port可能會有所不同。攻擊者必須暴力破解所有端口并發送不同的響應資料包。

總結

DNS 就像網際網路上所有網站的目錄。它是由多個伺服器組成的全球分布式系統。DNS 解析器可以使用遞歸或疊代查詢來執行 DNS 查找。

DNS 系統使用緩存來優化查找調用。緩存在整個堆棧的多個位置完成。網站位址可能被欺騙,DNS 緩存可能被投毒。在緩存中毒的情況下,使用者可能會被重定向到惡意網站。

繼續閱讀