1、 客戶端/服務器范型
客戶端/服務器范型把軟件分為兩類--客戶端程序和服務器程序。客戶端軟件啟動一個連接並發送請求,而服務器軟件監聽連接並處理請求。在UDP 編程環境中,沒有建立實際的連接,並且UDP應用程序可以在相同的套接字上建立並接收請求。在TCP環境中,兩台計算機之間建立了連接,客戶端/服務器范型是相對應的。
當軟件作為客戶端或者服務器的時候,它嚴格地定義了角色以更容易適應我們所熟悉的思維模型。軟件要麼啟動請求,要麼處理請求。在兩種角色之間切換使系統更加復雜。即使允許切換,在某個特定的時刻軟件程序也只能是客戶端,而另一個必須是服務器。如果兩個同時是客戶端,就沒有服務器處理請求了。
客戶端/服務器范型是一個重要的理論概念,它廣泛用於實際應用程序中。目前也有其它的通訊模型,例如對等(peer to peer)模型,在這種模型中每一方都可以啟動通訊。但是客戶端/服務器概念是更加流行的選擇,因為它很簡單並且在多數網絡編程中使用。
2、網絡客戶端
網絡客戶端啟動連接,通常處理網絡事務。服務器程序用於實現客戶端的請求--客戶端不用實現服務器的請求。盡管客戶端處於控制地位,但是服務器端仍然有一些功能。客戶端可以要求服務器刪除本地文件系統的所有文件,但是服務器並不是必須執行這個任務的。
網絡客戶端使用雙方都同意的通訊標准(即網絡協議)與服務器對話。例如HTTP客戶端使用的命令組就與郵件客戶端使用的不同,而且目的也完成不同。把HTTP連接到郵件服務器,或郵件客戶端連接到HTTP服務器,要麼會出現一個錯誤消息,要麼出現一個客戶端不能理解的錯誤消息。因為這個原因,作為協議規格的一部分,必須使用某個端口號,這樣客戶端才能定位服務器。Web服務器通常運行在80端口上,而其它一些服務器可能運行在非標准的端口上,URL的習慣是不列出端口的,它假定使用80端口。
3、網絡服務器
網絡服務器的角色是綁定某個特定的端口(客戶端使用它定位服務器),並且監聽新的連接。盡管客戶端是臨時的,並且只有在用戶選中的時候才運行,但是服務器程序必須不間斷地運行(即使實際上沒有已連接的客戶端),期望某個客戶端在某個時刻需要該服務。服務器程序通常作為數據自適應監視器進程引用,使用Unix用法。它持久的運行,而且一般在該服務器程序的主機啟動時啟動。因此服務器一直等待,直到某個客戶端建立到該服務器端口的連接。有些服務器程序在某個時刻只能處理單個連接,其它一些服務器程序可以通過使用多線程同時處理多個連接。
當開始連接後,服務器就服從客戶端。它等待客戶端發送請求,並且"忠實地"處理它們(可是服務器可以響應錯誤信息,特別是當請求違反某些重要地協議規則或有安全風險的時候)。某些協議(例如HTTP/1.0)通常在每個連接中只允許一個請求,而其它一些協議(例如POP3)支持一系列請求。服務器可以通過發送響應或錯誤消息應答客戶端的請求。學習新的網絡協議(編寫客戶端或服務器)與學習一種新的語言相似,只是語法改變了。但是典型情況下,它的命令的數量更小,使事情更簡單。服務器的行為一部分由協議決定,一部分由開發者決定(某些命令是可選的,服務器不一定支持)。