[返回]
TCP/IP 的拥塞及控制
中国科学院网络信息中心
罗万明
清 华 大 学计算机系 林 闯
计算机网络在过去的十几年中经历了爆炸式的增长,随之而来的是越来越严重的拥塞问题。例如,由于本地缓存溢出,Internet网关会丢弃约10%的数据包。
据统计,Internet上95%的数据流使用的是TCP/IP协议。Internet主要互连协议的TCP/IP的拥塞控制(congestion control)机制对控制拥塞具有特别重要的意义。拥塞控制是确保Internet稳定的关键因素,也是各种管理控制机制和应用(如多媒体通信中QoS控制与区分服务)的基础,因此成为当前网络研究的一个热点问题。
为什么会发生拥塞?
网络产生拥塞的根本原因在于用户(端系统)给网络提供的负载大于网络资源容量和处理能力,表现为数据包时延增加、丢弃概率增大、上层应用系统性能下降等。图1显示了拥塞发生的情况。

拥塞产生的直接原因有以下3点:
(1)存储空间不足。如果几个输入数据流共同需要同一个输出端口,那么在这个端口就会建立排队。如果没有足够的存储空间,数据包则会被丢弃。对突发数据流更是如此。增加存储空间在某种程度上可以缓解这一矛盾,但当路由器有无限存储量,拥塞只会变得更坏,而不是更好,因为在网络里数据包经过长时间排队完成转发时,它们早已超时,源端认为它们已经被丢弃,而这些数据包还会继续向下一路由器转发,从而浪费网络资源,加重网络拥塞。
(2)带宽容量不足。低速链路对高速数据流的输入也会产生拥塞。所有信源发送的速率R必须小于或等于信道容量C。如果R>C,在理论上无差错传输则是不可能的。所以在网络低速链路处就会形成带宽瓶颈,当其满足不了通过它的所有源端带宽的要求时,网络就会发生拥塞。
(3)处理器处理能力弱、速度慢。如果路由器的CPU在执行排队缓存、更新路由表等功能时,处理速度跟不上高速链路,也会产生拥塞。
避免拥塞需要考虑哪些因素?
要避免拥塞的发生,需对以上3点原因综合考虑。例如,低速链路对高速CPU也会产生拥塞;提高链路速率而不改变处理器,只会转移网络瓶颈,而不能避免拥塞。因此,拥塞往往也是系统各部分不匹配的结果。

拥塞一旦发生,往往会不断加重,形成一个恶性循环。如果路由器没有空余的缓存,那么它就必须丢弃新到的数据包。当数据包被丢弃时,源端会因超时而重传该包。由于没有得到确认,源端只能保留数据包,结果缓存会进一步消耗,并加重拥塞。
目前在Internet(IP v4)上实际使用的拥塞控制基本上是建立在TCP的窗口控制基础之上的。IP层(网络层)的路由器所起的作用比较小。不过目前在IP层控制拥塞的研究逐渐增多,已经形成了一个新的研究热点。图2显示了TCP/IP在Internet上拥塞控制的作用范围。