天天看點

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 時,則是網絡的擁塞限制發送方視窗的最大值。           

摘自:

https://blog.csdn.net/qq_18539301/article/details/82351729

繼續閱讀