滑动窗口的引入也是为了效率,试想如果tcp在传输过程中,都是等到对方ack返回后才发下一个,明显效率就会很低。效率上,遇事不决,先引入缓存。滑动窗口就是操作系统开辟的缓存空间,通过指定特定大小的滑动窗口,可以在窗口的范围内无须得到应答,就继续发送对端数据。当收到应答,再把窗口中对应的数据清理掉。
另外滑动窗口传输数据采用累计应答的方式,这样可以降低重传的次数,提高传输效率。
窗口的大小一般由接收方决定可以接受多少,否则发送方发送太多也承接不了。
先来看下发送方的窗口。
image.png
总共分为四个区域,篮圈的就是窗口大小。当可用窗口#3都用完了,那么就只能停止发送,等待有ack回来把#2的空间清掉到#1去,往右滑动,继续发送数据。#2+#3就是滑动窗口的大小。
再来看下接收方的窗口。
image.png
如图#1+#2是一些确定收到并且等待应用程处理的数据,只有不断收到ack的数据,接收窗口才可以不断往右挪动,接收数据。
接收窗口一般来说是约等于发送窗口的。当应用程序处理的接收到的数据比较快的情况下,接收窗口就可以更快的空出来。这个时候和发送窗口存在延迟,所以不一定会完全相等。
网友评论