初識DNS服務器

    我們都知道IP可以確定一臺計算機在Internet上的唯一地址,但人對數字的感知有限,因此爲了方便網絡中計算機的訪問,便給每臺計算機和IP建立一個映射關係,訪問主機時只需輸入主機名就可以了,就像我們的***一樣,日常生活中,總不能用***號去稱呼每一個人吧。早期TCP/IP網絡中,這種名稱解析工作通過hosts文件完成,但hosts文件是一個純文本文件,在小型網絡中,還可以滿足人們的使用,但在Internet中,如果用hosts文件維護所有主機和IP之間的關係,顯然是不合理的,因此DNS便應運而生。

一、DNS是什麼?

    DNS是Internet的一項核心服務,採用層級(樹狀)和劃分域的方式管理各主機。最早被保羅提出時,我們輸入的主機地址最後必須加一個小數點.結尾,經過後期的優化,這個小數點可以省略。這個小數點就是根域,通過頂級域、二級域、主機名構成一個倒置的樹狀結構,組織成一個域名空間。到目前爲止,全球共有13個根域,由Internet名稱註冊授權機構管理。頂級域分爲三種類型:組織域,如:.com、.net、.org、.gov、.edu等;國家域:.cn、.us等;反向域:.in-addr-arpa,這些域不允許個人或組織註冊。二級域是指那些註冊到個人、組織或公司的名稱,相當於承包到戶。而主機名是最最底層的域名空間。由主機名加DNS後綴共同組成FQDN(Full Qualified Domain Name,完全合格域名空間),例如域名www.51cto.com,www是其主機名,51cto.com是其DNS後綴。採用這種層級結構可以有效的消除名稱衝突

wKioL1SIDKbTOP7cAAGSBSDRXw0276.jpg

二、DNS的工作方式(C/S)

    那麼DNS服務是如何工作的呢?當我們在地址欄中輸入一個地址時,計算機首先查詢的是hosts文件(/etc/hosts),當找不到主機時,會去本地dns緩存去查找,無果後,再請求DNS服務器,

    DNS服務器是如何工作的呢?當DNS服務器收到查詢請求時,會遍歷其數據庫文件,最後要麼響應一個查詢成功的回覆給客戶端,要麼返回查詢失敗的回覆;這便是遞歸查詢。當DNS服務器在自己的緩存區找不到主機時會直接請求根域,由根域響應其子域的IP,子域繼續查詢它的下一級域,直到找到擁有該域名的DNS服務器,或者查詢超時爲止,這種查詢便是迭代查詢。無論是DNS客戶端還是DNS服務器端都會將查詢結果記錄在本地dns緩存中,方便下次訪問主機。

wKioL1SIMkGDlcCxAAFREgBzhJQ305.jpg

當我們訪問www.51cto.com時,將該域名的查詢提交給DNS服務器,DNS服務器沒有查詢到該域名的記錄時,會直接將該查詢提交給根服務器,要求解析(①),根接收該查詢請求,將.com的DNS服務器的IP回覆給DNS服務器(②),則DNS服務器將該域名提交給.com域的服務器要求其解析(③),.comDNS服務器會將51cto.com域的DNS服務器IP地址回覆給DNS服務器(④),則DNS服務器將該域名的查詢請求再提交給51.cto域的DNS服務器(⑤),如果此服務器找到了www.51cto.com的記錄,將其IP回覆給DNS服務器;如果查無此記錄,則返回查詢失敗的結果給DNS服務器(⑥)。由DNS服務器將查詢到的IP或查詢失敗的消息返回給客戶端即我們。

    每個DNS服務器在提供域名查詢服務時,都是基於自己的區域解析數據庫,該數據庫包含了DNS區域資源信息的資源記錄(Resource Record,RR)

    資源記錄的語法格式如下:

    domain [ttl] IN RR_TYPE RR_DATA

    DNS區域數據庫的資源記錄常見的有以下幾種:

    SOA:起始授權記錄,定義了該區域的全局參數,進行整個區域的管理設置,一個區域有且只有一條SOA記錄

    SOA示例:

    test.com. 600 IN SOA ns.test.com. yzq0535.163.com (
                                    2014120901;序列號 Serial
                                    3H;刷新頻率 Refresh
                                    1H;失敗重新嘗試頻率 Retry
                                    1W;失效時間 Expire
                                    1H;緩存時間 TTL )

    SOA後面跟的七個參數的意義分別是:

ns.test.com----Master DNS服務器主機名:意爲在該區域,ns.test.com爲test.com的主要DNS服務器

yzq0535.163.com----管理員的郵箱:由於@符號在區域解析數據庫文件中有特殊意義,因此郵箱的@用.替代。

2014120901---序列號,表示數據庫文件的新舊,在有主從(Master/Slave)DNS服務器的時候,一旦修改了主DNS服務器上的區域解析數據庫文件時,一定要將此序列號加1,以便使Slave節點能更新自己的數據庫文件。

3H---3小時之後刷新,Slave根據此值向Master請求數據庫文件更新。

1H---1小時後重試,當Slave連接不上Master時,多長時間嘗試重新連接Master。每隔3小時Slave主動連接Master,若連接不成功則接下來嘗試連接時間會變成會每隔1小時。

1W---1周後失效,當Slave嘗試連接一直失敗到達一週時間,Slave將不再更新,只能等待系統管理員處理。

1H--緩存時間,在這個區域解析數據庫文件中,每筆RR記錄都沒到之前聲明的TTL時間的話,以此值爲主。


    NS:域名服務器記錄,記錄了某區域的授權服務器,一個區域至少有一條NS記錄

    NS示例:

test.com. IN NS ns1.test.com.
test.com. IN NS ns2.test.com.

NS記錄通常跟A記錄相伴隨。


    A:地址記錄,將一個FQDN映射成IP地址,若查到某域名的A記錄有多條,DNS服務器會基於“輪詢”的方式給多個用戶進行響應

    A示例:

ns1.test.com. IN A 1.1.1.1
ns2.test.com. IN A 2.2.2.2
www.test.com. IN A 1.1.1.1
mx1.test.com. IN A 3.3.3.3
mx01.test.com. IN A 4.4.4.4


    PTR:反向地址記錄,將一個IP映射到FQDN

    PTR示例:

1.1.1.1.in-addr.arpa. IN www.test.com.
2.2.2.2.in-addr-arpa. IN www.test.com.


    MX:郵件服務器記錄,一個區域解析數據庫文件中可以有多個MX記錄,表示所有向這個區域發送的郵件,要送到後面對應的郵件服務器才行,當郵件服務器有多臺時,按優先級排列,數字越小,優先級越高(0-99)

    MX示例:

 test.com. IN MX 1 mx1.test.com.
 test.com. IN MX 8 mx01.test.com.


    CNAME:別名記錄,可以定義當客戶端錯誤域名請求時自動更正錯誤,如wwww.51cto.com轉換成www.51cto.com

    CNAME示例:

wwww.test.com. IN CNAME www.test.com.
www1.test.com. IN CNAME www.test.com.


    資源記錄必須從一行的第一列開始。其排列格式任意,但通常是SOA記錄、NS記錄、其他記錄(A記錄or PTRor CNAME),並使用“;”作註釋。

    其成功查詢的響應結果也有兩種:權威回答:客戶端請求的域名是該DNS服務器負責的域;非權威回答:DNS服務器在其緩存文件中找到的A記錄。

三、DNS服務器的類型

    爲提供更優質的DNS服務,對同一區域解析的DNS服務器通常會設置多個,主DNS服務器:負責某區域解析,對區域所有的資源記錄更新都通過此服務器進行;從DNS服務器:也是負責某區域的DNS服務解析,但不負責更新操作,只能從該區域的主服務器或其他從服務器同步其區域數據庫文件;DNS緩存服務器:不負責任何區域的權威應答,僅用於幫助指向此服務器的客戶端作遞歸查詢。

    那麼主從(Master/Slave)DNS服務器是如何協調工作的呢?每個區域數據庫文件定義了區域數據庫版本號serial、刷新時間refresh、重試時間retry、過期時間expire和否定應答的TTL值。從DNS服務器在達到了刷新時間間隔之後,就會發起同步請求到主DNS服務器,主DNS服務器則響應serial給從DNS服務器,從DNS服務器將自己的serial與主DNS服務器的serial做比較,如果發現主的serial大於自己,意味着主服務器的區域數據庫文件更新了,因此請求同步。這種協調存在問題,萬一主DNS服務器上有更新,恰巧相應的客戶端DNS請求發送到了從服務器,這豈不是坑了客戶端嗎?還好DNS服務的notify機制巧妙的處理了這個問題,主DNS服務器爲讓從DNS服務器及時更新區域數據庫文件,會主動觸發從服務器發起更新請求,即使從DNS服務器的刷新時長未到。因此其協調機制總結爲:週期性檢查+通知。

四、其他(總結於《DNS與BIND (中文第四版)》)

域名,域,主機三者的關係:位於樹中葉子位置的域名通常表示單個主機,樹內部的域名既可以命名一臺主機,也可以表示一個域。

域和區的區別,域通過授權之後被分成區,一個區和一個域可以共享同一個域名,卻含不同的節點。區不含有任何在已經被授權出去的子域中的節點,如果域中某個子域沒有被授權,那麼區就包含這個子域中的域名和數據。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章