前面講的慢開始演算法和擁塞避免演算法是tcp擁塞控制早期使用的演算法,後來又增加了快重傳和快恢復這兩個演算法。
考慮這麼一種情況:假設現在網路沒有發生擁塞,但是傳送方傳送的個別資料報卻在網路中某一處丟失了,而此時傳送方的超時計時器超時了,又沒有收到確認,在這種情況,tcp擁塞控制會誤認為出現網路擁塞
,然後馬上把擁塞視窗cwnd減小到1(即乙個mss),並啟動慢開始演算法,同時把門限值ssthresh減半,這樣就降低了通訊效率,所以基於這種情況就有了快重傳和快恢復兩個演算法。
快重傳演算法首先要求接收方每收到乙個失序的分組後就立即發出重複確認
,這麼做的原因是讓傳送方及時知道有個別報文分組丟失了,沒有到達對方。如圖1中,傳送方傳送了m1和m2分組,分別都收到了確認,現在假設傳送方傳送的m3在網路中丟失了,接收方沒有收到m3但是卻收到了m4(注意:此時m4是乙個失序分組)。
圖1-快重傳
按照快重傳演算法規定:接收方收到失序的m4分組後,應該立即對m2發出重複確認(總共傳送三次重複確認),也就是告訴傳送方:「我還沒收到m3分組」。
然後傳送方又接著傳送了m5,m6,接收方收到後就會繼續傳送重複確認m2。這樣傳送方收到了接收方三個重複的m2確認
。快重傳演算法規定,只要傳送方一連收到了3個重複確認就應該立即重傳對方尚未收到的m3,而不是等待超時計時器超時後再進行重傳,這樣傳送方及時重傳了丟失的分組,因此快重傳演算法提高了通訊效率。
配合快重傳演算法使用的還有快恢復演算法,快恢復演算法是這樣規定:當傳送方連續收到三個重複確認時,就執行「乘法減小」演算法,把慢開始的門限值ssthresh減半,這只是傳送方提前預防網路擁塞的措施。由於現在傳送方認為沒有發生網路擁塞(因為傳送方連續收到了接收方傳送的三個重複的確認,因此認為現在可能沒有發生網路擁塞),但此時並不會執行慢開始演算法,而是執行擁塞避免中的加法增大演算法,使擁塞視窗緩慢增大
,如圖2所示,重點關注紅色部分。
圖2-快恢復
從圖2中,我們還可以知道,在使用了快恢復演算法後,慢開始演算法就只會在建立tcp連線和出現超時的時候才會執行,換句話說,採用這種擁塞控制方法改進了tcp通訊效率。
圖3-快重傳和快恢復
在圖3中是在tcp流量控制的快重傳和快恢復演算法,「tcp reno版本」是目前使用的版本。而「tcp tahoe」版本已經廢棄了,不再使用,注意它們之間的區別:tcp reno版本在快重傳之後採用快恢復演算法,而tcp tahoe版本是採用慢開始演算法
。
在前面的學習中,我們總是假設接收方有足夠的接收空間,但實際上接收方的接收空間是有限的。另外,我們知道,傳送方的傳送視窗是由擁塞視窗來決定的,且接收方的接收視窗在建立tcp連線時,告訴傳送方自己的視窗大小。因此,從流量控制的角度來考慮,傳送方傳送的資料一定不能超過接收方的接收能力,也就是說傳送方的傳送視窗一定是不能大於接收方的接收視窗的,因此,傳送視窗大小應該取擁塞視窗cwnd和接收視窗rwnd中較小的乙個,那麼公式為: 傳送
視窗上限
=min
(rwn
d,cw
nd) 傳送窗
口上限=
min(
rwnd
,cwn
d)根據上面的公式可知,如果傳送視窗大小的值是取cwnd,則說明tcp流量控制演算法在控制傳送方的資料傳送速率,如果傳送視窗大小的值是取rwnd,則說明是傳送方是按接收方的接收能力來控制傳送速率。
TCP擁塞控制 快重傳和快恢復
1 快重傳 快重傳演算法首先要求接收方每收到乙個失序的報文段就立即發出重複確認 為的是使傳送方及早的知道有報文段沒有到達對方 而不要等到自己傳送資料時才捎帶確認。快重傳演算法規定,傳送方只要一連收到三個重複確認就應當立即重傳對方尚未收到的報文段,而不必繼續等待為其設定的重傳計時器到期。2 快恢復 1...
TCP擁塞控制 慢啟動 擁塞避免 快重傳 快啟動
一般原理 發生擁塞控制的原因 資源 頻寬 交換節點的快取 處理機 的需求 可用資源。作用 擁塞控制就是為了防止過多的資料注入到網路中,這樣可以使網路中的路由器或者鏈路不至於過載。擁塞控制要做的都有乙個前提 就是網路能夠承受現有的網路負荷。對比流量控制 擁塞控制是乙個全域性的過程,涉及到所有的主機 路...
TCP擁塞控制 慢開始 擁塞避免 快重傳 快恢復
計算機網路中的頻寬 交換結點中的快取和處理機等,都是網路的資源。在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的效能就會變壞。這種情況就叫做擁塞。擁塞控制就是防止過多的資料注入網路中,這樣可以使網路中的路由器或鏈路不致過載。擁塞控制是乙個全域性性的過程,和流量控制不同,流量...