close
- 轉自鳥哥http://linux.vbird.org/linux_server/0350dns.php#theory
- 透過 DNS 查詢主機名稱 IP 的流程
剛剛說過 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 的這部伺服器會這樣工作:
- 收到用戶的查詢要求,先查看本身有沒有紀錄,若無則向 . 查詢:
由於 DNS 是階層式的架構,每部主機都會管理自己轄下的主機名稱解譯而已。因為 hinet 並沒有管理台灣學術網路的權力, 因此就無法直接回報給用戶端。此時 168.95.1.1 就會向最頂層,也就是 . (root) 的伺服器查詢相關 IP 資訊。
- 向最頂層的 . (root) 查詢:
168.95.1.1 會主動的向 . 詢問 www.ksu.edu.tw 在哪裡呢?但是由於 . 只記錄了 .tw 的資訊 (因為台灣只有 .tw 向 . 註冊而已),此時 . 會告知『我是不知道這部主機的 IP 啦,不過,你應該向 .tw 去詢問才對,我這裡不管! 我跟你說 .tw 在哪裡吧!』
- 向第二層的 .tw 伺服器查詢:
168.95.1.1 接著又到 .tw 去查詢,而該部機器管理的又僅有 .edu.tw, .com.tw, gov.tw... 那幾部主機,經過比對後發現我們要的是 .edu.tw 的網域,所以這個時候 .tw 又告訴 168.95.1.1 說:『你要去管理 .edu.tw 這個網域的主機那裡查詢,我有他的 IP !』
- 向第三層的 .edu.tw 伺服器查詢:
同理可證, .edu.tw 只會告訴 168.95.1.1 ,應該要去 .ksu.edu.tw 進行查詢,這裡只能告知 .ksu.edu.tw 的 IP 而已。
- 向第四層的 .ksu.edu.tw 伺服器查詢:
等到 168.95.1.1 找到 .ksu.edu.tw 之後, Bingo !.ksu.edu.tw 說:『沒錯!這部主機名稱是我管理的~ 我跟你說他的 IP 是...所以此時 168.95.1.1 就能夠查到 www.ksu.edu.tw 的 IP 囉!
- 記錄暫存記憶體並回報用戶:
查到了正確的 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) 就能夠達到這個目的了。使用方式如下:
|
全站熱搜