Part1什么是DNS
我們知道,每個(gè)網(wǎng)站都有一個(gè)域名和一個(gè)以上的IP地址,當(dāng)我們想瀏覽某個(gè)網(wǎng)站的時(shí)候,只需要在瀏覽器輸入該網(wǎng)址的域名就可以訪問(wèn)了。要是沒(méi)有域名能不能實(shí)現(xiàn)訪問(wèn)網(wǎng)站呢?答案當(dāng)然是可以啦,不過(guò)你每次都需要記住訪問(wèn)的網(wǎng)址的IP地址,比如,你想用百度,每次都需要在瀏覽器打入112.80.248.74,是不是很令人崩潰啊哈哈哈哈。那么,網(wǎng)址域名和IP地址之間是如何實(shí)現(xiàn)一一映射的呢?這時(shí)候DNS就該閃亮登場(chǎng)的了。
DNS的全稱是 domain name system ,即域名系統(tǒng)。DNS是因特網(wǎng)上作為域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù),能夠使用戶更方便的去訪問(wèn)互聯(lián)網(wǎng)而不用去記住能夠被機(jī)器直接讀取的IP地址。通過(guò)域名,最終得到該域名對(duì)應(yīng)的IP地址的過(guò)程則是域名解析的過(guò)程。DNS如何解析
Part2遞歸查詢
某天,客戶端想要訪問(wèn)XXX網(wǎng)站,但是,客戶端并不知道XXX網(wǎng)站的IP地址。于是,展開(kāi)了如下對(duì)話
客戶端:“本地DNS服務(wù)器大佬,求問(wèn)XXX的IP地址是多少?”
本地DNS服務(wù)器:“不好意思,我不知道,但是根域名服務(wù)器可能會(huì)知道,我替去問(wèn)他吧”
本地DNS服務(wù)器:“根域名服務(wù)器大佬,求問(wèn)XXX的IP地址是多少?”
根域名服務(wù)器:“不好意思,我不也知道,但是A頂級(jí)域名服務(wù)器可能會(huì)知道,我替你去問(wèn)他吧”
根域名服務(wù)器:“A頂級(jí)域名服務(wù)器,求問(wèn)XXX的IP地址是多少?”
A頂級(jí)域名服務(wù)器:“不好意思,我不也知道,但是B域名服務(wù)器可能會(huì)知道,我替你去問(wèn)他吧”
A頂級(jí)域名服務(wù)器:“B域名服務(wù)器,求問(wèn)XXX的IP地址是多少?”
B域名服務(wù)器:“A頂級(jí)域名服務(wù)器,查到XXX的IP地址是 192.168.168.6 ”
A頂級(jí)域名服務(wù)器:“根域名服務(wù)器,查到XXX的IP地址是 192.168.168.6 ”
根域名服務(wù)器:“本地DNS服務(wù)器,查到XXX的IP地址是 192.168.168.6 ”
本地DNS服務(wù)器:“客戶端,查到XXX的IP地址是 192.168.168.6”
客戶端:“謝謝各位大佬,XXX的IP地址是 192.168.168.6 ,我可以和他愉快的通訊了”
Part3 迭代查詢通過(guò)上面的對(duì)話,我們可以發(fā)現(xiàn),遞歸查詢時(shí)如果客戶端所詢問(wèn)的本地域名服務(wù)器不知道被查詢的域名的IP地址,那么本地域名服務(wù)器就以DNS客戶的身份,向其他頂級(jí)域名服務(wù)器繼續(xù)發(fā)出查詢,直到查詢到結(jié)果后,再層層傳遞回來(lái)。
客戶端:“本地DNS服務(wù)器大佬,求問(wèn)XXX的IP地址是多少?”
本地DNS服務(wù)器:“不好意思,我不知道,但是根域名服務(wù)器可能會(huì)知道,你去問(wèn)他吧”,本地DNS服務(wù)器說(shuō)完,并把根域名服務(wù)器地址發(fā)給客戶端。
客戶端:“根域名服務(wù)器大佬,求問(wèn)XXX的IP地址是多少?”
根域名服務(wù)器:“不好意思,我不也知道,但是A頂級(jí)域名服務(wù)器可能會(huì)知道,你去問(wèn)他吧”,根域名服務(wù)器說(shuō)完,并把A頂級(jí)域名服務(wù)器地址發(fā)給客戶端。
客戶端只能又跑去問(wèn)A頂級(jí)域名服務(wù)器了。
客戶端:“A頂級(jí)域名服務(wù)器大佬,求問(wèn)XXX的IP地址是多少?”
A頂級(jí)域名服務(wù)器:“不好意思,我不也知道,但是B域名服務(wù)器可能會(huì)知道,你去問(wèn)他吧”,A頂級(jí)域名服務(wù)器說(shuō)完,并把B域名服務(wù)器地址發(fā)給客戶端。
客戶端非常無(wú)奈,只能又跑去問(wèn)B域名服務(wù)器了。
客戶端:“B域名服務(wù)器大佬,求問(wèn)XXX的IP地址是多少?”
B域名服務(wù)器:“客戶端同學(xué),查到XXX的IP地址是 192.168.168.6” 。
客戶端:“謝謝B域名服務(wù)器大佬,XXX的IP地址是 192.168.168.6 ,我可以和他愉快的通訊了”
就這樣,客戶端在詢問(wèn)了一大圈之后,終于知道了XXX的IP地址了。

Part4總結(jié)
在上一節(jié)中,我們知道了DNS的兩種查詢方法,但實(shí)際上,在DNS查詢過(guò)程中,客戶端和服務(wù)器也都會(huì)加入緩存的機(jī)制,這樣可以減少查詢的次數(shù),加快域名解析過(guò)程。當(dāng)我們?cè)跒g覽器中輸入一個(gè)網(wǎng)站時(shí),會(huì)發(fā)生如下過(guò)程
1、瀏覽器中輸入想要訪問(wèn)的網(wǎng)站的域名,操作系統(tǒng)會(huì)先檢查本地的hosts文件是否有這個(gè)網(wǎng)址映射關(guān)系,如果有,就先調(diào)用這個(gè)IP地址映射,完成域名解析。
2、如果hosts里沒(méi)有這個(gè)域名的映射,客戶端會(huì)向本地DNS服務(wù)器發(fā)起查詢。本地DNS服務(wù)器收到查詢時(shí),如果要查詢的域名包含在本地配置區(qū)域資源中,則返回解析結(jié)果給客戶機(jī),完成域名解析。
3、如果本地DNS服務(wù)器本地區(qū)域文件與緩存解析都失效,則根據(jù)本地DNS服務(wù)器的設(shè)置,采用遞歸或者迭代查詢,直至解析完成。
這就是本文講的DNS的解析過(guò)程內(nèi)容啦,如果有什么地方不對(duì),歡迎在評(píng)論去指正。






