應用層經過傳輸層進行數據通訊時,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。
根據鏈接啓動的方式以及本地套接字要鏈接的目標,套接字之間的鏈接過程能夠分爲三個步驟:服務器監聽,客戶端請求,鏈接確認。
服務器監聽:是服務器端套接字並不定位具體的客戶端套接字,而是處於等待鏈接的狀態,實時監控網絡狀態。
客戶端請求:是指由客戶端的套接字提出鏈接請求,要鏈接的目標是服務器端的套接字。爲此,客戶端的套接字必須首先描述它要鏈接的服務器的套接字,指出服務器端套接字的地址和端口號,而後就向服務器端套接字提出鏈接請求。
連 接確認:是指當服務器端套接字監聽到或者說接收到客戶端套接字的鏈接請求,它就響應客戶端套接字的請求,創建一個新的線程,把服務器端套接字的描述發給客 戶端,一旦客戶端確認了此描述,鏈接就創建好了。而服務器端套接字繼續處於監聽狀態,繼續接收其餘客戶端套接字的鏈接請求。