官术网_书友最值得收藏!

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 使用套接字傳輸數據

主站蜘蛛池模板: 梁平县| 建瓯市| 芮城县| 吉木萨尔县| 云阳县| 贵定县| 阜南县| 堆龙德庆县| 密云县| 湖南省| 黎平县| 都安| 鱼台县| 琼海市| 威远县| 甘谷县| 马公市| 建水县| 合作市| 五指山市| 兴山县| 玛纳斯县| 松潘县| 黑水县| 宿松县| 余姚市| 扎赉特旗| 辽源市| 和田县| 井研县| 霍州市| 浪卡子县| 汝阳县| 吉木乃县| 田东县| 海伦市| 鄄城县| 轮台县| 新干县| 麦盖提县| 凌海市|