DNS解析流程分為遞歸查詢和迭代查詢,遞歸查詢是以本地名稱服務器為中心查詢, 遞歸查詢是默認方式,迭代查詢是以DNS客戶端,也就是客戶機器為中心查詢。
先不說那么多,看兩張圖你應該就明白了。
- 遞歸:
- 迭代:
再介紹幾個概念:
本地名稱服務器
又稱Local DNS, 可以是默認的運營商提供的Local DNS 或者自己設置的DNS。
下圖是windows下默認獲取的運營商Local DNS或者 自己設置的Local DNS
權威DNS
權威 DNS 由域名解析服務商建設,提供域名管理服務,維護域名解析記錄。
權威 DNS 服務器只對自己所擁有的域名進行域名解析,對於不是自己的域名則拒絕訪問。比如,向“example.com”的權威 DNS 服務器查詢“test.com”的域名肯定會查詢失敗。
遞歸DNS
遞歸 DNS 由網絡運營商建設,提供域名查詢解析服務。遞歸 DNS 會迭代權威服務器返回的應答,直至最終查詢到的 IP 地址,將其返回給客戶端,並將請求結果緩存到本地。
遞歸 DNS 的訪問過程如下圖所示(遞歸 DNS 在圖中表示為 Local DNS):
DNS遞歸解析基本流程
(1)客戶端向本機配置的本地名稱服務器(在此僅以首選DNS服務器為例進行介紹,所配置其它備用DNS服務器的解析流程完全一樣)發出DNS域名查詢請求。
(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客戶端和本地名稱服務器是遞歸,而本地名稱服務器和其他名稱服務器之間是迭代。
哪個是對的啊?還是說兩個其實是一個意思??
參考鏈接: