滑动窗口
是在可靠性的前提下,让我们进一步提高传输效率。
所谓窗口:就是不等待ack的情况下,批量发送的最大数据量,就叫:窗口大小。上面的窗口大小就是4000。
滑动:窗口范围表示哪些数据在等待ack,随着一个ack的到达,就立刻发送下一个数据,等待范围就逐渐向后滑动。
窗口越大,传输效率越高,但也不能无限大。
在这过程中,假如出现丢包怎么办?
在这过程中,假如数据报丢了怎么办?
流量控制
窗口大小不能无限大,传输速率太快,接收方可能处理不过来。
所以此处会根据接收方的处理能力来方向制衡发送方的发送速率(窗口大小)。
接收方的处理能力即通过接受缓冲区的“剩余空间大小”来决定发送方的速率。
这里就是在应答ack中加入了一个窗口大小,就是缓冲区的剩余空间大小,但发送发不一定会按这个发小发送数据,数据只会比这个数据小或者等于,但不会大于。当窗口为0,发送方就会定时发送一个探测报文,因为缓冲区的数据很肯能被取走一部分,就可以接受新的数据了。
有人会问:而发第一个数据时没有ack返回窗口大小吧,这里由拥塞控制决定,后面后提到。
还有就是当数据包出现部分丢失的时候,还是按照没有缺失的情况下来返回窗口剩余大小。
拥塞控制
拥塞控制和流量控制共同决定发送方的窗口大小。
考虑了网络传输路径上的拥堵程度,由于不好衡量传输路径的拥堵情况,只能不断反复试探,逐渐试探出应该用多大的窗口。
为啥要动态变化呢?
网络拥堵也是瞬息万变的,要随时根据网络实际状态进行动态调整。