TCP協議的建立與釋放及TCP的有限狀態基

一、TCP的鏈接建立(三次握手)

如下圖所示:假定最初兩端的TCP進程都處於關閉狀態。下圖中,client主動打開鏈接,server被動打開鏈接

    

wKiom1c64PDi280nAADNTG48oZw185.jpg

創建過程:

    ①、server的TCP服務器進程先創建傳輸控制塊TCB(存儲了每一個鏈接中的重要信息),準備接受client進程的連接請求。然後服務器進程就處於LISTEN(收聽)狀態,等待客戶的連接請求。如有,作出響應。

    ②、client的TCP客戶進程也是首先創建傳輸控制模塊TCB,然後向server發出連接請求報文段,這時首部中的同步位SYN =1,同時選擇一個初始序號 seq =1000,TCP規定,SYN報文段不能攜帶數據,但要消耗一個序號。這時,TCP客戶進程進入SYN-SENT(同步以發送)狀態。mss表示最大段尺寸,

如果一個段太大,封裝成幀後超過了鏈路層的最大幀長度,就必須在IP 層分片,爲了避免這種情況,客戶端聲明自己的最大段尺寸,建議服務器端發來的段不要超過這個長度。

    ③、server收到連接請求報文段後,如同意建立連接,則向client發送確認。在確認報文段中應把SYN 爲和ACK 位都置1,確認號是ack =1001,同時也爲自己選擇一個初始序號seq=8000。這個報文段也不能攜帶數據,但同樣要消耗一個序號。這時TCP服務器進程進入SYN-RCVD(同步收到)狀態。

    ④、TCP客戶進程收到server的確認後,還要向server給出確認,確認報文段ACK 置1,確認號ack =8001,而自己序號爲seq=1002,TCP的標準規定,ACK 報文段可以攜帶數據。但如果不攜帶數據則不消耗序號,這種情況下,下一個數據報文段的序號仍是seq =1002.這時,TCP連接已經建立,client進去ESTABLISHED(已建立連接)狀態。

    ⑤、當servers收到client的確認後,也進入ESTABLISHED狀態。

****************爲什麼client還要發送一次確認呢?主要是爲了防止已失效的連接請求報文段突然又傳送到了server,因而產生錯誤。**********************

二、TCP的連接釋放(四次揮手)

如下圖所示:

wKiom1c66CbgRmmMAADOmVB2uDc447.jpg

釋放連接過程:

    ①、數據傳輸結束後,通信的雙方都可釋放連接。現在client和server都處於ESTABLISHED狀態。client的應用進程先向其TCP發出連接釋放,並停止再發送數據,主動關閉TCP連接。client把連接釋放報文段首部的FIN置1,其序號 seq=1021,它等於前面已傳送過的數據的最後一個字節的序號加1.這是client進入FIN-WAIT-1(終止等待1)狀態,等待server的確認。TCP規定,FIN報文段即使不攜帶數據,它也消耗一個序號。

    ②、server收到連接釋放報文段後即發出確認,確認號是ack=1022,然後server就進入CLOSE-WAIT(關閉等待)狀態。TCP服務器進程這時應通過高層應用進程,而從client到server這個方向的連接就釋放了,這時的TCP連接處於半關閉(half-close)狀態,即client已經沒有數據要發送了,但server若發送數據,client仍要接收。也就是說server到client這個方向的連接並未關閉。

    ③、client收到來自server的確認後,就進入FIN-WAIT-2(終止等待2)狀態,等待server發出的連接釋放報文段。若server已經沒有要向client發送的數據,其應用進程就通知TCP 釋放連接。這是B發出的連接釋放報文段必須使FIN=1 。現假定server的序號爲8011.這是server就進入LAST-ACK(最後確認狀態),等待client的確認。

    ④、client在收到server的連接釋放報文段後,必須對此發出確認,在確認報文段中把ACK置1 ,序號爲8012,然後進入到TIME-WAIT(時間等待)狀態。這時候TCP連接還沒有釋放掉。必須經過時間等待計時器設置的時間2MSL後,client才進入到CLOSE狀態。時間MSL叫做最長報文段壽命,建議設置爲2分鐘。

    ⑤、server接收到了client發出的確認,就進入CLOSED狀態。

**************爲什麼client在TIME-WAIT狀態必須等待2MSL時間呢?**********

    第一,爲了保證client發送的最後一個ACK報文段能夠到達server。

    第二,防止“已失效的連接請求報文段”出現在本連接中。

三、TCP有限狀態基

    wKiom1c6_PmAM8ZBAADDieGcPps416.png

每個方框中的大寫英文字符串是TCP標準所使用的TCP連接狀態名。狀態之間的箭頭表示可能發生的狀態變遷。箭頭旁邊的字,表明引起這種變遷的原因,或表明發生狀態變遷後又出現什麼動作。圖中三種不同的箭頭表示的意義不同,粗實箭頭表示對客戶進程的正常變遷,粗虛箭頭表示對服務器進程的正常變遷。另外一種細線箭頭表示異常變遷。

    ①、CLOSED 狀態時初始狀態。

    ②、LISTEN:被動打開,服務器端的 狀態變爲LISTEN(監聽)

    ③、SYN-RECVD:服務器端收到SYN後,狀態爲SYN;發送SYN ACK;

    ④、SYN_SENTY:應用程序發送SYN後,狀態爲SYN_SENT;

    ⑤、ESTABLISHED:當連接已經建立,客戶端進入ESTABLISHED狀態,服務器端收到客戶端的確認後,服務器端也進入ESTABLISHED狀態。

     ⑥、FIN_WAIT_1:應用程序端發送FIN,準備斷開TCP連接

    ⑦、CLOSE_WAIT:服務器端在收到FIN後,發送ACK,狀態爲CLOSE_WAIT

    ⑧、FIN_WAIT_2:當客戶端收到來自服務器端的確認後,就進入FIN_WAIT_2.

    ⑨、LAST_ACK:當服務器端沒有要向客戶端發送的數據,其應用進程就通知TCP釋放連接。服務器端重複上次已發送過得確認號。這時服務器端就進入LAST_ACK狀態。

    10、TIME_WAIT:客戶端收到服務器端的連接釋放報文段後,對此發出確認,然後客戶端就進入了TIME_WAIT狀態。

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