“遞歸解析”(或叫“遞歸查詢”,其實意思是一樣的)是最常見,也是默認的解析方式。在這種解析方式中,如果客戶端配置的本地名稱服務器不能解析的話,則后面的查詢全由本地名稱服務器代替DNS客戶端進行查詢,直到本地名稱服務器從權威名稱服務器得到了正確的解析結果,然后由本地名稱服務器告訴DNS客戶端查詢的結果。
DNS遞歸解析基本流程
在這個查詢過程中,一直是以本地名稱服務器為中心的,DNS客戶端只是發出原始的域名查詢請求報文,然后就一直處於等待狀態的,直到本地名稱服務器發來了最終的查詢結果。此時的本地名稱服務器就相當於中介代理的作用。如果考慮了本地名稱服務器的緩存技術(也就是在DNS服務器上對一定數量的以前查詢記錄保存一定時間(即設置的TTL時間,以秒為單位),這樣后面查詢同樣的域名信息時就可直接從緩存中調出來,以加速查詢效率)的話,則遞歸解析的基本流程如下:
————————————————
(1)客戶端向本機配置的本地名稱服務器(在此僅以首選DNS服務器為例進行介紹,所配置其它備用DNS服務器的解析流程完全一樣)發出DNS域名查詢請求。
(2)本地名稱服務器收到請求后,先查詢本地的緩存,如果有該域名的記錄項,則本地名稱服務器就直接把查詢的結果返回給客戶端;如果本地緩存中沒有該域名的記錄,則本地名稱服務器再以DNS客戶端的角色發送與前面一樣的DNS域名查詢請求發給根名稱服務器。
(3)根名稱服務器收到DNS請求后,把所查詢得到的所請求的DNS域名中頂級域名所對應的頂級名稱服務器地址返回給本地名稱服務器。
(4)本地名稱服務器根據根名稱服務器所返回的頂級名稱服務器地址,向對應的頂級名稱服務器發送與前面一樣的DNS域名查詢請求。
(5)對應的頂級名稱服務器在收到DNS查詢請求后,也是先查詢自己的緩存,如果有所請求的DNS域名的記錄項,則相接把對應的記錄項返回給本地名稱服務器,然后再由本地名稱服務器返回給DNS客戶端,否則向本地名稱服務器返回所請求的DNS域名中的二級域名所對應的二級名稱服務器地址。
然后本地名稱服務器繼續按照前面介紹的方法一次次地向三級、四級名稱服務器查詢,直到最終的對應域名所在區域的權威名稱服務器返回到最終的記錄給本地名稱服務器。然后再由本地名稱服務器返回給DNS客戶,同時本地名稱服務器會緩存本次查詢得到的記錄項。
實例:
假設客戶端想要訪問自己並不識別的example.microsoft.com站點,並假設此客戶端配置的本地名稱服務器假設為dns.company.com(通常是以IP地址方式配置的),本地名稱服務器上配置的根名稱服務器是a.rootserver.net。整個遞歸名稱解析過程如圖11-15所示(其中的Q1~Q5表示發送DNS查詢請求,A1~A5是DNS查詢應答),具體描述如下:
(1)DNS客戶端向所配置的本地名稱服務器dns.company.com發出解析example.microsoft.com域名的DNS請求報文(圖中的Q1)。相當於對本地名稱服務器說“請給我example.microsoft.com所對應的IP地址”。
(2)本地名稱服務器收到請求后,先查詢本地緩存。假設沒有查到該域名對應記錄,則本地名稱服務器向所配置的根名稱服務器a.rootserver.net發出解析請求解析example.microsoft.com域名的DNS請求報文(圖中的Q2)。
(3)根名稱服務器收到查詢請求后,通過查詢得到.com頂級域名所對應的頂級名稱服務器,然后向本地名稱服務器返回一條應答報文(圖中的A1)。相當說“我不知道example.microsoft.com域名所對應的IP地址,但我現在告訴你.com域名所對應的頂級名稱服務器地址”。
圖11-15 DNS遞歸名稱解析示例
(4)本地名稱服務器在收到根名稱服務器的DNS應答報文,得到.com頂級域名所對應的頂級名稱服務器地址后,再次向對應的頂級名稱服務器發送一條請求解析example.microsoft.com域名的DNS請求報文(圖中的Q3)。
(5).com頂級名稱服務器在收到DNS請求報文后,先查詢自己的緩存,假設也沒有該域名的記錄項,則查詢microsoft.com所對應的二級名稱服務器,然后也向本地名稱服務返回一條DNS應答報文(圖中的A2)。相當於說“我不知道example.microsoft.com域名所對應的IP地址,但我現在告訴你microsoft.com域名所對應的二級名稱服務器地址”。
(6)本地名稱服務器在收到.com頂級名稱服務器的DNS應答報文,得到microsoft.com二級域名所對應的二級名稱服務器地址后,再次向對應的二級名稱服務器發送一條請求解析example.microsoft.com域名的DNS請求報文(圖中的Q4)。
(7)microsoft.com二級名稱服務器在收到DNS請求報文后,也先查詢自己的緩存,假設也沒有該域名的記錄項,則查詢example.microsoft.com所對應的權威名稱服務器(因為這個名稱服務器已包括了完整域名example.microsoft.com所在區域),然后也向本地名稱服務器返回一條DNS應答報文(圖中的A3)。相當於說“我不知道example.microsoft.com域名所對應的IP地址,但我現在告訴你example.microsoft.com域名所對應的權威名稱服務器地址”。
(8)本地名稱服務器在收到microsoft.com二級名稱服務器的DNS應答報文,得到example.microsoft.com三級域名所對應的權威名稱服務器地址后,再次向對應的權威名稱服務器發送一條請求解析example.microsoft.com域名的DNS請求報文(圖中的Q5)。
(9)權威名稱服務器在收到DNS請求后,在它的DNS區域數據庫中查找,最終得出了example.microsoft.com域名所對應的IP地址。然后向本地名稱服務器返回到條DNS應答報文(圖中的A4)。相當於說“example.microsoft.com域名的IP地址為xxx.xxx.xxx.xxx”。
(10)本地名稱服務器在收到權威名稱服務器后,向DNS客戶端返回一條DNS應答報文(圖中的A5),告訴DNS客戶端所得到的example.microsoft.com域名的IP地址。這樣DNS客戶端就可以正常訪問這個網站了。
如果在步驟(9)中的對應域名的權威名稱服務器都說找不到對應的域名記錄,則會向本地名稱服務器返回一條查詢失敗的DNS應答報文,這條報文最終也會由本地名稱服務器返回給DNS客戶端。當然,如果這個權威名稱服務器上配置了指向其它名稱服務器的轉發器,則權威名稱服務器還會在轉發器指向的名稱服務器上進一步查詢。另外,如果DNS客戶端上配置了多個DNS服務器,則還會繼續向其它DNS服務器查詢的。
————————————————