1. 程式人生 > >DNS伺服器原理介紹(一)

DNS伺服器原理介紹(一)

DNS(Domain Name System,域名系統),因特網上作為域名和IP地址相互對映的一個分散式資料庫,能夠使使用者更方便的訪問網際網路,而不用去記住能夠被機器直接讀取的IP數串。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。DNS協議執行在UDP協議之上,使用埠號53。

域名

在講解DNS之前,首先粗略的說一下域名這個東西,比如說我們在用瀏覽器訪問網址的時候,我們輸入的網站的地址就是一個域名,例如 www.google.com,但其實我們知道我們標誌網際網路中的每一個機器都是有一個IP地址的,我們若需要訪問一個網站的伺服器,實際上是需要輸入該網站的IP地址來進行訪問的,但是IP地址往往難以記憶,IPv4尚且難記,IPv6就更不用說了,所以我們就通過使用域名來對其進行管理,但是在訪問的時候,系統底層還是通過ip地址來進行訪問的,域名和IP地址直接的轉換就是通過DNS伺服器來完成的。

nsswitch框架

域名簡單瞭解過了,再來說一說nsswitch框架這個東東。

nsswitch(name service switch configuration,名稱服務切換配置),規定通過哪些途徑以及按照什麼順序來查詢特定型別的資訊。還可以指定某個方法奏效或失效時系統將採取什麼動作,是一種通用框架,與各種型別儲存進行互動的公共模組化的實現。nsswitch是Linux中的一種解析框架,負責在程式跟儲存方式之間做了一層對接。讓使用者可以更好地選擇儲存方式,如把使用者名稱解析為UID,服務解析為PORT,域名解析為IP等。這些堆成對映解析的儲存方式可以有多種,如nis,ldap,file,mysql等。而nsswitch這種框架就是提供給使用者可以方便更換儲存方式的;比如預設的使用者名稱和密碼等配置預設在/etc/passwd檔案中,但是使用者可以選項把使用者和密碼儲存在ldap或mysql中,而上層只要通過nsswitch就框架編寫的程式,在用到系統使用者時就不需要關心這些賬號密碼儲存在哪裡了(不需要變動程式),由nsswitch這個中間層來搞定了。在nsswitch的配置檔案/etc/nsswitch.conf中有這麼一行語句,”hosts: files dns“,就表示域名解析時先找本機的/etc/hosts檔案然後再找dns伺服器。

需要詳細瞭解可以看/etc/nsswitch.conf配置檔案,nsswitch.conf中的每一行配置都指明瞭如何搜尋資訊,每行配置的格式如下:

Info: method[[action]] [method[[action]]…]

其中,info指定該行所描述的資訊的型別,method為用來查詢該資訊的方法,action是對前面的method返回狀態的響應。action要放在方括號裡。當需要提供nsswitch.conf檔案所描述的資訊的時候,系統將檢查含有適當info欄位的配置行。它按照從左向右的順序開始執行配置行中指定的方法。在預設情況下,如果找到期望的資訊,系統將停止搜尋。如果沒有指定action,那麼當某個方法未能返回結果時,系統就會嘗試下一個動作。有可能搜尋結束都沒有找到想要的資訊。

DNS伺服器的出現

20世紀70年代末,域名解析剛開始使用的都是/etc/hosts檔案來負責的,在60年代美國軍方的一個專案ARPAnet,由電話交換網路轉到TCP/IP資料交換網路(資料分組可以以多條路徑傳送且接收方收到資料並要傳送確認)。那個時候接入網際網路的只有四個主機美國加州大學的聖巴巴拉分校,洛杉磯大學,猶他州立,斯坦福研究所因為主機很少人們還是可以記住IP地址的,但是因為人最容易記憶的是字串而不是數字也隨著後來加入主機的越來越多人們發現已經記不住哪臺主機是那個IP了;因此就出來了給主機命名的概念每一臺主機起一個人們容易記憶的字串,可以人們容易記憶了而主機卻識別不了;因此域名解析出現了利用hosts檔案就可以標明主機對應的IP是什麼;人們訪問主機名而主機負責在把主機名解析為IP地址即可。

但是後來隨著網際網路主機加入的越來越多,hosts檔案已經不足以應對。因此美國就出現了一個機構IANA(現在由ICANN管理)負責管理IP和域名的轉換;如果A想要接入網路中時就找IANA申請一個IP地址和一個主機名,如果B知道A的主機名想訪問A就需要到IANA那裡通過FTP下載hosts檔案到本地更新自己的hosts檔案裡面就會有A主機主機名對應的IP地址;隨著hosts檔案越來越大IANA管理非常麻煩和使用者定時就要去IANA哪裡下載hosts檔案。時間一長這總方法是行不通的。再後來IANA就建立起了DNS負責處理使用者提交的請求幫使用者解析域名對應的IP地址。

DNS重要性

1)技術角度看

DNS解析是網際網路絕大多數應用的實際定址方式; 域名技術的再發展、以及基於域名技術的多種應用,豐富了網際網路應用和協議。

2)資源角度看

域名是網際網路上的身份標識,是不可重複的唯一標識資源; 網際網路的全球化使得域名成為標識一國主權的國家戰略資源。

域名空間結構

DNS的分散式資料庫是以域名為索引的,每個域名實際上就是一顆很大的逆向樹中的路徑,這棵逆向樹稱為域名空間。這棵樹的層次結構如下圖,和Linux檔案系統的結構非常相似。在頂端,樹有唯一的一個根域。在根下又可以有多個任意的分支,這些分支點稱為“頂級域”。而在每個頂級域下又可以有多個相同的“二級域”,而樹的深度不得超過127層。
DNS伺服器原理介紹(一)DNS伺服器原理介紹(一)

FQDN

FQDN:(Fully Qualified Domain Name)完全合格域名/全稱域名,是指主機名加上全路徑,全路徑中列出了序列中所有域成員。全域名可以從邏輯上準確地表示出主機在什麼地方,也可以說全域名是主機名的一種完全表示形式。從全域名中包含的資訊可以看出主機在域名樹中的位置。如www.baidu.com. 這個域名,分解後含義如下:

.           #表示根域
.com        #表示頂級域
baidu.com   #表示二級域
www         #表示主機名

根域:目前全世界只有13臺根伺服器,名字分別為“A”至“M”,其中10臺設定在美國,另外3臺設置於英國、瑞典和日本。

頂級域:有組織域和國家域,其中組織域有如:.com .org .net .edu .cc .info等等,國家域有:.cn .hk .jp等等。

二級域名:就是真正用於服務的,比如可以根據企業名稱自行申請試用什麼域名。

主機名:是用來標識這個域名對應的服務是什麼,如www一般用於全球資訊網,mail用於郵件,都可以隨意設定。

下圖是各個分支的表現形式:
DNS伺服器原理介紹(一)DNS伺服器原理介紹(一)

DNS伺服器規則

1) 每一個主機都知道根域在哪裡;

2) 上級必須知道下級;

3) 下級不知道上級;

4) 查詢兩段式遞迴查詢和迭代查詢;

5) 根域不迭代(根全球有13臺a-m.root-servers.net);

6) 頂級域不迭代;

7) 二級域伺服器可以只提供權威查詢不提供迭代或轉發;

DNS伺服器解析過程

1)遞迴查詢

遞迴查詢是最常見的是主機發送到本地域名伺服器的請求。當本地域名伺服器接受了客戶機的查詢請求時,本地域名伺服器將力圖代表客戶機來找到答案,而在域名伺服器執行所有工作的時候,客戶機只是等待。如果本地域名伺服器不能直接回答,則它將在域名樹中的各分 支上下遞迴搜尋來尋找答案。對於一個遞迴查詢,DNS伺服器將持續搜尋直到收到回答。這種回答可以是主機的IP地址,也可以回答“主機不存在”。不論是哪種結果,遞迴域名伺服器將把結果返回給客戶機。

2)迭代查詢(可能發出多次請求)

本地域名伺服器向根域名伺服器的查詢通常是採用迭代查詢。當根域名伺服器收到本地域名伺服器的迭代查詢請求報文時,要麼給出所要查詢的 IP 地址,要麼告訴本地域名伺服器:“你下一步應當向哪一個域名伺服器進行查詢”。然後讓本地域名伺服器進行後續的查詢。

一個域名的查詢過程解析

如DNS客戶端需要解析www.baidu.com.cn這個域名,過程如下圖:
DNS伺服器原理介紹(一)DNS伺服器原理介紹(一)

1、DNS客戶端首先找本地DNS伺服器進行域名解析,也就是自己設定的DNS地址;

2、本地DNS伺服器收到請求後直接查詢本伺服器是否有此記錄,如果有就直接返回域名對應的地址給客戶端,那麼這個域名的解析就完成了,這個就稱為一次“遞迴查詢”;

3、如果本地DNS沒有查詢到對應的記錄,那麼此DNS伺服器就會請求根域找.cn伺服器的地址(當然本地DNS伺服器也可能不找根DNS而是直接轉發到其他DNS伺服器進行域名解析,但是如果被轉發的那臺DNS伺服器不是www.baidu.com.cn的權威伺服器還是需要進行找根伺服器);

4、根伺服器接收到請求後就會去找國際域名伺服器列表,然後會返回.cn伺服器的地址給本地DNS伺服器;

5、本地DNS伺服器收到.cn伺服器地址後,就會找.cn伺服器進行頂級域.com.cn伺服器地址的解析,然後.cn伺服器會返回.com.cn伺服器的地址給本地DNS伺服器;

6、本地DNS伺服器收到.com.cn地址後,就會找.com.cn伺服器解析baidu.com.cn伺服器的地址;

7、本地DNS伺服器收到baidu.com.cn的地址後,就會找baidu.com.cn伺服器解析www.baidu.com.cn主機地址;

8、本地DNS伺服器得到www.baidu.com.cn的IP地址後,會馬上返回給客戶端並快取此域名;

9、客戶端得到IP地址後快取在本地,然後就可以通過IP地址訪問百度伺服器;

PS:在這個查詢過程中,客戶端發出的請求就是遞迴查詢,而DNS伺服器發出的請求就是迭代查詢;另外,還有一個名詞就是權威伺服器(權威應答),意思就是真正負責你的域名記錄解析的伺服器稱為權威伺服器,其他解析都不能稱為權威應答。

DNS伺服器型別

1)主DNS伺服器

主DNS伺服器就是建立了區域的DNS伺服器。這裡的區域資料是可讀可修改的。主DNS伺服器中的區域資料也稱為正本區域資料。在一個DNS服務網路中,可以建立多個主DNS伺服器,這樣可以提供DNS服務的容錯性。

2)輔助DNS伺服器

輔助DNS伺服器不建立區域,它的區域資料是從主DNS伺服器複製來的,因此,區域資料只能讀不能修改,也稱為副本區域資料。當啟動輔助DNS伺服器時,輔助DNS伺服器會和建立聯絡的主DNS伺服器聯絡,並從主DNS伺服器中複製資料。輔助DNS伺服器在工作時,它會定期地更新副本區域資料,以儘可能地保證副本和正本區域資料的一致性。輔助DNS伺服器除了可以從主DNS伺服器複製資料外,還可以從其他輔助DNS伺服器複製區域資料。

在一個區域中設定多個輔助DNS伺服器可以提供容錯,分擔主DNS伺服器的負擔,同時可以加快DNS解析的速度。

3)主控DNS伺服器

不論是主DNS伺服器還是輔助DNS伺服器,如果它向其他輔助DNS伺服器提供區域資料的複製服務,就稱為DNS伺服器是主控DNS伺服器。如DNS伺服器A向DNS伺服器B提供資料複製服務,則A就稱為主控DNS伺服器。

4)快取記憶體伺服器

快取記憶體伺服器上不存在任何區域資料,它只幫助DNS客戶機向其他DNS伺服器進行查詢,然後將查詢到的資料儲存在一份快取記憶體Cache中,響應客戶機的查詢請求。Cache-Only 伺服器只負責查詢資料,當客戶機查詢資料時,如果Cache中存在資料,則Cache可以將結果快速反饋給客戶機。

5)DNS轉發伺服器

DNS轉發伺服器是一種特殊型別的DNS伺服器。在一個DNS網路中,如果客戶機向指定的DNS伺服器解析的域名不成功,DNS伺服器就可以將客戶機的解析請求傳送給一臺DNS轉發伺服器,顧名思義,DNS轉發伺服器就是將域名請求轉發給其他DNS伺服器。