一、慢启动算法和拥塞避免算法
当网络中出现拥塞,Client端在给定的时间收不到Server端发送的ACK信息,那么Client就会认为是包丢失了。此时Client就需要重新传输包,从包丢失到包重传这个时间间隔就是RTO。
为了解决上面的问题,提出了慢启动算法和拥塞避免算法,具体过程如下:
- 当Client在第一次握手的时候会告知Server端自己的MSS和Window Size;而Server端也会告知Client端自己的Window_Size和MSS。
- Client端设置一个最大发送数据的窗口cwnd为2个或3、4个MSS,设置拥塞临界点为ssthresh;
- 每次Client端发送的数据由cwnd和Server端通告的窗口这两者的最小值决定。cwnd是Client端感知的网络状况确定的,而Server端通告的窗口是由Server缓存处理决定的。Client端发送的数据根据每次接收到的应答数量n增加为cwnd+n;当CLIENT发送的数据到达拥塞临界值时,此时cwnd是按照cwnd+1/cwnd接受的。
- 一旦出现拥塞(这里说的拥塞,是后面的数据都传不了而不是乱序或者是中间某一个包丢失了),这个时候就需要进行重传,同时我们需要设置Client的发送窗口cwnd=1,且ssthresh设置为拥塞时窗口的1/2(或者是没有确认的数