天天看點

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(已建立連接配接)狀态。

TCP三向交握,四次揮手

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

       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的确認。

繼續閱讀