如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小
- 假设接收端缓冲区为1M。一次收到了500K的数据;如果立刻应答,返回的窗口就是500K;但实际上可能处理端处理的速度很快,10ms之内就把500K数据从缓冲区消费掉了;
- 在这种情况下,接收端处理还远没有达到自己的极限,即使窗口再放大一些,也能处理过来;
- 如果接收端稍微等一会再应答,比如等待200ms再应答,那么这个时候返回的窗口大小就是1M;
可以选择以下两种情况来进行延迟应答:
- 数量限制:每隔N个包就应答一次;
- 时间限制:超过最大延迟时间就应答一次;
比如我们可以每两次请求,应答一次,比如第2,4,6应答.如果是偶数次请求,可以完成应答,如果是奇数次应答,那么最后一次就采用时间限制,超过一个系统默认的时间就应答.