DNS域名解析過程(詳細)
域名伺服器
- 根域名伺服器(
Root name server
):根域名伺服器是最高層次的域名伺服器。所有的根域名伺服器都知道所有的頂級域名伺服器的域名和IP地址。根域名伺服器是最重要的域名伺服器,因為不管是哪一個本地域名伺服器,若要對網際網路上任何一個域名進行解析(即轉換為P地址),只要自己無法解析,就首先要求助於根域名伺服器。 - 頂級域名伺服器(
Top Level Domain Server
):這些域名伺服器負責管理在該頂級域名伺服器註冊的所有二級域名。當收到DNS查詢請求時,就給出相應的回答(可能是最後的結果,也可能是下一步應當找的域名伺服器的IP地址)。 - 許可權域名伺服器(
Authoritative name server
- 本地域名伺服器(
Local name server
):當一臺主機發出DNS查詢請求時,這個查詢請求報文就傳送給本地域名伺服器,首先在此伺服器中進行ip解析。每一個網際網路服務提供者ISP,或一個大學,甚至一個大學裡的系,都可以擁有一個本地域名伺服器。
域名解析過程
查詢方式:
-
主機向本地域名伺服器的查詢一般都是採用
遞迴查詢(recursive query)
。遞迴查詢:如果主機所詢問的本地域名伺服器不知道被查詢域名的IP地址,那麼本地域名伺服器就以DNS客戶的身份,向其他根域名伺服器繼續發出查詢請求報文(即替該主機繼續查詢),而不是讓該主機自己進行下一步的查詢。因此,遞迴查詢返回的查詢結果或者是所要查詢的IP地址,或者是報錯,表示無法查詢到所需的IP地址。
-
本地域名伺服器向根域名伺服器的查詢通常是採用
迭代查詢(Iterative query)
。迭代查詢:當根域名伺服器收到本地域名伺服器發出的迭代查詢請求報文時要麼給出所要查詢的IP地址,要麼告訴本地域名伺服器:“你下一步應當向哪一個域名伺服器進行查詢”。
然後讓本地域名伺服器進行後續的查詢(而不是替本地域名伺服器進行後續的查詢)。根域名伺服器通常是把自己知道的頂級域名伺服器的IP地址告訴本地域名伺服器,讓本地域名伺服器再向頂級域名伺服器查詢。
頂級域名伺服器在收到本地域名伺服器的查詢請求後,要麼給出所要查詢的IP地址,要麼告訴本地域名伺服器下一步應當向哪一個許可權域名伺服器進行查詢,本地域名伺服器就這樣進行迭代查詢。
最後,知道了所要解析的域名的IP地址,然後把這個結果返回給發起查詢的主機。當然,本地域名伺服器也可以採用遞迴查詢,這取決於最初的查詢請求報文的設定是要求使用哪一種查詢方式。
查詢流程:
假定域名為 m.xyz.com 的主機想知道另一臺主機(域名為y.abc.com)的IP地址,圖(a)就是所有的查詢步驟
-
主機 m.xyz.com 先向其本地域名伺服器 dns xyz.com 進行遞迴查詢。
-
本地域名伺服器採用迭代查詢。它先向一個根域名伺服器查詢。
-
根域名伺服器告訴本地域名伺服器,下一次應查詢的頂級域名伺服器 dns.com的IP地址。
-
本地域名伺服器向頂級域名伺服器 dns.com進行查詢。
-
頂級域名伺服器 dns.com告訴本地域名伺服器,下一次應查詢的許可權域名伺服器dns.abc con的IP地址。
-
本地域名伺服器向許可權域名伺服器 dns.abc.com進行查詢
-
許可權域名伺服器 dns.abc.com告訴本地域名伺服器,所查詢的主機的IP地址。
-
本地域名伺服器最後把查詢結果告訴主機 m.xyz.com
以上 8 個步驟總共要使用 8 個UDP使用者資料報的報文。本地域名伺服器經過三次迭代査詢後,從許可權域名伺服器dns:abc.com得到了主機y.abc.com的IP地址,最後把結果返回給發起查詢的主機 m.xyz.com
圖(b)是本地域名伺服器採用遞迴查詢的情況
在這種情況下,本地域名伺服器只需向根域名伺服器查詢一次,後面的幾次查詢都是在其他幾個域名伺服器之間進行的整個的查詢也是使用8個UDP報文
提高DNS查詢效率
為了提高DNS查詢效率,並減輕根域名伺服器的負荷和減少網際網路上的DNs查詢報文數量,在域名伺服器中廣泛地使用了快取記憶體(有時也稱為快取記憶體域名伺服器)
-
快取記憶體用來存放最近查詢過的域名以及從何處獲得域名對映資訊的記錄。
- 例如,在圖(a)的查詢過程中,若在不久前已經有使用者查詢過域名為y.abc.com的IP地址,那麼本地域名伺服器就不必向根域名伺服器重新查詢y.abc.com的IP地址,而是直接把快取記憶體中存放的上次査詢結果(即y.abc.com的P地址)告訴使用者。
- 假定本地域名伺服器的快取中並沒有y.abc.com的P地址,而是存放著頂級域名伺服器dns.com的IP地址,那麼本地域名伺服器也可以不向根域名伺服器進行查詢,而是直接向com頂級域名伺服器傳送查詢請求報文。
-
由於名字到地址的繫結並不經常改變,為保持快取記憶體中的內容正確,域名伺服器應為每項內容設定計時器並處理超過合理時間的項
-
不但在本地域名伺服器中需要快取記憶體,在主機中也很需要。許多主機在啟動時從本地域名伺服器下載名字和地址的全部資料庫,維護存放自己最近使用的域名的快取記憶體,並且只在從快取中找不到名字時才使用域名伺服器。