網頁

搜尋此網誌

2011年1月21日 星期五

Component Object Model 元件物件模型

談談元件物件模型(Component Object Model, COM)這個主題吧!前一陣子都在研究 DirectShow,常常看到 COM 這個關鍵字。由於最近才變成 Windows 程式開發人員所以不熟悉 COM,趁此機會好好研究一番吧!

請注意:COM 是一個標準 (Standard,也參照為Binary Standard,定義物件的結構),不是什麼工匠技藝 (craftsmanship) 的產品,也不是程式語言。COM 標準定義一個物件模型 (Object Model),使得 COM 物件(也稱為 COM 元件,或簡稱物件)可以和其他的物件互動工作。物件可以位於執行的行程 (process) 中,或其他行程,甚至是遠端電腦。

COM 是一個標準,因此可以使用多種物件導向語言 (Object-Oriented Language) 撰寫開發,通常是用 C++ 撰寫開發比較容易簡單,原因在於 COM 是 Binary Standard ,C++ 撰寫比較可以控制結構。

軟體中的物件包含資料 (data) 函式 (function) 兩部分,而 COM 僅有(唯一)利用函式的呼叫操作資料(換句話說,沒有資料這部分),這類函式在 COM 中稱為介面 (interface),而操作COM介面的函式稱為方法 (method) ,注意這些詞彙很容易讓人混淆,COM 的介面不同於C++的,一定要搞清楚!

更進一步來說,COM 要求這些介面必須是用指標 (pointer) 的方式實現(這是技術上關鍵的地方),COM 標準也定義一些元件通用的介面(部分介面必須具備,例如 IUnknown 介面)、元件之間的互動與安全性等。總結,COM 標準是定義介面,而介面實現 (interface implementation) 則由程式設計人員編寫。

COM 標準是微軟 OLE(Object Linking and Embedding) 和 ActiveX 技術的基礎,如果要學習這些技術,我們對 COM 的觀念一定要正確建立,以下是我認為 MSDN 上比較重要的觀念(要多讀幾遍):

###

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)


###

熱門文章