第一次握手:客戶端發送syn包給服務器,SYN=1,序列號seq=x,客戶端進入syn-sent狀態
第二次握手:服務器收到syn包以後返回報文,ack=x+1,ACK=1,SYN=1,同時生成序列號seq=y,進入syn-rcvd狀態
第三次握手:客戶端收到服務器的報文以後,返回給服務器ack=y+1,ACK=1,自己的序列號seq=x+1,進入established狀態,服務器收到也進入established狀態
爲什麼要三次握手,兩次不行嗎?
因爲如果第一次握手在網絡中滯留時間過長,那客戶端會默認服務器沒有收到鏈接請求,就會關閉連接,然而服務器卻收到了請求,然後又打開了鏈接,這樣就會造成資源的浪費
四次揮手
第一次揮手:客戶端發送連接釋放報文(FIN=1,序列號seq=u)並停止發送數據,關閉鏈接,進入FIN-WAIT-1狀態
第二次揮手:服務器收到釋放連接發送確認報文(ACK=1,ack=u+1,序列號seq=p),服務器進入CLOSE-WAIT狀態,客戶端收到報文,進入FIN-WAIT-2狀態
第三次揮手:服務器發送連接釋放報文(FIN=1,ACK=1,ack=u+1,序列號seq=w),服務器進入LAST-ACK狀態
第四次揮手:客戶端收到服務器連接釋放報文,發出確認報文(ACK=1,ack=w+1,seq=u+1),進入TIME-WAIT狀態,等待2MSL後,進入CLOSE狀態