DNS 架構及查詢流程

由 Derek 發表於 八月 16, 2011 / 尚無評論


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應該就是hinet168.95.1.1,不過在這邊會建議多設一組8.8.8.8(googleDNS),在查詢上不輸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.twgov.tw…….等主機。經過查詢後 .tw 又會告知,請到 .com.tw 查詢並且告知IP

 

4.      向第三層的 .com.tw 查詢:

和在第二層一樣,.com.tw會跟168.95.1.1告知,yahoo.com.twpchome.com.twsina.com.tw……等主機,請 .com.twyahoo.com.tw查詢且告知IP

 

5.      向第四層 .yahoo.com.tw查詢:

168.95.1.1找到 .yahoo.com.tw時。.yahoo.com.tw會告知說。此domain是這邊管理的,且告知該domainip。此時就能夠查到www.yahoo.com.twIP位置了。

 

6.      記錄暫存記憶體並回報Client:

在查到正確ip後,為了不讓下次查該ip時又要在重新查詢。因此會將此ip記錄一份查詢到的結果到暫存記憶體中,並回應給clientip位置。存放在 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所使用到的port53。通常DNS查詢時是以udp協定來查詢,因為udp協定在資料的傳輸上較為快速。但是如果一旦資料無法收集齊全時,會改用tcp協定重新查詢。所以在請動DNS時也會同時啟動udptcpport53。而在防火牆部份也是需要開啟的。

 

 

參考資料:  鳥哥 Linux架站文件    19 DNS Server

                   柏青哥的SuSE Linux 12 架設DNS Server 

             

 

 

關於作者

一個半路殺出來的傻小子,憑著一股傻勁努力的學習、嘗試、分享。希望能用自己微薄之力,替IT界和資訊界盡一點心力。單憑一己之力始終還是有限,歡迎和我有相同理念的夥伴一同加入一同努力。

評論

此文章尚無評論。

發表評論

*