「遞歸解析」(或叫「遞歸查詢」,其實意思是同樣的)是最多見,也是默認的解析方式。在這種解析方式中,若是客戶端配置的本地名稱服務器不能解析的話,則後面的查詢全由本地名稱服務器代替DNS客戶端進行查詢,直到本地名稱服務器從權威名稱服務器獲得了正確的解析結果,而後由本地名稱服務器告訴DNS客戶端查詢的結果。html
1. DNS遞歸解析基本流程數據庫
在這個查詢過程當中,一直是以本地名稱服務器爲中心的,DNS客戶端只是發出原始的域名查詢請求報文,而後就一直處於等待狀態的,直到本地名稱服務器發來了最終的查詢結果。此時的本地名稱服務器就至關於中介代理的做用。若是考慮了本地名稱服務器的緩存技術(也就是在DNS服務器上對必定數量的之前查詢記錄保存必定時間,這樣後面查詢一樣的域名信息時就可直接從緩存中調出來,以加速查詢效率)的話,則遞歸解析的基本流程以下:緩存
(1)客戶端向本機配置的本地名稱服務器(在此僅以首選DNS服務器爲例進行介紹,所配置其它備用DNS服務器的解析流程徹底同樣)發出DNS域名查詢請求。服務器
(2)本地名稱服務器收到請求後,先查詢本地的緩存,若是有該域名的記錄項,則本地名稱服務器就直接把查詢的結果返回給客戶端;若是本地緩存中沒有該域名的記錄,則本地名稱服務器再以DNS客戶端的角色發送與前面同樣的DNS域名查詢請求發給根名稱服務器。網絡
(3)根名稱服務器收到DNS請求後,把所查詢獲得的所請求的DNS域名中頂級域名所對應的頂級名稱服務器地址返回給本地名稱服務器。
(4)本地名稱服務器根據根名稱服務器所返回的頂級名稱服務器地址,向對應的頂級名稱服務器發送與前面同樣的DNS域名查詢請求。ide
(5)對應的頂級名稱服務器在收到DNS查詢請求後,也是先查詢本身的緩存,若是有所請求的DNS域名的記錄項,則相接把對應的記錄項返回給本地名稱服務器,而後再由本地名稱服務器返回給DNS客戶端,不然向本地名稱服務器返回所請求的DNS域名中的二級域名所對應的二級名稱服務器地址。網站
而後本地名稱服務器繼續按照前面介紹的方法一次次地向三級、四級名稱服務器查詢,直到最終的對應域名所在區域的權威名稱服務器返回到最終的記錄給本地名稱服務器。而後再由本地名稱服務器返回給DNS客戶,同時本地名稱服務器會緩存本次查詢獲得的記錄項。spa
2. DNS遞歸解析示例.net
爲了方便你們理解,下面舉一個實例進行介紹。本示例中假設客戶端想要訪問本身並不識別的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服務器查詢的。
在上節介紹的DNS遞歸名稱解析中,當所配置的本地名稱服務器解析不了時,後面的查詢工做是由本地名稱服務器替代DNS客戶端進行的(以「本地名稱服務器」爲中心),只須要本地名稱服務器向DNS客戶端返回最終的查詢結果便可。而本節所介紹的DNS迭代名稱解析(或者叫「迭代查詢」)的全部查詢工做所有是DNS客戶端本身進行(以「DNS客戶端」本身爲中心)。在條件之一知足時就會採用迭代名稱解析方式:
l 在查詢本地名稱服務器時,若是客戶端的請求報文中沒有申請使用遞歸查詢,即在DNS請求報頭部的RD字段沒有置1。至關於說「你都沒有主動要求我爲你進行遞歸查詢,我固然不會爲你工做了」。
l 客戶端在DNS請求報文中申請使用的是遞歸查詢(也就是RD字段置1了),但在所配置的本地名稱服務器上是禁用遞歸查詢(DNS服務器通常默認支持遞歸查詢的),即在應答DNS報文頭部的RA字段置0。
1. 迭代名稱解析的基本流程
使用迭代解析方式時,若是它所配置的主名稱服務器(如Windows系統中的「首選DNS服務器」)不能解析的話,客戶端還會繼續向所配置的其它名稱服務器(如Windows系統中的「備用DNS服務器」)查詢。迭代名稱解析的基本流程以下:
(1)客戶端向本機配置的本地名稱服務器(在此僅以首先DNS服務器爲例進行介紹,其它備用DNS服務器的解析流程徹底同樣)發出DNS域名查詢請求。
(2)本地名稱服務器收到請求後,先查詢本地的緩存,若是有該域名的記錄項,則本地名稱服務器就直接把查詢的結果返回給客戶端;若是本地緩存中沒有該域名的記錄,則向DNS客戶端返回一條DNS應答報文,報文中會給出一些參考信息,如本地名稱服務器上的根名稱服務器地址等。
(3)DNS客戶端在收到本地名稱服務器的應答報文後,會根據其中的根名稱服務器地址信息,向對應的根名稱服務器再次發出與前面同樣的DNS查詢請求報文。
(4)根名稱服務器在收到DNS查詢請求報文後,經過查詢本身的DNS數據庫獲得請求DNS域名中頂級域名所對應的頂級名稱服務器信息,而後以一條DNS應答報文返回給DNS客戶端。
(5)DNS客戶端根據來自根名稱服務器應答報文中的對應頂級名稱服務器地址信息,向該頂級名稱服務器發出與前面同樣的DNS查詢請求報文。
(6)頂級名稱服務器在收到DNS查詢請求後,先查詢本身的緩存,若是有所請求的DNS域名的記錄項,則相接把對應的記錄項返回給DNS客戶端,不然經過查詢後把對應域名中二級域名所對應的二級名稱服務器地址信息以一條DNS應答報文返回給DNS客戶端。
而後DNS客戶端繼續按照前面介紹的方法一次次地向三級、四級名稱服務器查詢,直到最終的權威名稱服務器返回到最終的記錄。
2. DNS迭代解析示例
一樣,爲了方便你們理解,也例舉一個具體的示例,看一下DNS迭代解析的工做流程。本示例也與上節介紹的DNS遞歸解析同樣,假設客戶端想要訪問本身並不識別的example.microsoft.com站點,並假設此客戶端配置的本地名稱服務器假設爲dns.company.com(僅以一個爲例進行介紹),在該本地名稱服務器上配置的根名稱服務器是a.rootserver.net。整個迭代名稱解析過程如圖11-16所示(其中的Q1~Q5表示發送DNS查詢請求,A1~A5是對應序號DNS查詢請求的應答),具體描述以下:
圖11-16 DNS迭代名稱解析示例
(1)DNS客戶端向所配置的本地名稱服務器dns.company.com發出解析example.microsoft.com域名的DNS請求報文(圖中的Q1)。
(2)本地名稱服務器收到DNS客戶端的DNS查詢請求報文後,先查詢本地緩存。假設沒有查到該域名對應記錄,則本地名稱服務器把所配置的根名稱服務器a.rootserver.net地址信息以DNS應答報文返回給DNS客戶端(圖中和A1)。
(3)DNS客戶端在收到本地名稱服務器的DNS應答報文後,根據其中給出的根名稱服務器地址信息,向對應的根名稱服務器再次發送解析example.microsoft.com域名的DNS請求報文(圖中的Q2)。
(4)根名稱服務器在收到DNS查詢請求後,經過查詢獲得.com頂級域名所對應的頂級名稱服務器,而後把查詢到的對應頂級域名信息以一條DNS應答報文返回給DNS客戶端(圖中的A2)。
(5)DNS客戶端在收到根名稱服務器的DNS應答報文,獲得.com頂級域名所對應的頂級名稱服務器地址後,再次向對應的頂級名稱服務器發送一條解析example.microsoft.com域名的的DNS請求報文(圖中的Q3)。
(6).com頂級名稱服務器在收到DNS客戶端的DNS查詢請求報文後,先查詢本身的緩存,假設也沒有該域名的記錄項,則查詢microsoft.com所對應的二級名稱服務器,而後把查詢到的對應二級域名信息以一條DNS應答報文返回給DNS客戶端(圖中的A3)。
(7)DNS客戶端在收到.com頂級名稱服務器的DNS應答報文,獲得microsoft.com二級域名所對應的二級名稱服務器地址後,再次向對應的二級名稱服務器發送一條解析example.microsoft.com域名的DNS請求報文(圖中的Q4)。
(8)microsoft.com二級名稱服務器在收到DNS客戶端的DNS查詢請求報文後,也先查詢本身的緩存,假設也沒有該域名的記錄項,則查詢example.microsoft.com所對應的權威名稱服務器(由於這個名稱服務器已包括了整個域名example.microsoft.com所在區域),而後把查詢到的對應權威域名信息以一條DNS應答報文返回給DNS客戶端(圖中的A5)。
(9)DNS客戶端在收到microsoft.com二級名稱服務器的DNS應答報文,獲得example.microsoft.com三級域名所對應的權威名稱服務器地址後,再次向對應的權威名稱服務器發送解析example.microsoft.com域名的DNS請求報文(圖中的Q5)。
(10)權威名稱服務器在收到DNS客戶端的DNS查詢請求報文後,在它的DNS區域數據庫中查找,最終得出了example.microsoft.com域名所對應的IP地址。而後向DNS客戶端返回一條DNS應答報文(圖中的A5)。這樣DNS客戶端就能夠正常訪問這個網站了。
若是在步驟(10)中的對應域名的權威名稱服務器都說找不到對應的域名記錄,則會向DNS客戶端返回一條查詢失敗的DNS應答報文。固然,若是這個權威名稱服務器上配置了指向其它名稱服務器的轉發器,則權威名稱服務器還會在轉發器指向的名稱服務器上進一步查詢。另外,若是DNS客戶端上配置了多個DNS服務器,則還會繼續向其它DNS服務器查詢的。