2021-05-12 14:32:11
TCP的三次握手
2020-06-16 17:44:12
第一次握手
用戶端呼叫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函數返回。
至此一個連線的三次握手結束,連線建立,用戶端可以和伺服器端進行可靠通訊。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-04/129813.htm
相關文章