国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
TCP協(xié)議詳解

TCP協(xié)議是TCP/IP協(xié)議族中一個(gè)重要的協(xié)議。和IP協(xié)議相比,TCP協(xié)議更靠近應(yīng)用層,因此在應(yīng)用程序中具有更強(qiáng)的可操作性。一些重要的socket選項(xiàng)都和TCP協(xié)議相關(guān)。

TCP頭部信息:TCP頭部信息出現(xiàn)在每個(gè)TCP報(bào)文段中,用于指定通信的源端端口號(hào),目的端端口號(hào),管理TCP連接,控制兩個(gè)方向的數(shù)據(jù)流。

TCP狀態(tài)轉(zhuǎn)移過程:TCP連接的任意一端都是一個(gè)狀態(tài)機(jī)。在TCP連接從建立到斷開的整個(gè)過程中,連接兩端的狀態(tài)機(jī)將經(jīng)歷不同的狀態(tài)變遷。

TCP數(shù)據(jù)流:通過分析TCP數(shù)據(jù)流,我們就可以從網(wǎng)絡(luò)應(yīng)用程序外部來了解應(yīng)用層協(xié)議和通信雙方交換的應(yīng)用程序數(shù)據(jù)。

TCP數(shù)據(jù)流的控制:為了保證可靠傳輸和提高網(wǎng)絡(luò)通信質(zhì)量,內(nèi)核需要對(duì)TCP數(shù)據(jù)流進(jìn)行控制(超時(shí)重傳 和 擁塞控制)。

TCP服務(wù)的特點(diǎn)

傳輸層協(xié)議主要有:TCP協(xié)議 和 UDP協(xié)議。
TCP協(xié)議相對(duì)于UDP協(xié)議的特點(diǎn)是:面向連接,字節(jié)流和可靠傳輸。

使用TCP協(xié)議通信的雙方必須先建立連接,然后才能開始數(shù)據(jù)的讀寫。
雙方都必須為該連接分配必要的內(nèi)核資源,以管理連接的狀態(tài)和連接上數(shù)據(jù)的傳輸。
TCP連接是全雙工的(雙方的數(shù)據(jù)讀寫可以通過一個(gè)連接進(jìn)行),完成數(shù)據(jù)交換后,通信雙方都必須斷開連接以釋放系統(tǒng)資源。

TCP協(xié)議的這種連接是一對(duì)一的,所以基于廣播和多播(目標(biāo)是多個(gè)主機(jī)地址)的應(yīng)用程序不能使用TCP服務(wù),而無連接協(xié)議UDP則非常適合于廣播和多播。

字節(jié)流服務(wù)和數(shù)據(jù)報(bào)服務(wù)的區(qū)別,這種區(qū)別對(duì)應(yīng)到實(shí)際編程中,則體現(xiàn)為通信雙方是否必須執(zhí)行相同次數(shù)的讀,寫操作(這只是表現(xiàn)形式)。
當(dāng)發(fā)送端應(yīng)用程序連續(xù)執(zhí)行多次寫操作時(shí),TCP模塊先將這些數(shù)據(jù)放入TCP發(fā)送緩沖區(qū)中,當(dāng)TCP模塊真正開始發(fā)送數(shù)據(jù)時(shí),發(fā)送緩沖區(qū)中這些等待的數(shù)據(jù)可能被封裝成一個(gè)或多個(gè)TCP報(bào)文段發(fā)出。
因此,TCP模塊發(fā)送出的TCP報(bào)文段的個(gè)數(shù)和應(yīng)用程序執(zhí)行的寫操作次數(shù)之間沒有固定數(shù)量關(guān)系。

當(dāng)接收端收到一個(gè)或多個(gè)TCP報(bào)文段后,TCP模塊將它們攜帶的應(yīng)用程序數(shù)據(jù)按照TCP報(bào)文段的序號(hào)以此放入TCP接收緩沖區(qū)中,并通知應(yīng)用程序讀取數(shù)據(jù)。
接收端應(yīng)用程序可以一次性將TCP接受緩沖區(qū)中的數(shù)據(jù)全部讀出,也可以分多次讀取,這取決于用戶指定的應(yīng)用程序讀緩沖區(qū)的大小。
因此,應(yīng)用程序執(zhí)行讀操作次數(shù)和TCP模塊接收到的TCP報(bào)文段個(gè)數(shù)之間沒有固定的數(shù)量關(guān)系。

綜上所述,發(fā)送端執(zhí)行的寫操作次數(shù)和接收端執(zhí)行的讀操作次數(shù)之間沒有任何數(shù)量關(guān)系,這是字節(jié)流的概念(應(yīng)用程序?qū)?shù)據(jù)的發(fā)送和接收是沒有邊界限制的)。

UDP:發(fā)送端應(yīng)用程序每執(zhí)行一次寫操作,UDP模塊就將其封裝成一個(gè)UDP數(shù)據(jù)報(bào)并發(fā)送。接收端必須及時(shí)針對(duì)每一個(gè)UDP數(shù)據(jù)報(bào)執(zhí)行讀操作,否則就會(huì)丟包(發(fā)生在較慢的服務(wù)器上)。

并且如果用戶沒有指定足夠的應(yīng)用程序緩沖區(qū)來讀取UDP數(shù)據(jù),則UDP數(shù)據(jù)將被截?cái)唷?/p>

兩者區(qū)別如圖:

TCP傳輸時(shí)可靠的。

TCP協(xié)議采用發(fā)送應(yīng)答機(jī)制,即發(fā)送端發(fā)送的每個(gè)TCP報(bào)文段都必須得到接收方的應(yīng)答,才認(rèn)為這個(gè)TCP報(bào)文段傳輸成功。

TCP協(xié)議采用超時(shí)重傳機(jī)制,發(fā)送端在發(fā)送出一個(gè)TCP報(bào)文段之后啟動(dòng)定時(shí)器,如果在定時(shí)時(shí)間內(nèi)未收到應(yīng)答,它將重發(fā)該報(bào)文段。

因?yàn)門CP報(bào)文段最終是以IP數(shù)據(jù)報(bào)發(fā)送的,而IP數(shù)據(jù)報(bào)到達(dá)接收端可能亂序,重復(fù),所以TCP協(xié)議還會(huì)對(duì)接收到的TCP報(bào)文段重排,整理,再交付給應(yīng)用層。

UDP協(xié)議則和IP協(xié)議一樣,提供不可靠服務(wù)。它們都需要上層協(xié)議來處理數(shù)據(jù)確認(rèn)和超時(shí)重傳。

TCP頭部結(jié)構(gòu)

TCP固定頭部結(jié)構(gòu)

16位端口號(hào):告知主機(jī)該報(bào)文段是來自哪里(源端口)以及傳給哪個(gè)上層協(xié)議或應(yīng)用程序(目的端口)的??蛻舳艘话闶褂孟到y(tǒng)自動(dòng)選擇的臨時(shí)端口號(hào),服務(wù)端一般使用知名服務(wù)端口號(hào)(/etc/services 文件中可查看)

32位序號(hào):一次TCP通信(從TCP連接建立到斷開)過程中某一個(gè)傳輸方向上的字節(jié)流的每個(gè)字節(jié)編號(hào),在通信的第一個(gè)TCP報(bào)文段中,序號(hào)值為某個(gè)隨機(jī)值ISN,確認(rèn)號(hào)為0。(例如:某個(gè)TCP報(bào)文段傳送的數(shù)據(jù)是字節(jié)流中的第1025~2048字節(jié),那么該報(bào)文段的序號(hào)值就是ISN+1025。另一個(gè)傳輸方向同理)。

32位確認(rèn)號(hào):用作對(duì)另一方發(fā)送來的TCP報(bào)文段的響應(yīng)。其值是收到的TCP報(bào)文段的序號(hào)值加1。

4位頭部長(zhǎng)度:標(biāo)識(shí)該TCP頭部有多少個(gè)4 字節(jié) 。 TCP頭部最長(zhǎng)是60字節(jié)。

6位標(biāo)志位包含如下幾項(xiàng):
(1)URG標(biāo)志:表示緊急指針是否有效。
(2)ACK標(biāo)志:表示確認(rèn)號(hào)是否有效,我們稱攜帶ACK標(biāo)志的TCP報(bào)文段為確認(rèn)報(bào)文段。
(3)PSH標(biāo)志:提示接收端應(yīng)用程序應(yīng)該立即從TCP接受緩沖區(qū)中讀走數(shù)據(jù),為接受后續(xù)數(shù)據(jù)騰出空間(如果應(yīng)用程序不將接收到的數(shù)據(jù)讀走,它們會(huì)一直停留在TCP接受緩沖區(qū)中)。
(4)RST標(biāo)志:表示要求對(duì)方重新建立連接。攜帶RST標(biāo)志的TCP報(bào)文段為復(fù)位報(bào)文段。
(5)SYN標(biāo)志:表示請(qǐng)求建立一個(gè)連接。攜帶SYN標(biāo)志的TCP報(bào)文段為同步報(bào)文段。
(6)FIN標(biāo)志:表示通知對(duì)方本端要關(guān)閉連接了。攜帶FIN標(biāo)志的TCP報(bào)文段為結(jié)束報(bào)文段。

16位窗口大小:是TCP流量控制的一個(gè)手段。這里的窗口指的是接受通告窗口(Receiver Window,RWND)。它告訴對(duì)方本端的TCP接受緩沖區(qū)還能容納多少字節(jié)的數(shù)據(jù),對(duì)方以此控制發(fā)送數(shù)據(jù)的速度。

16位校驗(yàn)和:由發(fā)送端填充,接收端對(duì)TCP報(bào)文段執(zhí)行CRC算法以檢驗(yàn)TCP報(bào)文段在傳輸過程中是否損壞。注意,這個(gè)校驗(yàn)不僅包括TCP頭部,也包括數(shù)據(jù)部分,這也是TCP可靠傳輸?shù)囊粋€(gè)重要保障。

16位緊急指針:是一個(gè)正的偏移量。它和序號(hào)字段的值相加表示最后一個(gè)緊急數(shù)據(jù)的下一字節(jié)的序號(hào)。因此,確切地說,這個(gè)字段是緊急指針相對(duì)當(dāng)前序號(hào)的偏移,不妨稱之為緊急偏移。TCP的緊急指針是發(fā)送端向接收端發(fā)送緊急數(shù)據(jù)的方法。

TCP頭部選項(xiàng)

TCP頭部的最后一個(gè)選項(xiàng)字段是可變長(zhǎng)的可選信息,這部分最多包含40字節(jié),因?yàn)門CP頭部最長(zhǎng)是60字節(jié)(包含20字節(jié)的固定部分)。

選項(xiàng)的第一個(gè)字段kind說明選項(xiàng)的類型(有的TCP選項(xiàng)沒有后兩個(gè)字段,僅包含1字節(jié)的kind字段)。第二個(gè)字段length字段占據(jù)的2字節(jié)。第三個(gè)字段info(如果有的話)是選項(xiàng)的具體信息。
常見的TCP選項(xiàng)有7種,如圖:

kind=0是選項(xiàng)表結(jié)束選項(xiàng)。

kind=1是空操作(nop)選項(xiàng),沒有特殊含義,一般用于將TCP選項(xiàng)的總長(zhǎng)度填充為4字節(jié)的整數(shù)倍。

kind=2是最大報(bào)文段長(zhǎng)度選項(xiàng)。

kind=3是窗口擴(kuò)大因子選項(xiàng)。

kind=4是選擇性確認(rèn)(SACK)選項(xiàng)。

kind=5是SACK實(shí)際工作的選項(xiàng)。

kind=8是時(shí)間戳選項(xiàng)。

TCP連接的建立和關(guān)閉

前三個(gè)報(bào)文段是三次握手的步驟,用來建立連接。

后四個(gè)報(bào)文段是四次揮手的步驟,用來關(guān)閉連接。

半關(guān)閉狀態(tài)

TCP連接是全雙工的,所以它允許兩個(gè)方向的數(shù)據(jù)傳輸被獨(dú)立關(guān)閉。還言之,通信的一端可以發(fā)送結(jié)束報(bào)文段給對(duì)方,告訴它本端已經(jīng)完成數(shù)據(jù)的發(fā)送,但允許繼續(xù)接收來自對(duì)方的數(shù)據(jù),直到對(duì)方也發(fā)送結(jié)束報(bào)文段以關(guān)閉連接。這種狀態(tài)被稱為半關(guān)閉。

而判斷對(duì)方是否已經(jīng)關(guān)閉連接的方法是:read函數(shù)調(diào)用返回0。

 

連接超時(shí)

前面我們討論的是很快建立連接的情況。如果客戶端訪問一個(gè)距離它很遠(yuǎn)的服務(wù)器,或者由于網(wǎng)絡(luò)繁忙,導(dǎo)致服務(wù)器對(duì)客戶端發(fā)送處的同步報(bào)文段沒有應(yīng)答,此時(shí)客戶端程序如果是提供可靠服務(wù)的TCP,它必然是先進(jìn)行重連(可能執(zhí)行多次),如果重連仍無效,則通知應(yīng)用程序連接超時(shí)。

TCP狀態(tài)轉(zhuǎn)移

圖中的粗虛線表示典型的服務(wù)器端連接的狀態(tài)轉(zhuǎn)移;粗實(shí)線表示典型的客戶端連接的狀態(tài)轉(zhuǎn)移。CLOSED是一個(gè)假想的起始點(diǎn),不是一個(gè)實(shí)際的狀態(tài)。

服務(wù)器通過listen系統(tǒng)調(diào)用進(jìn)入LISTEN狀態(tài),被動(dòng)等待客戶端連接,因此執(zhí)行的是所謂的被動(dòng)打開。服務(wù)器一旦監(jiān)聽到某個(gè)連接請(qǐng)求(收到同步報(bào)文段),就將該連接放入內(nèi)核等待隊(duì)列中,并向客戶端發(fā)送帶SYN標(biāo)志的確認(rèn)報(bào)文段。此時(shí)該連接處于SYN_RCVD狀態(tài)。
如果服務(wù)器成功地接收到客戶端發(fā)送回的確認(rèn)報(bào)文段,則該連接轉(zhuǎn)移到ESTABLISHED狀態(tài)。
ESTABLISHED狀態(tài)是連接雙方能夠進(jìn)行雙向數(shù)據(jù)傳輸?shù)臓顟B(tài)。

當(dāng)客戶端主動(dòng)關(guān)閉連接時(shí),服務(wù)器通過返回確認(rèn)報(bào)文段使連接進(jìn)入CLOSED_WAIT狀態(tài)。這個(gè)狀態(tài)的含義是:等待服務(wù)器應(yīng)用程序關(guān)閉連接。通常,服務(wù)器檢測(cè)到客戶端關(guān)閉連接后,也會(huì)立即給客戶端發(fā)送一個(gè)結(jié)束報(bào)文段來關(guān)閉連接。
這時(shí)連接轉(zhuǎn)移到LAST_ACK狀態(tài),以等待客戶端對(duì)結(jié)束報(bào)文段的最后一次確認(rèn)。一旦完成,連接就徹底關(guān)閉。

客戶端通過connect系統(tǒng)調(diào)用主動(dòng)與服務(wù)器建立連接。Connect系統(tǒng)調(diào)用首先給服務(wù)器發(fā)送一個(gè)同步報(bào)文段,使連接轉(zhuǎn)移到SYN_SENT狀態(tài)。此后,connect系統(tǒng)調(diào)用可能因?yàn)槿缦聝蓚€(gè)原因失敗返回:
1.如果connect連接的目標(biāo)端口不存在(未被任何進(jìn)程監(jiān)聽),或者該端口仍處于TIME_WAIT狀態(tài)的連接所占用,則服務(wù)器將給客戶端發(fā)送一個(gè)復(fù)位報(bào)文段,connect調(diào)用失敗。
2.如果目標(biāo)端口存在,但connect在超時(shí)時(shí)間內(nèi)未收到服務(wù)器的確認(rèn)報(bào)文段,則connect調(diào)用失敗。
Connect調(diào)用失敗將使連接立即返回到初始的CLOSED狀態(tài)。如果客戶端成功收到服務(wù)器的同步報(bào)文段和確認(rèn),則connect調(diào)用成功返回,連接轉(zhuǎn)移至ESTABLISHED狀態(tài)。
當(dāng)客戶端執(zhí)行主動(dòng)關(guān)閉時(shí),它將向服務(wù)器發(fā)送一個(gè)結(jié)束報(bào)文段,同時(shí)連接進(jìn)入FIN_WAIT_1狀態(tài)。若此時(shí)客戶端收到服務(wù)器專門用于確認(rèn)目的的確認(rèn)報(bào)文段,則連接轉(zhuǎn)移至FIN_WAIT_2狀態(tài)。
當(dāng)客戶端處于FIN_WAIT_2狀態(tài)時(shí),服務(wù)器處于CLOSE_WAIT狀態(tài),這一對(duì)狀態(tài)時(shí)可能發(fā)生半關(guān)閉的狀態(tài)。此時(shí)如果服務(wù)器也關(guān)閉連接(發(fā)送結(jié)束報(bào)文段),則客戶端將給予確認(rèn)進(jìn)入TIME_WAIT狀態(tài)。

連接停留在FIN_WAIT_2狀態(tài)的情況可能發(fā)生在:客戶端執(zhí)行半關(guān)閉后,未等服務(wù)器關(guān)閉連接就強(qiáng)行退出了。
此時(shí)客戶端連接由內(nèi)核來接管,可稱之為孤兒連接(和孤兒進(jìn)程類似)。LINUX定義了兩個(gè)內(nèi)核變量:/proc/sys/net/ipv4/tcp_max_orphans和/proc/sys/net/ipv4/tcp_fin_timeout。前者指定內(nèi)核能接管的孤兒連接數(shù)目,后者指定孤兒連接在內(nèi)核中生存的時(shí)間。

TIME_WAIT狀態(tài)

客戶端連接在收到服務(wù)器的結(jié)束報(bào)文段之后,并沒有直接進(jìn)入CLOSED狀態(tài),而是轉(zhuǎn)移到TIME_WAIT狀態(tài)。這個(gè)狀態(tài),客戶端連接要等待一段長(zhǎng)為2MSL(報(bào)文段最大生存時(shí)間)的時(shí)間,才能完全關(guān)閉。MSL是TCP報(bào)文段在網(wǎng)絡(luò)中的最大生存時(shí)間,建議值是2min 。

TIME_WAIT狀態(tài)存在的原因有兩點(diǎn):
* 可靠地終止TCP連接。

保證讓遲來的TCP報(bào)文段有足夠的時(shí)間被識(shí)別并丟棄。

為什么要堅(jiān)持2MSL的原因:
因?yàn)門CP報(bào)文段的最大生存時(shí)間是MSL,所以堅(jiān)持2MSL時(shí)間的TIME_WAIT狀態(tài)能夠確保網(wǎng)絡(luò)上兩個(gè)傳輸方向上尚未被接收到的,遲到的TCP報(bào)文段都已消失(被中轉(zhuǎn)路由器丟棄)。因此,在同一個(gè)端口的新連接可以在2MSL時(shí)間之后安全地建立,而不會(huì)收到屬于原來連接的應(yīng)用程序的數(shù)據(jù)。

TCP超時(shí)重傳

TCP服務(wù)必須能夠重傳超時(shí)時(shí)間內(nèi)未收到的TCP報(bào)文段。為此,TCP模塊為每個(gè)TCP報(bào)文段都維護(hù)一個(gè)重傳定時(shí)器,該定時(shí)器在TCP報(bào)文段第一次被發(fā)送時(shí)啟動(dòng)。如果超時(shí)時(shí)間內(nèi)為接收到接收方的應(yīng)答,TCP模塊將重傳TCP報(bào)文段并重置定時(shí)器。至于下次重傳的超時(shí)時(shí)間如何選擇,以及最多執(zhí)行多少次重傳,就是TCP的重傳策略。

Linux有兩個(gè)重要的內(nèi)核參數(shù)與TCP超時(shí)重傳相關(guān):/proc/sys/net/ipv4/tcp_retries1和/proc/sys/net/ipv4/tcp_retries2。前者指定在底層IP接管之前TCP最少執(zhí)行的重傳次數(shù),默認(rèn)值是3。后者指定連接放棄前TCP最多可以執(zhí)行可以執(zhí)行的重傳次數(shù),默認(rèn)值是15(一般對(duì)應(yīng)13~30min)。

擁塞控制

擁塞控制概述

TCP模塊還有一個(gè)公平的任務(wù),就是提高網(wǎng)絡(luò)利用率,降低丟包率,并保證網(wǎng)絡(luò)資源對(duì)每條數(shù)據(jù)流的公平性。這就是作為的擁塞控制。

TCP擁塞控制的四個(gè)部分分別是:慢啟動(dòng),擁塞避免,快速重傳和快速恢復(fù)。

擁塞控制的最終受控變量是發(fā)送端向網(wǎng)絡(luò)一次連續(xù)寫入(收到其中第一個(gè)數(shù)據(jù)確認(rèn)之前)的數(shù)據(jù)量,我們稱為SWND(發(fā)送窗口)。不過,發(fā)送端最終以TCP報(bào)文段來發(fā)送數(shù)據(jù),所以SWND限定了發(fā)送端能連續(xù)發(fā)送的TCP報(bào)文段數(shù)量。這些TCP報(bào)文段的最大長(zhǎng)度(僅指數(shù)據(jù)部分)稱為SMSS(發(fā)送者最大段大小),其值一般等于MSS。

發(fā)送端需要合理的選擇SWND的大小。如果SWND太小,會(huì)引起明顯的網(wǎng)絡(luò)延遲;如果SWND太大,則容易導(dǎo)致網(wǎng)絡(luò)擁塞。前文提到,接收方可通過其接收通告窗戶(RWND)來控制發(fā)送端的SWND。但這顯然不夠,所以發(fā)送端引入了一個(gè)稱為擁塞窗戶(CWND)的狀態(tài)變量。實(shí)際的SWND值是RWND和CWND中的較小者。

慢啟動(dòng)和擁塞避免

慢啟動(dòng):

TCP連接好之后,CWND將被設(shè)置成初始值IW(Initial window),其大小為2~4個(gè)SMSS。此時(shí)發(fā)送端最多能發(fā)送IW字節(jié)的數(shù)據(jù)。此后發(fā)送端每收到接收端的一個(gè)確認(rèn),其CWND就按照值數(shù)形式擴(kuò)大,這就是所謂的慢啟動(dòng)。

慢啟動(dòng)算法的理由:TCP模塊剛開始發(fā)送數(shù)據(jù)時(shí)并不知道網(wǎng)絡(luò)的實(shí)際情況,需要以一種試探的方式平滑的增加CWND的大小。

擁塞避免:

但是如果不施加其他手段,慢啟動(dòng)必然使得CWDN很快膨脹(可見慢啟動(dòng)實(shí)際不慢)并最終導(dǎo)致網(wǎng)絡(luò)擁塞。因此TCP擁塞控制中定義了另一個(gè)重要的狀態(tài)變量:慢啟動(dòng)門限(ssthresh)。當(dāng)CWDN的大小超過該值時(shí),TCP擁塞控制進(jìn)入擁塞避免階段。

擁塞避免算法使得CWDN按照線性方式增加,從而減緩其擴(kuò)大。

舉例如下圖:

發(fā)送端判斷擁塞發(fā)生的依據(jù)有如下兩個(gè):

1
2
3
<code>(1)傳輸超時(shí),或者說TCP重傳定時(shí)器溢出。
2)接收到重復(fù)的確認(rèn)報(bào)文段。
</code>

擁塞控制對(duì)這兩種情況有不同的處理方式。對(duì)第一種情況仍然使用慢啟動(dòng)和擁塞避免。對(duì)第二種情況則使用快速重傳和快速恢復(fù)(如果是真的發(fā)生擁塞的話)。注意,第二種情況如果發(fā)生在重傳定時(shí)器溢出之后,則也被擁塞控制當(dāng)成第一種情況。

若發(fā)生第一種情況,那么它將執(zhí)行重傳并做調(diào)整,且調(diào)整之后,CWMD將小于SMSS,那么也必然小于新的慢啟動(dòng)門限值ssthresh,它一定不小于SMSS的2倍),故而擁塞控制再次進(jìn)入慢啟動(dòng)階段。

快速重傳和快速恢復(fù)

擁塞控制算法需要判斷當(dāng)收到重復(fù)的報(bào)文段時(shí),網(wǎng)絡(luò)是否真的發(fā)生了擁塞,或者說TCP報(bào)文段是否真的丟失了,具體做法是:發(fā)送端如果連續(xù)收到3個(gè)重復(fù)的確認(rèn)報(bào)文段,就認(rèn)為是擁塞發(fā)生了。

然后它啟用快速重傳和快速恢復(fù)算法來處理擁塞,過程如下:

當(dāng)收到第三個(gè)重復(fù)的確認(rèn)報(bào)文段時(shí),按照ssthresh = max(FlightSize/2 , 2*SMSS)計(jì)算ssthresh ,然后立即重傳丟失的報(bào)文段,并按照 CWND = ssthresh + 3*SMSS 設(shè)置CWND。

每次收到1個(gè)重復(fù)的確認(rèn)時(shí),設(shè)置CWND = CWND + SMSS。此時(shí)發(fā)送端可以發(fā)送新的TCP報(bào)文段(如果新的CWND允許的話)。

當(dāng)收到新數(shù)據(jù)的確認(rèn)時(shí),設(shè)置CWND = ssthresh(ssthresh是新的慢啟動(dòng)門限值,由第一步計(jì)算得到)。
快速重傳和快速恢復(fù)完成之后,擁塞控制將恢復(fù)到擁塞避免階段,由第三步可得知。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
計(jì)算機(jī)網(wǎng)絡(luò)知識(shí)總結(jié)
終于把TCP和UDP講清楚了
TCP協(xié)議原理,有這一篇就夠了
這才是程序員計(jì)算機(jī)網(wǎng)絡(luò)知識(shí)的入門基礎(chǔ)!
計(jì)算機(jī)網(wǎng)絡(luò)常用知識(shí)總結(jié)!
「計(jì)算機(jī)網(wǎng)絡(luò)」第五章:傳輸層
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服