1.TCP的擁塞控制

1.概述

     所謂的流量控制就是讓發送方的發送速率不要太快,讓接收方來得及接受。利用滑動窗口機制可以很方便的在TCP連接上實現對發送方的流量控制。TCP的窗口單位是字節,不是報文段,發送方的發送窗口不能超過接收方給出的接收窗口的數值。
     如圖所示,說明了利用可變窗口大小進行流量控制。設主機A向主機B發送數據。雙方確定的窗口值是400.再設每一個報文段爲100字節長,序號的初始值爲seq=1,圖中的箭頭上面大寫ACK,表示首部中的卻認爲爲ACK,小寫ack表示確認字段的值。
     接收方的主機B進行了三次流量控制。第一次把窗口設置爲rwind=300,第二次減小到rwind=100最後減到rwind=0,即不允許發送方再發送過數據了。這種使發送方暫停發送的狀態將持續到主機B重新發出一個新的窗口值爲止。
     假如,B向A發送了零窗口的報文段後不久,B的接收緩存又有了一些存儲空間。於是B向A發送了rwind=400的報文段,然而這個報文段在傳送中丟失了。A一直等待收到B發送的非零窗口的通知,而B也一直等待A發送的數據。這樣就死鎖了。爲了解決這種死鎖狀態,TCP爲每個連接設有一個持續計時器。只要TCP連接的一方收到對方的零窗口通知,就啓動持續計時器,若持續計時器設置的時間到期,就發送一個零窗口探測報文段(僅攜帶1字節的數據),而對方就在確認這個探測報文段時給出了現在的窗口值。
2.TCP報文段發送時機的選擇
     TCP豹紋短短髮送時機主要有以下幾種選擇途徑。
     1)TCP維持一個變量,它等於最大報文段長度MSS,只要緩存中存放的數據達到MSS字節就組裝成一個TCP報文段發送出去。
     2)由發送方的應用程序指明要求發送報文段,即TCP支持的推送操作
     3)是發送方的一個計時器期限到了,這時就把當前已有的緩存數據裝入報文段發送出去。
  • TCP的擁塞控制
1.擁塞控制的原理
     在某段時間,若對網絡中的某一資源的需求超過了該資源所能提供的可用部分,網絡的性能就要變化,這種情況叫做擁塞。
     網絡擁塞往往是由許多因素引起的,簡單的提高節點處理機的速度或者擴大結點緩存的存儲空間並不能解決擁塞問題。例如
          1)當某個結點緩存容量擴展到非常大,於是凡到達該結點的分組均可在結點的緩存隊列中排隊,不受任何限制。由於輸出鏈路的容量和處理機的速度並未提高,因此在這隊列中的絕大多數的分組在排隊等待時間會大大增加,結果上層軟件只好把他們進行重傳。
     因此,問題的是指往往是整個系統的各個部分不匹配,只有各個部分平衡了,問題纔會得到解決。
2.擁塞控制和流量控制的差別
     所謂擁塞控制就是防止過多的數據注入到網絡中,這樣可以使網絡中的路由器或鏈路不致過載。擁塞控制所要做的都有一個前提,就是網絡能承受現有的網絡負荷。
     流量控制往往指的是點對點通信量的控制,是個端到端的問題。流量控制所要做的就是控制發送端發送數據的速率,以便使接收端來得及接受。
3.擁塞控制設計
     擁塞控制是很難設計的,因爲它是一個動態的問題,許多情況下,甚至正式擁塞控制機制本身成爲引起網絡性能惡化甚至死鎖的原因。從控制理論的角度來看擁塞控制這個問題,可以分爲開環控制和閉環控制兩種方法。開環控制就是在設計網絡時事先將有關擁塞發生的所有因素考慮周到,一旦系統運行起來就不能在中途改正。
     閉環控制是基於反饋環路的概念,包括如下措施:
     1)監測網路系統以便檢測擁塞在何時何地發生
     2)把擁塞發生的信息傳送到可採取行動的地方
     3)調整網絡系統的行動以解決出現的問題。
4.擁塞控制方法
因特網建議標準RFC2581定義了進行擁塞控制的四種算法,即慢開始(Slow-start),擁塞避免(Congestion Avoidance)快重傳(Fast Restrangsmit)和快回復(Fast Recovery)。我們假定
     1)數據是單方向傳送,而另外一個方向只傳送確認
     2)接收方總是有足夠大的緩存空間,因爲發送窗口的大小由網絡的擁塞程度來決定。
 
--慢開始和擁塞避免
     發送報文段速率的確定,既要根據接收端的接收能力,又要從全局考慮不要使網絡發生擁塞,這由接收窗口和擁塞窗口兩個狀態量確定。接收端窗口(Reciver Window)又稱通知窗口(Advertised Window),是接收端根據目前的接收緩存大小所許諾的最新窗口值,是來自接收端的流量控制。擁塞窗口cwnd(Congestion Window)是發送端根據自己估計的網絡擁塞程度而設置的窗口值,是來自發送端的流量控制。
     慢啓動原理:
     1)當主機開始發送數據時,如果立即將較大的發送窗口的全部數據字節都注入到網絡中,那麼由於不清楚網絡的情況,有可能引其網絡擁塞
     2)比較好的方法是試探一下,即從小到達逐漸增大發送端的擁塞控制窗口數值
     3)通常在剛剛開始發送報文段時可先將擁塞窗口cwnd設置爲一個最大報文段的MSS的數值。在每收到一個對新報文段確認後,將擁塞窗口增加至多一個MSS的數值,當rwind足夠大的時候,爲了防止擁塞窗口cwind的增長引起網絡擁塞,還需要另外一個變量---慢開始門限ssthresh
     擁塞控制具體過程爲:
     1)TCP連接初始化,將擁塞窗口設置爲1
     2)執行慢開始算法,cwind按指數規律增長,知道cwind == ssthress開始執行擁塞避免算法,cwnd按線性規律增長
     3)當網絡發生擁塞,把ssthresh值更新爲擁塞前ssthresh值的一半,cwnd重新設置爲1,按照步驟(2)執行。
--快重傳和快恢復
     一條TCP連接有時會因等待重傳計時器的超時而空閒較長的時間,慢開始和擁塞避免無法很好的解決這類問題,因此提出了快重傳和快恢復的擁塞控制方法。
     快重傳算法並非取消了重傳機制,只是在某些情況下更早的重傳丟失的報文段(如果當發送端接收到三個重複的確認ACK時,則斷定分組丟失,立即重傳丟失的報文段,而不必等待重傳計時器超時)。慢開始算法只是在TCP建立時才使用
     快恢復算法有以下兩個要點:
     1)當發送方連續收到三個重複確認時,就執行“乘法減小”算法,把慢開始門限減半,這是爲了預防網絡發生擁塞。
     2)由於發送方現在認爲網絡很可能沒有發生擁塞,因此現在不執行慢開始算法,而是把cwnd值設置爲慢開始門限減半後的值,然後開始執行擁塞避免算法,是擁塞窗口的線性增大。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章