您好,登錄后才能下訂單哦!
1.有關TCP
TCP是工作在傳輸層的傳輸控制協議。特點:
1>提供面向連接的服務
2>TCP連接是點對點的
3>提供可靠交互服務
4>提供全雙工通信
5>面向字節流
2.TCP的運輸連接管理
TCP是面向連接的協議,運輸連接是用來傳送TCP報文的。運輸連接有三個階段:連接建立、數據傳送和連接釋放。
(1)TCP的連接建立(三次握手)
建立連接的過程如圖:
假設主機A運行的是TCP客戶程序,B運行的是TCP服務程序。最初兩端的TCP進程都處于CLOSED狀態。圖中主機下面的方框分別是TCP進程所處的狀態。A主動打開連接,B被動打開連接。
1>B的TCP服務器進程先創建傳輸控制塊TCB,準備接受客戶進程的連接請求,然后服務器就處于LISTEN狀態,等待客戶的連接請求。如果有,立即作出響應。
A的TCP客戶進程也先創建傳輸控制塊TCB,然后向B發出連接請求報文段,這時首部中的同步位SYN=1,同時選擇一個初始序號seq=x,規定SYN報文段不能攜帶數據,但要消耗掉一個序號,這時TCP客戶進程進入SYN-SENT(同步已發送)狀態。
2>B收到連接請求報文段之后,如果同意連接,就向A發送確認,確認時將SYN、ACK都置1,確認號ack=x+1,同時也為自己選一個序號seq=y,這個報文段也不攜帶數據,但同樣也消耗掉一個序號。這時TCP服務器進程進入SYN-RCVD(同步收到)狀態。
3> A的TCP客戶進程收到B的確認之后,還要向B發送確認。將ACK置1,確認號ack=y+1,自己序號seq=x+1;x+1;ACK報文段可以攜帶數據,但如果不攜帶數據則不消耗序號,在這種情況下,下一個數據報文段的序號仍是seq=x+1,這時TCP連接已經建立。A進入ESTABLISHED(已建立連接)狀態。
B收到A的確認之后A,也進入ESTABLISHED狀態。
(2)TCP的連接釋放(四次揮手)
1> A應用進程先向其TCP發出連接釋放報文段,并停止在發送數據,主動關閉TCP連接。A將報文首部的終止控制位FIN置為1,序號為seq=u,他等于前面已傳送的數據的最后一個字節的序號加1,這時A進入FIN-WAIT-1狀態,等待B的確認。規定FIN報文段不攜帶數據,但要消耗掉一個序號
2>B收到連接釋放報文后即發出確認,確認號ack=u+1,自己的序號為v。等于前面已傳送的數據的最后一個字節的序號加1。然后B就進入CLOSE-WAIT狀態。TCP服務器進程應通知高層應用進程,因此從A到B這個方向的連接就釋放了。這時的TCP連接處于半關閉狀態,即A已經沒有數據要發送給B了,但B若發送數據,A還接收。從B到A這個方向的連接并未關閉。這個狀態可能會持續一段時間。
3>A收到來自B的確認后,就進入FIN-WAIT-2狀態,等待B發出連接的釋放報文段。
B已經沒有數據要發送給A了,其應用進程就通知TCP釋放連接,這時B發出的報文段FIN=1,假定B序號為w,B重復上次的確認號ack=u+1,這時B就進入了LAST-ACK狀態,等待A的確認。
4>A在收到B的連接釋放報文段后,必須對此發出確認。將ACK置為1,ack=w+1,seq=u+1。然后進入到TIME-WAIT狀態。現在TCP連接還沒有釋放掉,必須經過時間等待計時器設置的時間2MSL后,A才進入CLOSED狀態。
B只要收到了A發出的確認,就進入CLOSED狀態。
(3)TIME-WAIT--時間等待狀態
為什么要設置等待2MSL的時間?
1>為了保證A發送的最后一個ACK報文段能夠到達B。這個ACK報文段有可能丟失,因此使處在LAST-WAIT狀態的B收不到已發送的FIN+ACK報文段的確認。B會超時重傳這個FIN+ACK報文段,而A就能在2MSL時間內收到這個重傳的報文段。接著A重傳一次確認,重新啟動計時器,最后A和B都正常進入CLOSED狀態。如果A在TIME-WAIT狀態不等待一段時間,而是在發送完ACK報文段之后立即釋放連接,就無法收到B重傳來的FIN+ACK報文,不會再次發送確認,B就無法按正常狀態進入CLOSED狀態。
2> 防止“已失效的連接請求報文段”出現在本連接中。A在發送完最后一個ACK報文段之后,在經過時間2MSL,就可以使本連接持續的時間內所產生的所有報文段都從網絡中消失。這樣就可以使下一個新的鏈接中不會出現這種舊的連接請求報文段。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。