應用層協議:DNS域名系統

zyhmz發表於2018-05-31

域名系統概述
域名系統(DNS)是一種用於TCP/IP應用程式中的分散式系統,它提供主機名字和IP地址之間的轉換以及有關電子郵件的選路資訊。這裡提到的分散式是指在Internet上的單個站點不能擁有所有的資訊。每個站點(如大學中的系,校園,公司,或者公司中的部門)保留它自己的資訊資料庫,並執行一個伺服器程式供Internet上的其他系統(客戶程式)查詢。

從應用的角度來說,對DNS的訪問是通過一個地址解析器(resolver)來完成的。在Unix主機中,該解析器主要是通過兩個庫函式gethostbyname和gethostbyaddr來訪問的。解析器並不像TCP/IP協議那樣是作業系統的核心,在這裡需要指出一個基本的概念:在一個應用程式請求TCP開啟一個連線或者使用UDP傳送一個資料之前,必須將一個主機名轉換為一個IP地址。

因特網的域名結構
由於因特網的使用者數量較多,所以因特網在命名時採用的是層次樹狀結構的命名方法。任何一個連線在因特網上的主機或路由器,都有一個唯一的層次結構的名字,即域名(domain name)。這裡,“域”(domain)是名字空間中一個可被管理的劃分。
這裡寫圖片描述
這是中央電視臺用於手法電子郵件的計算機的域名,它由三個標號組成,其中標號com是頂級域名,標號cctv是二級域名,標號mail是三級域名。
DNS規定,域名中的標號都有英文和數字組成,每一個標號不超過63個字元(為了記憶方便,一般不會超過12個字元),也不區分大小寫字母。標號中除連字元(-)外不能使用其他的標點符號。級別最低的域名寫在最左邊,而級別最高的字元寫在最右邊。由多個標號組成的完整域名總共不超過255個字元。DNS既不規定一個域名需要包含多少個下級域名,也不規定每一級域名代表什麼意思。各級域名由其上一級的域名管理機構管理,而最高的頂級域名則由ICANN進行管理。用這種方法可使每一個域名在整個網際網路範圍內是唯一的,並且也容易設計出一種查詢域名的機制。

(1)國家頂級域名nTLD:採用ISO3166的規定。如:cn代表中國,us代表美國,uk代表英國,等等。國家域名又常記為ccTLD(cc表示國家程式碼contry-code)。

(2)通用頂級域名gTLD:最常見的通用頂級域名有7個,即:com(公司企業),net(網路服務機構),org(非營利組織),int(國際組織),gov(美國的政府部門),mil(美國的軍事部門)。

(3)基礎結構域名(infrastructure domain):這種頂級域名只有一個,即arpa,用於反向域名解析,因此稱為反向域名。(2)通用頂級域名gTLD:最常見的通用頂級域名有7個,即:com(公司企業),net(網路服務機構),org(非營利組織),int(國際組織),gov(美國的政府部門),mil(美國的軍事部門)。

這裡寫圖片描述

如果採用上述的樹狀結構,每一個節點都採用一個域名伺服器,這樣會使得域名伺服器的數量太多,使域名伺服器系統的執行效率降低。所以在DNS中,採用劃分割槽的方法來解決。

一個伺服器所負責管轄(或有許可權)的範圍叫做區(zone)。各單位根據具體情況來劃分自己管轄範圍的區。但在一個區中的所有節點必須是能夠連通的。每一個區設定相應的許可權域名伺服器,用來儲存該區中的所有主機到域名IP地址的對映。總之,DNS伺服器的管轄範圍不是以“域”為單位,而是以“區”為單位。區是DNS伺服器實際管轄的範圍, 區 <= 域。

下圖是區的不同劃分方法的舉例。假定abc公司有下屬部門x和y,部門x下面有分三個分佈們u,v,w,而y下面還有下屬部門t。圖a表示abc公司只設一個區abc.com。這是,區abc.com和域abc.com指的是同一件事。但圖b表示abc公司劃分為兩個區:abc.com和y.abc.com。這兩個區都隸屬於域abc.com,都各設定了相應的許可權域名伺服器。不難看出,區是域的子集。

這裡寫圖片描述

下圖是以上圖b中abc公司劃分的兩個區為例,給出了DNS域名伺服器樹狀結構圖。這種DNS域名伺服器樹狀結構圖可以更準確地反映出DNS的分散式結構。圖中的每一個域名伺服器都能夠部分完成域名到IP地址的解析。當某個DNS伺服器不能進行域名到IP地址的轉換時,它就會設法找因特網上別的域名伺服器進行解析。

從下圖可以看出,因特網上的DNS伺服器也是按照層次安排的。每一個域名伺服器只對域名體系中的一部分進行管轄。根據域名伺服器所起的作用,可以把域名伺服器劃分為下面四種不同的型別。

根域名伺服器:最高層次的域名伺服器,也是最重要的域名伺服器。所有的根域名伺服器都知道所有的頂級域名伺服器的域名和IP地址。不管是哪一個本地域名伺服器,若要對因特網上任何一個域名進行解析,只要自己無法解析,就首先求助根域名伺服器。所以根域名伺服器是最重要的域名伺服器。假定所有的根域名伺服器都癱瘓了,那麼整個DNS系統就無法工作。需要注意的是,在很多情況下,根域名伺服器並不直接把待查詢的域名直接解析出IP地址,而是告訴本地域名伺服器下一步應當找哪一個頂級域名伺服器進行查詢。

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

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

本地域名伺服器:本地伺服器不屬於下圖的域名伺服器的層次結構,但是它對域名系統非常重要。當一個主機發出DNS查詢請求時,這個查詢請求報文就傳送給本地域名伺服器。這個DNS域名伺服器就是基本就是部署在本機上。

這裡寫圖片描述

域名的解析過程

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

迭代查詢:本地域名伺服器向根域名伺服器的查詢的迭代查詢。迭代查詢的特點:當根域名伺服器收到本地域名伺服器發出的迭代查詢請求報文時,要麼給出所要查詢的IP地址,要麼告訴本地伺服器:“你下一步應當向哪一個域名伺服器進行查詢”。然後讓本地伺服器進行後續的查詢。根域名伺服器通常是把自己知道的頂級域名伺服器的IP地址告訴本地域名伺服器,讓本地域名伺服器再向頂級域名伺服器查詢。頂級域名伺服器在收到本地域名伺服器的查詢請求後,要麼給出所要查詢的IP地址,要麼告訴本地伺服器下一步應當向哪一個許可權域名伺服器進行查詢。最後,知道了所要解析的IP地址或報錯,然後把這個結果返回給發起查詢的主機。
下面來舉一個迭代查詢的例子,因為我們一般用得比較多的是迭代查詢的例子。假定域名為m.xyz.com的主機想知道另一個主機y.abc.com的IP地址。例如,主機m.xyz.com打算髮送郵件給y.abc.com。這時就必須知道主機y.abc.com的IP地址。下面是上圖a的幾個查詢步驟:

1.主機m.abc.com先向本地伺服器dns.xyz.com進行遞迴查詢。

2.本地伺服器採用迭代查詢。它先向一個根域名伺服器查詢。

3.根域名伺服器告訴本地伺服器,下一次應查詢的頂級域名伺服器dns.com的IP地址。

4.本地域名伺服器向頂級域名伺服器dns.com進行查詢。

5.頂級域名伺服器dns.com告訴本地域名伺服器,下一步應查詢的許可權伺服器dns.abc.com的IP地址。

6.本地域名伺服器向許可權域名伺服器dns.abc.com進行查詢。

7.許可權域名伺服器dns.abc.com告訴本地域名伺服器,所查詢的主機的IP地址。

8.本地域名伺服器最後把查詢結果告訴m.xyz.com。

相關文章