什么是网络拥塞
随着网络的发展,网络服务越来越多,热门的网络服务将会面临xxxx 好吧,这个有些 扯淡了,一句白话描述: 接收端接受的包太多,造成了接受时候网络拥堵,此为网络拥塞
如何判断如何网络拥塞
RTT
计算超时,从TCP的三次握手开始,一次往返数据所用时间我们名之为RTT
抖动
由于网络环境的突然变化,比如从开阔地进入电梯、地下车库时候网络质量急剧下降,这个时候RTT理论上将会急剧身高,但是这是不公平的,因为是暂时的网络变差,而非一直差,这个短暂的信号变差,称之为抖动 出现抖动,我们应该需要消抖 消抖方式:
RTT=0.9*RTT_OLD + 0.1*RTT_NEW
什么时候认为出现了网络拥塞
当RTT值变得特别高的时候
网络拥塞的解决方案
慢启动
上图虽然画的很不走心,但是还是可以用用的, 虚线前半段是慢启动的过程 也就是说,刚开始发送TCP包的时候,我们将会将之从1个包开始急剧增加,可能1个包正常发出去后发两个包,还是没有问题发送4个包,还是没有问题发送8个包,这种指数形式的增长方式是慢启动时候的情况。
避免拥塞
当慢启动达到了某个阈值,我们需要放缓发包的速度,成线性增长发包,是处于避免拥塞的流程。 当出现了拥塞,也就是出现了RTT极高的时候,我们将发包数量将为之前的一半,以此减少网络压力
通知发包方
- 之前写的TCP/IP协议一文中,有介绍到,TCP包头中有Window Size字段知识接受方能够接受的剩余大小。发包方将根据这一值判断是否延缓发送数据包
- 由于接收方已经明确告知了发包方当前没有空间接收数据。那么发包方为了能够继续发送后续的包,将会启动探测定时器,每隔一段时间发送一个探测包,来轮询接收方的Window Size。
滑动窗口
服务器接收TCP数据包,由于网络拥塞或者其他原因,可能先发的数据包后到,后发的数据包先到,为了将数据包能够完美的序列化,而且不至于占用太多的内存资源,开出滑动窗口这一概念。 如上图,是一个窗口大小为6个包长的滑动窗口,发送方发送9个包,接收方将在该窗口内所有包都接收到后,向后滑动,直至该窗口内数都接收到,继续后移。 如此可以减少同一时间端内发送方发送的包的数量。
|