其实没有什么窗口,窗口也就是一个数值而已,这个窗口的作用是用来控制每次发发送字节的大小的,是TCP的流量控制,我们知道TCP包头有一个字段叫窗口大小,这个值就是来控制窗口的,发送方的接受方都有一个缓冲区,在接受方的缓冲区空闲的大小就是接受窗口的大小,发送窗口等于接受窗口,所以要发送的值也就是不能超过接受方缓冲区空闲的值,超过就麻烦了,接收方接受不了这个数据就丢失了,所以一定要进行流量控制。那问题来了,怎么进行流量控制的,为啥窗口叫成了滑动窗口?
现在发送了7、8、9、10个字节,11、12是可以发但没发的字节,后面的是现在不能发的字节。
当7、8字节确认后那么窗口就向后移两个,所以13、14字节就变成了就绪状态,但是这个窗口大小是变化的,因为接收方可能出来有点慢,缓冲区空闲区域变小,那么会返回窗口大小,那这个发送窗口的值也自然变小。
如果发生的丢失会怎么办,这时如果9、10丢失,那么只会确认7、8字节,11、12字节虽然没有丢失,也不会被确认(TCP的累计确认机制),这时发送窗口就停止滑动,只有等到超时重传重发9、10包并得到确认后才能继续滑动窗口,发送后面的数字。