TCP 滑动窗口
滑动窗口分为接受窗口和发送窗口
滑动窗口协议是传输层进行流控的一种措施,接收方告诉发送方自己窗口的大小,从而控制发送方的发送速度,
ACK是收到数据后,接收方给发送方的一个确认ACK,它包含了两个重要的信息;
期望接受到的下一个字节的序号n,代表接收方已经接受到n-1字节的数据,如果之后发送方发送的不是序号为n的字节数据,接收方不会返回后续的序号的。当前窗口的大小m,通过这两个数据,发送方就能计算出还可以发送多少数据给对方,假设当前发送第X字节:
x-n。窗口中已经有的
m-(x-n) 还能发送的字节数
因此: y = m – ( x – n )
在一个TCP的段中,可以看到如下信息
window字段就是窗口字段,是一个16bit的字段,代表窗口字节容量,也就是说窗口最大数据为2^16 – 1 = 65535
滑动窗口原理
在发送方,所有发送缓存内数据可以分为以下4种:
已经发送并且得到对面ACK的(send and acknowledged)已经发送并且未得到对面ACK的 (send but not acknowledged)未发送但是得到对面允许的(not send recipient ready to receive)为发送并且对方不允许的 (not sent recipient not ready to receive)
当接收方新的ACK到达发送方,发送方的发送窗口就开始移动
香港vps
对于接收方来说,某一时刻缓存内的数据也分为以下三种:
已接受未接受准备接受未接受并且并不准备接受
话说这个滑动窗口的特性,想不想小学时候的水池放水进水的问题??
发送窗口与接收窗口关系
接受窗口大小取决于硬件,引用
发送窗口取决于接受接口
46403291