背景
- 前面講了域名、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 服務器先返回信息,就用哪台