新聞中心
TCP慢啟動機制是TCP協(xié)議的一部分,用于控制TCP連接傳輸?shù)乃俣?。當TCP連接開始時,慢啟動機制被啟用,它會逐漸增加傳輸速度,直到網(wǎng)絡(luò)開始擁塞為止。在本文中,我們將,以便更好地理解TCP連接傳輸?shù)倪^程。

TCP連接的慢啟動機制可以幫助在連接開始的時候逐步增加傳輸速度,這個速度是根據(jù)連接的可用帶寬和延遲時間決定的。網(wǎng)絡(luò)帶寬是指在一單位時間內(nèi)數(shù)據(jù)傳輸?shù)乃俾?,而延遲時間表示從發(fā)送數(shù)據(jù)到接收到響應所需的時間。在TCP連接開始時,慢啟動會將數(shù)據(jù)的傳輸速度逐漸增加,直到達到一個安全的速度,以避免網(wǎng)絡(luò)擁塞。
為了更好地了解Linux TCP慢啟動機制,我們需要先了解一些基本概念。需要了解的是TCP連接的三次握手。TCP連接的三次握手是建立TCP連接時的一個過程,即客戶端發(fā)送SYN請求報文,服務(wù)器接收后回復SYN+ACK報文,最后客戶端再回復一個ACK報文,此時連接已經(jīng)建立。這個過程是用來確保連接的可靠性。
需要了解的是TCP擁塞控制算法。TCP擁塞控制算法是防止網(wǎng)絡(luò)擁塞的一種算法。它的原理是當網(wǎng)絡(luò)出現(xiàn)擁塞時,TCP連接會將傳輸速率降低,以避免數(shù)據(jù)包的丟失和重傳。這個算法的實現(xiàn)是通過調(diào)整TCP發(fā)送數(shù)據(jù)包的速率和窗口大小來實現(xiàn)的。
在理解了TCP連接的三次握手和TCP擁塞控制算法后,我們就可以深入了解TCP慢啟動機制。TCP慢啟動機制的基本原理是在連接開始時,它會先發(fā)送一些數(shù)據(jù)包,然后等待接收方的確認消息。如果沒有出現(xiàn)任何丟包現(xiàn)象,則會逐步增加發(fā)送的數(shù)據(jù)包數(shù),同時也會增加窗口大小,從而逐漸提高網(wǎng)絡(luò)傳輸速率。
具體來說,當一個TCP連接剛開始時,發(fā)送方會默認發(fā)送一個MSS(更大分段長度)的數(shù)據(jù)包,即表示可以承受的更大數(shù)據(jù)包大小。如果接收方能夠正常接收這個數(shù)據(jù)包,則發(fā)送方會再發(fā)送兩個MSS大小的數(shù)據(jù)包,即三個MSS大小的數(shù)據(jù)包。如果接收方也能正常接收這些數(shù)據(jù)包,則發(fā)送方會再發(fā)送四個MSS大小的數(shù)據(jù)包,以此類推,直到網(wǎng)絡(luò)出現(xiàn)擁塞為止。當網(wǎng)絡(luò)出現(xiàn)擁塞時,TCP連接就會向上層應用程序反饋信息,以請求降低傳輸速率。
在Linux系統(tǒng)中,TCP慢啟動機制是通過調(diào)整TCP擁塞窗口來實現(xiàn)的。擁塞窗口指的是在一個周期內(nèi)可以發(fā)送的數(shù)據(jù)包的數(shù)量,這個周期的長度是由網(wǎng)絡(luò)延遲時間和網(wǎng)絡(luò)帶寬共同決定的。在擁塞窗口的計算中,Linux系統(tǒng)使用了一個指數(shù)級增長的算法。也就是說,在開始的時候,擁塞窗口的大小是1個MSS的大小,然后每當一個數(shù)據(jù)包被成功發(fā)送和接收時,擁塞窗口就會翻倍,直到達到實際帶寬和延遲設(shè)定的閾值為止。
需要注意的是,TCP慢啟動機制只會在連接開始時生效,在連接過程中不會啟用。因此,在連接過程中,如果網(wǎng)絡(luò)出現(xiàn)擁塞,則會啟用TCP的快重傳和快恢復機制,以避免數(shù)據(jù)包的丟失和重傳。
TCP慢啟動機制是TCP連接傳輸?shù)囊徊糠郑糜诳刂芓CP連接傳輸?shù)乃俣?。在Linux系統(tǒng)中,TCP慢啟動機制是通過調(diào)整TCP擁塞窗口來實現(xiàn)的。擁塞窗口指的是在一個周期內(nèi)可以發(fā)送的數(shù)據(jù)包的數(shù)量,這個周期的長度是由網(wǎng)絡(luò)延遲時間和網(wǎng)絡(luò)帶寬共同決定的。在擁塞窗口的計算中,Linux系統(tǒng)使用了一個指數(shù)級增長的算法。需要注意的是,TCP慢啟動機制只會在連接開始時生效,在連接過程中不會啟用。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應式網(wǎng)站制作,設(shè)計師量身打造品牌風格,熱線:028-86922220TCP 如何保證可靠性
1. TCP可靠性的保證機制總結(jié)
2. 網(wǎng)絡(luò)基礎(chǔ):
TCP協(xié)議
-如何保證傳輸可靠性
3. TCP協(xié)議的
流量控制
和擁塞控制
4. TCP 的那些事兒(下)
5. TCP擁塞控制:慢開始、擁塞避免、快重傳、快恢復
TCP檢驗和的計算與UDP一樣,在計算時要加上12byte的偽首部,檢驗范圍包括TCP首部及數(shù)據(jù)部分,但是UDP的檢驗和字段為可選的,而TCP中是必須有的。計算方法為:在發(fā)送方將整個報文段分為多個16位的段,然后將所有段進行反碼相加,將結(jié)果存放在檢驗和字段中,接收方用相同的方法進行計算,如最終結(jié)果為檢驗字段所有位是全1則正確(UDP中也是全為1則正確),否則存在錯誤。
TCP將每個
數(shù)據(jù)包
都進行了編號友純,這就是序列號。
序列號的作用:
a、保證可靠性(當接收到的數(shù)據(jù)總少了某個序號的數(shù)據(jù)時,能馬上知道)
b、保證數(shù)據(jù)的按序到達
c、提高效率,可實現(xiàn)多次發(fā)送,一次確認
d、去除重復數(shù)據(jù)
數(shù)據(jù)傳輸過程中的確認應答處理、重發(fā)控制以及重復控制等功能都可以通過序列號來實現(xiàn)
TCP通過確認應答機制實現(xiàn)可靠的數(shù)據(jù)傳輸。在TCP的首部中有一個標志位——ACK,此標志位表示確認號是否有效。接收方對于按序到達的數(shù)據(jù)會進行確認,當標志位ACK=1時確認首部的確認字段有效。進行確認時,確認字段值表示這個值之前的數(shù)據(jù)都已經(jīng)按序到達了。而發(fā)送方如果收到了已發(fā)送的數(shù)據(jù)的確認報文,則繼續(xù)傳輸下一部分數(shù)據(jù);而如果等待了一定時間還沒有收到確認報文就會啟動重傳機制。
當報文發(fā)出后在一定的時間內(nèi)未收到接收方的確認,發(fā)送方就會進行重傳(通常是在發(fā)出報文段后設(shè)定一個鬧鐘,到點了還沒有收到應答則進行重傳)。
一種情況是發(fā)送包丟失了好簡咐,其基本過程如下:
另一種情況是ACK 丟失,過程如下:
當接收方接收到重復的數(shù)據(jù)時就將其丟掉,重新發(fā)送ACK。而要識別出重復的數(shù)據(jù),前面提到的序列號就起作用了。
重傳時間的確定:
重傳時間的確定:報文段發(fā)出到收到應答中間有一個報文段的往返時間RTT,顯然超時重傳時間RTO會略大于這個RTT,TCP會根據(jù)網(wǎng)絡(luò)情況動態(tài)的計算RTT,即RTO是不斷變化的。在Linux中,超時以500ms為單位進行控制,每次判定超時重發(fā)的超時時間都是500ms的整數(shù)倍。其規(guī)律為:如果重發(fā)一次仍得不到應答,就等待2 500ms后再進行重傳,如果仍然得不到應答就等待4 500ms后重傳,依次類推,以指數(shù)形式遞增,重傳次數(shù)累計到一定次數(shù)后,TCP認為網(wǎng)絡(luò)或?qū)Χ酥鳈C出現(xiàn)異常,就會強行關(guān)閉連接。
連接管理機制即TCP建立連接時的
三次握手
和斷開連接時的
四次揮手
。
接收端處理數(shù)據(jù)的速度是有限的,如果發(fā)送方發(fā)送數(shù)據(jù)的速度過快,導致接收端的緩沖區(qū)滿,而發(fā)送方繼續(xù)發(fā)送,就會造成丟包,繼而引起丟包重傳等一系列連鎖反應。
因此TCP支持根據(jù)接收端的處理能力,來決定發(fā)送端的發(fā)送速度,這個機制叫做流量控制。
在TCP報文段首部中有一個16位窗口長度,當接收端接收到發(fā)送方的數(shù)據(jù)后,在應答報文ACK中就將自身咐談緩沖區(qū)的剩余大小,放入16窗口大小中。這個大小隨數(shù)據(jù)傳輸情況而變,窗口越大,
網(wǎng)絡(luò)吞吐量
越高,而一旦接收方發(fā)現(xiàn)自身的緩沖區(qū)快滿了,就將窗口設(shè)置為更小的值通知發(fā)送方。如果緩沖區(qū)滿,就將窗口置為0,發(fā)送方收到后就不再發(fā)送數(shù)據(jù),但是需要定期發(fā)送一個窗口探測數(shù)據(jù)段,使接收端把窗口大小告訴發(fā)送端。
注意:窗口大小不受16位窗口大小限制,在TCP首部40字節(jié)選項中還包含一個窗口擴大因子M,實際窗口大小是窗口字段的值左移M位。
流量控制解決了兩臺主機之間因傳送速率而可能引起的丟包問題,在一方面保證了TCP數(shù)據(jù)傳送的可靠性。然而如果網(wǎng)絡(luò)非常擁堵,此時再發(fā)送數(shù)據(jù)就會加重網(wǎng)絡(luò)負擔,那么發(fā)送的數(shù)據(jù)段很可能超過了更大生存時間也沒有到達接收方,就會產(chǎn)生丟包問題。
為此TCP引入慢啟動機制,先發(fā)出少量數(shù)據(jù),就像探路一樣,先摸清當前的網(wǎng)絡(luò)擁堵狀態(tài)后,再決定按照多大的速度傳送數(shù)據(jù)。
此處引入一個擁塞窗口:
發(fā)送開始時定義擁塞窗口大小為1;每次收到一個ACK應答,擁塞窗口加1;而在每次發(fā)送數(shù)據(jù)時,發(fā)送窗口取擁塞窗口與接送段接收窗口最小者。
慢啟動:在啟動初期以指數(shù)增長方式增長;設(shè)置一個慢啟動的閾值,當以指數(shù)增長達到閾值時就停止指數(shù)增長,按照線性增長方式增加;線性增長達到網(wǎng)絡(luò)擁塞時立即“乘法減小”,擁塞窗口置回1,進行新一輪的“慢啟動”,同時新一輪的閾值變?yōu)樵瓉淼囊话搿?/p>
“慢啟動”機制可用圖表示:
1)連接建好的開始先初始化cwnd = 1,表明可以傳一個MSS大小的數(shù)據(jù)。
2)每當收到一個ACK,cwnd++; 呈線性上升
3)每當過了一個RTT,cwnd = cwnd*2; 呈指數(shù)讓升
4)還有一個ssthresh(slow start threshold),是一個上限,當cwnd >= ssthresh時,就會進入“擁塞避免算法”(后面會說這個算法)
1)收到一個ACK時,cwnd = cwnd + 1/cwnd
2)當每過一個RTT時,cwnd = cwnd + 1
這樣就可以避免增長過快導致網(wǎng)絡(luò)擁塞,慢慢的增加調(diào)整到網(wǎng)絡(luò)的更佳值。很明顯,是一個線性上升的算法。
當出現(xiàn)ack超時的時候,需要重傳數(shù)據(jù)包。
TCP認為這種情況太糟糕,反應也很強烈。
快速重傳在收到3個duplicate ACK時就開啟重傳(三次 ack 就認為丟包的原理見 關(guān)于TCP亂序和重傳的問題 、 TCP 快速重傳為什么是三次冗余 ACK ),而不用等到RTO超時。
TCP Reno的實現(xiàn)是:
快速重傳和快速恢復算法一般同時使用。快速恢復算法是認為,你還有3個Duplicated Acks說明網(wǎng)絡(luò)也不那么糟糕,所以沒有必要像RTO超時那么強烈。 注意,正如前面所說,進入Fast Recovery之前,cwnd 和 sshthresh已被更新:
然后,真正的Fast Recovery算法如下:
cwnd = sshthresh + 3 * MSS (3的意思是確認有3個數(shù)據(jù)包被收到了)
重傳Duplicated ACKs指定的數(shù)據(jù)包
如果再收到 duplicated Acks,那么cwnd = cwnd +1
如果收到了新的Ack,那么,cwnd = sshthresh ,然后就進入了擁塞避免的算法了。
如果你仔細思考一下上面的這個算法,你就會知道,上面這個算法也有問題,那就是——它依賴于3個重復的Acks。注意,3個重復的Acks并不代表只丟了一個數(shù)據(jù)包,很有可能是丟了好多包。但這個算法只會重傳一個,而剩下的那些包只能等到RTO超時,于是,進入了惡夢模式——超時一個窗口就減半一下,多個超時會超成TCP的傳輸速度呈級數(shù)下降,而且也不會觸發(fā)Fast Recovery算法了。
linux tcp 慢啟動的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux tcp 慢啟動,深入了解Linux TCP慢啟動機制,TCP 如何保證可靠性的信息別忘了在本站進行查找喔。
創(chuàng)新互聯(lián)是成都專業(yè)網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計、SEO優(yōu)化、手機網(wǎng)站、小程序開發(fā)、APP開發(fā)公司等,多年經(jīng)驗沉淀,立志成為成都網(wǎng)站建設(shè)第一品牌!
文章名稱:深入了解LinuxTCP慢啟動機制(linuxtcp慢啟動)
標題來源:http://www.5511xx.com/article/cogjghj.html


咨詢
建站咨詢
