詳解 DNS 解析

小菠蘿測試筆記發表於2021-06-28

背景

  • 前面講了域名、IP,那麼還缺少一個主角,就是 DNS
  • 這些都是網路中最最最基礎的,也是最最最重要的概念,很有必要深入學習下
  • 所有素材均來自:https://www.bilibili.com/video/BV1Gh411y7LS?t=10,這個 up 聲音好聽,動畫很贊,言簡意賅,值得一看

 

如何開啟一個網站?

  • 比如你開啟上面我發的連結,就是開啟一個網站
  • 雖然訪問的是一個域名,但瀏覽器最終實際訪問的是這個域名背後對應的 IP 地址,然後再訪問這個 IP 地址背後的伺服器來開啟網站

 

提問

那瀏覽器是怎麼知道不同域名背後都是對應哪個 IP 地址呢?答案就是我們今天要講的主角 DNS

 

Domain Name System 域名系統

DNS 到底幹嘛用的?

  • DNS 可以理解為是一種機制,它可以管理世界上所有域名和 IP ,它依靠的就是 DNS 伺服器
  • 在網際網路中,有很多 DNS 伺服器,如何高效查詢和管理域名、IP 是需要好好研究一下的 

 

DNS 的工作原理

分層協作

之前域名篇講過域名層級

  • www:二級域名
  • bilibili:一級域名
  • com:頂級域名

其實還有一個根域名,因為有且僅有它一個,所以寫了等於沒寫一樣

所以訪問  www.bilibili.com、www.bilibili.com.root、www.bilibili.com.  效果是一樣的,可以自己試一試

 

DNS 解析的詳細過程

  1. 瀏覽器輸入 www.bilibili.com,敲回車
  2. 瀏覽器會先查詢本地的 DNS 快取,如果有對應的記錄, 就可以直接拿到域名對應的 IP 地址,然後就可以直接訪問對應的伺服器
  3. 假設快取中找不到,就會先在本地的 hosts 檔案中查詢相應的域名和 IP 地址是否存在
  4. 假設 hosts 檔案中也找不到,那麼瀏覽器就會把查詢請求傳送到本地電腦網路設定中的 DNS 伺服器上,一般是自動設定好的,自動設定的 DNS 地址一般是管理 wifi 路由器的 IP 地址;當然也可以手動設定,比如常見的 Google DNS 伺服器 8.8.8.8
  5. 向這臺 DNS 伺服器發起查詢 www.bilibili.com 對應的 IP 地址的請求,每臺聯網的裝置都會有一臺指定的 DNS 伺服器
  6. 而這臺 DNS 伺服器會負責完整的查詢過程(其實這臺 DNS 伺服器就是 Local DNS Server,下面內容會詳細講到)
  7. 先從 DNS 伺服器們的根 DNS 伺服器(Root DNS server)開始查詢,這個 RDNS 只記錄 com、org、net 等頂級域名的 DNS 伺服器的 IP 地址資訊,所以它收到查詢請求之後,只會看你這個域名的頂級域名是什麼
  8. 當前頂級域名是 com,RDNS 就會返回管理 com 頂級域名的 DNS 伺服器的 ip 地址資訊
  9. 然後 LDNS 收到 RDNS 返回的資訊之後,就會找到負責管理 com 頂級域名的 DNS 伺服器(Top Level Server),它收到查詢請求之後,就會識別到你需要查的一級域名是 bilibili.com
  10. TDNS 就會返回管理 bilibili.com 的 DNS 伺服器的 IP 地址資訊
  11. LDNS 收到 TDNS 返回的資訊之後,又會找到管理 bilibili.com 的 DNS 伺服器(稱為 Name Server),它就會返回 www.bilibili.com 的 IP 地址給 LDNS
  12. LDNS 收到最終的 IP 地址之後會返回給瀏覽器
  13. 瀏覽器收到 IP 地址之後就會訪問對應的伺服器
  14. 伺服器會返回對應的響應內容給到瀏覽器,瀏覽器再進行渲染顯示

 

域名層級

 

Local DNS Server

通過一個實際生活的栗子來講解

轉發 DNS 查詢請求

  • 瀏覽器訪問 www.bilibili.ocm,發起 DNS 查詢請求
  • 假設本地 DNS 快取沒找到,hosts 檔案中也沒有,那麼瀏覽器就會傳送 DNS 請求,請求會先經過家裡的路由器
  • 路由器收到 DNS 查詢請求後,會轉發給光喵(寬頻盒子)
  • 光喵再轉發給運營商 DNS 伺服器
  • 重點:電信、移動、聯通都有很多 DNS 伺服器,不同的 DNS 伺服器會負責各自區域內的聯網裝置的 DNS  請求的查詢

 

Local DNS Server(LDNS)

  • LDNS 收到聯網裝置的 DNS 查詢請求後
  • LDNS 會現在自己伺服器本地查詢有沒有對應的記錄
  • 如果之前已經有裝置通過這臺 LDNS 伺服器查詢過 www.bilibili.com 這個域名對應的 IP 地址,那麼是會有快取的,這樣可以直接返回相應的 IP 地址
  • 如果它在伺服器快取中沒有找到 www.bilibili.com 的 IP 資訊
  • 那麼 LDNS 就會開始依次查詢 Root DNS、Top DNS、Name Server(上面說到的流程)
  • 最後拿到 www.bilibili.com 的 IP地址,返回給瀏覽器

 

為什麼寬頻運營商的 DNS 伺服器會知道 RDNS 的 IP地址呢?

  • 因為 RDNS 全球只有 13 臺,基本是固定不變的
  • 所以在所有 DNS 伺服器中,他們的資訊都是內建的

 

重點

  • 除了 RDNS 已知有 13 臺之外,TDNS 和 Name Server 的數量都是不固定的
  • 當 LDNS 發起查詢請求的時候,哪臺 DNS 伺服器先返回資訊,就用哪臺

 

相關文章