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

2021-10-25 06:59:50 字數 2576 閱讀 2860

客戶端與伺服器中建立的連線為tcp。

(1)序號:seq序號,佔32位,用來標識從tcp源端向目的端傳送的位元組流,發起方傳送資料時對此進行標記。

(2)確認號:ack序號,佔32位,只有ack標誌位為1時,確認序號欄位才有效,ack=seq+1。

(3)標誌位:共6個,即urg、ack、psh、rst、syn、fin等。具體含義如下:

urg:緊急指標有效。ack:確認序號有效。psh:接收方應該盡快將這個報文交給應用層。rst:重置連線。syn:發起乙個新連線。fin:釋放乙個連線。

注意:不要將確認序號ack與標誌位中的ack搞混了。確認方ack=發起方seq+1,兩端配對。

連線必須是一方主動開啟,另一方被動開啟的。

(1)客戶端向伺服器端傳送一段tcp報文,其中:標記位為syn,表示「請求建立新連線」;序號為seq=x(x一般為1);隨後客戶端進入syn-sent階段。

(2)伺服器端接收到來自客戶端的tcp報文之後,結束listen階段。並返回一段tcp報文,其中:標誌位為syn和ack,表示「確認客戶端的報文seq序號有效,伺服器能正常接收客戶端傳送的資料,並同意建立新連線」序號為seq=y;確認號為ack=x+1,表示收到客戶端的序號seq並將其值加1作為自己確認號ack的值;隨後伺服器端進入syn-rcvd階段。

(3)客戶端接收到來自伺服器端的確認收到資料的tcp報文之後,明確了從客戶端到伺服器的資料傳輸是正常的,結束syn-sent階段。並返回最後一段tcp報文。其中:標誌位為ack,表示「確認收到伺服器端同意連線的訊號」序號為seq=x+1,表示收到伺服器端的確認號ack,並將其值作為自己的序號值;確認號為ack=y+1,表示收到伺服器端序號seq,並將其值加1作為自己的確認號ack的值;隨後客戶端進入established階段。

連線的釋放必須是一方主動釋放,另一方被動釋放。

(1)客戶端釋放連線,向伺服器端傳送一段tcp報文,其中:標記位為fin,表示「請求釋放連線「;序號為seq=u;隨後客戶端進入fin-wait-1階段,即半關閉階段。並且停止在客戶端到伺服器端方向上傳送資料,但是客戶端仍然能接收從伺服器端傳輸過來的資料。注意:這裡不傳送的是正常連線時傳輸的資料(非確認報文),而不是一切資料,所以客戶端仍然能傳送ack確認報文。

(2)伺服器端接收到從客戶端發出的tcp報文之後,確認了客戶端想要釋放連線,隨後伺服器端結束established階段,進入close-wait階段(半關閉狀態)並返回一段tcp報文,其中:標記位為ack,表示「接收到客戶端傳送的釋放連線的請求」;序號為seq=v;確認號為ack=u+1,表示是在收到客戶端報文的基礎上,將其序號seq值加1作為本段報文確認號ack的值;隨後伺服器端開始準備釋放伺服器端到客戶端方向上的連線。客戶端收到從伺服器端發出的tcp報文之後,確認了伺服器收到了客戶端發出的釋放連線請求,隨後客戶端結束fin-wait-1階段,進入fin-wait-2階段

前"兩次揮手"既讓伺服器端知道了客戶端想要釋放連線,也讓客戶端知道了伺服器端了解了自己想要釋放連線的請求。於是,可以確認關閉客戶端到伺服器端方向上的連線了

(3)伺服器端自從發出ack確認報文之後,經過closed-wait階段,做好了釋放伺服器端到客戶端方向上的連線準備,再次向客戶端發出一段tcp報文,其中:標記位為fin,ack,表示「已經準備好釋放連線了」。注意:這裡的ack並不是確認收到伺服器端報文的確認報文。序號為seq=w;確認號為ack=u+1;表示是在收到客戶端報文的基礎上,將其序號seq值加1作為本段報文確認號ack的值。隨後伺服器端結束close-wait階段,進入last-ack階段。並且停止在伺服器端到客戶端的方向上傳送資料,但是伺服器端仍然能夠接收從客戶端傳輸過來的資料。

(4)客戶端收到從伺服器端發出的tcp報文,確認了伺服器端已做好釋放連線的準備,結束fin-wait-2階段,進入time-wait階段,並向伺服器端傳送一段報文,其中:標記位為ack,表示「接收到伺服器準備好釋放連線的訊號」。序號為seq=u+1;表示是在收到了伺服器端報文的基礎上,將其確認號ack值作為本段報文序號的值。確認號為ack=w+1;表示是在收到了伺服器端報文的基礎上,將其序號seq值作為本段報文確認號的值。隨後客戶端開始在time-wait階段等待2msl

建立連線時,被動方伺服器端結束closed階段進入「握手」階段並不需要任何準備,可以直接返回syn和ack報文,開始建立連線。釋放連線時,被動方伺服器,突然收到主動方客戶端釋放連線的請求時並不能立即釋放連線,因為還有必要的資料需要處理,所以伺服器先返回ack確認收到報文,經過close-wait階段準備好釋放連線之後,才能返回fin釋放連線報文。

TCP三次握手 四次揮手詳解

1 建立連線協議 三次握手 1 客戶端傳送乙個帶syn標誌的tcp報文到伺服器。這是三次握手過程中的報文1。2 伺服器端回應客戶端的,這是三次握手中的第2個報文,這個報文同時帶ack標誌和syn標誌。因此它表示對剛才客戶端syn報文的回應 同時又標誌syn給客戶端,詢問客戶端是否準備好進行資料通訊。...

TCP三次握手 四次揮手詳解

1 建立連線協議 三次握手 1 客戶端傳送乙個帶syn標誌的tcp報文到伺服器。這是三次握手過程中的報文1。2 伺服器端回應客戶端的,這是三次握手中的第2個報文,這個報文同時帶ack標誌和syn標誌。因此它表示對剛才客戶端syn報文的回應 同時又標誌syn給客戶端,詢問客戶端是否準備好進行資料通訊。...

TCP三次握手 四次揮手詳解

1 建立連線協議 三次握手 1 客戶端傳送乙個帶syn標誌的tcp報文到伺服器。這是三次握手過程中的報文1。2 伺服器端回應客戶端的,這是三次握手中的第2個報文,這個報文同時帶ack標誌和syn標誌。因此它表示對剛才客戶端syn報文的回應 同時又標誌syn給客戶端,詢問客戶端是否準備好進行資料通訊。...