一、以字节为单位的滑动窗口
假定从A收到B发来的确认报文段,窗口大小是20(字节),确认号是31(表名B期望收到的下一序号是31,而序号30为止的数据已经收到了)。根据这两个数据,A就构造出自己的发送窗口,位置如下:
A的发送窗口表示:在没有收到B的确认的情况下,A可以连续吧窗口内的数据都发送出去。凡是已经发送过得数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。发送窗口里面的序号表示允许发送的序号,显然窗口越大,发送方就可以在收到对方确认之前连续发送更多的数据;发窗口后沿后边的部分表示已发送且已收到确认;发送窗口前沿的前面部分表示不允许发送的,因为接收方没有为这部分数据保留临时存放的缓存空间。
发送窗口的位置由窗口前沿和后沿的位置共同确定。
发送窗口后沿的变化有两种情况:不动(没有收到新的确认)和前移(收到了新的确认),发送窗口后沿不可能向后移动,因为不能撤销掉已收到的确认。
发送窗口前沿通常是不断向前移动,但也有可能不动。对应于两种情况:一是没有收到新的确认,对方通知的窗口大小也不变;二是收到新的确认,但对方通知的窗口缩小了,使得发送窗口前沿正好不动。
二、利用滑动窗口实现流量控制
所谓流量控制就是让发送方发送的速率不要太快,要让接收方来得及接收。
利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制。在连接建立时,发送方的发送窗口不能超过接收方给出的接收窗口的数值,在此TCP的窗口单位是字节。
如:A向B发送数据,在连接建立时,B告诉A“我的接收窗口rwnd=400”,设每一个报文段为100字节长,数据报文段序号的初始值为1,则有:
来源:https://blog.csdn.net/ntjj_mint/article/details/99674859