啥都玫說之網絡篇-4.2有它才有名(DNS)

孤城子復 發佈 2022-05-26T03:39:15.929722+00:00

2 有它才有名。我們在上網的時候,經常要通過瀏覽器去訪問一些網站,實際上就是訪問網站所在的伺服器IP位址,但是讓用戶記住設備的IP位址是非常困難的。

閱讀本文大約需要10分鐘,您可以先關注一下本君,避免下次想回顧的時候找不到我。

4.2 有它才有名

DNS的全稱是Domain Name System也就是域名系統,或者常稱為域名解析系統。

我們在上網的時候,經常要通過瀏覽器去訪問一些網站,實際上就是訪問網站所在的伺服器IP位址,但是讓用戶記住設備的IP位址是非常困難的。我們常用的方式就是在瀏覽器中輸入要訪問的網址,例如www.baidu.com,然後瀏覽器就會通過解析這個域名地址,找到要訪問的伺服器,從而讀取到需要訪問的網站的數據。所以我們在網際網路上,構建了域名和IP位址互相映射的分布式資料庫,在IP位址和域名之間形成一種轉換和查詢機制。所以,DNS工作的過程可以簡單描述為:域名地址經過DNS伺服器解析後,得到對應的IP位址,通過該IP位址訪問到伺服器獲取我們要訪問的內容。

DNS通信主要使用UDP,TCP為輔,使用埠號53。當然,埠號可以修改,但是默認是使用53埠;在某些情況下,也會採用TCP協議。DNS是網絡分層里的應用層協議,事實上他是為其他應用層協議工作的。

當一個業務需要把域名解析為IP位址時,它就成為了DNS的一個客戶端,調用地址解析程序,把待解析的域名加入到DNS請求報文中,通過UDP先發送給本地DNS伺服器。本地DNS伺服器查找得到對應的IP位址後,通過回應報文將該IP返回,客戶端獲得該IP位址後可繼續後續操作。如果本地域名伺服器不能回答該請求,則自身會稱為一個新的DNS客戶端,向其他DNS伺服器發送請求報文。這個過程一直重複,直至得到回應報文為止。

如果主機所詢問的本地域名伺服器不知道被查詢的域名的IP位址,那麼本地域名伺服器就以DNS客戶端的身份(遞歸思想),向根域名伺服器繼續發出查詢報文(替主機查詢),不讓主機自己進行查詢。遞歸查詢返回的結果或者是IP,或者報錯。這是從上到下的遞歸查詢過程。

當根域名伺服器收到本地域名伺服器的查詢請求,要麼給出IP位址,要麼通知本地域名伺服器下一步應該去請求哪一個頂,級域名伺服器查詢,並告知本地域名伺服器自己知道的頂級域名的IP位址,讓本地域名伺服器繼續查詢,而不是替他查詢。同理,頂,級域名伺服器無法返回IP位址的時候,也會通知本地域名伺服器下一步向誰查詢(查詢哪一個權限域名伺服器),這是一個疊代過程。

實際使用中,DNS伺服器會將接收到的DNS應答結果在本地緩存一段時間,直到數據老化才刪除。當出現對相同域名的查詢時,便可以通過緩存的結果直接進行回復,只有在本地緩存中找不到時才向DNS伺服器發起查詢請求。通過DNS緩存,大部分查詢都只需要本地DNS伺服器即可完成解析,可以提高效率。

在大多數情況下,DNS涉及將域名轉換為適當的IP位址。要了解此過程的工作原理,有助於在從Web瀏覽器到DNS查找過程再次返回時遵循DNS查找的路徑。我們來看看這些步驟。注意:DNS查找信息通常會在查詢計算機內部緩存或在DNS基礎結構中遠程緩存。DNS查找通常有8個步驟。緩存DNS信息時,將從DNS查找過程中跳過步驟,這樣可以更快地完成。下面的示例概述了沒有緩存任何內容時的所有8個步驟。

  1. 用戶在Web瀏覽器中輸入「example.com」,查詢將進入Internet並由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位址響應Web瀏覽器。
  9. 一旦DNS查找的8個步驟返回了example.com的IP位址,瀏覽器就能夠發出對網頁的請求瀏覽器向IP位址發出HTTP請求。
  10. 該IP處的伺服器返回要在瀏覽器中呈現的網頁。

上邊我們提到了一個名詞,DNS緩存,緩存的目的是將數據臨時存儲在一個位置,從而提高數據請求的性能和可靠性。DNS緩存涉及將數據存儲在更靠近請求客戶端的位置,以便可以更早地解析DNS查詢,並且可以避免在DNS查找鏈中進一步查詢,從而改善加載時間並減少帶寬/CPU消耗。DNS數據可以緩存在各種位置,每個位置將存儲DNS記錄一段時間,該時間由生存時間(TTL)決定。c行間的DNS緩存有三類:

  • [x] 瀏覽器DNS緩存
  • [x] 作業系統DNS緩存
  • [x] 遞歸解析器DNS緩存

瀏覽器DNS緩存是說在默認情況下,Web瀏覽器設計為在一段時間內緩存DNS記錄。這裡的目的很明顯;DNS緩存越接近Web瀏覽器,為了檢查緩存並對IP位址發出正確的請求,必須採取的處理步驟越少。當請求DNS記錄時,瀏覽器緩存是在為請求的記錄檢查的第,一個位置。在chrome中,您可以轉到chrome://net-internals/#dns查看DNS緩存的狀態。

作業系統DNS緩存是DNS查詢離開計算機之前的第二個也是最,後一個本地停止。設計用於處理此查詢的作業系統內部的進程通常稱為「存根解析程序」或DNS客戶端。當存根解析器從應用程式獲取請求時,它首先檢查是自己的緩存以查看它是否具有該記錄。如果沒有,那它將本地網絡外部的DNS查詢(帶有遞歸標誌集)發送到Internet服務提供商(ISP)內的DNS遞歸解析器。

遞歸解析器DNS緩存是指當ISP內部的遞歸解析器收到DNS查詢時,如同之前的所有步驟一樣,它還將檢查所請求的主機到IP位址轉換是否已存儲在其本地持久層內。遞歸解析器還具有其他功能,具體取決於它在緩存中的記錄類型:

  • 如果解析程序沒有A記錄,但確實擁有權威名稱伺服器的NS記錄,它將直接查詢這些名稱伺服器,繞過DNS查詢中的幾個步驟。此快捷方式可防止從root和.com名稱伺服器(在我們的example.com搜索中)中進行查找,並有助於更快地解析DNS查詢。
  • 如果解析器沒有NS記錄,它將向TLD伺服器發送查詢(在我們的例子中為.com),跳過根伺服器。
  • 萬一解析器沒有指向TLD伺服器的記錄,它將查詢根伺服器。此事件通常在清除DNS緩存後發生。

總結下簡化域名的解析過程:

  1. 當用戶在地址欄輸入一個URL之後,瀏覽器首先查詢瀏覽器的緩存;
  2. 找不到就去查詢Hosts文件和本地DNS緩存,如果hosts和本地DNS緩存都沒有找到域名對應的IP,則自動進入路由器的緩存中檢查;
  3. 以上均為客戶端DNS緩存,若在客戶端DNS緩存還是沒找到,則進入ISP的DNS緩存中查詢;
  4. 還是找不到,最終才向根DNS伺服器發出DNS查詢報文,再找不到就報錯。
關鍵字: