應用層通過傳輸層進行資料通訊時,tcp和udp會遇到同時為多個應用程式程序提供併發服務的問題。多個tcp連線或多個應用程式程序可能需要 通過同乙個tcp協議埠傳輸資料。為了區別不同的應用程式程序和連線,許多計算機作業系統為應用程式與tcp/ip協議互動提供了稱為套接字 (socket)的介面,區分不同應用程式程序間的網路通訊和連線。
生成套接字,主要有3個引數:通訊的目的ip位址、使用的傳輸 層協議(tcp或udp)和使用的埠號。socket原意是「插座」。通過將這3個引數結合起來,與乙個「插座」socket繫結,應用層就可以和傳輸 層通過套接字介面,區分來自不同應用程式程序或網路連線的通訊,實現資料傳輸的併發服務。
socket可以看成在兩個程式進行通訊連線中的乙個端點,乙個程式將一段資訊寫入socket中,該socket將這段資訊傳送給另外乙個socket中,使這段資訊能傳送到其他程式中。如圖1:
host a上的程式a將一段資訊寫入socket中,socket的內容被host a的網路管理軟體訪問,並將這段資訊通過host a的網路介面卡傳送到host b,host b的網路介面卡接收到這段資訊後,傳送給host b的網路管理軟體,網路管理軟體將這段資訊儲存在host b的socket中,然後程式b才能在socket中閱讀這段資訊。
要通過網際網路進行通訊,至少需要一對套接字,乙個執行於客戶機端,稱之為clientsocket,另乙個執行於伺服器端,稱之為serversocket。
根據連線啟動的方式以及本地套接字要連線的目標,套接字之間的連線過程可以分為三個步驟:伺服器監聽,客戶端請求,連線確認。
伺服器監聽:是伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態。
客戶端請求:是指由客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的位址和埠號,然後就向伺服器端套接字提出連線請求。
連 接確認:是指當伺服器端套接字監聽到或者說接收到客戶端套接字的連線請求,它就響應客戶端套接字的請求,建立乙個新的執行緒,把伺服器端套接字的描述發給客 戶端,一旦客戶端確認了此描述,連線就建立好了。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求。
socket通訊流程:
1、伺服器根據位址型別(ipv4,ipv6)、socket型別、協議建立socket
2、伺服器為socket繫結ip位址和埠號
3、伺服器socket監聽埠號請求,隨時準備接收客戶端發來的連線,這時候伺服器的socket並沒有被開啟
4、客戶端建立socket
5、客戶端開啟socket,根據伺服器ip位址和埠號試圖連線伺服器socket
6、伺服器socket接收到客戶端socket請求,被動開啟,開始接收客戶端請求,直到客戶端返回連線資訊。這時候socket進入阻塞狀態,所謂阻塞即accept()方法一直到客戶端返回連線資訊後才返回,開始接收下乙個客戶端諒解請求
7、客戶端連線成功,向伺服器傳送連線狀態資訊
8、伺服器accept方法返回,連線成功
9、客戶端向socket寫入資訊
10、伺服器讀取資訊
11、客戶端關閉
12、伺服器端關閉
什麼是套接字Socket
q 什麼是套接字 socket 套接字 socket 是什麼意思?應用層通過傳輸層進行資料通訊時,tcp和udp會遇到同時為多個應用程式 程序提供併發服務的問題。多個tcp連線或多個應用程式程序可能需要通過同乙個tcp協議埠傳輸資料。為了區別不同的應用程式程序和連線,許多計算機作業系統為應用程式與t...
什麼是套接字 Socket
什麼是套接字 socket 應用層通過傳輸層進行資料通訊時,tcp和udp會遇到同時為多個應用程式程序提供併發服務的問題。多個tcp連線或多個應用程式程序可能需要 通過同乙個tcp協議埠傳輸資料。為了區別不同的應用程式程序和連線,許多計算機作業系統為應用程式與tcp ip協議互動提供了稱為套接字 s...
什麼是套接字 Socket
q 什麼是套接字 socket 套接字 socket 是什麼意思?應用層通過傳輸層進行資料通訊時,tcp和udp會遇到同時為多個應用程式 程序提供併發服務的問題。多個tcp連線或多個應用程式程序可能需要通過同乙個tcp協議埠傳輸資料。為了區別不同的應用程式程序和連線,許多計算機作業系統為應用程式與t...