滑动窗口协议如何实现流量控制
一、关于滑动窗口
1、什么是滑动窗口
滑动窗口是类似于窗口一样的东西,用来告诉发送端一次可以发送数据的大小。即窗口标记了接收端缓存区的大小;
2、滑动窗口出现的原因
(1)对每一个发送的数据段,都要给一个ACK确认应答,收到ACK后发送下一个数据段。这样做大大降低了传递效率。
(2)使用滑动窗口,可以一次发送多条数据,提高性能。
3、滑动窗口的一些知识点
(1)接收端将自己缓冲区大小放进TCP头部的“窗口大小”字段,通过ACK告知发送端;
(2)窗口大小是指无需等待确认应答而可以一次连续发送数据的最大值;
(3)操作系统内核为了维护滑动窗口,需开辟发送缓冲区,来记录哪些数据还没有被应答,只有确认应答后才从缓冲区删除;
(4)接收端发现自己缓存区快满了,将窗口大小设置更小发送给发送端,发送端收到后就会减慢发送速度;
(5)接收端发现自己缓冲区满了,将窗口大小设置为0,此时发送端停止发送数据,而是定期发送一个窗口探测数据段,让接收端告诉它的窗口大小;
二、关于流量控制
1、什么是流量控制
流量控制的目标是接收端,防止发送方发的太快,耗尽接收方资源,使接收方来不及处理;
流量控制的机制是丢包。
2、通过滑动窗口实现流量控制
通过设置滑动窗口大小,用ACK告知发送端自己缓存区还有多大,让发送端以合适的速度发送数据
三、关于拥塞控制
1、什么是拥塞控制
防止发送方发的太快,使网络来不及处理,导致网络拥塞。
2、拥塞控制出现的原因
流量控制虽然可以高效的传递大量数据,但是如果刚开始阶段就发送大量数据,可能导致网络拥塞
3、拥塞控制实现的机制
(1)慢启动
(2)加法增加:执行拥塞控制算法后,在收到对报文的确认后,就把拥塞窗口cwnd增加一个MSS大小,使拥塞窗口缓慢增大,防止网络过早出现拥塞;
(3)乘法减少:出现一次超时(网络拥塞)就把慢开始门限值ssthresh设置为当前拥塞窗口值的0.5倍。
4、发送端如何判断网络出现拥塞(丢包)
(1)定时器超时(没有在规定时间内收到某个发出去的包ACK)
(2)收到三个重复的ACK