天天看點

【OS】遞歸查詢和疊代查詢了解

注:部分内容參考自https://blog.csdn.net/wyq_tc25/article/details/51679520。

一、域名系統(DNS)概述

域名系統DNS(Domain Name System)是網際網路使用的命名系統,用來把便于人們使用的機器名字轉換成為IP位址。為什麼不叫“名字”而叫“域名”呢?這是因為在這種網際網路的命名系統中使用了許多的“域(domain)”,是以就出現了“域名”這個名詞。“域名系統”明确地指明這種系統是應用在網際網路中。

IP位址是由32位的二進制數字組成的。使用者與網際網路上某台主機通信時,顯然不願意使用很難記憶的長達32位的二進制主機位址。即使是點分十進制IP位址也并不太容易記憶。相反,大家願意使用比較容易記憶的主機名字。但是,機器在處理IP資料報時,并不是使用域名而是使用IP位址。這是因為IP位址長度固定,而域名的長度不固定,機器處理起來比較困難。

因為網際網路規模很大,是以整個網際網路隻使用一個域名伺服器是不可行的。是以,早在1983年網際網路開始采用層次樹狀結構的命名方法,并使用分布式的域名系統DNS。并采用客戶伺服器方式。DNS使大多數名字都在本地解析(resolve),僅有少量解析需要在網際網路上通信,是以DNS系統的效率很高。由于DNS是分布式系統,即使單個計算機出了故障,也不會妨礙整個DNS系統的正常運作。

域名到IP位址的解析過程的要點如下:

當某一個應用需要把主機名解析為IP位址時,該應用程序就調用解析程式,并稱為DNS的一個客戶,把待解析的域名放在DNS請求封包中,以UDP使用者資料報方式發給本地域名伺服器。本地域名伺服器在查找域名後,把對應的IP位址放在回答封包中傳回。應用程式獲得目的主機的IP位址後即可進行通信。若本地域名伺服器不能回答該請求,則此域名伺服器就暫時稱為DNS的另一個客戶,并向其他域名伺服器發出查詢請求。這種過程直至找到能夠回答該請求的域名伺服器為止。此過程在後面作進一步讨論。

二、網際網路的域名結構

由于網際網路的使用者數量較多,是以網際網路在命名時采用的是層次樹狀結構的命名方法。任何一個連接配接在網際網路上的主機或路由器,都有一個唯一的層次結構的名字,即域名(domain name)。這裡,“域”(domain)是名字空間中一個可被管理的劃分。

從文法上講,每一個域名都是有标号(label)序列組成,而各标号之間用點(小數點)隔開。

【OS】遞歸查詢和疊代查詢了解

三、域名伺服器 

在很多情況下,根域名伺服器并不直接把待查詢的域名直接解析出IP位址,而是告訴本地域名伺服器下一步應當找哪一個頂級域名伺服器進行查詢。

頂級域名伺服器:負責管理在該頂級域名伺服器注冊的二級域名。

權限域名伺服器:負責一個“區”的域名伺服器。

本地域名伺服器:本地伺服器不屬于下圖的域名伺服器的層次結構,但是它對域名系統非常重要。當一個主機發出DNS查詢請求時,這個查詢請求封包就發送給本地域名伺服器。

【OS】遞歸查詢和疊代查詢了解

四、域名的解析過程 

一、主機向本地域名伺服器的查詢一般都是采用遞歸查詢。所謂遞歸查詢就是:如果主機所詢問的本地域名伺服器不知道被查詢的域名的IP位址,那麼本地域名伺服器就以DNS客戶的身份,向其它根域名伺服器繼續發出查詢請求封包(即替主機繼續查詢),而不是讓主機自己進行下一步查詢。是以,遞歸查詢傳回的查詢結果或者是所要查詢的IP位址,或者是報錯,表示無法查詢到所需的IP位址。

       二、本地域名伺服器向根域名伺服器的查詢的疊代查詢。疊代查詢的特點:當根域名伺服器收到本地域名伺服器發出的疊代查詢請求封包時,要麼給出所要查詢的IP位址,要麼告訴本地伺服器:“你下一步應當向哪一個域名伺服器進行查詢”。然後讓本地伺服器進行後續的查詢。根域名伺服器通常是把自己知道的頂級域名伺服器的IP位址告訴本地域名伺服器,讓本地域名伺服器再向頂級域名伺服器查詢。頂級域名伺服器在收到本地域名伺服器的查詢請求後,要麼給出所要查詢的IP位址,要麼告訴本地伺服器下一步應當向哪一個權限域名伺服器進行查詢。最後,知道了所要解析的IP位址或報錯,然後把這個結果傳回給發起查詢的主機。

os