1. 程式人生 > >DNS遞迴解析和迭代解析的區別

DNS遞迴解析和迭代解析的區別

11.3.7 DNS遞迴解析原理


   “遞迴解析”(或叫“遞迴查詢”,其實意思是一樣的)是最常見,也是預設的解析方式。在這種解析方式中,如果客戶端配置的本地名稱伺服器不能解析的話,則後面的查詢全由本地名稱伺服器代替DNS客戶端進行查詢,直到本地名稱伺服器從權威名稱伺服器得到了正確的解析結果,然後由本地名稱伺服器告訴DNS客戶端查詢的結果。

1. DNS遞迴解析基本流程

     在這個查詢過程中,一直是以本地名稱伺服器為中心的,DNS客戶端只是發出原始的域名查詢請求報文,然後就一直處於等待狀態的,直到本地名稱伺服器發來了最終的查詢結果。此時的本地名稱伺服器就相當於中介代理的作用。如果考慮了本地名稱伺服器的快取技術(也就是在DNS伺服器上對一定數量的以前查詢記錄儲存一定時間,這樣後面查詢同樣的域名資訊時就可直接從快取中調出來,以加速查詢效率)的話,則遞迴解析的基本流程如下:

(1)客戶端向本機配置的本地名稱伺服器(在此僅以首選DNS伺服器為例進行介紹,所配置其它備用DNS伺服器的解析流程完全一樣)發出DNS域名查詢請求。

(2)本地名稱伺服器收到請求後,先查詢本地的快取,如果有該域名的記錄項,則本地名稱伺服器就直接把查詢的結果返回給客戶端;如果本地快取中沒有該域名的記錄,則本地名稱伺服器再以DNS客戶端的角色傳送與前面一樣的DNS域名查詢請求發給根名稱伺服器。

(3)根名稱伺服器收到DNS請求後,把所查詢得到的所請求的DNS域名中頂級域名所對應的頂級名稱伺服器地址返回給本地名稱伺服器。
(4)本地名稱伺服器根據根名稱伺服器所返回的頂級名稱伺服器地址,向對應的頂級名稱伺服器傳送與前面一樣的DNS域名查詢請求。

(5)對應的頂級名稱伺服器在收到DNS查詢請求後,也是先查詢自己的快取,如果有所請求的DNS域名的記錄項,則相接把對應的記錄項返回給本地名稱伺服器,然後再由本地名稱伺服器返回給DNS客戶端,否則向本地名稱伺服器返回所請求的DNS域名中的二級域名所對應的二級名稱伺服器地址。

然後本地名稱伺服器繼續按照前面介紹的方法一次次地向三級、四級名稱伺服器查詢,直到最終的對應域名所在區域的權威名稱伺服器返回到最終的記錄給本地名稱伺服器。然後再由本地名稱伺服器返回給DNS客戶,同時本地名稱伺服器會快取本次查詢得到的記錄項。

2. 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域名所對應的頂級名稱伺服器地址”。

(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客戶端和本地名稱伺服器是遞迴,而本地名稱伺服器和其他名稱伺服器之間是迭代。

11.3.8  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查詢請求的應答),具體描述如下:

(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伺服器查詢的。

以上原文連結:https://blog.csdn.net/lycb_gz/article/details/11720247 

為什麼預設是遞迴查詢呢?可能是DNS客戶端為了節省自己的CPU,記憶體等各方面資源。