溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

TCP建立釋放鏈接的過(guò)程

發(fā)布時(shí)間:2020-06-30 04:32:15 來(lái)源:網(wǎng)絡(luò) 閱讀:613 作者:馬尾和披肩 欄目:系統(tǒng)運(yùn)維

TCP(Transmission Control Protocol) 傳輸控制協(xié)議

TCP是主機(jī)對(duì)主機(jī)層的傳輸控制協(xié)議,提供可靠的連接服務(wù),采用三次握手確認(rèn)建立一個(gè)連接:

位碼即tcp標(biāo)志位,有6種標(biāo)示:

SYN(synchronous建立聯(lián)機(jī)) 

ACK(acknowledgement 確認(rèn)) 

PSH(push傳送) 

FIN(finish結(jié)束) 

RST(reset重置) 

URG(urgent緊急)

Sequence number(順序號(hào)碼) 

Acknowledge number(確認(rèn)號(hào)碼)

TCP建立釋放鏈接的過(guò)程

TCP報(bào)文頭部


TCP建立連接

TCP建立釋放鏈接的過(guò)程

如上圖所示 TCP建立連接的過(guò)程。 A是主動(dòng)打開(kāi)服務(wù)的,B是被動(dòng)打開(kāi)服務(wù)的


   1.B的TCP服務(wù)器進(jìn)程先創(chuàng)建傳輸控制塊TCB(Transmission Control Block 存儲(chǔ)了每個(gè)連接中的一些重要信息,如:TCP連接表,到發(fā)送和接收緩存的指針,到重傳隊(duì)列的指針,當(dāng)前的發(fā)送和接受序號(hào),等),準(zhǔn)備接收客戶進(jìn)程的連接請(qǐng)求,然后服務(wù)器進(jìn)程就處于LISTEN狀態(tài),等待客戶的連接請(qǐng)求.如有,就做出響應(yīng).

    A的TCP客戶進(jìn)程也是先創(chuàng)建傳輸控制塊,然后向B發(fā)出連接請(qǐng)求報(bào)文段,這時(shí)候首部中的同步位SYN=1,同時(shí)選擇一個(gè)初始序號(hào) seq=x。TCP規(guī)定,SYN報(bào)文段(SYN=1的報(bào)文段) 不能攜帶數(shù)據(jù),但要消耗一個(gè)序號(hào).這時(shí),TCP客戶進(jìn)程進(jìn)入SYN-SENT狀態(tài).

 

    2.B收到連接請(qǐng)求報(bào)文段后,如同意建立連接,則向A發(fā)送確認(rèn).在確認(rèn)報(bào)文段中,應(yīng)把SYN和ACK位都置1,確認(rèn)號(hào)是ack=x+1,同時(shí)也為自己選擇一個(gè)初始序號(hào)seq=y。這個(gè)報(bào)文段也不能攜帶數(shù)據(jù),同樣要消耗一個(gè)序號(hào).這時(shí)TCP服務(wù)器進(jìn)程進(jìn)入SYN-RCVD(同步收到)狀態(tài).

 

    3.TCP客戶進(jìn)程收到B的確認(rèn)后,還要向B給出確認(rèn)。確認(rèn)報(bào)文段的ACK置1,確認(rèn)號(hào)ack=y+1,而自己的序號(hào)seq=x+1。TCP的標(biāo)準(zhǔn)規(guī)定,ACK報(bào)文段可以攜帶數(shù)據(jù)。但如果不攜帶數(shù)據(jù)則不消耗序號(hào),這種情況下,下一個(gè)數(shù)據(jù)報(bào)文段的序號(hào)仍是seq=x+1。這時(shí),TCP連接已經(jīng)建立,A進(jìn)入ESTABLISHED(已建立連接)狀態(tài)。

    當(dāng)B收到A的確認(rèn)后,也進(jìn)入ESTABLISHED狀態(tài)。


為什么要有第三次確認(rèn)?

    這主要是為了防止已失效的連接請(qǐng)求報(bào)文段突然又傳送到了B,因而產(chǎn)生錯(cuò)誤.

    假設(shè)沒(méi)有客戶端的第三次確認(rèn)。A發(fā)送連接請(qǐng)求,但連接請(qǐng)求丟失而未收到B的確認(rèn),于是A重新發(fā)出了一次請(qǐng)求連接,后來(lái)B收到了請(qǐng)求,發(fā)出確認(rèn)建立了連接,在完成通信后連接釋放,成功完成一次通信。A雖發(fā)送了兩次連接請(qǐng)求,但第一次丟失,第二次成功,所以此時(shí)不存在已失效的連接請(qǐng)求報(bào)文。現(xiàn)假設(shè)A第一次發(fā)送的連接請(qǐng)求報(bào)文因?yàn)榫W(wǎng)絡(luò)問(wèn)題長(zhǎng)時(shí)間滯留了,到第二次通信完成釋放連接后才到達(dá)B,這就是一個(gè)已失效的報(bào)文,但此時(shí)B以為是A的又一次連接請(qǐng)求,于是發(fā)出了確認(rèn),若沒(méi)有第三次確認(rèn),連接就成功建立了。由于A現(xiàn)在并沒(méi)有發(fā)出建立請(qǐng)求,所以B回復(fù)的確認(rèn)A不理睬,所以不與B進(jìn)行通信,然而B(niǎo)就一直等著A發(fā)數(shù)據(jù)給他,就這樣,B傻乎乎的等了很久,白白浪費(fèi)了自己的青春(B的資源)。

 

 

TCP釋放連接

TCP建立釋放鏈接的過(guò)程

      1.數(shù)據(jù)傳輸結(jié)束后,通信雙方都可釋放連接?,F(xiàn)在A,B都處于ESTABLISHED狀態(tài)。A先發(fā)送連接釋放報(bào)文段,并停止在發(fā)送數(shù)據(jù),主動(dòng)關(guān)閉TCP連接。A把連接釋放報(bào)文段首部離得FIN置1,其序號(hào)seq=u,u等于前面已發(fā)送的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)加1.這是A進(jìn)入FIN-WAIT-1(終止等待1)狀態(tài),等待B的確認(rèn)。TCP規(guī)定,F(xiàn)IN報(bào)文段即使不攜帶數(shù)據(jù),也消耗一個(gè)序號(hào)。

       2.B收到連接釋放報(bào)文段后即發(fā)出確認(rèn),確認(rèn)號(hào)是ack=u+1,而這個(gè)報(bào)文段自己的序號(hào)是v,等于B前面已發(fā)送的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)加1.然后B進(jìn)入CLOSE-WAIT(關(guān)閉等待)狀態(tài)。至此A->B的連接就釋放了,這時(shí)TCP連接處于半關(guān)閉(half-close)狀態(tài),即A已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)送了,但B若發(fā)送數(shù)據(jù),A仍然接收。

        3.A收到B的確認(rèn)后,就進(jìn)入FIN-WAIT-2(終止等待2)狀態(tài),等待B發(fā)出的連接釋放報(bào)文段。若B已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)給A,其應(yīng)用進(jìn)程就通知TCP釋放連接。這時(shí)B發(fā)出的連接釋放報(bào)文段必須使FIN=1.假定B的序號(hào)是w(在半關(guān)閉狀態(tài)B可能又發(fā)送了一些數(shù)據(jù))。B還必須從夫上次已發(fā)送過(guò)的確認(rèn)號(hào)ack=u+1。這時(shí)B進(jìn)入LAST-ACK狀態(tài),等待A確認(rèn)。

        4.A在收到B的連接釋放報(bào)文段后,必須對(duì)此發(fā)出確認(rèn)。在確認(rèn)報(bào)文段中把ACK置1,確認(rèn)號(hào)ack=w+1,自己的序號(hào)為seq=u+1(前面發(fā)送的FIN報(bào)文段要消耗一個(gè)序號(hào))。然后進(jìn)入TIME-WAIT(時(shí)間等待)狀態(tài)?,F(xiàn)在TCP連接還沒(méi)有釋放掉。必須經(jīng)過(guò)時(shí)間等待計(jì)時(shí)器(TIME-WAIT timer)設(shè)置的時(shí)間2MSL后,A才進(jìn)入到CLOSED狀態(tài)。(MSL:Maximum Segment Lifetime 最長(zhǎng)報(bào)文段壽命)


為什么在TIME-WAIT要等待呢?

     1.為了保證A發(fā)送的最后一個(gè)ACK報(bào)文段能夠到達(dá)B。這個(gè)ACK報(bào)文段可能丟失,因而使處在LAST-ACK狀態(tài)的B收不到確認(rèn)。B會(huì)超時(shí)重傳FIN+ACK報(bào)文段,A就能在2MSL時(shí)間內(nèi)收到這個(gè)重傳的FIN+ACK報(bào)文段,接著A重傳一次確認(rèn),重啟計(jì)時(shí)器。最好,AB都正常進(jìn)入到CLOSED狀態(tài)。如果A在TIME-WAIT狀態(tài)不等待一段時(shí)間,而是再犯送完ACK報(bào)文后立即釋放連接,那么就無(wú)法收到B重傳的FIN+ACK報(bào)文段,因而也不會(huì)在發(fā)送一次確認(rèn)報(bào)文。這樣,B就無(wú)法按照正常步驟進(jìn)入CLOSED狀態(tài)。

     2.防止 已失效的連接請(qǐng)求報(bào)文出現(xiàn)在本連接中。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI