然而這樣的認知大概懂了一成,從這幾年的經歷看來,我對DNS的理論基礎沒有完全搞清楚,我太小看DNS系統了!沒關係,學習就是不斷發現自己的不足,然後趕緊補足遺漏的知識,最怕的是不知道自己缺了什麼。
從網頁應用程式的技術角度來看,URL(Uniform Resource Locator,)可以分成五個部分,以Google我的帳戶的URL為例:
https://www.google.com/accounts/ManageAccount?hl=zh-tw
- 通訊協定配置名稱(Scheme Name):即通訊協定,如https或http
- 主機名稱(Host Name):指的是www.google.com
- 連接埠編號(Port Number):與通訊協定有關,http是80的埠號
- 路徑名稱(Path Name):在主機上的資料路徑,這個範例是accounts/ManageAccount
- 查詢字串(Query String):http中指的是GET參數,如hl=zh-tw
第一,網路上的主機位置是由IP位置判定識別,這是一個32位元的資料(一般以192.168.1.1之類的四段十進位字串表示),非常不容易讓使用者記憶與識別,所以我們才會需要主機名稱。
第二,主機名稱雖利於人類記憶與識別,但對於網路系統來說會有實現困難,因為主機名稱千百萬種長度不一,非常不利於網路設備(路由器)判斷,效率也不夠好,這也就是為何IP位置要定義32位元的固定長度。
DNS除了上述功能外,還可以有三個用途:
- 主機別名(Host Aliasing):如果主機名稱(網址)不好記憶,可以用另一個做為別名。
- 郵件伺服器別名(Mail Server Aliasing):與主機別名用途相同,這指的是對於郵件用途。
- 負載分配(Load Distribution);利用DNS將同一個主機名稱分配至不同的IP位置。
從系統面來看,DNS網域名稱系統是一個分散式的(Distributed)大系統,並且是具有階層的(hierarchical)資料庫系統,DNS在網路架構上屬於應用層(Application Layer),底層傳輸層依賴的是UDP通訊協定,使用Port 53的埠號。
值得注意的一點,雖然說DNS屬於應用層,但是應用層之中的HTTP、FTP、SMTP等等應用服務都是依賴於DNS(都會使用到URL),我們可以說DNS是應用層的基礎設施(infrastructure)也不為過!
DNS伺服器的階層架構可分成三類:
- Root DNS servers:最上層,全球共13台,分別標示A至M。
- Top-Level Domain (TLD) servers:第二層,管理網域如com, org, edu, gov或各國的網域位置。
- 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))
###
沒有留言:
張貼留言