拥塞控制策略

拥塞控制策略


刺猬@http://blog.csdn.net/littlehedgehog

 

 

 

《TCP/IP v1》中TCP的超时和重传这章讲得实在凌乱无比,再加之我们亲爱的译者同志翻译的时候也按部就班地不幸地凑齐了字数,里面很多概念看起来特别的晦涩难懂。这里我参考了《TCP/IP簇》关于TCP的相关章节,稍稍总结了下,方便我后面回头看了。

 

讲拥塞控制前,我们起码要知道什么叫拥塞,就像了解如何带套前,至少我们先了解什么是安全套一样。啥叫“拥塞”呢?《TCP/IP簇》曰"如果网络的负载(即是发送到网路的分组数)大于网络的容量(即网络能够处理的分组数)",打个比方说吧,就是三条高速公路的尽头汇聚到一个乡间机耕道了(高速路和机耕道中间有一个收费站,中国特色),你可以想象一下有多少的汽车在收费站面前徘徊,这就叫拥塞了!

 

接下来是拥塞控制,我们要解决的问题是如何尽最大努力地控制拥塞,减少拥塞。关于拥塞控制策略,《TCP/IP详解》里面直接提出的拥塞避免算法,其实这只是拥塞控制策略的一部分,先把这块内容提出来让人有种一叶障目不见泰山的感觉。拥塞控制策略是基于三部分: 慢启动,拥塞避免,拥塞检测。下面一个一个来分析下。

 

慢启动的原理我就不再重复打一遍字了,这里我直接拷贝一块积木的《TCP/IP 详解学习笔记》:

 

TCP发送方首先发送一个数据报,然后等待对方的回应,得到回应后就把这个窗口的大小加倍,然后连续发送两个数据报,等到对方回应以后,再把这个窗口加倍 (先是2的指数倍,到一定程度后就变成现行增长,这就是所谓的慢启动),发送更多的数据报,直到出现超时错误,这样,发送端就了解到了通信双方的线路承载 能力,也就确定了拥塞窗口的大小,发送方就用这个拥塞窗口的大小发送数据。要观察这个现象是非常容易的,我们一般在下载数据的时候,速度都是慢慢“冲起来 的”

 

也就是说慢启动的时候,拥塞窗口大小是按照指数增长的(我们不考虑rwnd的大小限制,实际发送窗口大小是rwnd 和 cwnd 的最小值决定的),直到拥塞窗口达到一个我们设定的限制,它就不能再这样指数增长了。这段过程是我们在TCP连接初期经历的,也就是上面提到的我们用网际快车这些下载工具下载A片时经历的初期阶段,这个时候我们让拥塞窗口不停增长,这样达到一个最高的限度,这样才能保证我们能赶在今晚寝室熄灯前看到武腾兰的经典片。

 

 

拥塞避免阶段是拥塞窗口达到我们预先设定的限度之后的阶段,这个限度就是我们所说的慢启动门限,为什么会设有门限?这个问题很容易理解,因为直观上看网速肯定有个上限,当达到一定上限后,我们就不能提高了,如果再要往网络里硬塞入数据包,这就会发生拥塞现象了。这个阶段我们要保证这个拥塞窗口不再如同慢启动一样疯狂指数级增长了,所以我们的策略是当窗口里的所有报文都受到确认后,cwnd就加一个报文段,即是加一了,这样就减缓了cwnd增长。《TCP/IP 详解》说的是受到一个确认,cwnd加1/cwnd ,其实一个道理,不过玩了个数字游戏罢了。

 

 

拥塞检测阶段是发现了拥塞我们的处理办法,一旦拥塞发生了,我们必定要降低往网络里面塞数据量,这自然是通过发送方控制cwnd来达到目的了(这里我们忽略rwnd的影响),而对于发送方来说,它只是不停地发数据,根本不知道网络是否拥塞了(为什么?)。它唯一能体会到的是自己被逼重传数据包的时候,发送方要重传数据包的时候无非两种情况,一个是超时,也就是发送方前面发的数据包在规定时刻没有受到接受端的确认,这就好比你发了邮件对方不告诉你受到没有,这种情况很可能是拥塞发生了,中间路由器把包给丢了(数据严重拥塞,它直接给你丢了也不告诉你),接受方根本没有受到数据包,这样我们自然收不到确认了。所以这里处理是:

1、门限值设为当前窗口一半  2、cwnd设为一个报文段    3、重新从慢开始启动


第二种情况是受到了>=3个的ACK确认,这个是由于其中一个报文段丢了造成的,然后后面的包又没有丢失,所以每发一个数据包,接受端每收到一个,就发现咦,不对,这个不是我马上想要的,于是它就发个想要数据包的ACK,这种情况出现拥塞可能性比较小,有同学问为什么这个同样是丢包了,为什么不是拥塞呢?很简单,如果拥塞了,那中间路由器很可能会大量丢报,那我们受到ACK确认的数据包可能性也比较小,所以这里不大可能是拥塞。这里我们处理较第一种情况反应弱点儿:

1、门限值还是设为一半   2、cwnd设置为门限值  3、回到拥塞避免,而不是慢启动。

 

 

CSDN博客啊~  越来越不争气了~~

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
随着计算机和通信技术的发展,人们对 Internet 的需求已经越来越超乎想象,因此更 多、更合理的控制机制对现有网络的顺畅运作起着非常重要的作用,其中最基本、最关键 的就是拥塞控制,即如何有效防止或消除网络出现的拥塞,使网络基本运行在轻度拥塞的 最佳状态。 网络中的拥塞来源于网络资源和网络流量分布的不均衡性,它不会随着网络处理能力 的提高而消除。到目前为止,拥塞问题始终没有一个完美的解决方案。面对各种复杂的网 络环境,拥塞控制算法不但在设计方面存在一定的困难,在算法的性能评价方面也都缺乏 统一的标准。根据拥塞控制算法的实现位置,主要分为源端算法和链路算法两种:源端算 法在主机和网络边缘设备中执行,作用是根据反馈信息调整发送速率;链路算法网络设 备(如路由器和交换机)中执行,作用是检测网络拥塞的发生,产生拥塞反馈信息。拥塞 控制算法设计的关键问题是如何生成反馈信息和如何对反馈信息进行响应。 TCP 协议是使用最广泛的源端算法,也是目前在 Internet 中使用最广泛的传输协议。 它包括慢启动、拥塞避免、快速重传和快速恢复四个阶段,其核心的拥塞避免算法采用一 种 AIMD(加性增加乘性减少)的窗口调节机制。TCP 协议从提出到现在虽然经历了几个 版本的不断改进,但在高带宽时延乘积网络不断扩大的今天,它的局限性也愈加明显,尤 其是 TCP拥塞控制算法对大的拥塞窗口响应很慢,发生拥塞时又降低窗口过快的问题。 近几年,在 TCP 协议的基础上提出了一些新的改进协议,如:HSTCP、STCP、H-TCP、 Fast-TCP、BIC 和 CUBIC 等,这些协议公布了它们各自的实现机制和算法,并对可扩展 性、带宽利用率、TCP 友好性、稳定性、RTT 公平性等性能进行衡量和评价,使网络的 性能以及解决拥塞问题的灵敏度等方面得到很大程度地改进和提高。虽然这些新的拥塞控 制协议的算法和实现机制各有千秋,但依然还不能说它们中有哪个能很好地解决现在网络 环境中面临的所有问题,真正实现一个简单又鲁棒性更好的拥塞控制协议,因此,端系统 的拥塞控制协议方面的改进依然在不断深入研究和探索的阶段,尤其在协议参数的修改方 面依然是研究的热点,如何在各个性能之间权衡取舍,以使网络能够运行在最佳状态,仍然值得我们去探讨。 本文从 STCP 和 CUBIC 出发,通过大量不同网络环境下的模拟实验,对它们以及 TCP 协议的性能进 行参照对比,得出各协议的拥塞窗口变化、吞吐量、稳定性、TCP 友好性、RTT 公平性等方面的比较 和分析结果,并从中找到契合点,对总体表现更好些的 CUBIC 协议实施改进。在众多实验结果中我 们发现:基于 CUBIC 协议的运行机制,在 TCP 友好性、RTT 公平性方面都明显优于 STCP,在可扩 展性和稳定性方面也表现出很好的性能,但 CUBIC 的拥塞窗口增长过于保守,且波动幅度与 STCP 相比也相对较大,即 CUBIC 在稳定性方面尚有较大的改进空间。STCP 是以稳定性著称的一种机制简 单的拥塞控制协议,基于其在检测到拥塞后的窗口减小机制与 CUBIC 基本一致,我们想到在保留 CUBIC 原有基本机制的情况下,结合 STCP 的窗口增长机制,将 CUBIC 的窗口增量和 STCP 的窗口 增量糅合,并保持 CUBIC 原有的最大、最小增量的限制机制不变,这样就使 CUBIC 窗口增量在原有 的增量限制范围内做合理且适当的提高,试验证明,这个新改进的算法具有比 CUBIC 更好的稳定性, 并在传承了其在可扩展性、TCP 友好性和 RTT 公平性等优点的同时,也能有所提升,这个改进算法就 叫做——SCUBIC。 主要工作有: 1、阅读参考文献,了解拥塞控制基本理论、发展现状,重点对最近提出的基于端算法的新协议进行理 论分析和总结。 2、利用模拟工具 NS-2 重点对 STCP、CUBIC 协议及 TCP 协议进行模拟实验,并结合理论从其可扩展 性、稳定性、TCP 友好性、RTT 公平性方面进行比较分析。 3、针对 STCP 稳定性和可扩展性比 CUBIC 更加优越的特点,提出一种新的改进算法 SCUBIC。通过 实验验证 SCUBIC 增强了拥塞窗口的稳定和带宽使用的平稳度,较大程度地提高了协议的稳定性,同 时在可扩展性、TCP 友好性和 RTT 公平性方面也有所提升。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值