一、什么是DNS
DNS全稱為Domain Name System,即域名系統,其作用就是將我們經常使用的“網址”解析為IP地址。
在互聯網上通信需要借助于IP地址,但人類對于數字的記憶能力遠不如文字,那么將IP地址轉換成容易記憶的文字是個好辦法,可是計算機只能識別0、1代碼,這時就需要一種機制來解決IP地址與主機名的轉換問題。
早期由于網絡上的主機數量有限,主機名和IP的解析借助于hosts文件即可完成,Linux中此文件一般存放路徑為/etc/hosts,在此文件中手動記錄每個主機名與其IP的對應關系;但hosts文件的內容不能自動更新,一旦主機名或IP地址發生變化,需要手動對每一臺主機進行更新。
隨著互聯網的發展,網絡上可供人們訪問的網站越來越多,hosts文件已經不能滿足需求;為了解決此問題,伯克利大學研究出了一套系統,被稱為BIND(Berkeley Internet Name Domain),也就是現在流行的DNS。
DNS利用樹形目錄結構,將主機名的管理分配給不同的層級,這樣可以實現更加快速的完成主機名的查找,修改主機名解析時也更加方便。
二、相關概念
1、域
TLD:Top Level Domain (頂級域名)
組織域:.com, .org, .net, .edu,.gov,.mil,.cc,…
國家域:.cn, .us, .tw, .iq,…
反向域: .in-addr-arpa
上面提到過,DNS采用分級的授權管理機制,其結構如下所示:
根域與一級域由IANA直接管理。
2、FQDN
FQDN全稱為Fully Qualified Domain Name,即完全合格域名。
FQDN由兩個部分組成:主機名和域名。因為DNS是逐級管理的,所以在不同的層級中主機名與域名也是不同的;以www.google.com為例,在第二層中,.com就是域名,google就是主機名,而到了第三層中,.google.com就成了域名,www就成了主機名。
注意:主機名與域名并不是依據"."來劃分的,主機名中也可以包含"."號的,主要還是要根據域名的注冊情況來劃分。
3、正向解析
從FQDN轉換為IP地址稱為正向解析。
4、反向解析
從IP地址轉換為FQDN稱為反向解析。
5、區域
正向解析或反向解析中,每個域的記錄就是一個區域。
三、DNS的解析庫
DNS的主要作用是進行主機名的解析。
解析:根據用戶提供一種名稱,去查詢解析庫,以得到另一種名稱。
正向解析與反向解析使用不同的解析庫。
正向解析庫:
資源記錄:rr(resource record)
有類型的概念;用于此記錄解析的屬性。
SOA:Start of Authority,起始授權記錄,一個區域文件只能有一個。
NS:Name Server,可以有多個。
MX:Mail eXchange,郵件交換器。標明域內的郵件服務器,MX記錄有優先級屬性(0-99);數字越小,優先級越高。
A:FQDNàIP,專用于正向解析庫。
PTR:IPàFQDN,專用于反向解析庫。
AAAA:FQDNàIPv6,專用于正向解析庫。
CNAME:Canonical Name,正式名稱。
解析庫文件同步的過程:區域傳送(單方向傳送)
完全區域傳送:axfr
將整個區域傳送到各服務器。
增量區域傳送:ixfr
只將區域有改動的記錄傳送到各服務器。
四、DNS的查詢過程
DNS采用兩種查詢機制:遞歸和迭代。
客戶端向DNS服務器發起查詢請求,DNS服務器搜索本地解析庫沒有結果,于是向根域發起查詢請求,根域告訴DNS服務器.com服務器上有它需要的資源,DNS服務器又向.com服務器發起查詢請求,結果被告知.google.com服務器上有它想要的結果,最后終于在.google.com服務器上找到了解析記錄,并返回給了客戶端。
在上面的查詢過程中,客戶端只發起了一次請求,并得到了最后的結果,這種查詢方式被稱為遞歸。
而DNS服務器在查詢過程中不停的發起請求,直到找到想要的結果,這種查詢方式被稱為迭代。
這就好比你想知道某日本微電影女星的健康狀況,你去問了小A,雖然小A也不知道,但他好面子想表現,于是他向小B咨詢,小B讓他問問小C,小C讓他利用翻墻軟件去日本的網站上去看看,最后終于知道了答案并將告訴了你,在這個求知過程中你向小A發起的詢問就是遞歸的,對于你來說是最省心,而對于小A來說是比較悲催的;小A的發起查詢就是迭代的,對于小A來說是比較辛苦的,但對于小B、小C來說是基本上沒什么工作量的。
注意:根不會為任何請求遞歸。
DNS服務器并不需要在客戶端每次發起請求時都執行迭代查詢,DNS服務器會將之前的查詢結果在本地存儲一份,如果客戶端再次請求此資源,可以馬上做出響應,這個存儲空間稱為本地DNS緩存。
另外我們可能還經常會聽到兩個概念權威DNS服務器和非權威應答。
權威DNS服務器說的容易理解一點,就是如果本地DNS的配置文件中寫明了FQDN與IP的對應關系的,并授權管理這個域時,那么就稱這臺DNS服務器是該域的權威DNS服務器。
客戶端得到的DNS查詢結果是從本地DNS緩存中獲得的,那么稱這個解析結果為非權威應答;非權威應答的結果不一定是正確的,有可能權威DNS服務器上記錄已修改,而緩存中還是未更新的記錄。
五、DNS的查詢順序
1、本地hosts文件
2、本地DNS緩存
3、本地DNS服務器
4、發起迭代查詢
六、DNS使用的端口號
DNS協議使用udp/tcp的53端口提供服務,客戶端向DNS服務發起請求時,使用udp的53端口;DNS服務器間進行區域傳送的時候使用TCP的53端口。
七、DNS服務器類型
1、主DNS服務器
為客戶端提供域名解析的主要區域,主DNS服務器宕機,會啟用從DNS服務器提供服務。
2、從DNS服務器
主服務器DNS長期無應答,從服務器也會停止提供服務。
主從區域之間的同步采用周期性檢查+通知的機制,從服務器周期性的檢查主服務器上的記錄情況,一旦發現修改就會同步,另外主服務器上如果有數據被修改了,會立即通知從服務器更新記錄。
3、緩存服務器
服務器本身不提供解析區域,只提供非權威應答。
4、轉發服務器
當DNS服務器的解析區域(包括緩存)中無法為當前的請求提供權威應答時,將請求轉發至其它的DNS服務器,此時本地DNS服務器就是轉發服務器。
原創文章,作者:petmaster,如若轉載,請注明出處:http://www.www58058.com/3760