TCP协议拥塞控制算法研究
摘要:自从1986年互联网出现严重的拥塞崩溃现象后,网络拥塞控制受到了广泛的关注。随着网络的不断发展,网络用户及需求急剧增加,网络拥塞也越来越严重。如何有效解决网络拥塞,成为人们急需解决的问题。TCP作为目前互联网上使用最广泛的一种传输协议,TCP拥塞控制机制对互联网的稳定运行起着重要的作用。本文阐述了TCP的拥塞控制机制以及几种TCP拥塞控制算法,并对它们进行了仿真,比较了他们各自的优缺点,并指出了进一步改进TCP拥塞控制的必要性。
关键字:互联网;TCP;拥塞控制
Abstract:Since the advent of the Internet congestion collapse in 1986, network congestion control has been widespread concern. With the continuous development of the network, network users and the demand are increasing rapidly, network congestion has become increasingly serious. How to effectively solve network congestion become an urgent problem. TCP currently used on the Internet as the most widely used transport protocol, TCP congestion control mechanisms for the stable operation of the Internet plays an important role. This paper describes the TCP congestion control mechanisms as well as several TCP congestion control algorithms, and their simulation to compare their advantages and disadvantages, and pointed out the need for further improvement of TCP congestion control.
Keywords:Internet;TCP;Congestion control
1 引言
近年来以IP为基础的internet呈爆炸式增长,网络用户数量迅速增加,internet 在各个领域也发挥着越来越重要的作用,但随着其流量急剧增加,由此而引发的网络拥塞已经成为制约网络发展和应用的瓶颈问题。在计算机网络中的宽带、交换节点中的缓存和处理机等,都是网络资源。如果网络相对于负载需求表现为节点存储空间不足、链路带宽不足、处理器处理速度慢,以及系统各部分性能不匹配等等,从而导致网络上的包时延增加,丢包率上升,吞吐量下降,直接使服务质量下降。概括来说就是在某一时间段里,如果网络中的某一资源的需求量超过了该网络所能提供的网络资源的可用部分,网络的性能就能变坏。诸如网络延时
加大、丢包率上升、吞吐量下降等。这种情况就叫做拥塞。即∑对资源的需求>可用资源。
TCP/IP(Transmission Control Protocol/Internet Protocol)是目前Internet使用最广泛的一组通信协议[1]。TCP所负责的功能包括:将自应用程序收到的信息分成许多较小的数据区段、提供连接导向的服务、提供可靠性服务、提供应用程序与应用和式之间的流量控制,并依据网络的状况提供拥塞控制。当应用程序有数据要传送到网上去时,为了希望能和网络上其他的TCP联机公平地共享频宽等资源并避免造成网络拥塞,由TCP通过拥塞控制机制来控制允许传送到网络上的数据量。因此,在Internet中,拥塞控制的大部分工作是由TCP完成的。
2造成拥塞的原因
(1)存储空间不足. 几个输入数据流共同需要同一个输出端口, 在这个端口就会建立排队。如果没有足够的存储空间存储, 数据包就会丢弃。对突发数据流更是如此。增加存储空间在某种程度上可以缓解这一矛盾, 但如果路由器有无限存储量时, 拥塞只会变得更坏, 而不是更好, 因为在网络里数据包经过长时间排队完成转发时, 它们早已超时, 源端认为它们已经被丢弃, 而这些数据包还会继续向下一路由器转发, 从而浪费网络资源, 加重网络拥塞。
(2)带宽容量不足. 低速链路对高速数据流的输入也会产生拥塞。根据香农信息理论, 任何信道带宽最大值即信道容量C = B log2 (1+ Sö N ) (N 为信道白噪声的平均功率, S 为信源的平均功率,B 为信道带宽)。所有信源发送的速率R 必须小于或等于信道容量C。如果R > C, 则在理论上无差错传输就是不可能的, 所以在网络低速链路处就会形成带宽瓶颈, 当其满足不了通过它的所有源端带宽要求时,网络就会发生拥塞。
(3)处理器处理能力弱、速度慢也能引起拥塞。如果路由器的CPU 在执行排队缓存, 更新路由表等功能时, 处理速度跟不上高速链路, 也会产生拥塞. 同样, 低速链路对高速CPU 也会产生拥塞。
3TCP拥塞控制机制
拥塞控制的任务是确保子网能够处理承载所到达的流量,这是全局性的问题。涉及各方面的行为,包括所有的主机、路由器及内部的存储转发过程等;流量控制只与特定的发送方和接收方之间的点到点流量有关,它的做法是接收方向发
送方提供某种直接的反馈以通告发方另一端的情况,使发方动态调整发送速率,以确保一个快速的发送方不会持续地以超过接收方能力的速率传输数据。Internet拥塞控制的大部分工作是由传输层来完成的,因为解决网络拥塞的真正办法就是降低数据发送速率[2]。目前,在各种TCP协议实现中,一般都包含有四个相互关联的拥塞控制过程:慢启动(Slow Start)、拥塞避免(Congestion Avoidance)、快重传(Fast Retransmit)、快恢复(Fast Recovery)[3]。TCP拥塞控制四个主要过程如下图1和图2所示,具体如下:
1、慢启动阶段:早期开发的TCP应用在启动一个连接时会向网络中发送大量的数据包,这样很容易导致路由器缓存空间耗尽,网络发生拥塞,使得TCP连接的吞吐量急剧下降。由于TCP源端无法知道网络资源当前的利用状况,因此新建立的TCP连接不能一开始就发送大量数据,而只能逐步增加每次发送的数据量,以避免上述现象的发生。具体地说,当建立新的TCP连接时,拥塞窗口(congestion window,cwnd)初始化为一个数据包大小。源端按cwnd大小发送数据,每收到一个ACK确认,cwnd就增加一个数据包发送量,显然,cwnd的增长将随RTT呈指数级(exponential)增长:1个、2个、4个、8个……,所以这样cwnd就将随着回路响应时间(Round Trip Time,RTT)呈指数增长,事实上,慢启动一点也不慢。
2、拥塞避免阶段:如果TCP源端发现超时或收到3个相同ACK副本时,即认为网络发生了拥塞(主要因为由传输引起的数据包损坏和丢失的概率很小(<<1%))。此时就进入拥塞避免阶段:慢启动阈值(ssthresh)被设置为当前拥塞窗口大小的一半;超时时,拥塞窗口被置1。如果cwnd
3、快速重传和快速恢复阶段:快速重传是当TCP源端收到到三个相同的ACK 副本时,即认为有数据包丢失,则源端重传丢失的数据包,而不必等待RTO超时。同时将ssthresh设置为当前cwnd值的一半,并且将cwnd减为原先的一半。快速恢复是在上述的“快速重传”算法后添加的,当收到3个重复ACK时,TCP 最后进入的不是拥塞避免阶段,而是快速恢复阶段。快速重传和快速恢复算法一