挑戰408——一週網絡——運輸層(4)

TCP的可靠傳輸(數據傳輸)

TCP的流量控制

如果發送方發送的數據速率過快,那麼接收方就很可能來不及接收那麼多的數據報。所謂流量控制,就是讓發送方不要發送那麼快,至少要讓接收方來的即接收。利用滑動窗口機制可以很方便的實現對TCP流量的控制。這裏注意,rwnd的值不等於緩存區的大小。
在這裏插入圖片描述
分析一下,假設B的初始接收窗口爲rwnd= 400,也就是 一開始允許A最多發400字節的數據。
第一第二條表示數據的正常傳輸。第三條表示數據丟失。於是B收不到B發來的201到300的數據,於是認爲它丟失了,便要求重傳序列號爲201之後的數據,並重新設置接收窗口爲300.A收到後,除了重傳201-301(圖中第七條),也傳了新的數據。等接收窗口接收後,發送確認報文,要求傳501之後的報文,並重設接收窗口爲100(圖中倒數第三條)。B接收返回給A的報文中,rwnd爲0,表示不再接收數據。注意到,這裏整個過程rwnd都是在動態變化的
考慮這樣一種情況,當B發送rwnd = 0的報文後,突然緩存區有了空閒,又想讓A繼續發送數據,於是B向A發送了rwnd = 400.可惜,這個報文在傳輸過程中丟失了。這樣A在等待B發送非0窗口的確認報文,而B在等待A發送的數據。這樣雙方無休止的等待,陷入死鎖。而打破這個死鎖的辦法就是讓收到0窗口通知的一方啓動持續計時器,時間到後發送0窗口探測報文。這樣對方在發送確認的同時附帶新的窗口值。

TCP擁塞控制

所謂擁塞控制就是防止過多的數據注入到網絡中去,這樣可以使得網絡中的路由器或者鏈路不至於過載
擁塞控制與流量控制:擁塞控制所要做的都有一個前提:網絡能承受現有的網絡負荷。擁塞控制是一個全局性的過程。涉及所有主機,所有路由器。而流量控制是指點對點通信流量的控制,目的是爲了抑制發送端的發送速率,防止接收端接收不過來。
目前,TCP進行擁塞控制的算法有4種:慢開始擁塞避免快重傳快恢復
發送方在確定發送報文的同時,既要考慮對方的接收能力,又要從全局考慮不讓網絡出現擁塞。因此TCP要求發送方維持下面兩個窗體:

  • 接收窗口(rwnd)
  • 擁塞窗口(cwnd):發送方根據自己估算的網絡擁塞程度而設置的窗口值。只要網絡沒有出現擁塞 ,cwnd就可以適當增大一些以便吧更多的分組發送出去。反之,當網路出現擁塞或者可能出現擁塞的時候,就適當減小cwnd,防止過多的分組進入網絡,緩解網絡擁塞。

發送窗口的上限值一般min(rwnd,cwnd)。判斷網絡出現了擁塞的依據是出現了超時。

慢開始算法

思路:由小到大增大發送窗口的值,也就是說由小到大增大擁塞窗口的數值。每收到一個新的報文段的確認後,就可以把擁塞窗口增加最多一個SMSS。這樣,每經過一個RTT,cwnd就加倍。下面是慢開始算法窗口增長示意圖:
在這裏插入圖片描述
注意,這裏的慢不是指的增長速率慢,而是指的一開始注入到網絡中的數據很少,Cwnd從1開始。

擁塞避免

思路:讓cwnd緩慢增大,即每一個RTT後,cwnd自動加一,而不是像慢開始那樣加倍增加。這種增長方式稱爲加法增大。這種算法使得cwnd呈線性增長的趨勢。比起慢開始算法這樣的cwnd增長速率要慢很多。擁塞避免並非是完全避免擁塞,只是讓網絡比較不容易出現擁塞。

快重傳與快恢復

思路:要求接收方一收到發送方發送的數據就確認。當發送方一連收到3個重複的確認時,就可以認爲接收方沒有收到相應的報文,於是立即重傳丟失的報文。此時執行快恢復算法(將門限值變爲擁塞窗口的一半,同時設置擁塞窗口爲門限值,並執行擁塞避免算法)。這種做法稱爲乘法減小。
在這裏插入圖片描述

慢開始和擁塞避免

慢開始算法的cwnd是呈指數增長的,爲了防止cwnd窗口增長過快引發的網絡擁塞,還需要設置一個慢開始門限ssthresh
當 cwnd < ssthresh,使用慢開始
當 cwnd > ssthresh,停止使用慢開始,改用擁塞避免
當 cwnd = ssthresh,既可以使用慢開始也可以用擁塞避免。

在這裏插入圖片描述
設初始的ssthresh = 16,對上圖進行分析:

  1. 0-4 採用慢開始算法,cwnd呈指數增長。
  2. 4-12,當RTT = 4 時,ssthresh = cwnd,此時採用慢開始算法。直到RTT = 12時,網絡出現超時
  3. 此時cwnd =24,於是將ssthresh設置爲出現超時時cwnd的一半,也就是12.重新開始執行步驟1,步驟2.
  4. 當RTT = 20時(cwnd = 16),發送方收到連續3個重複的ACK確認,此時改用快重傳算法快恢復算法,重傳分組的同時,將ssthresh,跟cwnd設置爲出現重傳時的一半,即8.然後執行擁塞避免算法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章