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