歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> TCP的三次握手

TCP的三次握手

日期:2017/2/28 13:53:21   编辑:Linux教程

第一次握手

客戶端調用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函數返回。

至此一個連接的三次握手結束,連接建立,客戶端可以和服務端進行可靠通信。

Copyright © Linux教程網 All Rights Reserved