TCP三次握手四次揮手
重要字段
序號(Seq)
確認號(Ack)
- 32位,只有ACK標志位為1時,Ack序號才有效,確認方Ack=發(fā)起方Seq+1
標志位
- SYN:發(fā)起一個連接
- FIN:釋放一個連接
- RST:重置連接
- ACK:確認序號有效
- PSH(了解):接收方應盡快將這個報文交給應用層
- URG(了解):緊急指針有效
三次握手
三次握手.jpeg
客戶端
- 狀態(tài):CLOSED-->SYN-SENT-->ESTAB-LISHED
服務(wù)端
- 狀態(tài):CLOSED-->LISTEN-->SYN-RCVD-->ESTAB-LISHED
抽象
- 男孩給女孩寫了封信,告訴女孩喜歡她,然后等待女孩的回信
- 女孩收到男孩的情書,很開心,回了封信說喜歡他,交集的等待男孩回信
- 男孩收到女孩回信,異常興奮,回信說我愛你.女孩收到信后,知道了彼此心意,歡樂交談起來
為什么需要第三次握手
-
防止服務(wù)端開啟無用連接增加服務(wù)器開銷
- 服務(wù)端向客戶端發(fā)起第二次握手過程中,數(shù)據(jù)包丟失,導致客戶端未收到服務(wù)端消息.客戶端設(shè)置超時時間,超過超時時間重新發(fā)起請求建立連接,而服務(wù)端不知道客戶端是否收到第二次握手數(shù)據(jù)包,端口一直打開,長此以往,這樣端口多了增加服務(wù)器開銷
防止已失效連接請求報文段又傳送到服務(wù)端產(chǎn)生錯誤
四次揮手
四次揮手.jpeg
客戶端
- 狀態(tài):ESTAB-LISHED-->FIN-WAIT-1-->FIN-WAIT-2-->TIME-WAIT-CLOSED
服務(wù)端
- 狀態(tài):ESTAB-LISHED-->CLOSE-WAIT-->LAST-ACK-->CLOSED
抽象
- 第一次:男孩給女孩寫了一封分手信
- 第二次:女孩收到分手信后寫了回信說給她時間把男孩東西收拾好還給他
- 第三次:過了幾天,女孩收拾好男孩東西,給男孩寫了封信讓男孩拿走
- 第四次:男孩收到女孩信后給女孩回信這就拿回來
為什么握手三次,揮手卻要四次
- 三次握手中第二次握手服務(wù)端由CLOSED狀態(tài)進入握手不需要準備,可直接返回SYN和ACK報文
- 四次揮手中服務(wù)端突然收到客戶端釋放連接請求并不能立即釋放連接,因為還有數(shù)據(jù)在處理,所以服務(wù)器先返回ACK,經(jīng)過CLOSE-WAIT階段準備好釋放連接后,發(fā)起第三次握手返回FIN釋放連接報文
為什么客戶端在TIME-WAIT階段要等2MSL
- MSL:一個TCP報文在傳輸過程中的最大生命周期,2MSL即服務(wù)端發(fā)出FIN報文和客戶端發(fā)出ACK報文所保持有效的最大時長
- 服務(wù)端在1MSL內(nèi)沒收到客戶端發(fā)出的ACK報文,就再次向客戶端發(fā)出FIN報文
- 客戶端在2MSL內(nèi)再次收到服務(wù)端的FIN報文,說明服務(wù)端未收到客戶端發(fā)出的ACK報文,客戶端再次向服務(wù)端發(fā)出ACK報文,計時器重置,重新開發(fā)2MSL及時
- 客戶端在2MSL內(nèi)沒有再次收到服務(wù)端FIN報文,說明服務(wù)端收到客戶端ACK報文,客戶端可以進入CLOSED階段
TCP三次握手四次揮手.png
原文摘自: https://www.cnblogs.com/AhuntSun-blog/p/12028636.html