上一步 回到第一頁 下一步

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伺服器位址就可以了。

DNS運作實例

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

  1. 在DNS的用戶端(Reslover)鍵入查詢主機的指令,如:
    c:\ping www.twnic.net.tw
  2. 而被指定的DNS伺服器先行查詢是否屬於該網域下的主機名稱,如果查出改主機名稱並不屬於該網域範圍,之後會再查詢快取暫存區的紀錄資料,查是否有此機名稱。
  3. 查詢後若發現快取暫存區中沒有此紀錄資料,則會取得一台根網域的其中一台伺服器,發出要找www.twnic.net.tw的Request。
  4. 在根網域中,向Root Name Server詢問,Root Name Server記錄了各Top Domain分別是由哪些DNS Server負責,所以他會回應最接近的Name Server為控制TW網域的DNS伺服主機。
  5. Root Name Server已告訴Local DNS Server哪部Name Server負責.tw這個Domain,然後Local DNS再向負責.tw這個Domain的Name Server發出找www.twnic.net.tw的Request。
  6. 在.tw這個網域中,被指定的DNS伺服器在本機上沒有找到此名稱的的紀錄,所以會回應原本發出查詢要求的DNS伺服器說最近的伺服器在哪裡?他會回應最近的主機為控制net.tw網域的DNS伺服主機。
  7. 原本被查詢的DNS伺服器主機,收到繼續查詢的IP位置後,會再向net.tw的網域的DNS Server發出尋找www.twnic.net.tw名稱搜尋的要求。
  8. net.tw的網域中,被指定的DNS Server在本機上沒有找到此名稱的記錄,所以會回覆查詢要求的DNS Server告訴他最接近的伺服器在哪裡?他就回應最接近為控制twnic.net.tw的網域的DNS主機。
  9. 原本被查詢的DNS Server,在接收到應繼續查詢的位置,在向twnic.net.tw網域的DNS Server發出尋找www.twnic.net.tw的要求,最後會在twnic.net.tw的網域的DNS Server找到www.twnic.net.tw此主機的IP。
  10. 所以原本發出查詢要求的DNS伺服器,再接收到查詢結果的IP位置後,回應回給原查詢名稱的DNS用戶端。

上一步 回到第一頁 下一步