TCP狀態轉移

2021-08-18 06:15:17 字數 1545 閱讀 8536

1、伺服器程式執行,listen監聽之後伺服器進入listen狀態,等待客戶端的連線

2、當伺服器監聽到服務請求(接收到同步報文段),會傳送syn同步報文段和確認報文段,並進入syn_rcvd狀態。

3、當伺服器接收到客戶端返回的ack確認報文段,伺服器進入established狀態

情況一:

4、當伺服器先發起斷開連線(執行close)向客戶端傳送fin結束報文段,進入fin_wait_1狀態。

5、伺服器接收到客戶端ack確認報文段進入fin_wait_2狀態

6、伺服器收到客戶端的fin結束報文段並傳送ack確認報文段進入time_wait狀態

7、2msl時間之後(2min),進入closed狀態。

情況二:

1、客戶端發起斷開連線(先執行close),伺服器接收到客戶端的fin結束報文段,並傳送ack確認報文段,進入close_wait狀態

2、伺服器處理完任務準備關閉執行close,傳送fin結束報文段,進入last_ack狀態

3、接收到客戶端的ack確認報文段進入closed狀態

1、客戶端執行程式,connect之後首先發出syn同步報文段,進入syn_sent狀態

2、客戶端接收到伺服器的syn和ack確認報文段,返回ack確認報文段,進入established狀態

情況一:

3當客戶端先發起斷開連線(執行close)向伺服器傳送fin結束報文段,進入fin_wait_1狀態。

4、客戶端接收到伺服器ack確認報文段進入fin_wait_2狀態

5、客戶端收到伺服器的fin結束報文段並傳送ack確認報文段進入time_wait狀態

6、2msl時間之後(2min),進入closed狀態。

情況二:

3、伺服器先發起斷開連線(先執行close),客戶端接收到伺服器的fin結束報文段,並傳送ack確認報文段,進入close_wait狀態

4、客戶端處理完任務準備關閉執行close,傳送fin結束報文段,進入last_ack狀態

5、接收到伺服器的ack確認報文段進入closed狀態

1、可靠終止tcp 連線

(客戶端給伺服器的第二次ack丟失,或伺服器給客戶端的fin丟失,客戶端因為有time_wait狀態存在,伺服器再2msl時間內內收到確認,就會重新傳送fin,,從而可靠終止連線)

2、保證遲來的tcp報文段有足夠的時間被識別並丟棄。

(報文段的最大生存週期就是msl,有time_waitz狀態(2msl),有足夠時間處理收到的報文段並處理,從反面來講,如果立即釋放此埠,這時乙個與剛關閉相似的新的連線相連線,這個連線將會收到原來連線的資料,這個資料報就會被新的埠丟棄)

讓客戶端先關閉,客戶端會進入time_wait狀態,伺服器在接收到客戶端的ack確認後就會直接進入close狀態,埠也會直接被釋放。如果先關閉伺服器,伺服器會進入time_wait狀態,伺服器所占用的埠要等2msl時間之後才會被釋放,重啟伺服器,bind命名一直會失敗。

TCP狀態轉移

tcp狀態轉移,一共存在11個狀態,請看下圖 1.closed 起始點,在超時或者連線關閉時候進入此狀態。2.listen svr端在等待連線過來時候的狀態,svr端為此要呼叫socket,bind,listen函式,就能進入此狀態。此稱為應用程式被動開啟 等待客戶端來連線 3.syn sent 客...

TCP狀態轉移

被動開啟 active open 客戶端通過connect發起主動開啟。客戶端通過connect連線伺服器,客戶端tcp將傳送乙個syn包,告訴伺服器客戶端將在待建立連線傳送資料的初始序列號。客戶端 closed syn sent 伺服器端必須ack客戶端syn,同時傳送乙個syn,告訴客戶端,伺服...

TCP狀態轉移

tcp狀態轉移,一共存在11個狀態,請看下圖 1.closed 起始點,在超時或者連線關閉時候進入此狀態。2.listen svr端在等待連線過來時候的狀態,svr端為此要呼叫socket,bind,listen函式,就能進入此狀態。此稱為應用程式被動開啟 等待客戶端來連線 3.syn sent 客...