由于我們再網(wǎng)絡(luò)中使用的HTTP請求是基于TCP/IP協(xié)議瞬项,而TCP/IP的基礎(chǔ)是IP協(xié)議蠕嫁,所以網(wǎng)絡(luò)中兩臺機器的通訊都是使用IP進(jìn)行通信,而不是我們通常見到的域名菊卷。DNS解析就是將域名翻譯成IP的過程缔恳,了解DNS具體信息可見:DNS。
具體的解析過程可以用上圖來概括洁闰,下面詳細(xì)介紹一下歉甚。
瀏覽器緩存
現(xiàn)代瀏覽器大多都會對DNS解析結(jié)果進(jìn)行緩存,來提升網(wǎng)站的加載速度扑眉。
以chrome為例纸泄,之前版本可以通過chrome://net-internals/#dns可以查看瀏覽器的緩存信息,但是好像71版本之后去掉了這個功能襟雷,需要通過chrome://net-export來記錄瀏覽器日志后刃滓,上傳至https://netlog-viewer.appspot.com/#import 來分析。但是依然可以通過chrome://net-internals/#dns中的“clear host cache”來清除瀏覽器的緩存耸弄,下圖為本機 chrome 的DNS緩存信息
操作系統(tǒng)緩存
如果在瀏覽器緩存中未查詢到DNS記錄信息咧虎,將會從操作系統(tǒng)緩存中查詢DNS信息。首先看本地的host文件中是否有此域名的映射计呈,如果有則直接返回砰诵。否則看本地的DNS解析器中是否有相關(guān)域名緩存征唬。
查看操作系統(tǒng)緩存
在macOs 10.10.4之后可以通過 log stream --predicate 'process == "mDNSResponder"' --info 查看DNS的活動情況,使用 sudo killall -INFO mDNSResponder 可以打印出當(dāng)前DNS的統(tǒng)計信息茁彭。里面還有很多其他的信息总寒,像本地host配置、DNS服務(wù)器理肺、授權(quán)記錄等摄闸,感興趣的同學(xué)可以自己打印看看。
清除操作系統(tǒng)緩存
在macOs 10.10.4之后可以通過sudo killall -HUP mDNSResponder來清空系統(tǒng)的DNS緩存妹萨。
域名解析服務(wù)器
如果從host以及操作系統(tǒng)緩存中都找不到年枕,則會從網(wǎng)絡(luò)設(shè)置中的首選DNS服務(wù)器中開始查找,如果沒有經(jīng)過特殊設(shè)置一般是路由器的網(wǎng)關(guān)(如192.168.0.1)乎完,也有很多人會設(shè)置DNS的解析服務(wù)器熏兄,比如google的8.8.8.8。
在域名解析服務(wù)器中树姨,如果要查詢的域名摩桶,包含在本地配置區(qū)域資源中,則返回解析結(jié)果給客戶機帽揪,完成域名解析硝清,此解析具有權(quán)威性。如果要查詢的域名台丛,不由本地DNS服務(wù)器區(qū)域解析耍缴,但該服務(wù)器已緩存了此網(wǎng)址,則調(diào)用這個IP地址映射挽霉,完成域名解析防嗡,此解析不具有權(quán)威性。
遞歸查詢
如果域名解析服務(wù)器中也無法解析此網(wǎng)址則開始遞歸查詢侠坎,以ditu.amap.com的解析為例
- 首先將請求發(fā)至13臺根DNS蚁趁,根DNS服務(wù)器收到請求后會判斷這個域名的頂級域名(com)是誰來管理的,并會返回此頂級域名相關(guān)的NameServer及IP实胸。
- 然后域名解析服務(wù)器會根據(jù)返回的IP向(com)的域名服務(wù)器請求域名的解析他嫡,頂級域名服務(wù)器則會返回次頂級域名(amap.com)相關(guān)的NameServer及IP。
- 最后拿著頂級域名返回的IP向次級域名服務(wù)器請求域名解析庐完,即可獲得ditu.amap.com的IP地址信息钢属。
一次dns緩存引發(fā)的慘案
how-to-view-dns-cache-in-osx
Reset the DNS cache in OS X
https://www.zhihu.com/question/23042131/answer/1220848249