TCP流量控制和擁塞控制

轉載、修正、添加:
TCP/IP詳解學習筆記(15)-- TCP的流量控制和擁塞控制
TCP流量控制與擁塞控制html

流量控制和擁塞控制的介紹

TCP採用大小可變的滑動窗口進行流量控制,窗口大小的單位是字節。
發送窗口在鏈接創建時由雙方商定。但在通訊的過程當中,接收方可根據本身的資源狀況,隨時動態地調整對方的發送窗口上限值(可增大或減少)。算法

  1. 接收端窗口 rwnd(也稱爲通知窗口):接收端緩衝區大小,表示接收方的接收能力。接收端將此窗口值放在 TCP 報文的首部中的窗口字段,傳送給發送端。
  2. 擁塞窗口cwnd (congestion window):發送端緩衝區大小
  3. 發送窗口swnd:發送窗口的上限值 = Min [rwnd, cwnd]
  4. 當 rwnd < cwnd 時,是接收端的接收能力限制發送窗口的最大值。

當 cwnd < rwnd 時,則是網絡的擁塞限制發送窗口的最大值。緩存

流量控制:就是讓發送方的發送速率不要太快,讓接收方來得及接收。

擁塞是指:數據發送速度超出網絡所能承受的極限,常常形成路由器丟包的現象。網絡

流量控制

讓發送方的發送速率不要太快,讓接收方來得及接收。利用滑動窗口機制能夠很方便的在TCP鏈接上實現對發送方的流量控制。TCP的窗口單位是字節,不是報文段,發送方的發送窗口不能超過接收方給出的接收窗口的數值。

主要想法:讓發送方知道接收方當前的接收能力,調整發送速率。學習

控制方法

圖片描述

  1. 主機A向主機B發送數據。雙方肯定的窗口值是400.再設每個報文段爲100字節長,序號的初始值爲seq=1,圖中的箭頭上面大寫ACK,表示首部中的確認爲ACK,小寫ack表示確認字段的值。
  2. 接收方的主機B進行了三次流量控制。第一次把窗口設置爲rwind=300,第二次減少到rwind=100最後減到rwind=0,即不容許發送方再發送過數據了。這種使發送方暫停發送的狀態將持續到主機B從新發出一個新的窗口值爲止。
  3. 假如,B向A發送了零窗口的報文段後不久,B的接收緩存又有了一些存儲空間。因而B向A發送了rwind=400的報文段,然而這個報文段在傳送中丟失了。A一直等待收到B發送的非零窗口的通知,而B也一直等待A發送的數據。這樣就死鎖了。爲了解決這種死鎖狀態,TCP爲每一個鏈接設有一個持續計時器。只要TCP鏈接的一方收到對方的零窗口通知,就啓動持續計時器,若持續計時器設置的時間到期,就發送一個零窗口探測報文段(僅攜帶1字節的數據),而對方就在確認這個探測報文段時給出瞭如今的窗口值。

TCP報文段發送時機的選擇

  1. TCP維持一個變量,它等於最大報文段長度MSS,只要緩存中存放的數據達到MSS字節就組裝成一個TCP報文段發送出去。
  2. 由發送方的應用程序指明要求發送報文段,即TCP支持的推送操做
  3. 是發送方的一個計時器期限到了,這時就把當前已有的緩存數據裝入報文段發送出去。

擁塞控制

主要想法:從丟包狀況估計網絡的負載狀況,調整發送速率,防止過多的數據注入到網絡中,這樣可使網絡中的路由器或鏈路不致過載。spa

因特網建議標準RFC2581定義了進行擁塞控制的四種算法,即慢開始/慢啓動(Slow-start),擁塞避免(Congestion Avoidance)快重傳(Fast Restrangsmit)和快回復(Fast Recovery)。咱們假定htm

  1. 數據是單方向傳送,而另一個方向只傳送確認
  2. 接收方老是有足夠大的緩存空間,由於發送窗口的大小由網絡的擁塞程度來決定。

慢開始

圖片描述

  1. 在主機剛剛開始發送報文段時可先將擁塞窗口 cwnd 設置爲一個最大報文段 MSS 的數值。
  2. 在每收到一個對新的報文段的確認後,將擁塞窗口增長至多一個 MSS 的數值(一開始窗口大小爲1,發送一個,接收一個,增加爲2;發送兩個,獲得兩個確認,增加爲4......所以,窗口是指數增加的)。
  3. 用這樣的方法逐步增大發送端的擁塞窗口 cwnd,可使分組注入到網絡的速率更加合理。
  4. 由於擁塞窗口是指數增加的,爲防止後期增加過快,須要另一個變量---慢開始門限(閾值)ssthres,當cwind == ssthress時,要預防擁塞的產生,開始執行擁塞避免算法,cwnd按線性規律增加
  5. 當網絡發生擁塞(即沒有在TTL時間內接收到確認數據報,確認超時),把ssthresh值更新爲擁塞前cwind值的一半,cwnd從新設置爲1,按照步驟2執行。

快重傳

發送端只要一連收到三個重複的 ACK 便可判定有分組丟失了,就應當即重傳丟失的報文段而沒必要繼續等待爲該報文段設置的重傳計時器的超時。blog

快恢復

算法有如下兩個要點:圖片

  1. 當發送方連續收到三個重複確認時,就執行「乘法減少」算法,把慢開始門限減半,這是爲了預防網絡發生擁塞(同慢啓動)。
  2. 因爲發送方如今認爲網絡極可能沒有發生擁塞,所以如今不執行慢開始算法,而是把cwnd值設置爲慢開始門限減半後的值(而不是同慢啓動同樣從1開始),而後開始執行擁塞避免算法,是擁塞窗口的線性增大。

圖片描述

相關文章
相關標籤/搜索