1. 程式人生 > >對Socket的理解,Socket使用TCP/IP如何實現通訊

對Socket的理解,Socket使用TCP/IP如何實現通訊

什麼是Socket?

socket是進城間通訊的一種機制

Socket如何實現通訊

兩個程序實現通訊,首先要找到對方,由於IP只能唯一標識計算機地址,所以還要加上TCP協議和埠號,因為TCP協議+埠號可以唯一標識一臺計算機中的程序

通訊流程:
1. 伺服器根據地址型別(ipv4,ipv6)、socket型別、協議建立socket
2. 伺服器為socket繫結ip地址和埠號
3. 伺服器監聽埠號請求,隨時準備接受客戶端發來的連線,這時候伺服器的socket處於未開啟狀態
4. 客戶端建立socket
5. 客戶端開啟socket,根據伺服器ip和埠號嘗試連線伺服器socket
6. 伺服器socket收到了客戶端socket請求,被動開啟,開始接收客戶端請求,這時候伺服器會給客戶端返回一個數據包,並進入阻塞狀態。客戶端收到伺服器的資料包後,客戶端連線成功,然後客戶端向伺服器傳送連線資訊,伺服器收到連線資訊後,accept方法返回,解除阻塞狀態,連線成功。
7. 客戶端向socket寫入資訊
8. 伺服器讀取資訊
9. 客戶端關閉socket
10. 伺服器關閉socket
流程如下圖:
這裡寫圖片描述

3次握手:
第一次握手:客戶端嘗試連線伺服器,向伺服器傳送syn包(同步序列編號包),syn=j,客戶端進入SYN_SEND狀態等待伺服器確認
第二次握手:伺服器接收到客戶端的syn包並確認(ack=j+1),同時向客戶端傳送一個syn包(syn=k),即syn+ack包,此時伺服器進入SYN_RECV狀態
第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。
握手流程如下圖
這裡寫圖片描述