Part1什么是DNS
我們知道,每個網站都有一個域名和一個以上的IP地址,當我們想瀏覽某個網站的時候,只需要在瀏覽器輸入該網址的域名就可以訪問了。要是沒有域名能不能實現訪問網站呢?答案當然是可以啦,不過你每次都需要記住訪問的網址的IP地址,比如,你想用百度,每次都需要在瀏覽器打入112.80.248.74,是不是很令人崩潰啊哈哈哈哈。那么,網址域名和IP地址之間是如何實現一一映射的呢?這時候DNS就該閃亮登場的了。
DNS的全稱是 domain name system ,即域名系統。DNS是因特網上作為域名和IP地址相互映射的一個分布式數據庫,能夠使用戶更方便的去訪問互聯網而不用去記住能夠被機器直接讀取的IP地址。通過域名,最終得到該域名對應的IP地址的過程則是域名解析的過程。DNS如何解析
Part2遞歸查詢
某天,客戶端想要訪問XXX網站,但是,客戶端并不知道XXX網站的IP地址。于是,展開了如下對話
客戶端:“本地DNS服務器大佬,求問XXX的IP地址是多少?”
本地DNS服務器:“不好意思,我不知道,但是根域名服務器可能會知道,我替去問他吧”
本地DNS服務器:“根域名服務器大佬,求問XXX的IP地址是多少?”
根域名服務器:“不好意思,我不也知道,但是A頂級域名服務器可能會知道,我替你去問他吧”
根域名服務器:“A頂級域名服務器,求問XXX的IP地址是多少?”
A頂級域名服務器:“不好意思,我不也知道,但是B域名服務器可能會知道,我替你去問他吧”
A頂級域名服務器:“B域名服務器,求問XXX的IP地址是多少?”
B域名服務器:“A頂級域名服務器,查到XXX的IP地址是 192.168.168.6 ”
A頂級域名服務器:“根域名服務器,查到XXX的IP地址是 192.168.168.6 ”
根域名服務器:“本地DNS服務器,查到XXX的IP地址是 192.168.168.6 ”
本地DNS服務器:“客戶端,查到XXX的IP地址是 192.168.168.6”
客戶端:“謝謝各位大佬,XXX的IP地址是 192.168.168.6 ,我可以和他愉快的通訊了”
Part3 迭代查詢通過上面的對話,我們可以發現,遞歸查詢時如果客戶端所詢問的本地域名服務器不知道被查詢的域名的IP地址,那么本地域名服務器就以DNS客戶的身份,向其他頂級域名服務器繼續發出查詢,直到查詢到結果后,再層層傳遞回來。
客戶端:“本地DNS服務器大佬,求問XXX的IP地址是多少?”
本地DNS服務器:“不好意思,我不知道,但是根域名服務器可能會知道,你去問他吧”,本地DNS服務器說完,并把根域名服務器地址發給客戶端。
客戶端:“根域名服務器大佬,求問XXX的IP地址是多少?”
根域名服務器:“不好意思,我不也知道,但是A頂級域名服務器可能會知道,你去問他吧”,根域名服務器說完,并把A頂級域名服務器地址發給客戶端。
客戶端只能又跑去問A頂級域名服務器了。
客戶端:“A頂級域名服務器大佬,求問XXX的IP地址是多少?”
A頂級域名服務器:“不好意思,我不也知道,但是B域名服務器可能會知道,你去問他吧”,A頂級域名服務器說完,并把B域名服務器地址發給客戶端。
客戶端非常無奈,只能又跑去問B域名服務器了。
客戶端:“B域名服務器大佬,求問XXX的IP地址是多少?”
B域名服務器:“客戶端同學,查到XXX的IP地址是 192.168.168.6” 。
客戶端:“謝謝B域名服務器大佬,XXX的IP地址是 192.168.168.6 ,我可以和他愉快的通訊了”
就這樣,客戶端在詢問了一大圈之后,終于知道了XXX的IP地址了。
Part4總結
在上一節中,我們知道了DNS的兩種查詢方法,但實際上,在DNS查詢過程中,客戶端和服務器也都會加入緩存的機制,這樣可以減少查詢的次數,加快域名解析過程。當我們在瀏覽器中輸入一個網站時,會發生如下過程
1、瀏覽器中輸入想要訪問的網站的域名,操作系統會先檢查本地的hosts文件是否有這個網址映射關系,如果有,就先調用這個IP地址映射,完成域名解析。
2、如果hosts里沒有這個域名的映射,客戶端會向本地DNS服務器發起查詢。本地DNS服務器收到查詢時,如果要查詢的域名包含在本地配置區域資源中,則返回解析結果給客戶機,完成域名解析。
3、如果本地DNS服務器本地區域文件與緩存解析都失效,則根據本地DNS服務器的設置,采用遞歸或者迭代查詢,直至解析完成。
這就是本文講的DNS的解析過程內容啦,如果有什么地方不對,歡迎在評論去指正。