2.5.2.1 网络拥塞的原因及其分析
在目前的TCP/IP网络体系结构下,IP协议主要完成路由的功能,由于IP采用了一种基于“尽力而为”思想的数据传输方式,协议本身并没有提供流量控制功能。因此,在互联网的某些局部区域,当某一个时间段内节点发送到网络中的数据量大于网络软硬件设备的数据服务能力时,会导致某些数据无法得到及时的处理和传输,产生较大的传输时延甚至数据包丢失,称此时网络产生了拥塞。如未能及时采取有效的流量控制措施,网络服务质量将快速下降,吞吐量也会急剧降低。图2-11 显示了网络负载与吞吐量的关系。
图2-11 网络负载与吞吐量的关系
从图2-11 可知,当网络负载超过崖点时,吞吐量几乎成指数下降,此时网络服务实际上濒临崩溃。事实上,当吞吐量处于崖点前且增速显著降低时,就应采取相应的拥塞控制措施。分析网络拥塞产生的原因,主要有以下两方面:
(1)网络设备(如路由器、交换机、各类服务器等)的处理速度及存储容量不够,导致大量数据包在这些设备的缓存中排队,最终由于存储容量不够而丢弃部分数据包或排队时延超过时延限制而失去传输意义;
(2)传输链路的带宽限制。
本质上,由于各部分处于“分治”状态下,互联网是一个异构的、开放的信息传输体系。伴随着网络中各类应用的扩展,从根本上消除网络拥塞是一个不可能完成的任务,只能在传输协议或网络设备中采取一定的措施,避免网络拥塞的发生或及时将网络从拥塞状态恢复至正常状态。目前,互联网体系中的拥塞控制是由传输层控制协议(Transmission Control Protocol,TCP)来完成,该协议提供可靠的、面向连接的数据传输服务。
2.5.2.2 TCP拥塞控制原理
传输层协议包括TCP协议和数据报(User Datagram Protocol,UDP)协议,基于源端的拥塞控制功能主要是由TCP协议实现的。UDP是一种无连接的协议,协议设计了非常简练的分组头结构,其协议本身并没有提供拥塞控制功能。而TCP作为一种面向连接的传输层协议,具备了完整的拥塞控制功能,在音、视频等此类流媒体的传输中得到了广泛的应用。TCP的拥塞控制由RFC2581、RFC2582 及RFC3390 等文档给出,主要包括了慢启动、拥塞避免、快速重传和快速恢复等四个阶段[16]。
TCP在慢启动阶段,数据发送方设置了两个变量,称为拥塞窗口(cwnd)和接收方通告窗口(rwnd),取二者的最小值作为发送数据量。开始发送分组时,cwnd 的值为一个最大分组段(1460 字节)的大小,每收到一个已发送分组的确认后,cwnd 增加一个分组的大小。因此,cwnd 每经过一个往返时延(RTT),当收到已发送的最后一个数据分组的确认分组后,其值会加倍。事实上,数据发送速度会随RTT成指数增加。慢启动本质上是一种逐步试探的发送策略,以避免发送方产生突发的数据流而造成可能的网络拥塞。
拥塞避免的基本思想是当cwnd 的值超过慢启动门限(ssthresh)后,每经过一个RTT,将cwnd 的值加1,即让其按线性规律增加。值得指出的是,在慢启动或拥塞避免阶段,只要发送方接收到某个已发送分组的3 个相同的确认分组或发现传输超时,就判断此时网络中出现了拥塞,接着将ssthresh 设置为当前cwnd 的一半。如判断发生了超时,则将cwnd 置为1。如此时cwnd 小于ssthresh,则重新开始执行慢启动算法,否则执行拥塞避免算法。
快速重传要求接收方每收到一个失序的分组后立即发出重复确认而不等待发送数据时才捎带确认分组。当发送方收到3 个重复的确认分组,就判断该分组已丢失并立即重传该分组,同时将ssthresh 设置为当前cwnd 的1/2,而不会等到重传定时器超时才进行重传。因此,在发送方尽可能早地重传未被确认的分组的前提下,有效地提高了网络的吞吐量。
与快速重传配合使用的是快速恢复算法,其规则如下。(www.xing528.com)
(1)当发送方连续收到三个重复确认时,为避免可能的网络拥塞,立即将ssthresh 减少为当前cwnd 的1/2,并重传丢失的报文,同时将cwnd 设置为ssthresh+3。当有数量超过3 的重复确认分组收到后,将cwnd 增1 并发送一个数据分组。
(2)当接收到一个新的确认分组后,将cwnd 设为ssthresh 的值,再执行拥塞避免算法。以常用的TCP Reno版本为例,拥塞控制如图2-12 所示。
图2-12 TCP拥塞控制原理
2.5.2.3 基于主动队列管理的拥塞控制
实践证明,仅仅依靠TCP的拥塞控制功能并不能有效地满足用户的要求。事实上,时延与丢包很大程度是由路由器的调度及队列管理策略引起的。因此,在路由器中设置合理的队列管理算法,对有效地避免和解除网络拥塞具有重要意义。主动队列管理(Acitive Queue Management,AQM)作为目前一种有效的队列管理算法,通过设置一个合理的队列长度和数据包丢弃策略,不但降低了拥塞的发生概率,而且提高了网络可用带宽的利用率。
典型的AQM算法为随机早期检测(Random Early Detection,RED),其队列管理的规则首先是设置路由器缓冲区中的队列长度,最短为QLmin,最长为QLmax。当各个IP分组到达路由器时,按下式计算当前的平均队列长度QLave:
其中,δ为参数,QLactual为当前队列长度。然后,判断平均队列长度QLave是否小于QLmin: 若为真,则将新到达的分组加入队列尾进行排队; 若为假,则再判断QLave是否大于QLmax(若为真,则把此分组直接丢弃; 否则,按概率p将此IP分组丢弃)。概率p的计算方法如下:
其中,ptran由下式计算:
其中,pmax为最大丢失概率。此外,对参数pmax和δ的选择有多种方法,一般是根据网络服务质量进行计算和选取。
可以看出,RED算法能够合理地调节路由器中的平均队列长度,将丢包与时延事件在各个数据流之间进行了均衡。通过有效地调整分组丢弃概率,在很大程度上避免了网络拥塞的发生,在各个数据流之间取得了较好的公平性,同时也提高了带宽利用率。但RED算法的参数配置是一个难点,目前并无统一的方法,相关的研究进展可参考文献[17]。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。