很多網(wǎng)站管理人員大概都了解域名解析的原理和過程,但是對(duì)于一些細(xì)節(jié)問題可能不太清楚,比如當(dāng)客戶端對(duì)域名發(fā)起請(qǐng)求時(shí),具體的解析順序是什么樣的?下面中科三方針對(duì)這個(gè)問題做下簡(jiǎn)單介紹。

1.DNS的作用
在互聯(lián)網(wǎng)中,其實(shí)沒有類似于www.example.con這樣的域名方式,計(jì)算機(jī)識(shí)別的是純數(shù)字的IP地址,如222.222.222.222,比如我們知道一個(gè)網(wǎng)站的IP地址,直接輸入訪問絕對(duì)是能打開的。
但現(xiàn)在網(wǎng)站成千上萬,如果我們只能通過IP地址訪問,這得需要我們花很大力氣去記住這些繁瑣和相似的數(shù)字,所以域名就作為一種更簡(jiǎn)便的尋址方式出現(xiàn)了。
那為什么會(huì)有DNS呢?因?yàn)橛蛎墙o人使用的,計(jì)算機(jī)只能識(shí)別IP地址,所以需要DNS作為橋梁將域名翻譯成IP地址。這樣就能保證我們通過域名也能到達(dá)對(duì)應(yīng)的服務(wù)器地址了。
我們平時(shí)工作時(shí)會(huì)發(fā)現(xiàn),有時(shí)候會(huì)出現(xiàn)能夠登陸qq、微信,但是卻打不開網(wǎng)頁的情況,其中大部分原因都是DNS服務(wù)器故障造成的。因?yàn)榫W(wǎng)站需要通過DNS服務(wù)器查詢解析結(jié)果,用戶根據(jù)這個(gè)結(jié)果才能通過域名去訪問,但是qq、微信等聊天軟件,采用的是UDP傳輸協(xié)議,即不可靠傳輸協(xié)議,無需DNS服務(wù)器地址,也能登陸,所以才會(huì)出現(xiàn)上面的情況。
DNS解析過程
當(dāng)客戶端對(duì)域名發(fā)起訪問時(shí),會(huì)將解析請(qǐng)求發(fā)送給遞歸解析服務(wù)器,遞歸服務(wù)器會(huì)代替客戶端進(jìn)行全球遞歸查詢。
首先遞歸服務(wù)器會(huì)請(qǐng)求根域名服務(wù)器,根域名服務(wù)器根據(jù)域名后綴,告知對(duì)應(yīng)的頂級(jí)域名服務(wù)器;遞歸服務(wù)器再向頂級(jí)服務(wù)器發(fā)起請(qǐng)求,頂級(jí)域名服務(wù)器告知對(duì)應(yīng)的權(quán)威服務(wù)器;遞歸服務(wù)器向權(quán)威服務(wù)器發(fā)起請(qǐng)求,權(quán)威服務(wù)器告知解析結(jié)果;遞歸服務(wù)器將結(jié)果告知客戶端,客戶端完成訪問。

DNS緩存
以上是DNS解析的標(biāo)準(zhǔn)流程,但是由于各種DNS緩存的存在,導(dǎo)致DNS解析環(huán)節(jié)更為復(fù)雜。
所謂DNS緩存是指DNS返回正確的IP地址之后,系統(tǒng)會(huì)將這個(gè)結(jié)果臨時(shí)儲(chǔ)存起來,并為緩存設(shè)定一個(gè)失效時(shí)間(TTL值),在TTL失效前,當(dāng)再次訪問這個(gè)網(wǎng)站,系統(tǒng)就會(huì)直接從DNS 緩存中將結(jié)果返回,而不必再次委托遞歸服務(wù)器進(jìn)行全球解析查詢,加快了DNS解析的流程。
當(dāng)然TTL值失效后,系統(tǒng)還會(huì)自動(dòng)再次詢問DNS服務(wù)器以獲取最新的解析結(jié)果。
DNS緩存分類
(1)瀏覽器DNS緩存:瀏覽器會(huì)根據(jù)一定頻率緩存DNS記錄;
(2)本地DNS緩存:如果瀏覽器緩存中找不到解析記錄,就會(huì)去詢問操作系統(tǒng)中的緩存;
(3)本地HOSTS文件:HOSTS是記錄域名與IP地址一一映射關(guān)系的本地文件,windows系統(tǒng)中位于C:WindowsSystem32driversetc;
(4)路由器DNS緩存:我們常用的路由器也帶有自動(dòng)緩存功能,路由器DNS被篡改會(huì)造成域名劫持,將訪問網(wǎng)址定位到另外一個(gè)服務(wù)器;
(5)遞歸服務(wù)器緩存:遞歸服務(wù)器在將解析結(jié)果告知客戶端的同時(shí),將記錄緩存下來,當(dāng)下次請(qǐng)求同一個(gè)域名時(shí),直接會(huì)將記錄返回,而無需再進(jìn)行全球查詢。
DNS解析順序
DNS解析順序是“先查緩存,再遞歸解析”,查詢順序?yàn)椋簽g覽器緩存—系統(tǒng)緩存—路由器緩存—遞歸服務(wù)器緩存—遞歸查詢。
我們以www.example.com這個(gè)域名為例進(jìn)行查詢,具體流程如下:
(1)搜索瀏覽器自帶的DNS緩存
當(dāng)收到訪問請(qǐng)求后,瀏覽器首先會(huì)查詢?yōu)g覽器自身的DNS緩存,這個(gè)緩存時(shí)間比較短(chrome:/.NET-internals/#dns 這里可以查詢緩存的dns記錄),且只能容納 1000條緩存,如果緩存中有對(duì)應(yīng)條目,返回結(jié)果,解析到此結(jié)束。
(2)查詢操作系統(tǒng)緩存和hosts本地文件
如果瀏覽器緩存中沒有找到對(duì)應(yīng)條目(ipconfig /displaydns可以查看),操作系統(tǒng)也會(huì)有一個(gè)域名解析的過程,瀏覽器會(huì)先搜索操作系統(tǒng)的DNS緩存中是否有這個(gè)域名解析記錄,如果有返回結(jié)果,解析結(jié)束。
此外,電腦本地文件HOSTS中可以設(shè)定域名到IP地址的指向關(guān)系。如果HOSTS文件中保存有該域名的記錄,瀏覽器會(huì)首先使用這個(gè)IP地址,并將其結(jié)果緩存下來,緩存時(shí)間同樣受域名失效時(shí)間和緩存空間大小決定。
(3)查詢路由器緩存
如果瀏覽器和操作系統(tǒng)中沒有域名解析記錄,就會(huì)查詢路由器中的DNS緩存,如果路由器DNS緩存中有解析條目,直接返回結(jié)果,解析結(jié)束。
(4)遞歸解析服務(wù)器緩存
如果本機(jī)和路由器DNS緩存中沒有該域名的解析記錄,瀏覽器就會(huì)向遞歸服務(wù)器發(fā)起請(qǐng)求,如果遞歸服務(wù)器緩存有該域名解析條目,返回結(jié)果,解析結(jié)束。
(5)查詢根域名服務(wù)器
如果遞歸服務(wù)器緩存中沒有結(jié)果,就會(huì)委托遞歸服務(wù)器發(fā)起全球查詢,首先遞歸服務(wù)器會(huì)向根域名服務(wù)器發(fā)起解析請(qǐng)求。根域名服務(wù)器告知.com頂級(jí)域名服務(wù)器地址。
(6)查詢頂級(jí)域名服務(wù)器
遞歸服務(wù)器向.com頂級(jí)域名服務(wù)器發(fā)起DNS請(qǐng)求,.com頂級(jí)服務(wù)器告知example.com所屬權(quán)威域名服務(wù)器地址。
(7)查詢權(quán)威域名服務(wù)器
遞歸服務(wù)器向example.com的權(quán)威域名服務(wù)器地址發(fā)起請(qǐng)求,權(quán)威服務(wù)器告知www.example.com所對(duì)應(yīng)的IP地址。
(8)返回解析結(jié)果
得到www.example.com的IP地址后,遞歸服務(wù)器將結(jié)果告知客戶端,客戶端對(duì)該IP地址發(fā)起訪問。整個(gè)DNS解析流程到此結(jié)束。