滑动窗口协议
什么是滑动窗口协议https://www.cnblogs.com/luoquan/p/4886345.html 用来控制tcp连接发包的大小。
TCP并不是每一个报文段都会回复ACK的,可能会对两个报文段发送一个ACK,也可能会对多个报文段发送1个ACK【累计ACK】,该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。
首先是第一次发送数据这个时候的窗口大小是根据链路带宽的大小来决定的。 比如发送3个包,但是接收方自能处理两个,那么下次接收方返回ack=3,期望收到第三个包,这时 发送方就知道它只能处理两个,就发3和4两个包。
处理是有接收方应用程序提取。回复缓冲区大小。
堵塞控制
慢开始、拥塞控制避免
发包 2 4 8 16 24 这样乘2启动控制窗口,最后到达设定的界限后 +1 这样发,小于界限就慢开始,大于就拥塞控制避免算法 网络发生异常, 界限减半,重设发包数目为1,重新开始慢开始、拥塞避免算法
快重传、快恢复
如果网络波动很大,有可能上面的发包数目还是挺大的。导致重试的报文更多,浪费网络资源。
接收方:一个包丢失,后续包对该包就行重传请求。
一旦发送方接收到三个一样的确认,就知道该包之后出现了错误,立刻重传该包; 此时发送方开始执行“快恢复”算法:
慢开始门限减半;
cwnd发包数目设为慢开始门限减半后的数值;
执行拥塞避免算法(高起点,线性增长)