单纯增加链路带宽及提高处理能力也同样不能解决拥塞问题。链路带宽的增加会使到达速率加快,但是若到达速率与节点转发速度不匹配,比如转发速度远小于到达速率时,路由器就会丢弃大量数据包,从而源端的发送速度被抑止,传输时间反而大大增加。既使所有链路具有同样大的带宽也不能解决拥塞问题,例如节点周围所有链路带宽一致,然而同时有更多的链路都有向某一路传输数据的任务时,对于路由器来说,输入和输出的速率就严重不一致,就会发生拥塞。
1.2 拥塞控制
拥塞控制算法可以分为两个主要部分:在端系统上使用的源算法和在网络设备上使用的链路算法。
1.2.1 源算法
源算法[4]一般在主机和网络边缘设备中执行,它的主要作用是根据获得的反馈信息调整发送速率。基于源端的TCP拥塞控制算法包括“慢启动”、“拥塞避免”、“快速重传”和“快速恢复”。基于源端的拥塞控制中,使用最为广泛的是TCP协议中的拥塞控制方法,而TCP协议是目前互联网中使用最为广泛的传输协议。统计资料显示,目前网络流量中总字节数的95%和总报文数的94%是使用TCP协议传输的[6]。 基于源端的TCP拥塞控制机制是通过使用窗口流,根据整个网络的拥塞状况来有效地调整每个连接的传输速率。TCP拥塞控制机制采用基于窗口流的速率控制机制,根据网络反馈的信息来增加或减小发送速率,利用分组数据的丢失作为隐式的拥塞控制信号,从源端对数据的传送速率进行限制。1984年,Nagle首次提出了复杂IP网络中的拥塞问题,并指出了在路由器连接的带宽差异较大的网络中,容易发生“拥塞崩溃”现象[7],1988年,Jacobson首次提出了拥塞控制算法即TCP Tahoe,它包括了最著名的3个最基本的拥塞控制算法:慢启动、拥塞避免、快速重传[8]。而Stevens在TCP Tahoe的基础上提出了TCP Reno版本,它是目前网络上使用广泛的TCP算法,它把TCP Tahoe版本的三个算法相结合,在TCP Tahoe版本的“快速重传”的基础上增加“快速恢复”算法,从而避免因为轻微的网络拥塞却采用“慢启动”造成的发送窗口急剧减小,浪费网络带宽资源[8]。Floyd在1999提出了TCP New Reno算法,补充了Stevens的“快速恢复”算法,它考虑到一个发送窗口内多个报文数据丢失的情况,这样能使网络有效利用带宽资源。以上几个版本都是基于速率控制机制来调节窗口流量的[9]。而Lawrence S等人提出了TCP Vegas算法[10],这是基于时间来调节窗口大小的,TCP Vegas算法是通过观测之前的TCP连接中RTT(回路反应时间)值改变情况控制cwnd(拥塞窗口)大小,虽然该算法较为合理,但是至今都没有广泛应用于网络控制,主要是因为使用TCP Vegas算法的数据流在带宽竞争能力方面不如未使用TCP Vegas算法的数据流。最近,又有TCP Reno的改进版本出现,如SACK[11],它也是关注同一个窗口内多个报文数据的丢失情况,不同的是,它使用选择性重复的策略,SACK算法在Reno基础上进行了扩展,对数据包能够有选择地确认和重传,从而源端能准确地知道哪些数据包能够正确地传到接收端,以避免不必要地重传,减少延时,提高网络利用率和吞吐量。文献综述
1.2.2 链路算法
链路算法[5]一般在网络设备(如路由器和交换机)中进行,它的主要作用是检测网络拥塞的发生,生成拥塞反馈信息。链路算法的研究目前主要是主动队列管理(Active Queue Management,AQM)算法。相对于传统的队尾丢弃(Drop Tail),AQM在网络设备的缓冲溢出前就丢弃或标记报文。TCP基于窗口的端到端拥塞控制对于Internet的鲁棒性起到了关键作用,然而随着网络的不断发展,网络规模越来越大,仅仅依靠TCP拥塞控制机制来提高网络的服务质量是远远不够的,因此网络中间节点也必须要参入到网络拥塞的控制中来。如采用路由器进行IP拥塞控制问题,通常也称之为队列管理机制。其主要的思想就是通过队列等待算法决定哪些包可以传输,哪些包丢弃,并以此分配带宽,通过丢弃/标记策略决定接收到的包哪些被丢弃/标记,哪些被转发,并以此来分配缓存。队列管理机制又可分为被动队列管理和主动队列管理。