DNS解析流程分爲遞歸查詢和迭代查詢,遞歸查詢是以本地名稱服務器爲中心查詢, 遞歸查詢是默認方式,迭代查詢是以DNS客戶端,也就是客戶機器爲中心查詢。windows
先不說那麼多,看兩張圖你應該就明白了。緩存
又稱Local DNS, 能夠是默認的運營商提供的Local DNS 或者本身設置的DNS。服務器
下圖是windows下默認獲取的運營商Local DNS或者 本身設置的Local DNS網絡
權威 DNS 由域名解析服務商建設,提供域名管理服務,維護域名解析記錄。.net
權威 DNS 服務器只對本身所擁有的域名進行域名解析,對於不是本身的域名則拒絕訪問。好比,向「example.com」的權威 DNS 服務器查詢「test.com」的域名確定會查詢失敗。代理
遞歸 DNS 由網絡運營商建設,提供域名查詢解析服務。遞歸 DNS 會迭代權威服務器返回的應答,直至最終查詢到的 IP 地址,將其返回給客戶端,並將請求結果緩存到本地。blog
遞歸 DNS 的訪問過程以下圖所示(遞歸 DNS 在圖中表示爲 Local DNS):遞歸
(1)客戶端向本機配置的本地名稱服務器(在此僅以首選DNS服務器爲例進行介紹,所配置其它備用DNS服務器的解析流程徹底同樣)發出DNS域名查詢請求。get
(2)本地名稱服務器收到請求後,先查詢本地的緩存,若是有該域名的記錄項,則本地名稱服務器就直接把查詢的結果返回給客戶端;若是本地緩存中沒有該域名的記錄,則本地名稱服務器再以DNS客戶端的角色發送與前面同樣的DNS域名查詢請求發給根名稱服務器。域名
(3)根名稱服務器收到DNS請求後,把所查詢獲得的所請求的DNS域名中頂級域名所對應的頂級名稱服務器地址返回給本地名稱服務器。
(4)本地名稱服務器根據根名稱服務器所返回的頂級名稱服務器地址,向對應的頂級名稱服務器發送與前面同樣的DNS域名查詢請求。
(5)對應的頂級名稱服務器在收到DNS查詢請求後,也是先查詢本身的緩存,若是有所請求的DNS域名的記錄項,則相接把對應的記錄項返回給本地名稱服務器,而後再由本地名稱服務器返回給DNS客戶端,不然向本地名稱服務器返回所請求的DNS域名中的二級域名所對應的二級名稱服務器地址。
而後本地名稱服務器繼續按照前面介紹的方法一次次地向三級、四級名稱服務器查詢,直到最終的對應域名所在區域的權威名稱服務器返回到最終的記錄給本地名稱服務器。而後再由本地名稱服務器返回給DNS客戶,同時本地名稱服務器會緩存本次查詢獲得的記錄項
DNS遞歸名稱解析: 在DNS遞歸名稱解析中,當所配置的本地名稱服務器解析不了時,後面的查詢工做是由本地名稱服務器替代DNS客戶端進行的(以「本地名稱服務器」爲中心),只須要本地名稱服務器向DNS客戶端返回最終的查詢結果便可。
DNS迭代名稱解析:(或者叫「迭代查詢」)的全部查詢工做所有是DNS客戶端本身進行(以「DNS客戶端」本身爲中心)。在條件之一知足時就會採用迭代名稱解析方式:
在查詢本地名稱服務器時,若是客戶端的請求報文中沒有申請使用遞歸查詢,即在DNS請求報頭部的RD字段沒有置1。至關於說「你都沒有主動要求我爲你進行遞歸查詢,我固然不會爲你工做了」。
客戶端在DNS請求報文中申請使用的是遞歸查詢(也就是RD字段置1了),但在所配置的本地名稱服務器上是禁用遞歸查詢(DNS服務器通常默認支持遞歸查詢的),即在應答DNS報文頭部的RA字段置0。
附:
還有一種說法:DNS客戶端和本地名稱服務器是遞歸,而本地名稱服務器和其餘名稱服務器之間是迭代。
哪一個是對的啊?仍是說兩個實際上是一個意思??
參考連接: