• 轉自鳥哥http://linux.vbird.org/linux_server/0350dns.php#theory
  • 透過 DNS 查詢主機名稱 IP 的流程

剛剛說過 DNS 是以類似『樹狀目錄』的型態來進行主機名稱的管理的!所以每一部 DNS 伺服器都『僅管理自己的下一層主機名稱的轉譯』而已, 至於下層的下層,則『授權』給下層的 DNS 主機來管理啦!這樣說好像很繞口,好吧!我們就以下圖來說一說原理囉:

透過 DNS 系統查詢主機名稱解譯的流程
圖 19.1-4、透過 DNS 系統查詢主機名稱解譯的流程

首先,當你在瀏覽器的網址列輸入 http://www.ksu.edu.tw 時,你的電腦就會依據相關設定 (在 Linux 底下就是利用 /etc/resolv.conf 這個檔案) 所提供的 DNS 的 IP 去進行連線查詢了。由於目前最常見的 DNS 伺服器就屬 Hinet 的 168.95.1.1 這個 DNS,所以我們就拿他來做例子吧!嗯!這個時候,hinet 的這部伺服器會這樣工作:

  1. 收到用戶的查詢要求,先查看本身有沒有紀錄,若無則向 . 查詢
    由於 DNS 是階層式的架構,每部主機都會管理自己轄下的主機名稱解譯而已。因為 hinet 並沒有管理台灣學術網路的權力, 因此就無法直接回報給用戶端。此時 168.95.1.1 就會向最頂層,也就是 . (root) 的伺服器查詢相關 IP 資訊。
     
  2. 向最頂層的 . (root) 查詢
    168.95.1.1 會主動的向 . 詢問 www.ksu.edu.tw 在哪裡呢?但是由於 . 只記錄了 .tw 的資訊 (因為台灣只有 .tw 向 . 註冊而已),此時 . 會告知『我是不知道這部主機的 IP 啦,不過,你應該向 .tw 去詢問才對,我這裡不管! 我跟你說 .tw 在哪裡吧!』
     
  3. 向第二層的 .tw 伺服器查詢
    168.95.1.1 接著又到 .tw 去查詢,而該部機器管理的又僅有 .edu.tw, .com.tw, gov.tw... 那幾部主機,經過比對後發現我們要的是 .edu.tw 的網域,所以這個時候 .tw 又告訴 168.95.1.1 說:『你要去管理 .edu.tw 這個網域的主機那裡查詢,我有他的 IP !』
     
  4. 向第三層的 .edu.tw 伺服器查詢
    同理可證, .edu.tw 只會告訴 168.95.1.1 ,應該要去 .ksu.edu.tw 進行查詢,這裡只能告知 .ksu.edu.tw 的 IP 而已。 
     
  5. 向第四層的 .ksu.edu.tw 伺服器查詢
    等到 168.95.1.1 找到 .ksu.edu.tw 之後, Bingo !.ksu.edu.tw 說:『沒錯!這部主機名稱是我管理的~ 我跟你說他的 IP 是...所以此時 168.95.1.1 就能夠查到 www.ksu.edu.tw 的 IP 囉!
     
  6. 記錄暫存記憶體並回報用戶
    查到了正確的 IP 後,168.95.1.1 的 DNS 機器總不會在下次有人查詢 www.ksu.edu.tw 的時候再跑一次這樣的流程吧! 粉遠粉累的吶!而且也很耗系統的資源與網路的頻寬,所以呢,168.95.1.1 這個 DNS 會很聰明的先記錄一份查詢的結果在自己的暫存記憶體當中,以方便回應下一次的相同要求啊! 最後則將結果回報給 client 端!當然啦,那個記憶在 cache 當中的資料,其實是有時間性的,當過了 DNS 設定記憶的時間 (通常可能是 24 小時),那麼該記錄就會被釋放喔!

整個分層查詢的流程就是這樣,總是得要先經過 . 來向下一層進行查詢,最終總是能得到答案的。這樣分層的好處是:

  • 主機名稱修改的僅需自己的 DNS 更動即可,不需通知其他人:
    當一個『合法』的 DNS 伺服器裡面的設定修改了之後,來自世界各地任何一個 DNS 的要求,都會正確無誤的顯示正確的主機名稱對應 IP 的資訊,因為他們會一層一層的尋找下來。所以,要找你的主機名稱對應的 IP 就一定得要透過你的上層 DNS 伺服器的紀錄才行!因此,只要你的主機名字是經過上層『合法的 DNS』伺服器設定的,那麼就可以在 Internet 上面被查詢到啦!呵呵!很簡單維護吧,機動性也很高。
     
  • DNS 伺服器對主機名稱解析結果的快取時間:
    由於每次查詢到的結果都會儲存在 DNS 伺服器的快取記憶體中,以方便若下次有相同需求的解析時,能夠快速的回應。 不過,查詢結果已經被快取了,但是原始 DNS 的主機名稱與 IP 對應卻修改了,此時若有人再次查詢, 系統可能會回報舊的 IP 喔!所以,在快取內的答案是有時間性的!通常是數十分鐘到三天之內。 這也是為什麼我們常說當你修改了一個 domain name 之後,可能要 2 ~ 3 天後才能全面的啟用的緣故啦!
     
  • 可持續向下授權 (子領域名稱授權):
    每一部可以記錄主機名稱與 IP 對應的 DNS 伺服器都可以隨意更動他自己的資料庫對應, 因此主機名稱與網域名稱在各個主機底下都不相同。舉例來說, idv.tw 是僅有台灣才有這個 idv 的網域~ 因為這個 idv 是由 .tw 所管理的,所以只要台灣 .tw 維護小組同意,就能夠建立該網域喔!

好啦!既然 DNS 這麼棒,然後我們又需要架站,所以需要一個主機的名稱,那麼我們需要架設 DNS 了嗎?當然不是,為什麼呢?剛剛鳥哥提到了很多次的『合法』的字眼,因為他就牽涉到『授權』的問題了! 我們在第十章當中也提到,只要主機名稱合法即可,不見得需要架設 DNS 的啦!
 

例題:
透過 dig 實作出本小節談到的 . --> .tw --> .edu.tw --> .ksu.edu.tw --> www.ksu.edu.tw 的查詢流程,並分析每個查詢階段的 DNS 伺服器有幾部?
答:
事實上,我們可以透過第四章約略談過的 dig 這個指令來實作出喔!使用追蹤功能 (+trace) 就能夠達到這個目的了。使用方式如下:
[root@www ~]# dig +trace www.ksu.edu.tw
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-16.P1.el5 <<>>+trace www.ksu.edu.tw
;; global options:  printcmd
.                       486278  IN      NS      a.root-servers.net.
.                       486278  IN      NS      b.root-servers.net.
....(底下省略)....
# 上面的部分在追蹤 . 的伺服器,可從 a ~ m.root-servers.net.
;; Received 500 bytes from 168.95.1.1#53(168.95.1.1) in 22 ms

tw.                     172800  IN      NS      ns.twnic.net.
tw.                     172800  IN      NS      a.dns.tw.
tw.                     172800  IN      NS      b.dns.tw.
....(底下省略)....
# 上面的部分在追蹤 .tw. 的伺服器,可從 a ~ h.dns.tw. 包括 ns.twnic.net.
;; Received 474 bytes from 192.33.4.12#53(c.root-servers.net) in 168 ms

edu.tw.                 86400   IN      NS      a.twnic.net.tw.
edu.tw.                 86400   IN      NS      b.twnic.net.tw.
# 追蹤 .edu.tw. 的則有 7 部伺服器
;; Received 395 bytes from 192.83.166.11#53(ns.twnic.net) in 22 ms

ksu.edu.tw.             86400   IN      NS      dns2.ksu.edu.tw.
ksu.edu.tw.             86400   IN      NS      dns3.twaren.net.
ksu.edu.tw.             86400   IN      NS      dns1.ksu.edu.tw.
;; Received 131 bytes from 192.83.166.9#53(a.twnic.net.tw) in 22 ms

www.ksu.edu.tw.         3600    IN      A       120.114.100.101
ksu.edu.tw.             3600    IN      NS      dns2.ksu.edu.tw.
ksu.edu.tw.             3600    IN      NS      dns1.ksu.edu.tw.
ksu.edu.tw.             3600    IN      NS      dns3.twaren.net.
;; Received 147 bytes from 120.114.150.1#53(dns2.ksu.edu.tw) in 14 ms
最終的結果有找到 A (Address) 是 120.114.100.101,不過這個例題的重點是,要讓大家瞧瞧整個 DNS 的搜尋過程! 在 dig 加上 +trace 的選項後,就能夠達到這個目的。至於其他的都是伺服器 (NS) 的設定值與追蹤過程喔! 有沒有很清楚啊?^_^。至於 A 與 NS 等相關的資料,我們在後續的 DNS 資料庫介紹中,再分別介紹囉。

Felix 發表在 痞客邦 PIXNET 留言(0) 人氣()