網頁

搜尋此網誌

2011年1月10日 星期一

Domain Name System網域名稱系統

今天談談網域名稱系統(Domain Name System, DNS)的觀念,記得當初ycwang授課的時候,我自己以為DNS是個簡單的系統,只不過就是把網址(URL)轉換為網際網路協定位址(Internet Protocol Address)的功能而已。

然而這樣的認知大概懂了一成,從這幾年的經歷看來,我對DNS的理論基礎沒有完全搞清楚,我太小看DNS系統了!沒關係,學習就是不斷發現自己的不足,然後趕緊補足遺漏的知識,最怕的是不知道自己缺了什麼。

從網頁應用程式的技術角度來看,URL(Uniform Resource Locator,)可以分成五個部分,以Google我的帳戶的URL為例:

https://www.google.com/accounts/ManageAccount?hl=zh-tw
  1. 通訊協定配置名稱(Scheme Name):即通訊協定,如https或http
  2. 主機名稱(Host Name):指的是www.google.com
  3. 連接埠編號(Port Number):與通訊協定有關,http是80的埠號
  4. 路徑名稱(Path Name):在主機上的資料路徑,這個範例是accounts/ManageAccount
  5. 查詢字串(Query String):http中指的是GET參數,如hl=zh-tw
從DNS的角度來看,DNS所做的是將URL的主機名稱(Hostname)轉換成IP位址(IP Address),提供「Hostname-to-IP-Address Translation Service」的功能,那麼大費周章的意義有二:

第一,網路上的主機位置是由IP位置判定識別,這是一個32位元的資料(一般以192.168.1.1之類的四段十進位字串表示),非常不容易讓使用者記憶與識別,所以我們才會需要主機名稱。

第二,主機名稱雖利於人類記憶與識別,但對於網路系統來說會有實現困難,因為主機名稱千百萬種長度不一,非常不利於網路設備(路由器)判斷,效率也不夠好,這也就是為何IP位置要定義32位元的固定長度

DNS除了上述功能外,還可以有三個用途:
  1. 主機別名(Host Aliasing):如果主機名稱(網址)不好記憶,可以用另一個做為別名。
  2. 郵件伺服器別名(Mail Server Aliasing):與主機別名用途相同,這指的是對於郵件用途。
  3. 負載分配(Load Distribution);利用DNS將同一個主機名稱分配至不同的IP位置。
從系統面來看,DNS網域名稱系統是一個分散式的(Distributed)大系統,並且是具有階層的(hierarchical)資料庫系統,DNS在網路架構上屬於應用層(Application Layer),底層傳輸層依賴的是UDP通訊協定,使用Port 53的埠號。

值得注意的一點,雖然說DNS屬於應用層,但是應用層之中的HTTP、FTP、SMTP等等應用服務都是依賴於DNS(都會使用到URL),我們可以說DNS是應用層的基礎設施(infrastructure)也不為過!

DNS伺服器的階層架構可分成三類:
  1. Root DNS servers:最上層,全球共13台,分別標示A至M
  2. Top-Level Domain (TLD) servers:第二層,管理網域如com, org, edu, gov或各國的網域位置。
  3. Authoritative DNS servers:被TLD授權的DNS,通常是組織自己建置的DNS,管理自己私人的URL。
另外為了效能上的提升,也有建置Local DNS servers與DNS Caching的功能。

以上是DNS大致上的概念,細節部分還真是多啊!千萬不要小看DNS,當你真正使用DNS做一些事情才知道DNS博大精深。其他比較重要的參考資料有:
  • RFC 1034(Domain Names - Concepts and Facilities)
  • RFC 1035(Domain Names - Implementation and Specification)
  • RFC 2136(Dynamic Updates in the Domain Name System (DNS UPDATE))
等等,還有很多有關DNS的RFC,請參考DNS RFC - Domain Name System RFC's (IETF)


###

沒有留言:

張貼留言

熱門文章