TCP流量控制與擁塞控制

2021-09-09 01:37:24 字數 1994 閱讀 1122

tcp 的流量控制與擁塞控制可以說是一體的。流量控制是通過滑動視窗實現的,擁塞避免主要包含以下2個內容:

(1)慢開始,擁塞避免

(2)快重傳,快恢復

1.流量控制——滑動視窗

tcp採用大小可變的滑動視窗進行流量控制,視窗大小的單位是位元組。

傳送視窗在連線建立時由雙方商定。但在通訊的過程中,接收端可根據自己的資源情況,隨時動態地調整對方的傳送視窗上限值(可增大或減小)。

為什麼要設定視窗?

我們可以把視窗理解為緩衝區(但是有些視窗和緩衝區又不太一樣)。

如果沒有這些「視窗」,那麼tcp沒傳送一段資料後都必須等到接收端確認後才能傳送下一段資料,這樣做的話tcp傳輸的效率實在是太低了。

解決的辦法就是在傳送端等待確認的時候繼續傳送資料,假設傳送到第x個資料段是收到接收端的確認資訊,如果x在可接受的範圍內那麼這樣做也是可接受的。這就是視窗(緩衝區)引入的緣由。

1.1 視窗

(1)接收端視窗 rwnd     

接收端緩衝區大小。接收端將此視窗值放在 tcp 報文的首部中的視窗字段,傳送給傳送端。

(2) 擁塞視窗 cwnd (congestion window)    

傳送端緩衝區大小

(3)傳送視窗swnd

傳送視窗的上限值 = min [rwnd, cwnd]

當 rwnd < cwnd 時,是接收端的接收能力限制傳送視窗的最大值。

當 cwnd < rwnd 時,則是網路的擁塞限制傳送視窗的最大值。 

1.2 滑動視窗

傳送端已傳送了 400 位元組的資料,但只收到對前 200 位元組資料的確認,同時視窗大小不變。還可傳送 300 位元組。

傳送端收到了對方對前 400 位元組資料的確認,但對方通知傳送端必須把視窗減小到 400 位元組。現在傳送端最多還可傳送 400 位元組的資料。

2. 擁塞控制

2.1 慢開始和擁塞避免

2.1.1 慢開始原理

(1)在主機剛剛開始傳送報文段時可先將擁塞視窗 cwnd 設定為乙個最大報文段 mss 的數值。

(2)在每收到乙個對新的報文段的確認後,將擁塞視窗增加至多乙個 mss 的數值。

(3)用這樣的方法逐步增大傳送端的擁塞視窗 cwnd,可以使分組注入到網路的速率更加合理。

2.1.2 例項講解

注:圖中視窗的單位都是報文段

(1)當 tcp 連線進行初始化時:

傳送視窗:swnd = 1 

慢開始閾值:ssthresh = 16

(2)傳送端收到 ack1 (確認 m0,期望收到 m1)後,將 cwnd 從 1 增大到 2,於是傳送端可以接著傳送 m1 和 m2 兩個報文段(指數增長)

(3)接收端發回 ack2 和 ack3。傳送端每收到乙個對新報文段的確認 ack,就把傳送端的擁塞視窗加 1。現在傳送端的 cwnd 從 2 增大到 4,並可傳送 m4 ~ m6共 4個報文段。(指數增長)

(4)當swnd >= ssthresh,swnd執行擁塞避免演算法,swnd視窗按線性規律增長。 (加法增大)

(5)當傳送 超時,此時swnd = 24 :

ssthresh = swnd/2 = 12;(乘法減小)

swnd = 1

(6)重複地2步。

2.2 快重傳和快恢復

2.2.1 快重傳

傳送端只要一連收到三個重複的 ack 即可斷定有分組丟失了,就應立即重傳丟失的報文段而不必繼續等待為該報文段設定的重傳計時器的超時

2.2.2 快恢復

(1) 當傳送端收到連續三個重複的 ack 時,就重新設定慢開始門限 ssthresh。

(2) 與慢開始不同之處是 swnd 不是設定為 1,而是設定為 ssthresh + 3 * mss。 

(3) 若收到的重複的 ack 為 n 個(n > 3),則將 cwnd 設定為 ssthresh + n * mss。

(4) 若傳送視窗值還容許傳送報文段,就按擁塞避免演算法繼續傳送報文段。

(5) 若收到了確認新的報文段的 ack,就將 swnd 縮小到 ssthresh。

tcp 擁塞控制 TCP流量控制與擁塞控制

流量控制 流量控制的定義 一條tcp連線每一側主機都為該連線設定了接收快取。當該tcp連線收到了正確的 按序的位元組後,他就將資料放入接收快取。相關聯的應用程序會從該快取中讀取資料。但不必是資料一到達就立即讀取。事實上,接收方也許正忙於其他任務,甚至要過很長時間後才讀取該資料。如果某個應用程序讀取比...

TCP流量控制與擁塞控制

傳送方在確定傳送報文段的速率時,既要根據接受方的接受能力,又要從全域性考慮不要使用網路發生擁塞。因此tcp協議要求傳送方 維護兩個視窗 接收方總是有足夠大的快取空間,因而傳送視窗大小由網路的擁塞程度來決定,也就是說可以將傳送視窗大小 小於等於 擁塞視窗大小。tcp通過乙個定時器 重傳計時器 採用了往...

TCP 流量控制與擁塞控制

tcp流量控制 為了避免傳送端短時間內將大量資料傳送給接收端,而接收端快取和處理能力無法滿足情況,採取滑動視窗的方式。動態的調整傳送端的傳送速率,tcp視窗單位是位元組,即傳送視窗大小的位元組數小於接受埠大小的位元組數 tcp擁塞控制 與流量控制不同,流量控制只是控制傳送端的傳送速率,考慮的是兩端之...