1. 程式人生 > >TCP三次握手和四次揮手的全過程

TCP三次握手和四次揮手的全過程

targe 服務 必須 分享 tcp連接 recv tar pan 序號

三次握手

第一次握手:客戶端發送syn包(syn=x)到服務器,並進入SYN_SEND狀態,等待服務器確認;

第二次握手:服務端收到syn包,必須確認客戶端的SYN(ack=x+1),同時自已也發送一個SYN包(syn=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

第三次握手:客戶端收到服務器端的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入established狀態,完成三次握手;

四次揮手

與建立連接的“三次握手”類似,斷開一個tcp連接則需要“四次握手”。

第一次揮手:主動關閉方發送一個FIN,用來關閉主動關閉方和被動關團方的數據傳送,也是主動關閉方告訴被方關閉方:我已經不會再給你發送數據了(當然,在發送fin之前發送的數據,如果沒有收到對應的ack確認報文,主動關閉方依然會發送這些數據),但是,此時主動關閉方還可以接收數據;

第二次揮手:被動關閉方收到FIN包後,發送一個ack給對方,確認序號為收到序號+1 (與SYN相同,一個FIN占用一個序號);

第三次揮手:被動關閉方發送一個FIN,用來關閉被動關閉方到主動關閉方之間的數據傳輸,也就是告訴主動關閉方,我的數據也發完了,也不會再向你發送數據了;

第四次揮手:主動關閉方收到FIN後,發送一個ack給被動關閉方,發送序號為收到的序號+1,至此,完成四次揮手;

技術分享圖片

內容轉自這裏

TCP三次握手和四次揮手的全過程