什麼是套接字(Socket)

什麼是套接字(Socket)

應用層通過傳輸層進行數據通信時,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、服務器端關閉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章