歡迎您光臨本站 註冊首頁

IP基礎--5.DNS協定

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
http://www.study-area.net/menu1.htm

DNS的來由

如果您為您的機器設定過internet連線那麽您一定接觸過DNS了但DNS又是什麽東東呢說穿了DNS是用來幫助記憶網路地址的完全是為了遷就人類的記憶思維而設的.

DNS的全稱是Domain Name System當您連上一個網址在URL打上www.hotmail.com的時候可以說就是使用了DNS的服務了.但如果您知道這個www.hotmail.com的IP地址直接輸入209.185.243.135也同樣可以到達這個網址.其實電腦使用的只是IP地址而已(最終也是0和1啦)這個www.hotmail.com只是讓人們容易記憶而設的.因為我們人類對一些比較有意義的文字記憶(如www.hotmail.com)比記憶那些毫無頭緒的號碼(如209.185.243.135)往往容易得多.DNS的作用就是為我們在文字和IP之間擔當了翻譯而免除了強記號碼的痛苦.

假如您的電話有名字記憶功能您只需知道對方的名字就可以撥號給友人了我們可以說這電話也具備如DNS的功能了呢但是我們在網路中使用的DNS系統就是這麽簡單嗎非也雜得很呢下面就讓我們一起去探索一下DNS的奧秘

在早期的IP網路世界裡面每台電腦都只用IP地址來表示不久人們就發現這樣很難記憶於是一些UNIX的使用者就建立一個HOSTS對應表將IP和主機名字對應起來這樣用戶只需輸入電腦名字就可以代替IP來進行溝通了.如果你安裝了Linux系統在/etc下面就可以找到這個hosts檔案了在NT的系統里你也可以在winntsystem32driversetc下面找到它.不過這個HOSTS檔是要由管理者手工維護的最大的問題是無法適用於大型網路更新也是件非常頭痛的事情.這就是DNS大派用場的時候了.

DNS的結構

DNS是一個分層級的分散式名稱對應系統有點像電腦的目錄樹結構在最頂端的是一個「root」然後其下分為好幾個基本類別名稱如comorgedu等再下面是組織名稱如sonytoshibaintel等繼而是主機名稱如wwwmailftp等.因為當初internet是從美國發起的當時並沒有國域名稱但隨著後來internet的蓬勃發展DNS也加進了諸如twhkau等國域名稱.一個完整的dns名稱就好像是這樣的www.xyz.com.tw而整個名稱對應的就是一個IP地址了.



在開始的時候root下面只有六個組織類別


類別名稱 代表意思
edu 教育學術單位
org 組織機構
net 網路通訊單位
com 公司企業
gov 政府機關
mil 軍事單位


不過自從組織類別名稱開放以後各種各樣五花八門的名稱也相繼現出來了但無論如何取名的規則最好量適合網站性質.除了原來的類別資料由美國本土的NIC(Network Information Center)管理之外其它在國域以下的類別分別由該國的NIC管理.這樣的結構看起來就像這樣




在結構中各組織的DNS經過申請後由該組織或其委機構管理(通常當您申請冊一個domain域名稱的時候都要指定兩台DNS主機負責該域名的DNS管理).

DNS的運作

在我們設定IP網路環境的時候通常都要告訴每台主機關於DNS伺服器的地址(我們可以手動的在每一台主機上面設置也可以使用DHCP來設定).

下面讓我們看看DNS是怎樣運作的

當被詢問到有關本域名之內的主機名稱的時候DNS伺服器會直接做出回答
如果所查詢的主機名稱屬於其它域名的話會檢查記憶體看看有沒有相關資料
如果沒有發現則會轉向root伺服器查詢
然後root伺服器會將該域名之授權(authoritative)伺服器(可能會超過一台)的地址告知
本地伺服器然後會向其中的一台伺服器查詢並將這些伺服器名單存到記憶體中以備將來之需(省卻再向root查詢的步驟)
遠方伺服器回應查詢
將查詢結果回應給客戶並同時將結果儲存一個備份在自己的快取記憶裡面
如果在存放時間尚未過時之前再接到相同的查詢則以存放於快取記憶裡面的資料來做回應.

從這個過程我們可以看出沒有任何一台DNS主機會包含所有域名的DNS資料資料都是分散在全部的DNS伺服器中而NIC只需知道各DNS伺服器地址就可以了.



為了更好地理解一下 DNS 的運作讓我們用下圖看看查詢www.home.netman.com.tw這台主機位址的過程




在這個例子中www.home.netman.com.tw台主機的DNS對應資料是由負責home.netman.com.tw這個域名的DNS伺服器管理的.(在DNS術語中我們稱一個域名為「zone」這個zone可以是您從NIC申請回來的域名也可以是從該域名之下延伸出來的「sub-zone」).在這台DNS伺服器上面必須有一個關於home.netman.com.tw這個zone的檔案而這檔案裡面必須有一筆關於www的記錄(任何主機都是以「記錄」來表示).這個記錄可以為一個IP地址也可以以別名形式來對應一台主機名稱但無論如何所對應的主機名稱最終是要被一個IP地址所對應著就是了.

同時DNS還能提供「反查詢」(reverse lookup)功能也就是以IP來查詢主機名稱.網路上面的許多服務如FTP, IRC, WWW等等都需要到這個功能.其實DNS服務本身就必須要使用反查詢功能在設定上也必須要為每個網路建立起reverse zone.雖然有些人發覺即使沒有reverse zone也可以利用到DNS服務但其中弊端卻不容易被察覺到在這個(中文)網頁http://ns.nctu.edu.tw/Basic/WhenToUse-Rev.html上面您可以看到忽略revers zone所致一些問題.

DNS的名稱記錄

事實上DNS不僅僅是用來解釋地址用的還可以回答更多關於網路和主機的其它信息其中很重要的一個功能就是可以供郵件系統進行路由.這些資料通常會以不同的「記錄」名稱出現在DNS的資料檔案中.

下面讓我們參考一個Linux的DNS檔案看看這些記錄是如何表示的

;
; Zone file for siyongc.domain
;
; Then full zone file
;
$TTL 86400
@ IN SOA redhat52.siyongc.domain. netman.siyongc.domain. (
1999092801 ; serial
8H ; refresh
2H ; retry
1W ; expire
1D ) ; minimun


;
IN TXT "A test domain, created by Netman"
IN NS redhat52
IN NS debian.home.
IN MX 10 redhat52.siyongc.domain.
IN MX 20 debian.home.
;
localhost IN A 127.0.0.1

gw IN A 192.168.0.17
IN HINFO "Redhat" "MASQ"
IN TXT "The masquerade gateway to internet"

redhat52 IN A 192.168.0.17
IN MX 10 redhat52
IN MX 20 debian.home.
IN HINFO "Dell PII 266" "Linux RedHat"
www IN CNAME redhat52
mail IN CNAME redhat52
ftp IN CNAME redhat52
news IN CNAME redhat52
smtp IN CNAME redhat52

pii266 IN A 192.168.0.15
IN MX 10 redhat52.siyongc.domain.
IN MX 20 debian.home.

slware36 IN A 192.168.0.18
IN MX 10 redhat52.siyongc.domain.
IN MX 20 debian.home.

rhroute IN A 192.168.0.4
IN MX 10 redhat52.siyongc.domain.
IN MX 20 debian.home.


我們姑且不理會開頭那幾行的意思那是給DNS系統本身使用的(我將會在「學習Linux」文章裡面再詳細討論)這裡我們只是看看幾個記錄名稱而已

類別名稱 代表意思
TXT 只是一些說明文字可以用來說明主機/網路環境設定
NS 名稱伺服器也就是該zone指定的DNS伺服器名稱
MX 郵件伺服器負責經由DNS查詢進行郵件傳遞的郵件伺服器.這樣的好處是如果您要更換郵件伺服器的話只需修改DNS記錄就可以了而對方的郵件伺服器則無需理會您要使用的究竟是哪一台電腦來負責郵件交換.同時您也可以指定多台郵件伺服器來分擔郵件交換工作在MX後面的號數用來指定伺服器的使用順序數字越低越優先.
A 用來對應主機名稱和其IP地址這個記錄最常用也是最重要的記錄之一
HINFO 和TXT差不多是回答「Host Information」查詢用的
CNAME 是一個「別名」記錄可以給A記錄使用另外一個(或多個)名稱讓外面查詢.CNAME可以對應一個A記錄但不鼓勵對應另一個CNAME記錄.


AAAA 和A記錄一樣只不過對應的是IP v6 格式


分擔DNS工作

Primary(master) DNS伺服器是架設在某一個網域下被主要授權並控制所有名稱記錄的主控制伺服器管轄著所有該網域的記錄資料這些記錄資料只有primary(master)可以修改.

但如果在一個比較大型的網路中DNS伺服器就會變得很繁忙了您可以設定多個DNS來分擔master的工作但您或許不願意到每一個DNS伺服器去更新資料吧就算您願意這樣做也容易出現錯誤或資料不同步的情形.這樣您可以設定其它的伺服器為secondary (slave) DNS來master上面的記錄資料這樣其它的電腦可以被指定到不同的DNS做查詢既可以分擔master的工作資料也可以自動進行同步工作.您可以設定DNS資料同步的時間間隔在dns檔案中的Refresh設定就是了.同時您還會看到Serial當slave的上面的serial數字少於它資料就會被否則會被忽略.

驗DNS工作

當您建立好一個DNS伺服器之後除了可以直接使用命令 ping (這個會在後面章節說明)直接ping一下上面的記錄之外最好還是使用「nslookup」這個命令進行檢測或除錯(Windows9x系統並不包含此命令).下面讓我們在Linux中驗一下當您輸入nslookup之後您會看到您機器目前指定的DNS伺服器的回應

Default Server: redhat52.siyongc.domain
Address: 192.168.0.17


然後您輸入欲查詢的主機或IP地址您會看到從DNS回來的結果

> pii266.siyongc.domain
Server: redhat52.siyongc
Address: 192.168.0.17

Name: pii266.siyongc.domain
Address: 192.168.0.15

> www.hinet.net
Server: redhat52.siyongc.domain
Address: 192.168.0.17

Non-authoritative answer:
Name: w3c2.hinet.net
Address: 168.95.1.84
Aliases: www.hinet.net


這是一個標準模式下面的查詢我們可以看到不是這台DNS伺服器管理的查詢已經在 cache 裡面了會附加一個「Non-authoritative answer:」的回應信息.但如果我們先將查詢模式設為any之後再輸入同樣的主機名稱



> set q=any
> pii266.siyongc.domain
Server: redhat52.siyongc.domain
Address: 192.168.0.17

pii266.siyongc.domain preference = 20, mail exchanger = debian.home
pii266.siyongc.domain preference = 10, mail exchanger = redhat52.siyongc.domain
pii266.siyongc.domain internet address = 192.168.0.15
siyongc.domain nameserver = debian.home
siyongc.domain nameserver = redhat52.siyongc.domain
debian.home internet address = 192.168.0.2
redhat52.siyongc.domain internet address = 192.168.0.17


您就可以看到更多的資料了例如MXNS和它們的IP地址等信息.假如您使用「除錯模式」的話看到的資料還將更多

> set debug
> www.hinet.net
Server: redhat52.siyongc.domain
Address: 192.168.0.17

;; res_nmkquery(QUERY, www.hinet.net, IN, ANY)
------------
Got answer:
HEADER:
opcode = QUERY, id = 3102, rcode = NOERROR
header flags: response, want recursion, recursion avail.
questions = 1, answers = 1, authority records = 3, additional = 3

QUESTIONS:
www.hinet.net, type = ANY, class = IN
ANSWERS:
-> www.hinet.net
canonical name = w3c2.hinet.net
ttl = 76134 (21h8m54s)
AUTHORITY RECORDS:
-> hinet.net
nameserver = HNTP1.hinet.net
ttl = 162533 (1d21h8m53s)
-> hinet.net
nameserver = HNTP3.hinet.net
ttl = 162533 (1d21h8m53s)
-> hinet.net
nameserver = DNS.hinet.net
ttl = 162533 (1d21h8m53s)
ADDITIONAL RECORDS:
-> HNTP1.hinet.net
internet address = 168.95.192.1
ttl = 162533 (1d21h8m53s)
-> HNTP3.hinet.net
internet address = 168.95.192.2
ttl = 162533 (1d21h8m53s)
-> DNS.hinet.net
internet address = 168.95.1.1
ttl = 162533 (1d21h8m53s)

------------
Non-authoritative answer:


www.hinet.net
canonical name = w3c2.hinet.net
ttl = 76134 (21h8m54s)

Authoritative answers can be found from:
hinet.net
nameserver = HNTP1.hinet.net
ttl = 162533 (1d21h8m53s)
hinet.net
nameserver = HNTP3.hinet.net
ttl = 162533 (1d21h8m53s)
hinet.net
nameserver = DNS.hinet.net
ttl = 162533 (1d21h8m53s)
HNTP1.hinet.net
internet address = 168.95.192.1
ttl = 162533 (1d21h8m53s)
HNTP3.hinet.net
internet address = 168.95.192.2
ttl = 162533 (1d21h8m53s)
DNS.hinet.net
internet address = 168.95.1.1
ttl = 162533 (1d21h8m53s)


另外您還可以用 set q=mx 或 set q=ptr 等模式來查詢特定的記錄也可以用 ls 後接 domain name 來查看某個 domain 的所有主機記錄.善用 nslookup 我們可以找到許多 DNS 的信息而當有問題發生的時候這個工具就變得非常有用了.

同時在設定 DNS 的時候需要比較慎密的設計以免不實資料的濫.管理好 DNS 系統是每一個網路管理員應盡的義務來的.詳細的 DNS 設定我會在「學習 Linux」裡面討論.

好了關於DNS的討論暫時介紹到這裡相信上面說的這些也夠您消化的了


[火星人 ] IP基礎--5.DNS協定已經有498次圍觀

http://coctec.com/docs/linux/show-post-57624.html