2009年3月15日 星期日

DNS 如何連作查詢

DNS運作原理
DNS分為Client和Server,Client扮演發問的角色,也就是問Server 一個Domain Name,而Server必須要回答此Domain Name的真正IP地址。而當地的DNS先會查自己的資料庫。如果自己的資料庫沒有,則會往該DNS上所設的的DNS尋問,依此得到答案之後,將收到的答案存起來,並回達客戶。真正DNS的運作:有兩種詢問方法,Recursive和Iterative兩種。前面是由DNS代理去問,問的方法是用Iterative方式,後者是由本機直接做Iterative式的詢問。

Recursive(遞迴式)
DNS用戶端向DNS Server的查詢模式,這種方式是將要查詢的封包送出去問,就等待正確名稱的正確回應,這種方式只處理回應回來的封包是否是正確回應或是說是找不到該名稱的錯誤訊息。問的方式是用Iterative的方式。

Iterative(交談式)
DNS Server間的查詢模式,由Client端或是DNS Server上所發出去問,這種方式送封包出去問,所回應回來的資料不一定是最後正確的名稱位置,但也不是如上所說的回應回來是錯誤訊息,也許是另外一台DNS的位址(當該台DNS沒有答案時,會傳回一台 "權威授權者"DNS的位址)。再由Client或DNS自己向" 權威授權者"DNS詢問。 一般說來,name resolver對local DNS server都是recursive query,而DNS server之間的 query多是iterative。大部份的DNS server都可以接受recursive和iterative兩種query方式,但是考量負載問題,root name server只接受iterative query。

DNS運作步驟

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

1.客戶端向伺服器提出查詢項目﹔
2.當被詢問到有關本域名之內的主機名稱的時候,DNS伺服器會直接做出回答﹔
3.如果所查詢的主機名稱屬於其它域名的話,會檢查快取記憶體(Cache),看看有沒有相關資料﹔
4.如果沒有發現,則會轉向root伺服器查詢﹔
5.然後root伺服器會將該域名之下一層授權(authoritative)伺服器的位址告知(可能會超過一台)﹔
6.本地伺服器然後會向其中的一台伺服器查詢,並將這些伺服器名單存到記憶體中,以備將來之需(省卻再向root查詢的步驟)﹔
7.遠方伺服器回應查詢﹔
8.若該回應並非最後一層的答案,則繼續往下一層查詢,直到獲得客戶端所查詢的結果為止﹔
9.將查詢結果回應給客戶端,並同時將結果儲存一個備份在自己的快取記憶裡面﹔
10.如果在存放時間尚未過時之前再接到相同的查詢,則以存放於快取記憶裡面的資料來做回應。

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

http://dns-learning.twnic.net.tw/dns/03opDNS.html

沒有留言:

張貼留言