簡介
最常被使用的網路函式庫稱為 Socket,這個名詞起源於柏克萊大學於 1983 年所釋放出來的 Berkeley Sockets 函式庫,該函式庫將網路視為串流。因而使存取網路的動作,與存取檔案一樣,都可以透過串流機制運行。
雖然 Socket 函式庫將網路抽像化為串流,但是理解網路的架構對程式的學習仍有很大的幫助,目前我們所使用的 Internet 網路是基於 TCP/IP 的網路架構,要能理解目前的網路程式架構,首先要從 TCP/IP 的架構下手。
TCP/IP 網路架構
網路的 OSI 參考模型將網路的層次分為七層,但是 TCP/IP 架構所依據的 ARPANET DoD 模型則只有四層,兩者之間存在某種對應關係,這個對應關係顯示於下圖當中,能正確的理解該圖,將有助於程式設計師理解網路程式的原理。

圖一、OSI 與 TCP/IP 的層次對應圖
舉例而言,當我們使用 TCP 的方式傳輸訊息時,由於 TCP 傳輸層會自動維持封包排列的順序,因此先傳送的封包一定會先到達,這讓程式設計師不需要擔心封包的先後順序問題。但在使用 UDP 傳輸的時候,先傳送的封包可能反而會後到達,因此訊息的順序將無法確保,這種 UDP 傳送方式雖然較快,但是卻較不方便,通常只被使用在強調速度的領域,像是立即影音傳輸的應用上。
基於 HTTP 的 Web
HTTP 是 Web 全球資訊網 (萬維網) 的基礎協定,該協定架構在 TCP/IP 架構之上,屬於應用層的協定。構成 HTTP 的主要兩個應用程式是瀏覽器 (Browser) 與網站 (Web Server)。HTTP 是一個典型的 Client-Server (客戶端-伺服端) 架構的協定,使用者透過 Client 端的瀏覽器連結到 Server 的伺服器,然後由伺服端將結果以 HTML 的網頁格式傳回。 HTML 的網頁當中包含了許多超連結 (Hyperlink),這些超連結連接到某些網址 (URL),於是使用者可以透過瀏覽器中的超連結,進一步點選其他的網頁,進行網路瀏覽 (衝浪) 的行為。
Socket 函式庫
目前大部分的程式語言與平台 (像是 Java, C#, .NET, UNIX, Linux, ….) 都已經支援了 Socket 函式庫。但是由於語言與設計者的不同,這些 Socket 函式庫的使用方式都略有差異。在 C# 最常使用的是微軟 .NET 平台當中 的 Socket 函式庫,這個函式庫相當的成熟,除了將 TCP/IP 封裝成 Socket 函式庫之外,微軟甚至進一步將 HTTP 、加解密、甚至是高階的 Web 服務等機制,都包含在 .NET 平台當中,因此 C# 的程式設計師可以很輕易的寫出網路應用程式。
結語
Socket 函式庫與 TCP/IP/HTTP 等層級的協定,是學習網路程式的基礎,在下一節當中,我們將會進一步以範例說明網路程式的架構。
參考文獻
- Internet Socket
- OSI模型
- OSI model
- 互联网
- 網頁瀏覽器
- 网络服务器
- 全球資訊網
- 超文字
- Hyperlink
- URL
- Web Crawler
- Internet Protocol Suite
- UDP
- IP
- Router
- Packet Switch
- HTTP
陳鍾誠 (2010年06月15日),(網頁標題) C# 網路程式設計簡介,(網站標題) 免費電子書:C# 程式設計,2010年06月15日,取自 http://cs0.wikidot.com/netintroduction ,網頁修改第 1 版。