詳解 DNS 解析

背景

  • 前面講了域名、IP,那麼還缺少一個主角,就是 DNS
  • 這些都是網路中最最最基礎的,也是最最最重要的概念,很有必要深入學習下
  • 所有素材均來自://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 伺服器先返回資訊,就用哪台