DNS解析過程

語言: CN / TW / HK

持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第2天,點選檢視活動詳情

由於我們再網路中使用的 HTTP 請求是基於 TCP/IP 協議,而 TCP/IP 的基礎是 IP 協議,所以網路中兩臺機器的通訊都是使用 IP 進行通訊,而不是我們通常見到的域名。DNS 解析就是將域名翻譯成 IP 的過程,瞭解 DNS 具體資訊可見:DNS

DNS 解析過程

具體的解析過程可以用上圖來概括,下面詳細介紹一下。

瀏覽器快取

現代瀏覽器大多都會對 DNS 解析結果進行快取,來提升網站的載入速度。

以 chrome 為例,之前版本可以通過 chrome://net-internals/#dns 可以檢視瀏覽器的快取資訊,但是好像 71 版本之後去掉了這個功能,需要通過 chrome://net-export 來記錄瀏覽器日誌後,上傳至 https://netlog-viewer.appspot.com/#import 來分析。但是依然可以通過 chrome://net-internals/#dns 中的“clear host cache”來清除瀏覽器的快取,下圖為本機 chrome 的DNS快取資訊

chrom DNS 快取

作業系統快取

如果在瀏覽器快取中未查詢到 DNS 記錄資訊,將會從作業系統快取中查詢 DNS 資訊。首先看本地的 host 檔案中是否有此域名的對映,如果有則直接返回。否則看本地的 DNS 解析器中是否有相關域名快取。

檢視作業系統快取

在 macOs 10.10.4 之後可以通過 log stream --predicate 'process == "mDNSResponder"' --info 檢視 DNS 的活動情況,使用 sudo killall -INFO mDNSResponder 可以打印出當前 DNS 的統計資訊。裡面還有很多其他的資訊,像本地 host 配置、DNS 伺服器、授權記錄等,感興趣的同學可以自己列印看看。

mac DNS 快取

清除作業系統快取

在 macOs 10.10.4 之後可以通過 sudo killall -HUP mDNSResponder 來清空系統的 DNS 快取。

域名解析伺服器

如果從 host 以及作業系統快取中都找不到,則會從網路設定中的首選 DNS 伺服器中開始查詢,如果沒有經過特殊設定一般是路由器的閘道器(如 192.168.0.1),也有很多人會設定 DNS 的解析伺服器,比如 Google 的 8.8.8.8。

在域名解析伺服器中,如果要查詢的域名,包含在本地配置區域資源中,則返回解析結果給客戶機,完成域名解析,此解析具有權威性。如果要查詢的域名,不由本地 DNS 伺服器區域解析,但該伺服器已快取了此網址,則呼叫這個 IP 地址對映,完成域名解析,此解析不具有權威性。

遞迴查詢

如果域名解析伺服器中也無法解析此網址則開始遞迴查詢,以 ditu.amap.com 的解析為例 1. 首先將請求發至 13 臺根 DNS 伺服器,根 DNS 伺服器收到請求後會判斷這個域名的頂級域名(com)是誰來管理的,並會返回此頂級域名相關的 NameServer 及 IP。 2. 然後域名解析伺服器會根據返回的 IP 向(com)的域名伺服器請求域名的解析,頂級域名伺服器則會返回次頂級域名(amap.com)相關的 NameServer 及 IP。 3. 最後拿著頂級域名返回的 IP 向次級域名伺服器請求域名解析,即可獲得 ditu.amap.com 的 IP 地址資訊。

一次dns快取引發的慘案

how-to-view-dns-cache-in-osx

Reset the DNS cache in OS X

https://www.zhihu.com/question/23042131/answer/1220848249

「其他文章」