網絡基礎—TCP的超時重傳、滑動窗口、擁塞控制、快重傳和快恢復

TCP超時重傳
    原理是在發送某一個數據以後就開啓一個計時器,在一定時間內如果沒有得到發送的數據報的ACK報文,那麼就重新
發送數據,直到發送成功爲止。 
    影響超時重傳機制協議效率的一個關鍵參數是重傳超時時間(RTO,Retransmission TimeOut)。RTO的
值被設置過大過小都會對協議造成不利影響。 
    (1)RTO設長了,重發就慢,沒有效率,性能差。 
    (2)RTO設短了,重發的就快,會增加網絡擁塞,導致更多的超時,更多的超時導致更多的重發。 
    連接往返時間(RTT,Round Trip Time),指發送端從發送TCP包開始到接收它的立即響應所消耗的時間。
TCP滑動窗口

作用:(1)提供TCP的可靠性;(2)提供TCP的流控特性
這裏寫圖片描述
這裏寫圖片描述

TCP的滑動窗口的可靠性也是建立在“確認重傳”基礎上的。 
發送窗口只有收到對端對於本段發送窗口內字節的ACK確認,纔會移動發送窗口的左邊界。 
接收端可以根據自己的狀況通告窗口大小,從而控制發送端的接收,進行流量控制。
TCP的擁塞控制
    擁塞控制是一個全局性的過程; 流量控制是點對點通信量的控制 
  TCP擁塞控制4個核心算法:慢開始(slow start)、擁塞避免(Congestion Avoidance)、快速重傳(fast 
retransmit)、快速回復(fast recovery)       
  擁塞窗口(cwnd,congestion window),其大小取決於網絡的擁塞程度,並且動態地在變化。
   
    慢開始算法的思路就是,不要一開始就發送大量的數據,先探測一下網絡的擁塞程度,也就是說
由小到大逐漸增加擁塞窗口的大小。

爲了防止cwnd增長過大引起網絡擁塞,還需設置一個慢開始門限ssthresh狀態變量。ssthresh的用法如下:
當cwnd < ssthresh時,使用慢開始算法。
當cwnd > ssthresh時,改用擁塞避免算法。
當cwnd = ssthresh時,慢開始與擁塞避免算法任意。

擁塞避免算法讓擁塞窗口緩慢增長,即每經過一個往返時間RTT就把發送發的擁塞窗口cwnd加1,而不是加倍。

無論是在慢開始階段還是在擁塞避免階段,只要發送方判斷網絡出現擁塞,就把慢開始門限設置爲出現擁
塞時的發送窗口大小的一半。然後把擁塞窗口設置爲1,執行慢開始算法。如下圖: 

這裏寫圖片描述

擁塞控制的具體過程如下:
(1)TCP連接初始化,將擁塞窗口設置爲1
(2)執行慢開始算法,cwnd按指數規律增長,直到cwnd=ssthresh時,開始執行擁塞避免算法,cwnd按線性規律增長
(3)當網絡發生擁塞,把ssthresh值更新爲擁塞前ssthresh值的一半,cwnd重新設置爲1,按照步驟(2)執行

快速重傳和快速恢復

快速重傳(Fast retransmit)要求接收方在收到一個失序的報文段後就立即發出重複確認(爲的是使發送方及早知道有報文段沒有到達對方),而不要等到自己發送數據時捎帶確認。
  快重傳算法規定,發送方只要一連收到3個重複確認就應當立即重傳對方尚未收到的報文段,而不必繼續等待設置的重傳計數器時間到期。

快速恢復(Fast Recovery)
  (1)當發送方連續收到三個重複確認,就執行“乘法減小”算法,把慢開始門限ssthresh減半。這是爲了預防網絡發生擁塞。請注意:接下去不執行慢開始算法。
(2)由於發送方現在認爲網絡很可能沒有發生擁塞,因此與慢開始不同之處是現在不執行慢開始算法(即擁塞窗口cwnd現在不設置爲1),而是把cwnd值設置爲慢開始門限ssthresh減半後的數值,然後開始執行擁塞避免算法(“加法增大”),使擁塞窗口緩慢地線性增大。

發送方窗口的上限值 = Min [ rwnd, cwnd ]
當rwnd < cwnd 時,是接收方的接收能力限制發送方窗口的最大值。
當cwnd < rwnd 時,則是網絡的擁塞限制發送方窗口的最大值。

各個窗口間的關係

滑動窗口
再不用等待ACK的情況下,最多能發送多少數據量

流量控制窗口
接收端的數據處理能力(緩衝區),能接收的數據量

擁塞控制窗口
慢開始機制,發送少量數據探測當前網絡的擁堵情況

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章