TCP的三次握手


第一次握手

客戶端調用connect,向服務端發送連接請求報文。該報文是一個特殊報文,報文首部同步位SYN=1,同時確認位ACK=0,seq=x表示確認字段的值為x,該字段值由客戶端選擇,表示客戶端向服務端發送數據的第一個字節編號為x+1。連接報文發送后,客戶端的TCP連接狀態由CLOSED轉為SYN_SENT。

服務端調用accept,從lisent的連接請求隊列中取出一個連接請求,並為之創建套接字和分配資源,開始建立連接。服務端的TCP連接狀態由LISENT轉為SYN_RCVD。

QQ截圖2

第二次握手

服務端為連接分配資源,同意連接,向客戶端發送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函數返回。

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


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: