TCP/IP 協定與 Internet 網路:第八章 TCP Socket 程式介面 下一頁
8-1 Socket 簡介
由前面幾章的介紹,我們可以瞭解 Internet 網路架構及相關通訊協定,由本章開始將介紹如何在 Internt 網路上開發應用程式的基本概念。一般在 TCP/IP 環境下開發應用程式有兩個基本介面程式:『插座』(Sockets)和『傳輸層介面』(Transport Layer Interface, TLI)。但在 Internet 網路上的應用程式都是以 Socket 介面佔大部分,我們就以 Socket 為範例來介紹通訊程式的開發技巧,如果讀者對於 TLI 有興趣的話,請參考其他書籍,本書限於篇幅不另介紹。第十一章將以 Socket 為基礎,更進一步介紹較高階的程式介面 – 遠端程序呼叫(Remote Procedure Call, RPC)。我們有了這些網路應用程式的基本概念後,接著在第四部分更進一步的介紹網路應用系統及其相關之通訊協定。
8-1-1 Socket 與 TLI
TLI 和 Socket 皆是『應用程式介面』(Application Program Interface, API),使用者可透過 API 發展網路應用程式,但兩者有許多不同的地方。TLI 介面最早是在 Unix System V 3.0 版中出現,其目的是作為 OSI 模式中傳輸層介面使用;而 Socket 由 BSD(Berkeley Software Distribution)所發展出來,又稱為『Berkeley Socket』。TLI 介面和 Socket 介面最大不同點,在於 Socket 提供程式庫集的連結方式,稱之為 Socket Library,如 read(),write() 等功能呼叫,這些功能呼叫的特性就如同 Unix 的系統呼叫(System Call)一樣;而 TLI 僅提供層次間的介面呼叫。圖 8-1 (a) 為 Unix System V 之 TLI;(b) 為 BSD Socket 介面的系統模組。
圖 8-1 TLI 與 Socket 介面的系統模組
由作業系統觀念而言,Socket 介面所提供的 read()、write() 都是屬於系統核心(Kernel)內部的呼叫程式,這是因為一般 Unix/Linux 作業系統都將 TCP/IP 功能整合在系統核心內。因此,利用 Socket 介面來編寫網路應用程式,和一般編寫應用程式(非網路環境)方式,並沒有太大的區別,這一點讓使用者非常容易發展網路程式,這就是 Socket 介面最大的特點。目前許多作業系統(如 Windows 2000或 Novell)都將 TCP/IP 核心程式載入系統核心內部,也依然可利用 Socket 介面發展程式,此類作業系統大多針對網路提出特殊功能,通常稱之為『網路作業系統』(Network Operating System, NOS)。而 TLI 僅是一個介面,使用者必須將 TLI Library 和網路程式連結(Link)之後再產生執行程式,在執行時是透過 Unix 的資料流輸出入介面(Stream I/O)和傳輸層溝通。也就是說,TLI Library 是在執行中再呼叫核心程式,處理有關網路運作,而並非整合在核心程式內。
但在 Unix/Linux 作業系統之下,雖然 TLI 和 Socket 介面在實現方式上有些差異,但目的是一致的,同樣可開發各式各樣的網路應用程式,隨著系統工具或使用者習慣可選擇其中一種介面來應用。但目前許多安全性介面(如 Secret Socket Layer, SSL)都在 Socket 上發展,既然 Socket 介面發展程式已漸成趨勢,接下來我們就以 Socket 介面為範例來介紹。
8-1-2 何謂 Socket
如果僅以 Socket 字元來翻譯是『插座』的意思,這個名詞會讓人非常訝異,但話說回來,它的功能的確像電話『插座』一樣。如以電話系統而言,只要將電話的插座設定好某一號碼,任何一部電話都可透過這個插座和其它電話通訊。對使用者而言,不用理會電話系統是如何撥接、或是如何路由選擇到達目的,這些功能完全由電話公司負責。網路上的 Socket 也如同電話的插座一樣,任何一個 Socket 都給予一個特殊號碼(IP number + TCP port),使用者之間只要記住對方的 Socket 號碼,便可以直接通訊,而不用考慮到底是經過何種網路、或主機放在什麼地方,這些尋找主機的工作是網路提供者所必須負責的。因此,對於 Socket 我們可以定義如下:
『Socket 就是一個網路上的通訊端點,使用者或應用程式只要連接到 Socket 便可以和網路上任何一個通訊端點連線,Socket 之間通訊就如同作業系統內程序(Process)之間通訊一樣。』
圖 8-2 為 Socket 之間的連線方式。透過 Socket 之間通訊,使用者不用理會網路實體架構,且 Socket 介面呼叫也如同作業系統的系統呼叫,對一般系統發展者而言,發展網路應用程式如同一般程式的容易,因此,稱之為『插座』(Socket)是最為適合。Windows 作業系統也提供 Socket 的介面程式,稱之為 Windows Socket(Winsock)。
圖 8-2 Socket 的連接方式