背景
在互聯(lián)網(wǎng)的世界中是用ip來標(biāo)識(shí)一臺(tái)服務(wù)器的,因此在很早的時(shí)候大家都是通過ip來訪問其他服務(wù)器上的資源的。倘若讓你在瀏覽器中輸入115.239.210.27這樣的URL你肯定不能接受。所以把通過ip訪問替換成通過名字(域名)訪問是很有必要的,因此把用戶輸入的名字解析成ip的服務(wù)也就應(yīng)運(yùn)而生了。
名詞解釋
- DNS(domain name server)域名解析服務(wù)器
- URL統(tǒng)一資源標(biāo)識(shí)符
- TTL time-to-live 生存時(shí)間
- LDNS 本地DNS服務(wù)器
- gTLD全球DNS服務(wù)器
解析過程
- 當(dāng)用戶在瀏覽器輸入一個(gè)域名的時(shí)候,最先瀏覽器會(huì)從自己中的緩存中尋找指定的結(jié)果。如果找到了域名對(duì)應(yīng)的的ip則域名解析完成。這個(gè)緩存空間大小是有限的,另外每一條結(jié)果都有過期時(shí)間,這個(gè)過期時(shí)間通過TTL屬性來指定。這個(gè)過期時(shí)間過長(zhǎng)過短都不好。過長(zhǎng)的話,如果服務(wù)器的ip發(fā)生了變化則會(huì)發(fā)生訪問錯(cuò)誤的服務(wù)器的問題,如果過短的話,每次訪問都要重新解析一次域名。
- 如果在瀏覽器中的緩存沒有命中,則會(huì)在系統(tǒng)的緩存中來查找是這個(gè)域名否有對(duì)應(yīng)的DNS解析結(jié)果,如果有則域名解析完成。這個(gè)緩存通常是以文件的方式來保存,比如windows下是通過C:\windwos\system32\driver\etc\hosts文件來設(shè)置的,linux中則是/etc/named.confg文件。通過編輯這個(gè)文件我們能把域名映射到任意一個(gè)ip中。
如果前面兩個(gè)流程都沒有找到指定域名的解析結(jié)果,那么下面就要進(jìn)行真正的域名解析了。為什么叫真正的域名解析呢?因?yàn)榍懊娴亩际窃诒緳C(jī)中完成的,下面的流程就要依賴外部服務(wù)器來查找指定的域名的解析結(jié)果
- 系統(tǒng)緩存中未命中之后會(huì)把這個(gè)域名提交到指定LDNS服務(wù)器中,這個(gè)服務(wù)器就是你計(jì)算機(jī)設(shè)定(或自動(dòng)獲取)的DNS服務(wù)器。如果你在學(xué)校的網(wǎng)絡(luò)中,這個(gè)DNS服務(wù)器一定在你學(xué)校里,如果你是在小區(qū)的網(wǎng)絡(luò),這個(gè)DNS服務(wù)器通常是運(yùn)營(yíng)商提供的。總之這個(gè)服務(wù)器在物理位置上離你比較近。這個(gè)域名解析服務(wù)器緩存了大量的域名的DNS解析結(jié)果。由于它的性能較好,物理上的距離又比較近,它通常會(huì)在很短的時(shí)間內(nèi)返回指定域名的解析結(jié)果。大約80%的DNS解析需求在這一步就滿足了,所以LDNS完成了大部分的DNS解析任務(wù)。
- 如果指定的域名在LDNS服務(wù)器的緩存中仍然沒有命中,LDNS會(huì)向ROOT Server發(fā)送請(qǐng)求。
- ROOT Server會(huì)返回給LDNS一個(gè)指定域名對(duì)應(yīng)的主域名服務(wù)器gTL的地址D,gTLD是頂級(jí)域名服務(wù)器,如com,cn,org等,全球就十幾臺(tái)。
- LDNS接下來會(huì)向這個(gè)gTLD服務(wù)器發(fā)送域名解析請(qǐng)求。
- 接受請(qǐng)求的gTLD會(huì)返回給LDNS一個(gè)該域名對(duì)應(yīng)的Name Server服務(wù)器地址,這個(gè)Name Server通常就是你注冊(cè)的域名服務(wù)器。例如你在某個(gè)域名服務(wù)提供商申請(qǐng)的域名,這個(gè)域名就由他們的服務(wù)器來解析。
- NAME Server會(huì)把指定域名的ip和一個(gè)TTL返回給LDNS。
- LDNS會(huì)把這個(gè)結(jié)果緩存下來,緩存的過期時(shí)間由TTL來決定。
10.然后LDNS再把這個(gè)結(jié)果返回給用戶,DNS解析結(jié)束。
從上面來看如果LDNS中沒有查找到指定域名的對(duì)應(yīng)ip,則需要很長(zhǎng)的時(shí)間來獲取解析結(jié)果。但是一旦解析結(jié)果被緩存了,下次再請(qǐng)求同樣的域名就不會(huì)這么慢了。