TCP滑动窗口主要用于控制流量,避免发送端过多的发送数据而导致接收端超过了可承载的能力(超负载)
下面用一个例子解释滑动窗口:
假设现在有1~9这一组数据,被分成1~3,4~6,7~9三个部分发送,
此时发送端滑动窗口的范围为1~9,接收端可接收的数据为2组
接收端只接收到1~3,4~6,那么接收端就会返回ack=7,以及当前可接收的数据为1组
发送端收到ack=7时,便会认为1~6已经发送成功,
此时滑动窗口向右滑到7的位置,范围为7~9,
发送端滑动窗口的大小根据接收端可接收的大小而变化,
此时发送端继续发送7~9,接收端接收到7~9,返回ack=10,当前可接收数据为0组,
此时就是到了零窗口状态,说明接收端已经接收到所有数据或接收端保存到缓冲区,但此时应用程序还未接收信息,所以缓冲区为满
发送端接收到接收端的零窗口状态,就不再发送消息,直至接收端发送可接收数据的大小大于0,发送端才重新开始发送数据
网友评论