提供面向連接的服務(wù)     2>TCP連接是點(diǎn)對(duì)點(diǎn)的  &nb..."/>
溫馨提示×

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

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

運(yùn)輸層的TCP協(xié)議

發(fā)布時(shí)間:2020-07-11 19:14:34 來(lái)源:網(wǎng)絡(luò) 閱讀:468 作者:mdd9502053669 欄目:網(wǎng)絡(luò)安全

1.有關(guān)TCP

   TCP是工作在傳輸層的傳輸控制協(xié)議。特點(diǎn):

     1>提供面向連接的服務(wù)

     2>TCP連接是點(diǎn)對(duì)點(diǎn)的

     3>提供可靠交互服務(wù)

     4>提供全雙工通信

     5>面向字節(jié)流

2.TCP的運(yùn)輸連接管理

     TCP是面向連接的協(xié)議,運(yùn)輸連接是用來(lái)傳送TCP報(bào)文的。運(yùn)輸連接有三個(gè)階段:連接建立、數(shù)據(jù)傳送和連接釋放。

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

       建立連接的過(guò)程如圖:

      運(yùn)輸層的TCP協(xié)議

  假設(shè)主機(jī)A運(yùn)行的是TCP客戶程序,B運(yùn)行的是TCP服務(wù)程序。最初兩端的TCP進(jìn)程都處于CLOSED狀態(tài)。圖中主機(jī)下面的方框分別是TCP進(jìn)程所處的狀態(tài)。A主動(dòng)打開連接,B被動(dòng)打開連接。

 1>B的TCP服務(wù)器進(jìn)程先創(chuàng)建傳輸控制塊TCB,準(zhǔn)備接受客戶進(jìn)程的連接請(qǐng)求,然后服務(wù)器就處于LISTEN狀態(tài),等待客戶的連接請(qǐng)求。如果有,立即作出響應(yīng)。

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

  2>B收到連接請(qǐng)求報(bào)文段之后,如果同意連接,就向A發(fā)送確認(rèn),確認(rèn)時(shí)將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> A的TCP客戶進(jìn)程收到B的確認(rèn)之后,還要向B發(fā)送確認(rèn)。將ACK置1,確認(rèn)號(hào)ack=y+1,自己序號(hào)seq=x+1;x+1;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)。

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

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

      運(yùn)輸層的TCP協(xié)議

1> A應(yīng)用進(jìn)程先向其TCP發(fā)出連接釋放報(bào)文段,并停止在發(fā)送數(shù)據(jù),主動(dòng)關(guān)閉TCP連接。A將報(bào)文首部的終止控制位FIN置為1,序號(hào)為seq=u,他等于前面已傳送的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)加1,這時(shí)A進(jìn)入FIN-WAIT-1狀態(tài),等待B的確認(rèn)。規(guī)定FIN報(bào)文段不攜帶數(shù)據(jù),但要消耗掉一個(gè)序號(hào)

2>B收到連接釋放報(bào)文后即發(fā)出確認(rèn),確認(rèn)號(hào)ack=u+1,自己的序號(hào)為v。等于前面已傳送的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)加1。然后B就進(jìn)入CLOSE-WAIT狀態(tài)。TCP服務(wù)器進(jìn)程應(yīng)通知高層應(yīng)用進(jìn)程,因此從A到B這個(gè)方向的連接就釋放了。這時(shí)的TCP連接處于半關(guān)閉狀態(tài),即A已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)送給B了,但B若發(fā)送數(shù)據(jù),A還接收。從B到A這個(gè)方向的連接并未關(guān)閉。這個(gè)狀態(tài)可能會(huì)持續(xù)一段時(shí)間。

3>A收到來(lái)自B的確認(rèn)后,就進(jìn)入FIN-WAIT-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,B重復(fù)上次的確認(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)。將ACK置為1,ack=w+1,seq=u+1。然后進(jìn)入到TIME-WAIT狀態(tài)。現(xiàn)在TCP連接還沒(méi)有釋放掉,必須經(jīng)過(guò)時(shí)間等待計(jì)時(shí)器設(shè)置的時(shí)間2MSL后,A才進(jìn)入CLOSED狀態(tài)。

    B只要收到了A發(fā)出的確認(rèn),就進(jìn)入CLOSED狀態(tài)。

(3)TIME-WAIT--時(shí)間等待狀態(tài)

    為什么要設(shè)置等待2MSL的時(shí)間?

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

  2> 防止“已失效的連接請(qǐng)求報(bào)文段”出現(xiàn)在本連接中。A在發(fā)送完最后一個(gè)ACK報(bào)文段之后,在經(jīng)過(guò)時(shí)間2MSL,就可以使本連接持續(xù)的時(shí)間內(nèi)所產(chǎn)生的所有報(bào)文段都從網(wǎng)絡(luò)中消失。這樣就可以使下一個(gè)新的鏈接中不會(huì)出現(xiàn)這種舊的連接請(qǐng)求報(bào)文段。

    

 

向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