TCP連線的11種狀態變遷

2021-07-11 04:57:57 字數 1828 閱讀 4049

**:

tcp連線的11種狀態變遷

1、先上圖:

2、全部11種狀態

2.1、客戶端獨有的:(1)syn_sent (2)fin_wait1 (3)fin_wait2 (4)closing (5)time_wait 。

2.2、伺服器獨有的:(1)listen (2)syn_rcvd (3)close_wait (4)last_ack 。

2.3、共有的:(1)closed (2)established 。

3、狀態變遷

3.1、建立連線時的狀態變遷

一開始,建立連線之前伺服器和客戶端的狀態都為closed。伺服器建立socket後開始監聽,變為listen狀態。客戶端請求建立連線,向伺服器傳送syn報文,客戶端的狀態變為syn_sent。伺服器收到客戶端的報文後向客戶端傳送ack和syn報文,此時伺服器的狀態變為syn_rcvd。然後,客戶端收到ack、syn,就向伺服器傳送ack,客戶端狀態變為established,伺服器收到客戶端的ack後也變為established。此時,3次握手完成,連線建立!

3.2、斷開連線時的狀態變遷

由於tcp連線是全雙工的,斷開連線會比建立連線麻煩一點點。客戶端先向伺服器傳送fin報文,請求斷開連線,其狀態變為fin_wait1。伺服器收到fin後向客戶端發生ack,伺服器狀態變為close_wait。客戶端收到ack後就進入fin_wait2狀態。此時連線已經斷開了一半了。如果伺服器還有資料要傳送給客戶端,就會繼續傳送。直到發完了,就傳送fin報文,此時伺服器進入last_ack狀態。客戶端收到伺服器的fin後,馬上傳送ack給伺服器,此時客戶端進入time_wait狀態,再過了2msl長的時間後進入closed狀態。伺服器收到客戶端的ack就進入closed狀態。

至此,還有乙個狀態沒有提及:closing狀態。closing狀態表示客戶端發生了fin,但沒有收到伺服器的ack,卻收到了伺服器的fin。這種情況發生在伺服器傳送的ack丟包的時候,因為網路傳輸有時會有意外。

msl是maximum segment lifetime英文的縮寫,中文可以譯為「報文最大生存時間」,他是任何報文在網路上存在的最長時間,超過這個時間報文將被丟棄。因為tcp報文(segment)是ip資料報(datagram)的資料部分,具體稱謂請參見《資料在網路各層中的稱呼》一文,而ip頭中有乙個ttl域,ttl是time to live的縮寫,中文可以譯為「生存時間」,這個生存時間是由源主機設定初始值但不是存的具體時間,而是儲存了乙個ip資料報可以經過的最大路由數,每經過乙個處理他的路由器此值就減1,當此值為0則資料報將被丟棄,同時傳送icmp報文通知源主機。rfc 793中規定msl為2分鐘,實際應用中常用的是30秒,1分鐘和2分鐘等。

2msl即兩倍的msl,tcp的time_wait狀態也稱為2msl等待狀態,當tcp的一端發起主動關閉,在發出最後乙個ack包後,即第3次握手完成後傳送了第四次握手的ack包後就進入了time_wait狀態,必須在此狀態上停留兩倍的msl時間,等待2msl時間主要目的是怕最後乙個ack包對方沒收到,那麼對方在超時後將重發第三次握手的fin包,主動關閉端接到重發的fin包後可以再發乙個ack應答包。在time_wait狀態時兩端的埠不能使用,要等到2msl時間結束才可繼續使用。當連線處於2msl等待階段時任何遲到的報文段都將被丟棄。不過在實際應用中可以通過設定so_reuseaddr選項達到不必等待2msl時間結束再使用此埠。

ttl與msl是有關係的但不是簡單的相等的關係,msl要大於等於ttl。

我自己畫的圖:

TCP連線的11種狀態變遷

1 先上圖 2 全部11種狀態 2.1 客戶端獨有的 1 syn sent 2 fin wait1 3 fin wait2 4 closing 5 time wait 2.2 伺服器獨有的 1 listen 2 syn rcvd 3 close wait 4 last ack 2.3 共有的 1 c...

TCP狀態變遷

連線建立 連線建立分要經過三次握手過程 quote 1 客戶端傳送乙個syn段到指明客戶打算連線的伺服器的埠,報文段中要設定客戶端初始序號。2 伺服器發回包含伺服器的初始序號的syn報文段作為應答。同時,將確認序號設定為客戶的初始序號加1,並設定ack位標誌報文段為確認報文段。3 客戶端必須將確認序...

TCP連線各狀態數量 以及TCP各狀態變遷流程

檢視linux系統中tcp連線情況 檢視系統tcp連線中各個狀態的連線數。netstat an awk tcp end 檢視和本機80埠建立連線並狀態在established的所有ip netstat an grep 80 grep esta awk awk begin sort uniq 輸出每個...