网络拥塞(congestion)是指在分组交换网络中传送分组的数目太多时,由于存储转发节点的资源有限而造成网络传输性能下降的情况。当网络发生拥塞时,一般会出现数据丢失,时延增加,吞吐量下降,严重时甚至会导致“拥塞崩溃”(congestion collapse)。通常情况下,当网络中负载过度增加致使网络性能下降时,就会发生网络拥塞。
另外一种说法,在网络中,链路带宽、节点的缓存、处理设备都是资源,当对资源的需求大于提供,网络的性能就会下降,就会出现网络拥塞。网络拥塞是全局的一个状态,不能仅仅改变一个部分的性能来改善,比如拥有了一台无限缓存的路由器,当分组的输入大于处理设备的能力时候,分组就会逐步在缓存堆积,以至于当缓存中的分组还未发送时,发送端迟迟收到不到应答,超时后重发了分组,更加加剧网络的拥塞。或者提高处理设备的能力,但是这样就将瓶颈丢到了别的地方,只有当全局的设备趋于平衡的时候,整个网络才能才能够顺畅运行。
拥塞控制和流量控制也是有一定的差别的,拥塞控制就是防止过多的数据涌入网络,导致网络处理不过来,是全局的,涉及所有的主机路由器。当TCP连接迟迟收不到应答就可以认定为网络发生了拥塞。只是无法确定在何处发送。
而流量控制就是防止数据输出过快导致对方来不急处理,是端对端的控制,只要抑制发送端的发送速率即可。
拥塞控制和流量控制经常会被人们给混淆,主要是一些拥塞控制算法同样会将控制信息发送给发送端来,这点和流量控制一致。当然如果网络发生拥塞,拥塞控制算法还要发送控制信息,这些信息同样会加剧网络拥塞。
拥塞控制
TCP 拥塞控制常用的下列四种算法,
慢开始
拥塞避免
快重传
快恢复
。为了介绍这几种算法,假设下列2情况。
1.接受方只是对数据报做出应答,不进行传输数据。
2.接受方的滑动窗口数无限大的。因为实际的窗口上限 = Min(接受方的滑动窗口数,发送方的拥塞窗口数),这样的发送窗口数就大小就有拥塞窗口数来决定。
接下来讨论是基于拥塞窗口数 cwnd(congestion windos),实际上拥塞窗口的单位是字节,在这里我们为了减少复杂度,理解算法的核心内容,讨论中的拥塞窗口数就用 SMSS(Sender Max) 作为单位
这个拥塞控制算法的核心思想就是:刚刚建立连接的时候,假设网络是拥塞的,先向网络传输一点数据。等到确认数据接收完毕后,就继续加大数据向网络里面塞。当窗口是超过阈值的时候,系统认为网络可能要发生拥塞,就减少了窗口数增大的速率。当系统通过某一种方式得知了网络发生了拥塞,