筆記整理 TCP的三次握手,四次揮手

2021-10-07 18:31:38 字數 1575 閱讀 7735

上圖就是三次握手,四次揮手的過程,畫了個簡單的草圖,分別給每個步驟標了個序號,下面開始詳細說明下每個步驟所做的事情。

第一次握手:客戶端傳送報文(標記位為[sys],seq=0),然後就將狀態變更為sys-send

第二次握手:服務端在接收到客戶端傳送的報文後,將自身的狀態由listen變更為syn_rcvd狀態,並返回一段報文(標記位為[sys,ack],seq=0,ack=1)告訴客戶端,我收到你的請求連線請求了。

第三次握手:客戶端在收到服務端返回的報文後,再次傳送報文(標記位為[ack], seq=1, ack=1),並將自身的狀態由syn-send變更為estblished。服務端收到客戶端傳送的報文後將自身狀態變更為由syn-rcvd變更為estblished,這樣客戶端和服務端就建立好了連線,客戶端可以開始傳輸資料了。

第一次揮手:客戶端傳送完資料報之後,主動發起是釋放連線的報文(標記位為[fin, ack], seq=2000, ack=500)後就將自身的狀態由estblished變更為fin-wait-1第二次揮手:服務端收到客戶端的fin報文後,將自身狀態由estblished變更為close_wait狀態,並傳送一段報文(標記位為[ack], seq=500, ack=2001)告訴客戶端,我收到了你想釋放連線的請求。客戶端在收到服務端返回的確認報文後,將自身狀態由fin-wait-1變更為fin-wait-2第三次揮手:服務端在處理完客戶端傳送的資料後,就會向客戶端傳送第三次揮手的報文(標記位為[fin, ack], seq=500, ack=2001 ),並將自身狀態由close_wait變更為last_ack第四次揮手:客戶端在第二次收到服務端發過來的確認報文的時候,將自身狀態由fin_wait-2變更為time_wait,並向服務端傳送報文(標記位為[ack], seq=2001, ack=501)。服務端在收到客戶端傳送的ack報文時,就將自身狀態由last_ack變更為closed狀態,釋放了當前連線。

以上就是老生常談的三次握手,四次揮手的過程。

而客戶端連線釋放再需要在經過time_wait的2msl之後才會釋放連線。

但是細心的你肯定會發現這個時候只是服務端釋放了連線,但是客戶端的狀態還是在time-wait並沒有釋放連線。或許你也會有這些疑問:

為什麼「握手」是三次,「揮手」卻要四次?

為什麼客戶端在time-wait階段要等2msl?

TCP三次握手和四次揮

一 tcp報文格式 在了解三次握手和四次揮手之前,首先要知道tcp報文內部包含了哪些東西。報文主要段的含義 序號 seq 用來標記資料段的順序,確保tcp傳輸有序。ack 確認 確認序號標誌,ack 1表示確認號字段有效,ack 0表示確認序號無效。syn 同步 連線請求序號標誌,用於建立連線。sy...

三次握手和四次揮手 TCP三次握手和四次揮手的理解

相比較於udp傳輸協議,tcp傳輸協議被認為是安全可靠的,這是由於tcp協議的三次握手和四次揮手保證了資料傳輸的安全性。tcp報文格式簡介 要了解tcp協議的三次握手和四次揮手,需要先了解在tcp協議中請求和響應的資料報報文格式。在報文中有幾個值得注意的字段 1 序號 seq序號,佔32位,用來標識...

結合socket詳解TCP三次握手四次揮手

tcp協議中的三次握手和四次揮手大家應該都至少聽說過了,本人一直覺得理論學習要結合 才能學習的更深刻,當知道東西是這樣,然後再知道為什麼是這樣的時候,領悟往往更加深刻,今天本人就結合socket程式設計中的api來解析一下tcp協議的三次握手和四次揮手過程。那麼tcp協議中的三次握手和四次揮手實際在...