TCP流量控制和擁塞控制

2021-06-22 23:13:17 字數 3961 閱讀 1129

1、利用滑動視窗實現流量控制

如果傳送方把資料傳送得過快,接收方可能會來不及接收,這就會造成資料的丟失。所謂流量控制就是讓傳送方的傳送速率不要太快,要讓接收方來得及接收。

利用滑動視窗機制可以很方便地在tcp連線上實現對傳送方的流量控制。

2、設a向b傳送資料。在連線建立時,b告訴了a:「我的接收視窗是 rwnd = 400 」。因此,傳送方的傳送視窗不能超過接收方給出的接收視窗的數值。

請注意,tcp的視窗單位是位元組,不是報文段。tcp連線建立時的視窗協商過程在圖中沒有顯示出來。再設每乙個報文段為100位元組長,而資料報文段序號的初始值設為1。大寫ack表示首部中的確認位ack,小寫ack表示確認欄位的值ack。

從圖中可以看出,b進行了三次流量控制。

第一次把視窗減少到 rwnd = 300 ,第二次又減到了 rwnd = 100 ,最後減到 rwnd = 0 ,即不允許傳送方再傳送資料了。這種使傳送方暫停傳送的狀態將持續到主機b重新發出乙個新的視窗值為止。b向a傳送的三個報文段都設定了 ack = 1 ,只有在ack=1時確認號字段才有意義。

3、tcp為每乙個連線設有乙個持續計時器。只要tcp連線的一方收到對方的零視窗通知,就啟動持續計時器。若持續計時器設定的時間到期,就傳送乙個零視窗控測報文段(攜1位元組的資料),那麼收到這個報文段的一方就重新設定持續計時器。

4、必須考慮傳輸速率

可以用不同的機制來控制tcp報文段的傳送時機。如: 

1)tcp維持乙個變數,它等於最大報文段長度mss。只要快取中存放的資料達到mss位元組時,就組裝成乙個tcp報文段傳送出去。

2)由傳送方的應用程序指明要求傳送報文段,即tcp支援的推送( push )操作。

3)傳送方的乙個計時器期限到了,這時就把已有的快取資料裝入報文段(但長度不能超過mss)傳送出去。

5、nagle演算法:

若傳送應用程序把要傳送的資料逐個位元組地送到tcp的傳送快取,則傳送方就把第乙個資料位元組先傳送出去,把後面到達的資料位元組都快取起來。當傳送方接收對第乙個資料字元的確認後,再把傳送快取中的所有資料組裝成乙個報文段再傳送出去,同時繼續對隨後到達的資料進行快取。只有在收到對前乙個報文段的確認後才繼續傳送下乙個報文段。當資料到達較快而網路速率較慢時,用這樣的方法可明顯地減少所用的網路頻寬。

nagle演算法還規定:當到達的資料已達到 傳送視窗大小的一半或已達到報文段的最大長度時,就立即傳送乙個報文段。

6、糊塗視窗綜合證: 

tcp接收方的快取已滿,而互動式的應用程序一次只從接收快取中讀取1位元組(這樣就使接收快取空間僅騰出1位元組),然後向傳送方傳送確認,並把視窗設定為1個位元組(但傳送的資料報為40位元組的的話)。接收,傳送方又發來1個位元組的資料(傳送方的ip資料報是41位元組)。接收方發回確認,仍然將視窗設定為1個位元組。這樣,網路的效率很低。

要解決這個問題,可讓接收方等待一段時間,使得或者接收快取已有足夠空間容納乙個最長的報文段,或者等到接收方快取已有一半空閒的空間。只要出現這兩種情況,接收方就發回確認報文,並向傳送方通知當前的視窗大小。此外,傳送方也不要傳送太小的報文段,而是把資料報積累成足夠大的報文段,或達到接收方快取的空間的一半大小。

7、tcp的擁塞控制

擁塞:即對資源的需求超過了可用的資源。若網路中許多資源同時**不足,網路的效能就要明顯變壞,整個網路的吞吐量隨之負荷的增大而下降。

擁塞控制:

防止過多的資料注入到網路中,這樣可以使網路中的路由器或鏈路不致過載。擁塞控制所要做的都有乙個前提:網路能夠承受現有的網路負荷。擁塞控制是乙個全域性性的過程,涉及到所有的主機、路由器,以及與降低網路傳輸效能有關的所有因素。

流量控制:

指點對點通訊量的控制,是端到端正的問題。流量控制所要做的就是抑制傳送端傳送資料的速率,以便使接收端來得及接收。

擁塞控制代價:

需要獲得網路內部流量分布的資訊。在實施擁塞控制之前,還需要在結點之間交換資訊和各種命令,以便選擇控制的策略和實施控制。這樣就產生了額外的開銷。擁塞控制還需要將一些資源分配給各個使用者單獨使用,使得網路資源不能更好地實現共享。

8、幾種擁塞控制方法

慢開始、擁塞避免、快重傳和快恢復。

1)慢開始和擁塞避免

傳送方維持乙個擁塞視窗cwnd 的狀態變數。擁塞視窗的大小取決於網路的擁塞程度,並且動態地在變化。傳送方讓自己的傳送視窗等於擁塞。

傳送方控制擁塞視窗的原則是:

只要網路沒有出現擁塞,擁塞視窗就再增大一些,以便把更多的分組傳送出去。但只要網路出現擁塞,擁塞視窗就減小一些,以減少注入到網路中的分組數。

2)慢開始演算法:

當主機開始傳送資料時,如果立即所大量資料位元組注入到網路,那麼就有可能引起網路擁塞,因為現在並不清楚網路的負荷情況。因此,較好的方法是先探測一下,即由小到大逐漸增大傳送視窗,也就是說,由小到大逐漸增大擁塞視窗數值。通常在剛剛開始傳送報文段時,先把擁塞視窗 cwnd 設定為乙個最大報文段mss的數值。而在每收到乙個對新的報文段的確認後,把擁塞視窗增加至多乙個mss的數值。用這樣的方法逐步增大傳送方的擁塞視窗 cwnd ,可以使分組注入到網路的速率更加合理。

每經過乙個傳輸輪次,擁塞視窗 cwnd 就加倍。乙個傳輸輪次所經歷的時間其實就是往返時間rtt。不過「傳輸輪次」更加強調:把擁塞視窗cwnd所允許傳送的報文段都連續傳送出去,並收到了對已傳送的最後乙個位元組的確認。

9、慢開始的「慢」並不是指cwnd的增長速率慢,而是指在tcp開始傳送報文段時先設定cwnd=1,使得傳送方在開始時只傳送乙個報文段(目的是試探一下網路的擁塞情況),然後再逐漸增大cwnd。

10、為了防止擁塞視窗cwnd增長過大引起網路擁塞,還需要設定乙個慢開始門限ssthresh狀態變數。慢開始門限ssthresh的用法如下:

當 cwnd < ssthresh 時,使用上述的慢開始演算法。

當 cwnd > ssthresh 時,停止使用慢開始演算法而改用擁塞避免演算法。

當 cwnd = ssthresh 時,既可使用慢開始演算法,也可使用擁塞控制避免演算法。

11、擁塞避免演算法:

讓擁塞視窗cwnd緩慢地增大,即每經過乙個往返時間rtt就把傳送方的擁塞視窗cwnd加1,而不是加倍。這樣擁塞視窗cwnd按線性規律緩慢增長,比慢開始演算法的擁塞視窗增長速率緩慢得多。

無論在慢開始階段還是在擁塞避免階段,只要傳送方判斷網路出現擁塞(其根據就是沒有收到確認),就要把慢開始門限ssthresh設定為出現擁塞時的傳送方視窗值的一半(但不能小於2)。然後把擁塞視窗cwnd重新設定為1,執行慢開始演算法。這樣做的目的就是要迅速減少主機傳送到網路中的分組數,使得發生擁塞的路由器有足夠時間把佇列中積壓的分組處理完畢。

如下圖,用具體數值說明了上述擁塞控制的過程。現在傳送視窗的大小和擁塞視窗一樣大。

1)當tcp連線進行初始化時,把擁塞視窗cwnd置為1。前面已說過,為了便於理解,圖中的視窗單位不使用位元組而使用報文段的個數。慢開始門限的初始值設定為16個報文段,即 cwnd = 16 。

2)在執行慢開始演算法時,擁塞視窗 cwnd 的初始值為1。以後傳送方每收到乙個對新報文段的確認ack,就把擁塞視窗值另1,然後開始下一輪的傳輸(圖中橫座標為傳輸輪次)。因此擁塞視窗cwnd隨著傳輸輪次按指數規律增長。當擁塞視窗cwnd增長到慢開始門限值ssthresh時(即當cwnd=16時),就改為執行擁塞控制演算法,擁塞視窗按線性規律增長。

3)假定擁塞視窗的數值增長到24時,網路出現超時(這很可能就是網路發生擁塞了)。更新後的ssthresh值變為12(即變為出現超時時的擁塞視窗數值24的一半),擁塞視窗再重新設定為1,並執行慢開始演算法。當cwnd=ssthresh=12時改為執行擁塞避免演算法,擁塞視窗按線性規律增長,每經過乙個往返時間增加乙個mss的大小。

「擁塞避免」並非指完全能夠避免了擁塞。利用以上的措施要完全避免網路擁塞還是不可能的。「擁塞避免」是說在擁塞避免階段將擁塞視窗控制為按線性規律增長,使網路比較不容易出現擁塞。

TCP擁塞控制和流量控制

tcp作為面向連線的提供全雙工可靠服務協議,具有差錯控制 擁塞控制和流量控制等功能。此處所謂的擁塞控制和流量控制,就是將傳送端傳送能力 接收端接收資訊的能力以及當前的網路環境參與考慮,在網路擁塞情況嚴重或者接收端接收能力有限的情況下,減緩或暫停訊息傳送,當情況改善時,增強訊息傳送能力,加上超時 丟失...

TCP擁塞控制和流量控制

tcp作為面向連線的提供全雙工可靠服務協議,具有差錯控制 擁塞控制和流量控制等功能。此處所謂的擁塞控制和流量控制,就是將傳送端傳送能力 接收端接收資訊的能力以及當前的網路環境參與考慮,在網路擁塞情況嚴重或者接收端接收能力有限的情況下,減緩或暫停訊息傳送,當情況改善時,增強訊息傳送能力,加上超時 丟失...

TCP流量控制 擁塞控制

如果傳送者傳送資料過快,接收者來不及接收,那麼就會有分組丟失。為了避免分組丟失,控制傳送者的傳送速度,使得接收者來得及接收,這就是流量控制。流量控制根本目的是防止分組丟失,它是構成tcp可靠性的一方面。主要的方式就是接收方返回的 ack 中會包含自己的接收視窗的大小,並且利用大小來控制傳送方的資料傳...