TCP 連接的建立程序

一開始,客戶端和服務端都處于 close 狀態,
先是服務端監聽某個埠,此時服務端處于 listen 狀態,
這個時候客戶端就可以發送連接請求報文了,
第一次握手
客戶端會主動發送連接請求報文,隨機初始化序列號為 x,并把 SYN 標志位設定為 1,表示 SYN 報文,
客戶端發送 SYN 報文后,客戶端進入 syn_sent 狀態,
第二次握手
服務端收到 SYN 報文后,服務端會發送 SYN-ACK 報文,用于「對客戶端發送的 SYN 報文進行應答」和「服務端被動請求建立連接」,
服務端會隨機初始化序列號為 y,確認序列號設定為 x + 1,并把 SYN 標志位、ACK 標志位設定為 1,
服務端發送 SYN-ACK 報文后,服務端進入 syn_receive 狀態,
第三次握手
客戶端收到 SYN-ACK 報文后,客戶端會發送 ACK 報文,用于對服務端發送的報文進行應答,
客戶端會將序列號設定為 x + 1,確認序列號設定為 y + 1,ACK 標志位設定為 1,
客戶端發送 ACK 報文后,客戶端處于 established 狀態,
當服務端收到 ACK 報文后,服務端進入 established 狀態,
此時 TCP 連接就建立完成了,客戶端和服務端就可以相互發送資料了,
TCP 連接的斷開程序

雙方都可以主動請求斷開連接,斷開連接后,主機中的資源將被釋放,
一開始,客戶端和服務端都處于 established 狀態,
第一次揮手
如果客戶端打算斷開連接,那么客戶端會發送一個 FIN 標志位為 1 的報文,即 FIN 報文,
客戶端發送 FIN 報文后,客戶端進入 finish_wait_1 狀態,
第二次揮手
服務端收到 FIN 報文后,服務端會發送 ACK 應答報文,用于對客戶端發送的 FIN 報文進行應答,
服務端發送 ACK 應答報文后,服務端進入 close_wait 狀態,
客戶端收到 ACK 應答報文后,客戶端進入 finish_wait_2 狀態,
第三次揮手
等待服務端處理完資料,服務端被動請求斷開連接,
服務端發送 FIN 報文后,服務端進入 last_ack 狀態,
第四次揮手
客戶端收到 FIN 報文后,客戶端會發送 ACK 應答報文,用于對服務端發送的 FIN 報文進行應答,
客戶端發送 ACK 報文后,客戶端進入 time_wait 狀態,
當服務端收到 ACK 報文后,服務端進入 close 狀態,至此服務端已經完成連接的關閉,
客戶端在經過 2MSL 時間后,自動進入 close 狀態,至此客戶端也完成了連接的關閉,
MSL 是 Maximum Segment Lifetime 英文的縮寫,中文可以譯為“報文最大生存時間”,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/463513.html
標籤:其他
