题 目:TCP拥塞控制与方法改进 摘 要 如今网络已经离不开人们的生活,发展势头迅猛,网络的终端设备不仅在数量上,种类也越来越多,在此发展之下,保证大量的网络数据传输与网络性能相协调是极其重要的,经典的TCP拥塞控制机制是网络发展历史中人们想出的一种解决网络拥塞的方法,但如何适应当今网络发展的需求相信还是靠人们不断的探索来寻找合适的答案。本文致力于对经典TCP拥塞控制机制的讨论并提出相应的改进思路。
关键字:拥塞控制;慢启动;阈值;TCP拥塞窗口;数据包 一、概述 1.1TCP网络拥塞控制 TCP 是因特网中使用最广泛的一种传输协议,它是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,之所以应用广泛一大部分是由于它的可靠性、稳定性,它为通信的双方提供了可靠的端到端的服务,而实现这一可靠服务的便是 TCP 所具有的可靠传输机制,其中包括重传、序号、确认号、定时、流量控制及拥塞控制。 当网络中存在过多的数据包时,网络的性能就会下降,这种现象称为拥塞。拥塞导致的直接后果是分组丢失率增加,端到端延迟加大,甚至有可能使整个系统发生崩溃。1986年10月,由于拥塞崩溃的发生,美国LBL到UC Berkeley的数据吞吐量从32Kbps跌落到4obps(Jacobsonv,1958)。当网络处于拥塞崩溃状态时,微小的负载增量都将使网络的有效吞吐量(Goodput)急剧下降。
图1-1吞吐量和负载的关系图 图1.1描述了网络负载和吞吐量之间的关系。当负载较小时,吞吐量的增长和负载相比基本成线性关系,延迟增长缓慢;在负载超过Knee点后,吞吐量增长缓慢,延迟增长较快;当负载超过Cliff点之后,吞吐量急剧下降,延迟急剧上升。通常将Knee点附近称为拥塞避免区间;Knee到Cliff之间是拥塞恢复区间;Cliff之外是拥塞崩溃区间。可以看出,负载在肠ee附近时网络的使用效率最高。 拥塞控制就是由网络节点来采取措施避免拥塞的发生或者对拥塞的发生作出反应,使得网络能够传输较大的有效吞吐量,在图1.1中就是使负载保持在知ee附近。拥塞现象的发生和TCP八P网络的设计机制有着密切都联系。TCP/IP网络具有如下几个特点: (1)分组交换(packet-switched)网络。与电路交换(circul-switched)相比,分组交换通过共享提高了资源的利用效率,但这会引起分组在网络中滞留,造成分组数据可能出现“乱序”现象,增加了端系统处理乱序分组的复杂性。 (2)无连接(onneetionless)网络。TCP/IP网络中,从网络层的角度来看,节点之间在发送数据之前不需要建立连接。无连接模型简化了网络的设计,在网络的中间节点上不需要保存与连接到有关信息。但是无连接模型难以引入“接纳控制”(admissioncontrol)机制,在用户需求大于网络资源时,难以保证服务质量(QOS);无连接也是网络中出现分组乱序的一个主要原因。 (3)“尽力而为”的服务模型。所谓“尽力而为”的服务,是指网络不对数据传输的服务质量提供保证。这与网络早期的应用有关,传统的网络应用主要是数据业务,它们对网络性能(带宽、延迟、丢失率等)的变化不敏感,“尽力而为”服务能够满足需要。但“尽力而为”服务不能很好地满足新出现的多媒体应用的要求,这些应用对延迟、速率等性能的变化比较敏感。 虽然随着科技的发展,网络设备的处理速度不断加快、网络带宽持续增长,但是硬件的建设的速度有时赶不上应用需求的增长。而且,很多时候,即使局部的网络资源很充足,仍然会出现网络拥塞、分组数据丢失,从而导致性能下降。这是因为由于互连网络是一个及其复杂的分散系统,网络中总是存在资源“相对”短缺的位置,成为网络性能提高的瓶颈。 网络中拥塞现象发生的原因是“需求”大于“供给”。网络中有限的资源由多个用户共享使用。由于没有“接纳控制”策略,网络无法根据资源的情况限制用户的数量;同时,互连网络是一个分散控制系统,由于缺乏中央集成控制,网络无法控制用户使用资源的数量。目前,因特网上不断增长的用户和应用的数量,必然会导致网络发生拥塞。虽然拥塞源于资源短缺,但增加资源并不能避免拥塞现象的发生,有时甚至会加重拥塞程度。例如,增加路由器的队列缓存会增大分组通过路由器的延迟,如果总延迟超过端系统重传时钟的设定值,就会导致分组 重传,反而加重了网络拥塞。 图1-2网络的不均衡性示意图 拥塞总是发生在网络中资源“相对”短缺的地方,这反映了互连网络的不均衡性。这个不均衡性一方面表现在资源的不均衡,如图1.2(a)中带宽分布不均衡:当s以1MbPs的速率向D发送数据时,在路由器R处会发生拥塞。另一方面是由于流量的不均衡,如图1.2(b)中带宽分布是均衡的,但当Sl和S2都以1MbPs的速率向C发送数据时,在路由器R也会发生拥塞。因特网中资源和流量分布的不均衡是广泛存在的,由此导致的拥塞不能通过增加资源的方法解决。
1.2拥塞控制及其研究意义 拥塞控制策略包括拥塞避免(congestion avoidance)和拥塞控制(congestioncontrol)这两种不同的机制。拥塞避免是“预防机制”,它的目标是避免网络进入拥塞状态,使网络运行在高吞吐量、低延迟的状态下。拥塞控制是“恢复”机制,它用于把网络从拥塞状态中恢复出来。在网络控制的研究中,拥塞控制和流量控制是网络的经典问题,但它们两个的概念比较容易混淆。 拥塞控制必须确保网络能进行数据传输,这是全局性的问题,涉及到所有主机、路由器以及所有其他将导致削弱网络负荷能力的因素。而流量控制只与发送者和接受者之间的点到点的数据传输有关,它的任务是确保一个快速发送方的发送速第一章绪论率不超过接收方的最大接受速度。可以看到,流量控制的功能实现位于网络的传输层,实现比较简单;而拥塞控制从广义上讲,涉及网络的所有层次,在具体的实现中,拥塞控制一般通过网络层和传输层相互协调来完成。 从不同的角度,拥塞控制可以被分为很多类。对目前网络拥塞控制研究现状的分类我们将在下一小节中进行介绍。 拥塞控制的研究目的不是要完全避免拥塞,而是研究怎样的拥塞程度是合适 的。这是因为:TCP/IP网络采用分组交换技术来提高网络链路的利用率,造成路由器的队列缓存经常被占;如果路由器的队列缓存总是空的,虽然传输延迟小,但是网络的利用率也低;如果路由器队列缓存总是被占,传输延迟变大,但是网络利用效率也高。拥塞控制的目标是实现网络利用率和传输延迟等综合性能指标的最优化。 由此可以看到,通过网络的拥塞控制,可以提高网络的总体性能,保证网络系统长期的稳定性和鲁棒性。
二、经典TCP拥塞机制 2.1 网络拥塞的原因及所产生的开销 一般网络之所以会产生拥塞,大致有三个原因: (1)带宽不足:当输入带宽大于输出带宽,较低的一方就会出现瓶颈,使数据包在其外堆积,形成拥塞。 (2)路由器缓存空间不足:几个输入链路同时向一个路由器传送数据包,当路由器输出链路速度较小,使得数据包在路由器缓存队列中排队,时间长了则会超时,发送方会重传,若队列已满再过来的数据包会被丢掉,也会造成重传。 (3)处理器处理能力较弱:处理器不能及时处理接收缓存中的数据包,TCP 有相应的流量控制机制来应对,但是造成的结果也是重传数据包。 拥塞控制更倾向于整个网络的拓扑结构,其规模大,影响广,相应所产生的问题也是巨大的,会影响到整个网络的传输效率,网络拥塞开销有如下几点: (1)过多的数据包在路由器的队列中产生巨大的排队延时。 (2)数据包延时过长导致不必要的重传。 (3)某个路由器缓存溢出导致的丢包将浪费掉整个上游路由器的工作。
2.2经典 TCP 拥塞控制机制 2.2.1Tahoe 算法 1988 年V.Jacobson首先提出了基于“慢启动”和“拥塞避免”的 Tahoe 算法,这也是最早的 TCP 拥塞控制算法。 慢启动:由于发送端不知道网络当前状况,所以在开始发送时如果直接向网络中发送大量数据包,很可能会使网络变得拥塞,这里的慢启动的解决办法是发送方首先发送一个数据包使拥塞窗口(congestion window,cwnd)大小初始化为 1,每收到一个确认,发送方发送窗口就增加 1,像这样发送速率以指数形式增长。 拥塞避免:在早期的 Tahoe 算法中,当发送方收到三个重复的 ACK 或者超时事件发生时所采取的动作都是现将拥塞窗口大小调整为 1,将慢启动阈值(ssthresh)设置为当前拥塞窗口大小一半,之后进入慢启动阶段,当cwnd>=ssthresh后进入拥塞避免阶段,此阶段在每次收到一个 ACK 时只增加 1/cwnd个数据包,这样,在一个 RTT 内,cwnd将增加 1,呈线性增长趋势。
2.2.2Reno 算法 TCP 的 Reno 算法在 Tahoe 算法的基础之上采取了对不同丢包情况的不同策略,在发生超时事件后,TCP 所采取的动作和 Tahoe 算法一样。而发送方收到三个重复的 ACK 后所采取的动作却与超时事件发生不同。早期收到三个重复的 ACK 后所采取的是快速重传算法,算法所采取的策略是把ssthresh设置为cwnd的一半,将cwnd再设置为ssthresh的值(具体实现有些为 ssthresh+3)再次直接进入拥塞避免阶段。而后提出的快速恢复算法是在快速重传算法上添加了一些东西,具体来说快速恢复的主要步骤是: (1)当收到 3 个重复 ACK 时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加 3,然后重传丢失的报文段,加 3 的原因是因为收到 3 个重复的 ACK。 (2)收到重复的 ACK 时,拥塞窗口增加 1。 (3)当收到新的数据包的 ACK 时,把cwnd设置为第一步中的ssthresh的值。原因是因为该 ACK 确认了新的数据,说明从重复 ACK 时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。
2.2.3其他算法 在 1994 年,L.S.Brakmo等人提出了一种新的拥塞控制策略:TCP Vegas 算