拥塞控制的一般原理
在计算机网络中的链路容量(带宽)、交换节点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这种情况就叫做拥塞。网络出现拥塞的条件:对资源的需求和>可用资源
拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,网络能够承受现有的网络负荷。拥塞控制是一个全局的过程。
tcp的拥塞控制方法
tcp进行拥塞控制的算法有四种:慢开始、拥塞避免、快重传、快恢复。
慢开始算法的思路是当主机开始发送数据时,由于并不清楚网络的负荷情况,如果把大量数据字节注入到网络可能会引起网络的拥塞。所以,较好的方法是先探测一下,由小到大逐渐增大发送窗口(拥塞窗口的数值)。
慢开始规定,每收到一个对新的报文段的确认后,可以把拥塞窗口增加最多一个SMSS的数值。即,
拥塞窗口cwnd每次的增加量=min(N,SMSS)
为防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限 ssthresh:
当cwnd<ssthresh时,使用慢开始算法;
当cwnd>ssthresh时,停止使用慢开始算法改用避免拥塞算法;
当cwnd=ssthresh时,既可以使用慢开始算法也可以使用拥塞避免算法。
拥塞避免算法的思路是让拥塞窗口cwnd缓慢的增大,每经过一个往返时间就把发送方的拥塞窗口cwnd+1,而不是像慢开始一样成倍增长。
快重传算法可以让发送方尽早知道发生了个别报文段的丢失。快重传算法要求接收方要立即发送确认,即使收到了失序的报文段也要立即发出对已经收到的报文段的重复确认。(例,接收方收到1,2并及时发回确认,接着,没有收到3却收到了4,此时,接收方像发送方发送对2的重复确认,此后收到5,6后也发出对2的重复确认)快重传算法规定,发送方只要一连收到3个重复确认,就知道接收方确实没有收到报文3,因此应当立即执行重传。(快重传可以使整个网络的吞吐量提高约20%)
快恢复算法,产生超时,发送方发现是由丢失个别报文段导致,于是不启用慢开始而是快恢复。此时,调整门限值 ssthresh=cwnd/2,同时设置cwnd=ssthresh,并开始执行拥塞避免算法。