1. 程式人生 > >DNS遞迴查詢與迭代查詢

DNS遞迴查詢與迭代查詢

DNS遞迴查詢與迭代查詢


summary

一直以來對於DNS查詢的“遞迴”與“迭代”方式感到困惑。一般人就直接跟你說“DNS客戶端向DNS伺服器請求叫遞迴查詢”,“DNS伺服器之間的查詢請求是迭代查詢”,聽了之後根本不知所謂。。。直到我看了《網路作業系統——windows server 2003配置與管理》(陳景亮主編)一書,明白了具體情況。以下主要是“摘抄”,包括附圖。不自己整理,主要是因為它寫得確實好,而且組織起來有一定的麻煩性。

遞迴查詢

遞迴查詢要求DNS伺服器在任何情況下都要返回結果。一般DNS客戶端向DNS伺服器提出的查詢請求屬於遞迴查詢。標準遞迴查詢過程如下圖:

遞迴查詢

假設域名為test1.abc.com的主機要查詢域名為www.info.xyz.com的伺服器的IP。

    第一步:向本地DNS伺服器abc.com查詢;
    第二步:本地DNS伺服器查詢不到,則通過根提示檔案向負責.com頂級域的根DNS伺服器查詢;
    第三第:根DNS伺服器根據所查詢域名中的“xyz.com”再向xyz.com DNS伺服器查詢;
    第四步:xyz.com DNS伺服器直接解析域名www.info.xyz.com,將查詢結果按照原路返回給請求查詢客戶端test1.abc.com

遞迴與迭代相結合的查詢

採用上邊的遞迴查詢方法,根DNS伺服器需要經過逐層查詢才能獲得查詢結果,效率很低,而且還會增加根DNS伺服器的負擔。為了解決這個問題,實際上採用遞迴與迭代相結合的查詢方式,如圖:

遞迴+迭代查詢

查詢過程如下:

    第一步:向本地DNS伺服器abc.com查詢;
    第二步:本地DNS伺服器查詢不到,則通過根提示檔案向負責.com頂級域的根DNS伺服器查詢;
    第三步:根DNS伺服器直接將下屬的DNS伺服器IP地址返回給本地DNS伺服器;
    第四步:本地DNS伺服器直接向xyz.com DNS伺服器查詢。

這其中,迭代查詢將對DNS伺服器進行查詢的任務交給DNS客戶端,DNS伺服器只是給客戶端返回一個提示,告訴它到另一臺DNS伺服器繼續查詢,直到查到所需結果為止。如果最後一臺DNS伺服器也不能提供所需答案,則宣告查詢失敗。所以說“一般伺服器之間的查詢請求屬於迭代查詢”。

個人理解

單獨地講什麼是遞迴查詢什麼是迭代查詢是沒有意義的,遞迴和迭代本身就是在一個群體(不是1也不是2的數量)中的行為方式,直接說“DNS客戶端向DNS伺服器請求叫遞迴查詢”,“DNS伺服器之間的查詢請求是迭代查詢”,從概念上來說就是錯的。

那現在我們可以來講講,為什麼叫它“遞迴查詢”?“迭代查詢”?

從第一個例子中,我們站在test1.abc.com的角度看,發出了查詢請求後,這個請求通過一層一層遞交,直到最後得到了一個明確的解析結果才把它返回給test1.abc.com。這過程就看出來它是遞迴的。

從第二個例子中,我們站在abc.com伺服器的角度看,發出了查詢請求後,查詢結果直接返回來了,如果沒有解析出來,那麼我們就進行下一次查詢(根據返回的指引),這樣是一次次重複同樣的操作的,這個叫做迭代。而我們上邊說到的的“遞迴結合迭代”,這裡的遞迴在於進行操作的並不直接是我們的test1.abc.com主機,而是abc.com,查詢主機test1.abc.com也是在最後才收到一個最終的查詢結果哦,就像遞迴例子講的那樣。