在之前的TCP中,没有使用滑动窗口,就要等待N次应答时间和N次传播时间,这两个时间加起来才是总的传输时间,这样的效率一定是很低的。也就是之前我们讨论了确认应答策略, 对每一个发送的数据段, 都要给一个ACK确认应答. 收到ACK后再发送下一个数据段. 这样做有一个比较大的缺点, 就是性能较差. 尤其是数据往返的时间较长的时候
滑动窗口是在保证了可靠性的前提下,批量处理,处理时间压缩了,有进一步地提高效率。
如下图所示就是滑动窗口的应答图:
滑动窗口示意图:
窗口大小越大,传输的效率越高,但也不能无限高
所有的传输都有丢包的可能性,这里有两种丢包情况: 情况一:如果ACK丢包了 这种情况不会影响,例如下图,在最后一个ACK中还是返回了下一个是6001,证明滑动窗口会通过收到的下一个ACK的值为基准继续向后滑动
情况二:如果数据报丢包了 如果发送端主机连续三次收到了同样一个 “1001” 这样的应答, 就会将对应的数据 1001 - 2000 重新发送; 这个时候接收端收到了 1001 之后, 再次返回的ACK就是7001了(因为2001 - 7000)接收端其实之前就已经收到了, 被放到了接收端操作系统内核的接收缓冲区中。
这种机制被称为 “高速重发控制”(也叫 “快重传”)