咱們知道,每一個網站都有一個域名和一個以上的IP地址,當咱們想瀏覽某個網站的時候,只須要在瀏覽器輸入該網址的域名就能夠訪問了。要是沒有域名能不能實現訪問網站呢?答案固然是能夠啦,不過你每次都須要記住訪問的網址的IP地址,好比,你想用百度,每次都須要在瀏覽器打入112.80.248.74,是否是很使人崩潰啊哈哈哈哈。那麼,網址域名和IP地址之間是如何實現一一映射的呢?這時候DNS就該閃亮登場的了。數據庫
DNS的全稱是domain name system,即域名系統。DNS是因特網上做爲域名和IP地址相互映射的一個分佈式數據庫,可以使用戶更方便的去訪問互聯網而不用去記住可以被機器直接讀取的IP地址。經過域名,最終獲得該域名對應的IP地址的過程則是域名解析的過程。瀏覽器
某天,客戶端想要訪問XXX網站,可是,客戶端並不知道XXX網站的IP地址。因而,展開了以下對話緩存
客戶端:「本地DNS服務器大佬,求問XXX的IP地址是多少?」服務器
本地DNS服務器:「很差意思,我不知道,可是根域名服務器可能會知道,我替去問他吧」dom
本地DNS服務器:「根域名服務器大佬,求問XXX的IP地址是多少?」分佈式
根域名服務器:「很差意思,我不也知道,可是A頂級域名服務器可能會知道,我替你去問他吧」網站
根域名服務器:「A頂級域名服務器,求問XXX的IP地址是多少?」操作系統
A頂級域名服務器:「很差意思,我不也知道,可是B域名服務器可能會知道,我替你去問他吧」cdn
A頂級域名服務器:「B域名服務器,求問XXX的IP地址是多少?」blog
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,我能夠和他愉快的通信了」
經過上面的對話,咱們能夠發現,遞歸查詢時若是客戶端所詢問的本地域名服務器不知道被查詢的域名的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地址了。
在上一節中,咱們知道了DNS的兩種查詢方法,但實際上,在DNS查詢過程當中,客戶端和服務器也都會加入緩存的機制,這樣能夠減小查詢的次數,加快域名解析過程。當咱們在瀏覽器中輸入一個網站時,會發生以下過程
一、瀏覽器中輸入想要訪問的網站的域名,操做系統會先檢查本地的hosts文件是否有這個網址映射關係,若是有,就先調用這個IP地址映射,完成域名解析。
二、若是hosts裏沒有這個域名的映射,客戶端會向本地DNS服務器發起查詢。本地DNS服務器收到查詢時,若是要查詢的域名包含在本地配置區域資源中,則返回解析結果給客戶機,完成域名解析。
三、若是本地DNS服務器本地區域文件與緩存解析都失效,則根據本地DNS服務器的設置,採用遞歸或者迭代查詢,直至解析完成。
這就是本文講的DNS的解析過程內容啦,若是有什麼地方不對,歡迎在評論去指正。