TCP协议——流量控制和拥塞控制
**
一、流量控制
**
1.1 什么是流量控制
Sender won’t overflow receiver’s buffer by transmitting too much, too fast. (防止發送方發的太快,耗盡接收方的資源,從而使接收方來不及處理)
1.2 流量控制的一些知識點
(1)接收端抑制發送端的依據:接收端緩沖區的大小
(2)流量控制的目標是接收端,是怕接收端來不及處理
(3)流量控制的機制是丟包
1.3 怎么樣實現流量控制?
使用滑動窗口
1.4 滑動窗口
滑動窗口是什么?
滑動窗口是類似于一個窗口一樣的東西,是用來告訴發送端可以發送數據的大小或者說是窗口標記了接收端緩沖區的大小,這樣就可以實現批量發送數據
為什么會出現滑動窗口
在確認應答策略中,對每一個發送的數據段,都要給一個ACK確認應答,收到ACK后再發送下一個數據段,這樣做有一個比較大的缺點,就是性能比較差,尤其是數據往返的時間長的時候
使用滑動窗口,就可以一次發送多條數據,從而就提高了性能
滑動窗口原理
TCP中采用滑動窗口來進行流量控制,滑動窗口的大小意味著接收方還有多大的緩沖區可以用于接收數據。發送方可以通過滑動窗口的大小來確定應該發送多少字節的數據。當滑動窗口為0時,發送方一般不能再發送數據報。
滑動窗口協議的基本原理就是在任意時刻,發送方都維持了一個連續的允許發送的幀的序號,稱為發送窗口;同時,接收方也維持了一個連續的允許接收的幀的序號,稱為接收窗口。發送窗口和接收窗口的序號的上下界不一定要一樣,甚至大小也可以不同。不同的滑動窗口協議窗口大小一般不同。發送方窗口內的序列號代表了那些已經被發送,但是還沒有被確認的幀,或者是那些可以被發送的幀。
(1)接收端將自己可以接收的緩沖區大小放入TCP首部中的“窗口大小”字段,通過ACK來通知發送端
(2)窗口大小字段越大,說明網絡的吞吐率越高
(3)窗口大小指的是無需等待確認應答而可以繼續發送數據的最大值,即就是說不需要接收端的應答,可以一次連續的發送數據
(4)操作系統內核為了維護滑動窗口,需要開辟發送緩沖區,來記錄當前還有那些數據沒有應答,只有確認應答過的數據,才能從緩沖區刪掉
ps:發送緩沖區如果太大,就會有空間開銷
(5)接收端一旦發現自己的緩沖區快滿了,就會將窗口大小設置成一個更小的值通知給發送端,發送端收到這個值后,就會減慢自己的發送速度
(6)如果接收端發現自己的緩沖區滿了,就會將窗口的大小設置為0,此時發送端將不再發送數據,但是需要定期發送一個窗口探測數據段,使接收端把窗口大小告訴發送端
ps:在TCP的首部中,有一個16為窗口字段,此字段就是用來存放窗口大小信息的
滑動窗口的優點
可以高效可靠的發送大量的數據
1.1 超時重傳
TCP服務必須能夠重傳超時時間內未收到確認報文段的TCP報文段。TCP為每個TCP模塊都維護了一個重傳定時器,定時器在第一次發送TCP報文段時啟動,如果超時時間內未收到接收方的確認號報文段,TCP模塊將重傳TCP報文段并重置定時器。 至于下次重傳的超時時間如何選擇,以及最多重傳幾次,這是TCP的重傳策略。 與TCP超時重連的策略相似。
流量控制的處理過程:
TCP連接階段,雙方協商窗口尺寸,同時接收方預留數據緩存區;
發送方根據協商的結果,發送符合窗口尺寸的數據字節流,并等待對方的確認;
發送方根據確認信息,改變窗口的尺寸,增加或者減少發送未得到確認的字節流中的字節數。調整過程包括:如果出現發送擁塞,發送窗口縮小為原來的一半,同時將超時重傳的時間間隔擴大一倍。
**
2、擁塞控制
**
2.1 什么是擁塞控制
too many sources sending too much data too fast for network to handle
防止發送方發的太快,使得網絡來不及處理,從而導致網絡擁塞
流量控制雖然可以高效可靠的傳送大量的數據,但是如果在剛開始階段就發送大量的數據,可能會導致網絡擁堵,因為網絡上的計算機太多了。
TCP模塊為了防止過多的數據注入網絡,使網絡中的路由器或鏈路不致于過載。以此提高網絡利用率,降低丟包率,并抱證網絡資源對每條數據流的公平性而采取的控制手段。
2.2 擁塞控制的實現
擁塞控制包含四部分內容:慢啟動、擁塞避免、快速重傳、快速恢復。
-
慢啟動: 網絡傳輸剛開始時,并不知道網絡的實際情況,所以采取一種試探的方式控制數據的發送速率。慢啟動階段,數據的發送速率以指數方式增長,即就是擁塞窗口的增長,每次都是收到確認報文段數量的2倍。可以看出慢啟動并不慢,擁塞窗口增長的速度很快。所以,為其設置了一個慢啟動門限,當達到門限時,就進入到擁塞避免階段。
-
擁塞避免: 當擁塞窗口的大小采用慢啟動方式增長到慢啟動門限時,就進入擁塞避免階段,擁塞避免階段不再以指數形式增長擁塞窗口,而是每經過一個往返時間RTT就將發送方的擁塞窗口+1, 使其增長速度減緩。按照線性方式增長。如果發生網絡擁塞,比如丟包時,就將慢啟動門限設為原來的一半,然后將擁塞窗口設置為1,開始執行慢啟動算法。(較低的起點,指數級增長)。
-
快速重傳: 假設發送方發送的報文段分別為: M1,M2,M3,M4,M5,M6 , 當接收方收到M1和M2后,M3報文段丟失,接著收到的M4,M5,M6都不做處理,而是沒接收到一個報文段就對M2重復確認,發送方接收到重復的三次確認報文段,就對其后的報文段進行重新發送,而不需要等待超時時間到達。當快速重傳后,立即進入到快速恢復階段。
-
快速恢復:將慢啟動門限設置為原來的一半,然后將擁塞窗口設置為現在的慢啟動門限值,不再執行慢啟動算法,而是直接進入擁塞避免階段。使發送窗口成線性方式增大。
**
3、流量控制&擁塞控制的聯系與區別
**
3.1 相同點
(1)現象都是丟包;
(2)實現機制都是讓發送方發的慢一點,發的少一點
3.2 不同點
(1)丟包位置不同 流量控制丟包位置是在接收端上 擁塞控制丟包位置是在路由器上
(2)作用的對象不同 流量控制的對象是接收方,怕發送方發的太快,使得接收方來不及處理 擁塞控制的對象是網絡,怕發送方發的太快,造成網絡擁塞,使得網絡來不及處理
3.3 聯系
-
擁塞控制
擁塞控制通常表示的是一個全局性的過程,它會涉及到網絡中所有的主機、
所有的路由器和降低網絡傳輸性能的所有因素 -
流量控制
流量控制發生在發送端和接收端之間,只是點到點之間的控制
總結
以上是生活随笔為你收集整理的TCP协议——流量控制和拥塞控制的全部內容,希望文章能夠幫你解決所遇到的問題。