TCP有限狀態機簡述

  • 狀態機簡述

    計算機裏講的是有限狀態機(Finite-state machine)。人生就是一個有限狀態機,出生即open,死亡即close。當然人是一個複雜的有限狀態機,在人的一生當中可以有很多個狀態轉換。比如你有一個(男)女朋友,和(他)她吵架即輸入動作,分手成單身了即結果狀態。當然也有動作的結果是不會讓現有狀態發生發生遷移的,取而代之的是同一狀態的變化。比如和(男)女友吵架的這一動作雖沒有造成分手,即還是非單身的狀態,但你的心境可能發生了變化...
簡而言之,有始有終,有有限次狀態遷移即爲有限狀態機。參考 http://en.wikipedia.org/wiki/Finite-state_machine


  • TCP的三次握手和四次斷開

    建立TCP連接的三次握手:


我:你好!
MM:呵呵,你好!
我:呵呵

    斷開TCP連接的四次握手:


我:再見!
MM:呵呵
MM:再見!
我:呵呵

而所謂的狀態機是指MM等待有人搭話,搭話已發送,等待MM回覆,收到回覆,已說再見,等MM說再見。。。。這些狀態而已。


  • TCP有效狀態機簡述


     tcp有效狀態機.png

tcp有效狀態機


根據上圖,紅色虛線箭頭代表服務器端的狀態,而綠色實現箭頭代表客戶端的狀態。

  1. CLOSED狀態:服務器端跟客戶端均關閉,處於CLOSED狀態。其實開始並未規定誰是服務器端,誰是客戶端,根據需求而定;

  2. LISTEN狀態:由於某些情況,其中一個端口被動打開處於監聽狀態(LISTEN),而另外一個向監聽端發起會話請求,TCP三次握手開始。(ps 被動打開:指系統的應用程序需要打開一個端口,希望建立一個傳人的鏈接,接受外部的請求,所以需要打開一個套接字監督該端口。);

  3. SYN_SENT狀態:客戶端有連接需求,需要於服務器端第一次建立鏈接,這時候向服務器端發送請求,SYN=1,客戶端處於SYN_SENT狀態;

  4. SYNRECVD狀態:服務器端收到SYN請求後,自身處於SYNRECVD狀態;

  5. ESTABLISHED狀態:服務器端發送SYN ACK=1回饋請求之後,轉換爲ESTABLISHED態, SYN_SENT在收到SYN ACK,發送ACK,狀態爲ESTABLISHED。雙方連接建立完成;

  6. FIN_WAIT_1狀態:當雙方通信完成,客戶端向服務器發送FIN信號,準備斷開連接,自身從ESTABLISHED狀態轉換爲FIN_WAIT_1狀態;

  7. CLOSE_WAIT狀態:服務器端在收到FIN後,發送ACK確認,狀態爲CLOSE_WAIT狀態,等待關閉;

  8. LAST_ACK狀態:等待數據傳輸完成之後,服務器端發送FIN,自身狀態變爲LAST_ACK狀態;

  9. FIN_WAIT_2狀態:客戶端只收到服務器端得ACK信號,並沒有收到FIN信號;說明服務器端還有數據傳輸,那麼此時爲半連接;

  10. TIME_WAIT狀態:有兩種方式進入 該狀態:1、FIN_WAIT_1進入:此時應用程序端口收到FIN+ACK(而不是像FIN_WAIT_2那樣只收到ACK,說明數據已經發送完畢)並向服務器端口發送ACK;2、FIN_WAIT_2進入:此時應用程序端口收到了FIN,然後向服務器端發送ACK;TIME_WAIT是爲了實現TCP 全雙工連接的可靠性關閉,用來重發可能丟失的ACK報文;需要持續2個MSL(最大報文生存時間):假設應用程序端口在進入TIME_WAIT後,2個 MSL時間內並沒有收到FIN,說明應用程序最後發出的ACK已經收到了;否則,會在2個MSL內在此收到ACK報文;

 

碼字很辛苦,轉載請註明來自http://www.zaizai.org.cn的《TCP有效狀態機簡述 》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章