書名: C#網絡程序開發(第二版)作者名: 何波 傅由甲本章字數: 989字更新時間: 2020-06-30 17:14:22
1.3 網絡程序通信機制
1.3.1 端口與套接字
1. 端口
主機之間的通信,看起來只要知道了IP地址就可以實現。其實不然,真正完成通信功能的不是兩臺計算機,而是兩臺計算機上的進程。IP地址只能標識到某臺主機,而不能標識計算機上的進程。如果要標識進程,完成通信,需要引入新的地址空間,這就是端口(port)。
端口目前有兩種意義:一是指物理端口,比如ADSL Modem、集線器、交換機、路由器上連接其他設備的接口,如RJ-45端口、SC端口等;二是邏輯端口,即進程標識,如HTTP的80端口,FTP的21端口等。本書所指的端口都是指邏輯端口。定義端口是為了解決與多個應用進程同時進行通信的問題。端口地址由兩字節的二進制數表示。端口號范圍從0到65535。由于TCP/IP傳輸層的兩個協議TCP和UDP是獨立的兩個軟件模塊,因此各自的端口號也互相獨立。端口號的分配規則如下:
(1)端口0:不使用,或者作為特殊的使用。
(2)端口1~255:保留給特定的服務。
(3)端口256~1023:保留給其他服務。
(4)端口1024~49999:可以用作任意客戶的端口。
(5)端口5000~65535:可以用作用戶的服務器端口。
一個完整的網間通信需要兩個進程組成,并且只能使用同一種高層協議,因此可以用一個5元組來標識:協議、本地地址、本地端口號、遠地地址、遠地端口號。
2. 套接字
套接字是支持TCP/IP網絡通信的基本操作單元,是不同主機間的進程進行雙向通信的端點,使用套接字便于區分不同應用程序進程間的網絡通信和連接。如圖1-4所示,有三臺建立了通信連接的主機。對通信的一對主機來說,套接字包括發送方IP、發送方端口號、接收方IP、接收方端口號、協議五部分。

圖1-4 套接字概況圖
1.3.2 基于套接字的網絡進程通信機制
網絡進程與單機進程之間的不同是前者可以在網絡上和其他主機中的進程互通信息。在同一臺計算機中,兩個進程之間通信,只需要兩者知道系統為他們分配的進程號(Process ID)就可以實現通信。但是網絡情況下,進程通信變得復雜得多。首先,要解決如何識別網絡中的不同主機;其次,不同的主機上的系統獨立運行,進程號的分配策略也不同。套接字屏蔽了TCP/IP協議棧的復雜性,使得在網絡編程者看來,兩個網絡進程間的通信實質上就是它們各自所綁定的套接字之間的通信。這時,通信的網絡進程間至少需要一對套接字,分別運行于服務端和客戶端,根據連接啟動方式及本地套接字連接目標,套接字之間的連接可分為服務監聽,客戶端請求,連接確認3個步驟。圖1-5給出了TCP協議下的網絡進程通信的步驟。

圖1-5 使用套接字傳輸數據
- DevOps:軟件架構師行動指南
- LaTeX Cookbook
- WildFly:New Features
- Google Flutter Mobile Development Quick Start Guide
- LabVIEW2018中文版 虛擬儀器程序設計自學手冊
- 高效微控制器C語言編程
- Java Web及其框架技術
- Python程序設計
- Unity Shader入門精要
- 零基礎學Python數據分析(升級版)
- 碼上行動:用ChatGPT學會Python編程
- App Inventor創意趣味編程進階
- 人工智能算法(卷1):基礎算法
- Spring 5 Design Patterns
- 企業級Java現代化:寫給開發者的云原生簡明指南