TCP三次握手,四次揮手

       TCP 是面向連接的協議。運輸連接使用傳送TCP報文的。TCP運輸連接建立和釋放是每一次面向連接的通信中必不可少的過程。因此,運輸連接就有三個過程,即,連接建立,數據傳輸和連接釋放。運輸連接的管理就是使運輸連接的建立和釋放都能正常的進行。

 

       TCP的連接建立(三次握手):

        假定主機A運行的是TCP 客戶程序,而主機B運行的是TCP服務器程序。最初兩端的進程都處於CLOSED(關閉)狀態。注意A是主動打開連接,B是被動打開連接

        B的TCP服務器進程先創建傳輸控制塊TCB,準備接受客戶進程的連接請求,然後服務器進程處於LISTEN狀態,等待客戶的連接請求。如有,即作出反應。

        A的TCP客戶進程也是首先創建傳輸控制塊TCB,然後向B發出連接請求報文段,這時的首部中的同步位SYN=1,同時選擇一個初始序號seq=x,TCP規定,SYN報文段不能攜帶數據,但要消耗一個序號。這時,TCP客戶進程進入SYN-SENT(同步已發送)狀態。

        B收到連接請求報文段後,如果同意連接請求,則向A發送確認。在確認報文段中應把SYN位和ACK位 都置1,確認號是ack=x+1,同時也爲自己選擇一個序號seq=y注意這個報文段因爲不能攜帶數據但同樣要消耗一個序號。這時的TCP服務器進程進入SYN-RCVD(同步收到)狀態。

        TCP客戶進程收到B的確認後,還要想B進行確認。確認報文段的ACK置 1,確認號是ack=y+1,而自己的序號seq=x+1。TCP的標準規定,ACK報文段可以攜帶數據,但如果不攜帶數據就不消耗序號,在這種情況下,下一個數據段的序號仍是seq=x+1。這時TCP連接已經建立,A進入ESTABLISHED(已建立連接)狀態。

       當B收到A的確認後也進入ESTABLISHED(已建立連接)狀態。

       wKioL1efSUaRn5EHAAFC5P16tQ0361.png

       以上的連接建立過程也可以叫做三次握手

 

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

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

       B收到連接釋放報文段後即發出確認,確認號ack=u+1,而 這個報文段自己的序號是v,等於B前面已傳送過來的數據的最後一個字節的序號加1,。然後B就進入CLOSED-WAIT(關閉等待)狀態。TCP服務器進程這時應通知高層應用程序,因而從A到B這個方向的連接已經釋放了,這時的TCP連接就處於半關閉狀態即A已經沒有數據要發送了,但B若發送數據,A還要接受。就是說,從B到A這個方向的連接並未關閉,這個狀態可能會維持一段時間。

       A收到來自B的確認後,就進入FIN-WAIT-2(終止等待2)狀態,等待B發出的連接釋放報文段。

       若B已經沒有要向A發送的數據,其應用進程就通知TCP釋放連接。這時B發出的連接釋放報文段必須使FIN=1,現在假定B的序號爲w(在半關閉狀態下B可能有發送了一些數據)。B還必須重複上次已發送過的確認序號ack=u+1。這時B進入LAST-ACK(最後確認)狀態,等待A的確認。

       A在收到B的連接釋放報文段後,必須對此發出確認。在確認報文段中把ACK置1,確認號爲ack=w+1,而自己的序號是seq=u+1,然後進入TIME-WAIT(時間等待)狀態。注意現在連接還沒有釋放掉。必須經過時間等待計時器設置的時間2MSL後,A才進入到CLOSED狀態。時間MSL叫做最長報文段壽命。因此A進入到TIME-WAIT狀態後,要經過2MSL進入到CLOSED狀態,才能進行下一次的連接。當A撤銷相應的傳輸控制塊TCB後,就結束了這次的TCP連接。

       wKiom1efSWrA5KVVAAHARLhI-e4389.png

       上述的連接釋放過程就是四次揮手,也有人叫做四次握手,是一個意思。。。

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