TCP的拥塞控制是为了防止过多数据注入网络,而造成路由器或链路过载。
对于通信的端点来时,拥塞的表现为通信延时的增加
TCP有流量控制和拥塞控制,拥塞控制与流量控制的区别:
1.拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程。
2.流量控制是指点对点的通信量控制,抑制发送端发送数据的速率,是端到端的过程。
拥塞控制算法
TCP进行拥塞控制的算法有四种:慢开始,拥塞避免,快开始,快恢复。
慢开始:开始注入少量报文,之后cwnd指数级增长(成倍增长,每次乘2)。达到ssthresh后采用拥塞避免算法。
拥塞避免:cwnd按线性规律缓慢增长(加法增长,cwnd每次加1)。
快重传:使发送方尽快进行报文重传,而不是等超时计时器超时再重传。发送方一旦收到三个冗余的ACK报文后就立即重传相应报文。
快恢复:收到三个冗余ACK报文后,cwnd乘法减小(减为原来cwnd的一半,ssthresh也变为cwnd的一半)。然后开始拥塞避免算法。
理解记忆:慢开始指的是开始注入很少的报文(从1开始),而快恢复则是将cwnd调整为原来的一半,不用再从1开始。
注:
cwnd(拥塞窗口):TCP要求发送方维护一个拥塞窗口(动态变化的),根据拥塞窗口的大小发送报文。
ssthresh(慢开始门限):当cwnd达到ssthresh时,就会开始拥塞避免算法。
ACK(Acknowledgement):确认报文,用于确认数据的正确接收。
算法使用场景
当TCP建立和网络出现超时,使用慢开始和拥塞避免算法。
当发送方收到3个冗余的ACK时,采用快重传和快恢复算法。
算法图解
如上图,最开始时cwnd的值为1,然后拥塞避免算法,开始指数级增长,1,2,4,8,16。16为ssthresh,达到慢开始门限后,开始加法增长,16,17,18,,,24。在24时收到3个重复的ACK报文,快重传后便开始快恢复。ssthresh和cwnd都变为原来cwnd的一半12(24/2),之后便开始拥塞避免算法。
练习
来1个王道题
1、设TCP的拥塞窗口慢开始门限值初始为8(单位报文段),当拥塞窗口上升到12时,发生超时,TCP开始慢开始和拥塞避免,则第十三次传输是拥塞窗口的大小为。
解题:
2(第1次),4(第2次),8(第3次)达到慢开始门限8,开始拥塞避免算法,9(第4次),10(第5次),11(第6次),12(第7次),发生超时。开始慢开始算法,ssthresh降为原来cwnd的一半 6 (12/2)和cwnd变为1,2(第8次),4(第9次),开始拥塞避免算法(因为8大于6,所以不会执行慢开始),5(第10次),6(第11次),7(第12次)
所以开始第13次传输时,拥塞窗口的大小为7。