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)執行
乘法減小和加法增大
乘法減小:是指不論在慢開始階段還是擁塞避免階段,只要出現超時,就把慢開始門限減半,即設置為當前的擁塞窗口的一半(於此同時,執行慢開始算法)。當網絡出現頻繁擁塞時,ssthresh值就下降的很快,以大大將小注入到網絡中的分組數。
加法增大:是指執行擁塞避免算法后是擁塞窗口緩慢增大,以防止網絡過早出現擁塞。
快重傳和快恢復
快速重傳(Fast retransmit)要求接收方在收到一個失序的報文段后就立即發出重復確認(為的是使發送方及早知道有報文段沒有到達對方),而不要等到自己發送數據時捎帶確認。
快重傳算法規定,發送方只要一連收到3個重復確認就應當立即重傳對方尚未收到的報文段,而不必繼續等待設置的重傳計數器時間到期。
快速恢復(Fast Recovery)
(1)當發送方連續收到三個重復確認,就執行“乘法減小”算法,把慢開始門限ssthresh減半。這是為了預防網絡發生擁塞。請注意:接下去不執行慢開始算法。
(2)由於發送方現在認為網絡很可能沒有發生擁塞,因此與慢開始不同之處是現在不執行慢開始算法(即擁塞窗口cwnd現在不設置為1),而是把cwnd值設置為慢開始門限ssthresh減半后的數值,然后開始執行擁塞避免算法(“加法增大”),使擁塞窗口緩慢地線性增大。
發送方窗口的上限值 = Min [ rwnd, cwnd ]
當rwnd < cwnd 時,是接收方的接收能力限制發送方窗口的最大值。
當cwnd < rwnd 時,則是網絡的擁塞限制發送方窗口的最大