DNS解析及優(yōu)化

一、DNS解析過程

第1步,查找瀏覽器緩存。

瀏覽器會檢查緩存中有沒有這個域名對應(yīng)的解析過的IP地址,如果緩存中有,這個解析過程就將結(jié)束。瀏覽器緩存域名也是有限制的,不僅瀏覽器緩存大小有限制,而且緩存的時間也有限制,通常情況下為幾分鐘到幾小時不等。這個緩存時間太長和太短都不好,如果緩存時間太長,一旦域名被解析到的IP有變化,會導致被客戶端緩存的域名無法解析到變化后的IP地址,以致該域名不能正常解析,這段時間內(nèi)有可能會有一部分用戶無法訪問網(wǎng)站。如果時間設(shè)置太短,會導致用戶每次訪問網(wǎng)站都要重新解析一次域名。

第2步,查找系統(tǒng)緩存。

如果用戶的瀏覽器緩存中沒有,瀏覽器會查找操作系統(tǒng)緩存中是否有這個域名對應(yīng)的DNS解析結(jié)果。其實操作系統(tǒng)也會有一個域名解析的過程,在Windows中可以通過C:\Windows\System32\drivers\etc\hosts文件來設(shè)置,你可以將任何域名解析到任何能夠訪問的IP地址。如果你在這里指定了一個域名對應(yīng)的IP地址,那么瀏覽器會首先使用這個IP地址。例如,我們在測試時可以將一個域名解析到一臺測試服務(wù)器上,這樣不用修改任何代碼就能測試到單獨服務(wù)器上的代碼的業(yè)務(wù)邏輯是否正確。正是因為有這種本地DNS解析的規(guī)程,所以黑客就有可能通過修改你的域名解析來把特定的域名解析到它指定的IP地址上,導致這些域名被劫持。

第3步,查找路由器緩存。

如果系統(tǒng)緩存中也找不到,那么查詢請求就會發(fā)向路由器,它一般會有自己的DNS緩存。

第4步,查找ISP DNS 緩存。

運氣實在不好,就只能查詢ISP DNS 緩存服務(wù)器了。在我們的網(wǎng)絡(luò)配置中都會有"DNS服務(wù)器地址"這一項,操作系統(tǒng)會把這個域名發(fā)送給這里設(shè)置的DNS,也就是本地區(qū)的域名服務(wù)器,通常是提供給你接入互聯(lián)網(wǎng)的應(yīng)用提供商。這個專門的域名解析服務(wù)器性能都會很好,它們一般都會緩存域名解析結(jié)果,當然緩存時間是受域名的失效時間控制的,一般緩存空間不是影響域名失效的主要因素。大約80%的域名解析都到這里就已經(jīng)完成了,所以ISP DNS主要承擔了域名的解析工作。

第5步,迭代查詢。

最無奈的情況發(fā)生了, 在前面都沒有辦法命中的DNS緩存的情況下,(1)本地域名服務(wù)器即將該請求轉(zhuǎn)發(fā)到互聯(lián)網(wǎng)上的根域名服務(wù)器(即一個完整域名最后面的那個點,通常省略不寫)。(2)根域名服務(wù)器將所要查詢域名中的頂級域(假設(shè)要查詢ke.qq.com,該域名的頂級域就是com)的服務(wù)器IP地址返回到本地DNS。(3) 本地DNS根據(jù)返回的IP地址,再向頂級域(就是com域)發(fā)送請求。(4) com域服務(wù)器再將域名中的二級域(即ke.qq.com中的qq)的IP地址返回給本地DNS。(5) 本地DNS再向二級域發(fā)送請求進行查詢。(6) 之后不斷重復這樣的過程,直到本地DNS服務(wù)器得到最終的查詢結(jié)果,并返回到主機。這時候主機才能通過域名訪問該網(wǎng)站。

二、DNS前端優(yōu)化

1、減少DNS查找,避免重定向:
(1)使用瀏覽器DNS緩存 、計算機DNS緩存、 服務(wù)器DNS緩存,防止DNS迭代查詢;
(2)使用Keep-Alive特性 來減少DNS查找的頻率;
(3)使用較少的域名(服務(wù)器主機)來減少DNS查找的數(shù)量。

解釋:影響DNS緩存的因素:
????????首先,服務(wù)器可以表明記錄可以被緩存多久。查找返回的DNS記錄包含了一個存活時間(Time-to-live,TTL)值。該值告訴客戶端可以對該記錄緩存多久。
????????盡管操作系統(tǒng)緩存會考慮 TTL 值,但瀏覽器通常忽略該值,并設(shè)置它自己的時間限制。
????????此外,HTTP 協(xié)議中的 Keep-Alive 特性可以同時覆蓋 TTL 和瀏覽器的時間限制。換句話說,只要瀏覽器和Web服務(wù)器愉快地通信著,并保持 TCP 連接打開的狀態(tài),就沒有理由進行 DNS 查找。
????????瀏覽器對緩存的 DNS 記錄的數(shù)量也有限制,而不管緩存記錄的時間。如果用戶在短時間內(nèi)訪問了很多具有不同域名的網(wǎng)站,較早的 DNS 記錄將被丟棄,必須重新查找該域名。
????????不過,要記得即便瀏覽器丟棄了 DNS 記錄,操作系統(tǒng)可能依然保持著該記錄,這能扭轉(zhuǎn)一下局面,因為無需通過網(wǎng)絡(luò)發(fā)送查詢,從而避免了明顯的延遲。
????????當客戶端的DNS緩存為空時(瀏覽器與操作系統(tǒng)緩存為空時),DNS查找的數(shù)量與Web頁面中唯一主機名的數(shù)量相等。減少唯一主機名的數(shù)量就可以減少DNS查找的數(shù)量。
????????但減少唯一主機名的數(shù)量會潛在地減少頁面中并行下載的數(shù)量。(HTTP1.1,瀏覽器對于同一個服務(wù)器的并行連接數(shù)有限制)因此,雖然避免 DNS 查找降低了相應(yīng)時間,但減少并行下載可能會增加響應(yīng)時間。所以,在減少 DNS 查找與允許高速并行下載之間做權(quán)衡,建議使用 2-4 個服務(wù)器主機。

2、DNS的預(yù)解析

可以通過用meta信息來告知瀏覽器, 我這頁面要做DNS預(yù)解析

 <meta http-equiv="x-dns-prefetch-control" content="on" />

可以使用link標簽來強制對DNS做預(yù)解析:

 <link rel="dns-prefetch"  />


參考文章:
DNS解析 - 騰訊Web前端 IMWeb 團隊社區(qū)

前端優(yōu)化系列之一:DNS預(yù)獲取 dns-prefetch 提升頁面載入速度

《高性能網(wǎng)站建設(shè)指南》—— Steve Souders

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容