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 時,則是網絡的擁塞限制發送方視窗的最大值。
摘自:
https://blog.csdn.net/qq_18539301/article/details/82351729