摘要:連接管理概述是面向連接的協議。要使每一方能夠確知對方的存在。的應用進程先向其發出連接釋放報文段,并停止發送數據,主動關閉連接。將連接釋放報文的終止控制位設置為,序列號為。收到的連接釋放報文之后,發送確認。
TCP連接管理概述
TCP是面向連接的協議。運輸連接是用來傳送TCP報文的。TCP的連接和釋放是每一次面向連接的通信中必不可少的過程。因此,運輸連接就有三個階段,即:連接建立,數據傳輸和連接釋放。運輸連接的管理就是使運輸連接的建立和釋放都可以正常的進行。
在TCP連接的建立過程中要解決一下三個問題。
1.要使每一方能夠確知對方的存在。
2.要允許雙方協商一些參數(如窗口最大值、是否使用窗口擴大選項和時間戳選項以及服務質量等)。
3.能夠對運輸實體資源(如緩存大小、連接中的項目等)進行分配。
TCP連接的建立采用客戶服務器方式。主動發起建立連接的應用叫做客戶(Client),而被動等待連接建立的應用進程叫做服務器(server)。
TCP連接的建立下圖表示的是TCP連接建立的過程。主機A運行的是TCP客戶端程序,而B運行TCP服務器端程序。最初的時候,雙方的TCP進程都處于關閉(CLOSED)狀態。然后A主動打開連接,而B被動打開連接。
1.A發送一個SYN=1的TCP報文,序列號seq是x。A的狀態由CLOSED進入到SYN-SENT。
2.B收到之后發送SYN=1,ACK=1的TCP報文,同樣為自己選一個序列號seq=y,確認號ack=x+1。B的狀態由LISTEN進入到SYN-RCVD。
3.A收到B的確認之后,需要給B確認。ACK=1,seq=x+1,確認號ack是y+1。A的狀態由SYN-SENT進入到ESTABLISH,B在收到A的確認之后也由SYN-RCVD進入到ESTABLISH。
以上的過程就是3次握手。這里一個常見的問題就是為什么在A發送建立連接的請求后還需要發送一個確認報文?這是因為主要是為了避免已經失效的連接請求報文段突然又傳到了B而產生錯誤。失效的報文主要是在出現在網絡不是很通暢的時候會產生,而三次握手機制避免了這種情況會產生的問題。
TCP連接的釋放在傳輸結束之后,通信雙方都可以釋放連接。A的應用進程先向其TCP發出連接釋放報文段,并停止發送數據,主動關閉TCP連接。
1.A將連接釋放報文的終止控制位FIN設置為1,seq序列號為u。此時A的狀態由ESTABLISH進入到FIN-WAIT-1。
2.B在收到這個報文之后,隨即發出確認。ACK=1 seq=v ack=u+1。此時B由ESTABLISH進入到CLOSE-WAIT狀態。A收到B的確認之后進入到FIN-WAIT-2。此時B的TCP服務器進程會通知高層應用進程。這個時候A到B的傳輸就釋放了,TCP的連接處于半關閉狀態。A沒有數據發送到B,若B還有數據,可以發送到A。
3.B發送FIN=1 ACK=1 seq=w ack=u+1(必須重復上次的確認號)。B由CLOSE-WAIT進入到LAST-ACK狀態。
4.A收到B的連接釋放報文之后,發送確認ACK=1 seq=u+1 ack=w+1。此時A由FIN-WAIT-2進入到TIME-WAIT。B在收到A的確認之后由LAST-ACK進入CLOSED狀態。A在2MSL(大約是4分鐘)之后進入到CLOSED狀態。
這里一個常見的問題就是A為什么需要2MSL的等待時間。第一是為了保證A最后發送的ACK報文到達B。第二是為了當時出現上文提到的失效的報文段。因為2MSL會使本次連接產生的報文段都從網絡中消失。
全文完。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29883.html
摘要:正文討論深淺拷貝,首先要從的基本數據類型說起根據中的變量類型傳遞方式,分為值類型和引用類型,值類型變量包括。當你拷貝的對象有多級的時候,就是深拷貝。數據不存在則對其拷貝。 前言: 本文主要閱讀對象:對深淺拷貝印象模糊對初級前端,想對js深淺拷貝聊一聊的中級前端。 如果是對這些有完整對認知體系和解決方法的大佬,可以選擇略過。 正文: 討論深淺拷貝,首先要從js的基本數據類型說起: 根據 J...
閱讀 3318·2023-04-25 16:25
閱讀 3823·2021-11-15 18:01
閱讀 1600·2021-09-10 11:21
閱讀 3007·2021-08-02 16:53
閱讀 3081·2019-08-30 15:55
閱讀 2489·2019-08-29 16:24
閱讀 2098·2019-08-29 13:14
閱讀 1027·2019-08-29 13:00