什麼是域名系統DNS
一、DNS概述
我們知道使用者在與網際網路上的主機通訊時,必須知道對方的 IP 地址。但是每個 IP 地址都是由 32 位的二進位制組成,即使是十進位制的 IP 地址表示形式,使用者想要記住也是很難的一件事,況且網際網路有那麼多的主機。
網際網路中的主機通常不僅僅只有 IP 地址,還有對應的便於使用者記憶的主機名字,比如 www.baidu.com/
。產生於應用層上的域名系統 NDS(Domain Name System)就可以用來把網際網路上的主機名轉換成 IP 地址。
網際網路中的域名系統 DNS 被設計成一個層次樹狀結構的聯機分散式資料庫系統,並且採取的是客戶伺服器的方式。DNS 使大多數名字都在本地進行解析,只有少量的解析需要在網際網路通訊,因此效率很高。採取分散式的一個好處是,即使單個計算機出了故障,也不會妨礙 DNS 系統的正常執行。
域名到 IP 地址的解析是通過許多分佈在網際網路上的域名伺服器完成的。解析的主要過程如下:當一個主機中的程序需要把域名解析為 IP 地址時,該程序就會呼叫解析程式,併成為 DNS 的 一個客戶,把待解析的域名放在 DNS 的請求報中,以 UDP 使用者資料報方式傳送給本地域名伺服器。本地域名伺服器在查詢域名後,把對應的 IP 地址放在回答報文中返回。獲得 IP 地址的後主機即可進行通訊。
二、域名結構
我們通過域名樹的方式來檢視域名的結構,可以看出來,它實際上是一個倒過來的樹,最上面的是根,沒有對應的名字。因為根沒有名字,所以根下面的一級節點就是頂級域名,往下同理。我們以 www.baidu.com/
www
是三級域名,baidu
是二級域名,com
是頂級域名,各級域名之間通過 .
相連。每個網際網路上的主機域名都對應一個 IP 地址,並且這個域名在網際網路中是唯一的。
三、域名伺服器
根據域名伺服器所起到的作用,可以把域名伺服器分為四種不同的型別。
3.1根域名伺服器
根域名伺服器(root name server)是最高層次的域名伺服器,也是最重要的域名伺服器,全球共設有 13 個根域名伺服器。所有的根域名伺服器都知道所有的頂級域名伺服器的域名和 IP 地址。當其他的域名伺服器無法解析域名時,會首先求助於根域名伺服器。假如所有的根域名伺服器都掛了,那麼整個網際網路的 DNS 系統就無法工作了,因為採取的分散式結構,所以只要有一臺能夠正常工作,網際網路的 DNS 系統就不會受到影響。
3.2頂級域名伺服器(TLD)
頂級域名伺服器(top-level-domain) 負責管理在該頂級域名伺服器上註冊的所有二級域名。當收到 DNS 查詢請求時,就給出相應的回答。
3.3許可權域名伺服器
它是負責一個區的域名伺服器,當一個許可權域名伺服器沒有給出最後的查詢結果時,就會告訴發出查詢請求的 DNS 客戶,下一步應當查詢哪一個許可權域名伺服器。
3.4本地域名伺服器
本地域名伺服器(local name server)並不屬於上面圖示的伺服器層次結構,但是它在域名服務系統卻發揮著至關重要的作用。當一臺主機發出 DNS 查詢請求時,這個查詢請求報文就會發送給本地域名伺服器。每一個網際網路提供者,或者一個大學,甚至小到一個學院,都可以擁有一臺本地域名伺服器,這種域名伺服器也被稱為預設域名伺服器。我們本地網路服務連線的域名伺服器指的就是本地域名伺服器。
四、域名解析過程
域名解析查詢的方式有兩種:迭代查詢與遞迴查詢。
4.1迭代查詢
本地域名伺服器向根域名伺服器的查詢方式通常採取迭代查詢(iterative query)。迭代查詢有以下的特點:當根域名伺服器收到本地域名伺服器發出的迭代查詢請求報時,要麼給出所要查詢的 IP 地址,要麼告訴本地域名伺服器:“我這裡沒有你要的查詢結果,你需要向哪一臺域名伺服器進行查詢”。然後本地域名伺服器進行後續的查詢(不替代本地域名伺服器)。
4.2遞迴查詢
主機向本地域名伺服器的查詢一般都採用遞迴查詢(recursive query)。所謂的遞迴查詢就是:如果主機所詢問的本地域名伺服器不知道被查出來的域名的 IP 地址,那麼本地域名伺服器就以 DNS 客戶的身份,向其他根域名伺服器繼續發出查詢請求報文(替代該主機繼續查詢),而不是主機自己進行下一步的查詢。因此,遞迴查詢返回的結果要麼是所查詢的 IP 地址,要麼報錯,表示無法查到所需要的 IP。
五、DNS記錄快取
針對上面兩種方式,我們可以知道不管是遞迴查詢還是迭代查詢,都會發送 8 個 UDP 使用者資料報的報文。為了提高 DNS 的查詢效率,減輕根域名伺服器的負荷和 DNS 資料報的查詢數量,在域名伺服器中廣泛地使用了快取記憶體。快取記憶體用來存放最近查詢過的域名以及從何處獲得域名對映資訊的記錄。
假設我們要查詢www.baidu.com/
域名對應的 IP 地址,如果本地域名伺服器上有該域名對應的 IP 地址,那麼可以直接從本地域名伺服器上獲得對應的 IP 地址,而不需要到根域名伺服器上進行查詢。當本地域名伺服器查詢不到 IP 地址時,本地域名伺服器也可以不向根域名伺服器傳送請求報文,而是直接向頂級域名伺服器傳送查詢請求報文。
不僅在本地域名伺服器中有快取記憶體,在主機中也有。很多主機在啟動的時候從本地域名伺服器下載名字和地址的全部資料庫,維護存放自己使用的域名的快取記憶體,只有在快取中找不到名字時才使用域名伺服器。
參考書籍:
《計算機網路》謝希仁 著