面試官:DNS 協(xié)議是什么?說說 DNS 完整的查詢過程?
本文轉(zhuǎn)載自微信公眾號「JS每日一題」,作者灰灰。轉(zhuǎn)載本文請聯(lián)系JS每日一題公眾號。
一、是什么
DNS(Domain Names System),域名系統(tǒng),是互聯(lián)網(wǎng)一項服務(wù),是進(jìn)行域名和與之相對應(yīng)的 IP 地址進(jìn)行轉(zhuǎn)換的服務(wù)器
簡單來講,DNS相當(dāng)于一個翻譯官,負(fù)責(zé)將域名翻譯成ip地址
- IP 地址:一長串能夠唯一地標(biāo)記網(wǎng)絡(luò)上的計算機(jī)的數(shù)字
- 域名:是由一串用點(diǎn)分隔的名字組成的 Internet 上某一臺計算機(jī)或計算機(jī)組的名稱,用于在數(shù)據(jù)傳輸時對計算機(jī)的定位標(biāo)識
二、域名
域名是一個具有層次的結(jié)構(gòu),從上到下一次為根域名、頂級域名、二級域名、三級域名...
例如www.xxx.com,www為三級域名、xxx為二級域名、com為頂級域名,系統(tǒng)為用戶做了兼容,域名末尾的根域名.一般不需要輸入
在域名的每一層都會有一個域名服務(wù)器,如下圖:
除此之外,還有電腦默認(rèn)的本地域名服務(wù)器
三、查詢方式
DNS 查詢的方式有兩種:
- 遞歸查詢:如果 A 請求 B,那么 B 作為請求的接收者一定要給 A 想要的答案
迭代查詢:如果接收者 B 沒有請求者 A 所需要的準(zhǔn)確內(nèi)容,接收者 B 將告訴請求者 A,如何去獲得這個內(nèi)容,但是自己并不去發(fā)出請求
四、域名緩存
在域名服務(wù)器解析的時候,使用緩存保存域名和IP地址的映射
計算機(jī)中DNS的記錄也分成了兩種緩存方式:
- 瀏覽器緩存:瀏覽器在獲取網(wǎng)站域名的實(shí)際 IP 地址后會對其進(jìn)行緩存,減少網(wǎng)絡(luò)請求的損耗
- 操作系統(tǒng)緩存:操作系統(tǒng)的緩存其實(shí)是用戶自己配置的 hosts 文件
五、查詢過程
解析域名的過程如下:
- 首先搜索瀏覽器的 DNS 緩存,緩存中維護(hù)一張域名與 IP 地址的對應(yīng)表
- 若沒有命中,則繼續(xù)搜索操作系統(tǒng)的 DNS 緩存
- 若仍然沒有命中,則操作系統(tǒng)將域名發(fā)送至本地域名服務(wù)器,本地域名服務(wù)器采用遞歸查詢自己的 DNS 緩存,查找成功則返回結(jié)果
- 若本地域名服務(wù)器的 DNS 緩存沒有命中,則本地域名服務(wù)器向上級域名服務(wù)器進(jìn)行迭代查詢
- 首先本地域名服務(wù)器向根域名服務(wù)器發(fā)起請求,根域名服務(wù)器返回頂級域名服務(wù)器的地址給本地服務(wù)器
- 本地域名服務(wù)器拿到這個頂級域名服務(wù)器的地址后,就向其發(fā)起請求,獲取權(quán)限域名服務(wù)器的地址
- 本地域名服務(wù)器根據(jù)權(quán)限域名服務(wù)器的地址向其發(fā)起請求,最終得到該域名對應(yīng)的 IP 地址
- 本地域名服務(wù)器將得到的 IP 地址返回給操作系統(tǒng),同時自己將 IP 地址緩存起來
- 操作系統(tǒng)將 IP 地址返回給瀏覽器,同時自己也將 IP 地址緩存起
- 至此,瀏覽器就得到了域名對應(yīng)的 IP 地址,并將 IP 地址緩存起
流程如下圖所示:
參考文獻(xiàn)
https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%90%8D%E7%B3%BB%E7%BB%9F
https://www.cnblogs.com/jmilkfan-fanguiju/p/12789677.html
https://segmentfault.com/a/1190000039039275
https://vue3js.cn/interview