**:
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。
我自己畫的圖:
補充:
理解0:什麼是主動套接字,什麼是被動套接字?
理解1:為什麼tcp/ip要三次握手,和四次斷開?
理解2:客戶端狀態向前推進過程,伺服器端狀態向前推進過程
理解3:執行主動關閉的那一端,進入time_wait狀態
理解4:time_wait 時間是多長2msl (2倍的最大生命期時間)
原因:(ack y+1)如果傳送失敗可以重發。
伺服器端處於closed狀態,不等於客戶端也處於closed狀態。。
理解5:兩端同時關閉 將產生closing狀態,最後雙方都進入time_wait狀態。
tcpip協議的11種狀態
傳智掃地僧課程學習筆記。很多操作,是在應用底層操作的,為什麼三次握手,因此全雙工通訊,兩端都要確認。學socket程式設計,關鍵是理解tcp ip內部的狀態機理,學指標使用,關鍵是理解記憶體布局使用,執行主動關閉的那一端,進入time wait狀態,之前伺服器關閉後,再次啟動,提示埠占用,是因為仍然...
TCP IP協議11種狀態
1.l syn sent 這個狀態與syn rcvd 狀態相呼應,當客戶端socket執行connect 進行連線時,它首先傳送syn報文,然後隨即進入到syn sent 狀態,並等待服務端的傳送三次握手中的第2個報文。syn sent 狀態表示客戶端已傳送syn報文。2.l listen 表示伺服...
TCP連線的11種狀態變遷
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 a...