第一次握手 客戶端調用connect,向服務端發送連接請求報文。該報文是一個特殊報文,報文首部同步位SYN=1,同時確認位ACK=0,seq=x表示確認欄位的值為x,該欄位值由客戶端選擇,表示客戶端向服務端發送數據的第一個位元組編號為x+1。連接報文發送後,客戶端的TCP連接狀態由CLOSED轉為SY... ...
第一次握手
客戶端調用connect,向服務端發送連接請求報文。該報文是一個特殊報文,報文首部同步位SYN=1,同時確認位ACK=0,seq=x表示確認欄位的值為x,該欄位值由客戶端選擇,表示客戶端向服務端發送數據的第一個位元組編號為x+1。連接報文發送後,客戶端的TCP連接狀態由CLOSED轉為SYN_SENT。
服務端調用accept,從lisent的連接請求隊列中取出一個連接請求,併為之創建套接字和分配資源,開始建立連接。服務端的TCP連接狀態由LISENT轉為SYN_RCVD。
第二次握手
服務端為連接分配資源,同意連接,向客戶端發送SYN=1的確認報文。ACK=1表示確認號欄位ack的值有效,ack=x+1表示希望收到第一個位元組編號為x+1的若幹數據,seq=y表示服務端向客戶端發送數據的起始位元組編號為y+1。客戶端收到確認,TCP連接狀態由SYN_SENT轉為ESTABLISHED。
第三次握手
客戶端TCP連接狀態轉為ESTABLISHED,立即向伺服器發送確認報文,connect函數返回,連接建立成功。
服務端收到客戶端的確認報文,TCP連接狀態由SYN_RCVD轉為ESTABLISHED,accept函數返回。
至此一個連接的三次握手結束,連接建立,客戶端可以和服務端進行可靠通信。