DNS 全名為 Domain Name System,下面先來介紹一下DNS的整體階層架構。
DNS的整體階層架構
DNS 為層級式的分散式名稱對應系統,最上層一定為 root domain,以「 . 」來表示,其下又分成好幾個組織類別的 domain,這些 domain 又繼續往下延伸。進而形成數狀結構圖。
在root domain的下一層domain,稱之為 TLD (Top Level Domain),而TLD主要區分成兩種:
gTLD ( generic TLD ):
非以國碼為命名的一般 TLD 稱之。如 com (公司行號)、org (非營利的組織單位)、net (網路單位)、edu (教育單位)、gov (政府單位)、mil (軍事單位)、int (國際性的機構)等。
但是網際網路成長的速度太快了,因此後來除了上述的七大類別之外,還有諸如 .asia, .info, .jobs等領域名稱的開放。
此外,為了讓某些國家也能夠有自己的最上層領域名稱,因此,就有下面所謂的 ccTLD
ccTLD ( country code TLD ):
以國碼為命名的 TLD 稱之。如 tw (台灣 )、cn (中國大陸 )、jp ( 日本 )、hk ( 香港 )、… 等等。由於 internet 最早是美國所開始發展的,所以在初期並沒有這些以國碼來命名的 ccTLD,不過後來隨著 internet 的日漸熱絡,才又加入了這些 ccTLD。
這樣做有什麼好處呢?因為自己的國家內有最上層 ccTLD ,所以如果有 domain name 的需求,則只要向自己的國家申請即可,不需要再到最上層去申請囉!
另外還有個比較特殊的 TLD 叫 arpa,它是沿用 ARPAnet (美國官方的電腦網路,為 Internet 的前身) 的名稱而來,現在則提供做 DNS 反解的用途。
DNS 查詢流程
當在網址列輸入所要查詢的網址如:www.yahoo.com.tw,會先找尋Linux下/etc/resolv.conf所提供的DNS IP來做連線查詢。在台灣來說最常見到的DNS應該就是hinet的168.95.1.1,不過在這邊會建議多設一組8.8.8.8(google的DNS),在查詢上不輸hinet,甚至會比較好。
由於都使用hinet線路較多,這邊就此它為例吧。
1. 收到client端查詢要求時,會先查看本身有沒有記錄,如果沒有此筆錄則會向 . 查詢:
DNS的架構為階層式。而各主機也只能管理自身內的主機名稱,hinet並無此權力,因此無法回覆給client,此時168.95.1.1就會向最頂層(root)的伺服器來查詢相關的ip。
2. 向最頂層的 . (root)查詢:
168.95.1.1會主動跟 . 查詢www.yahoo.com.tw,由於 . 只會記錄 .tw 的資訊。此時會告知 .tw的位置,使 . 可以在繼續查詢。
3. 向第二層的 .tw 查詢:
再來會到 .tw 查詢,而 .tw 又僅記錄 .edu.tw、.com.tw、gov.tw…….等主機。經過查詢後 .tw 又會告知,請到 .com.tw 查詢並且告知IP。
4. 向第三層的 .com.tw 查詢:
和在第二層一樣,.com.tw會跟168.95.1.1告知,yahoo.com.tw、pchome.com.tw、sina.com.tw……等主機,請 .com.tw到yahoo.com.tw查詢且告知IP
5. 向第四層 .yahoo.com.tw查詢:
等168.95.1.1找到 .yahoo.com.tw時。.yahoo.com.tw會告知說。此domain是這邊管理的,且告知該domain的ip。此時就能夠查到www.yahoo.com.tw的IP位置了。
6. 記錄暫存記憶體並回報Client:
在查到正確ip後,為了不讓下次查該ip時又要在重新查詢。因此會將此ip記錄一份查詢到的結果到暫存記憶體中,並回應給client該ip位置。存放在 cache 內ip是有時效性的,通常時間為24小時,超過時間後就會釋放。
以下是DNS查詢流程
[root@localhost ~]# dig +trace www.yahoo.com.tw ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-16.P1.el5 <<>> +trace www.yahoo.com.tw ;; global options: printcmd . 76912 IN NS d.root-servers.net. . 76912 IN NS e.root-servers.net. ;; Received 228 bytes from 8.8.8.8#53(8.8.8.8) in 10 ms tw. 172800 IN NS d.dns.tw. tw. 172800 IN NS ns.twnic.net. tw. 172800 IN NS a.dns.tw. ;; Received 476 bytes from 128.8.10.90#53(d.root-servers.net) in 197 ms com.tw. 86400 IN NS a.twnic.net.tw. com.tw. 86400 IN NS b.twnic.net.tw. ;; Received 387 bytes from 210.17.9.230#53(d.dns.tw) in 7 ms yahoo.com.tw. 86400 IN NS ns1.yahoo.com. yahoo.com.tw. 86400 IN NS ns2.yahoo.com. ;; Received 133 bytes from 192.83.166.9#53(a.twnic.net.tw) in 6 ms www.yahoo.com.tw. 7200 IN CNAME rc.yahoo.com. rc.yahoo.com. 300 IN CNAME rc.g01.yahoodns.net. g01.yahoodns.net. 172800 IN NS yf7.yahoo.com. ;; Received 365 bytes from 68.180.131.16#53(ns1.yahoo.com) in 127 ms |
DNS 使用的port number
DNS所使用到的port為53。通常DNS查詢時是以udp協定來查詢,因為udp協定在資料的傳輸上較為快速。但是如果一旦資料無法收集齊全時,會改用tcp協定重新查詢。所以在請動DNS時也會同時啟動udp和tcp的port53。而在防火牆部份也是需要開啟的。
參考資料: 鳥哥 Linux架站文件 第19章 DNS Server
柏青哥的SuSE Linux 第12章 架設DNS Server
評論
此文章尚無評論。