很多網站管理人員大概都了解域名解析的原理和過程,但是對于一些細節問題可能不太清楚,比如當客戶端對域名發起請求時,具體的解析順序是什么樣的?下面中科三方針對這個問題做下簡單介紹。
1.DNS的作用
在互聯網中,其實沒有類似于www.example.con這樣的域名方式,計算機識別的是純數字的IP地址,如222.222.222.222,比如我們知道一個網站的IP地址,直接輸入訪問絕對是能打開的。
但現在網站成千上萬,如果我們只能通過IP地址訪問,這得需要我們花很大力氣去記住這些繁瑣和相似的數字,所以域名就作為一種更簡便的尋址方式出現了。
那為什么會有DNS呢?因為域名是給人使用的,計算機只能識別IP地址,所以需要DNS作為橋梁將域名翻譯成IP地址。這樣就能保證我們通過域名也能到達對應的服務器地址了。
我們平時工作時會發現,有時候會出現能夠登陸qq、微信,但是卻打不開網頁的情況,其中大部分原因都是DNS服務器故障造成的。因為網站需要通過DNS服務器查詢解析結果,用戶根據這個結果才能通過域名去訪問,但是qq、微信等聊天軟件,采用的是UDP傳輸協議,即不可靠傳輸協議,無需DNS服務器地址,也能登陸,所以才會出現上面的情況。
DNS解析過程
當客戶端對域名發起訪問時,會將解析請求發送給遞歸解析服務器,遞歸服務器會代替客戶端進行全球遞歸查詢。
首先遞歸服務器會請求根域名服務器,根域名服務器根據域名后綴,告知對應的頂級域名服務器;遞歸服務器再向頂級服務器發起請求,頂級域名服務器告知對應的權威服務器;遞歸服務器向權威服務器發起請求,權威服務器告知解析結果;遞歸服務器將結果告知客戶端,客戶端完成訪問。
DNS緩存
以上是DNS解析的標準流程,但是由于各種DNS緩存的存在,導致DNS解析環節更為復雜。
所謂DNS緩存是指DNS返回正確的IP地址之后,系統會將這個結果臨時儲存起來,并為緩存設定一個失效時間(TTL值),在TTL失效前,當再次訪問這個網站,系統就會直接從DNS 緩存中將結果返回,而不必再次委托遞歸服務器進行全球解析查詢,加快了DNS解析的流程。
當然TTL值失效后,系統還會自動再次詢問DNS服務器以獲取最新的解析結果。
DNS緩存分類
(1)瀏覽器DNS緩存:瀏覽器會根據一定頻率緩存DNS記錄;
(2)本地DNS緩存:如果瀏覽器緩存中找不到解析記錄,就會去詢問操作系統中的緩存;
(3)本地HOSTS文件:HOSTS是記錄域名與IP地址一一映射關系的本地文件,windows系統中位于C:WindowsSystem32driversetc;
(4)路由器DNS緩存:我們常用的路由器也帶有自動緩存功能,路由器DNS被篡改會造成域名劫持,將訪問網址定位到另外一個服務器;
(5)遞歸服務器緩存:遞歸服務器在將解析結果告知客戶端的同時,將記錄緩存下來,當下次請求同一個域名時,直接會將記錄返回,而無需再進行全球查詢。
DNS解析順序
DNS解析順序是“先查緩存,再遞歸解析”,查詢順序為:瀏覽器緩存—系統緩存—路由器緩存—遞歸服務器緩存—遞歸查詢。
我們以www.example.com這個域名為例進行查詢,具體流程如下:
(1)搜索瀏覽器自帶的DNS緩存
當收到訪問請求后,瀏覽器首先會查詢瀏覽器自身的DNS緩存,這個緩存時間比較短(chrome:/.NET-internals/#dns 這里可以查詢緩存的dns記錄),且只能容納 1000條緩存,如果緩存中有對應條目,返回結果,解析到此結束。
(2)查詢操作系統緩存和hosts本地文件
如果瀏覽器緩存中沒有找到對應條目(ipconfig /displaydns可以查看),操作系統也會有一個域名解析的過程,瀏覽器會先搜索操作系統的DNS緩存中是否有這個域名解析記錄,如果有返回結果,解析結束。
此外,電腦本地文件HOSTS中可以設定域名到IP地址的指向關系。如果HOSTS文件中保存有該域名的記錄,瀏覽器會首先使用這個IP地址,并將其結果緩存下來,緩存時間同樣受域名失效時間和緩存空間大小決定。
(3)查詢路由器緩存
如果瀏覽器和操作系統中沒有域名解析記錄,就會查詢路由器中的DNS緩存,如果路由器DNS緩存中有解析條目,直接返回結果,解析結束。
(4)遞歸解析服務器緩存
如果本機和路由器DNS緩存中沒有該域名的解析記錄,瀏覽器就會向遞歸服務器發起請求,如果遞歸服務器緩存有該域名解析條目,返回結果,解析結束。
(5)查詢根域名服務器
如果遞歸服務器緩存中沒有結果,就會委托遞歸服務器發起全球查詢,首先遞歸服務器會向根域名服務器發起解析請求。根域名服務器告知.com頂級域名服務器地址。
(6)查詢頂級域名服務器
遞歸服務器向.com頂級域名服務器發起DNS請求,.com頂級服務器告知example.com所屬權威域名服務器地址。
(7)查詢權威域名服務器
遞歸服務器向example.com的權威域名服務器地址發起請求,權威服務器告知www.example.com所對應的IP地址。
(8)返回解析結果
得到www.example.com的IP地址后,遞歸服務器將結果告知客戶端,客戶端對該IP地址發起訪問。整個DNS解析流程到此結束。