APP下载

一种改进的网络拥塞控制算法及仿真实现

2013-06-22张宗福

计算机与网络 2013年7期
关键词:令牌控制算法数据包

张宗福

(广东江门职业技术学院 广东江门 529090)

1 引言

网络拥塞指的是当网络中存在过多的数据包时,网络的性能就会下降。在网络通信的过程中,网络拥塞是造成延迟和吞吐量等性能指标下降的主要原因,是影响带宽和缓存等网络资源利用率的关键因素。网络拥塞的根本原因是用户提供给网络的负载大于网络资源容量和处理能力;直接原因是INTERNET中的存储空间不足、带宽容量不足及处理机处理能力较弱等[1]。网络拥塞如果不加以控制,往往会导致恶性循环,因此,网络拥塞已成为制约网络发展和应用的一个瓶颈,研究如何有效解决拥塞问题对于提高网络性能有着特别重要的意义。

Jacobson在TCP中增加的拥塞控制算法,提出了著名的“慢启动”、“拥塞避免”、“快速重传”和“快速恢复”4个算法。这4个算法是TCP拥塞控制的核心算法,是Internet上主要使用的端系统拥塞控制机制。虽然这些算法在Internet中执行能有效的控制拥塞,避免拥塞崩溃现象的发生,但是实质上这是一种较保守的策略,它并非在所有的网络条件下都能保证其良好的性能。慢启动算法中存在的问题尤为突出,比如丢包严重、网络资源利用率低、延迟增加以及传输延迟较大等。

文章将对Internet中的TCP/IP拥塞控制进行探讨,针对TCP拥塞控制策略中的慢启动阶段存在的问题,提出一种改进的基于历史连接参数的拥塞控制算法,并对慢启动算法作了相应的改进,并使用NS2对研究内容进行仿真实现,为有效控制拥塞提供一种新的解决方案。

2 慢启动及其存在的问题

TCP拥塞控制由慢启动、拥塞控制、快速重传和快速恢复4个核心算法组成。这4个基本算法互相联系,是目前在Internet上主要使用的拥塞控制机制。慢启动是其中的一个关键算法,主要思想是:为了解决拥塞的问题,新建立的TCP连接不是一开始就发送大量数据,而是逐步增加每次发送的数据量,也就是说,当建立一个新的TCP连接时,可以把拥塞窗口(cwnd)初始设置为一个数据包的大小,源端按拥塞窗口(cwnd)的大小发送数据,每当接收端收到一个确认信号(ACK),拥塞窗口(cwnd)就会自动增加一个数据包的发送量,这样拥塞窗口(cwnd)就将随着回路响应时间(RTT)的增长而呈指数型增长,源端向网络发送的数据量也将随之而急剧增加。在慢启动策略中,要达到每个RTT发送W 个数据包所需要的时间仅为RTT×logW。由于在发生拥塞时,拥塞窗口会减半或降到1,因此慢启动确保了源端的发送速率最多是链路带宽的2倍。

虽然慢启动策略在TCP拥塞控制机制中运用能有效地避免拥塞现象,但越来越多的研究表明,这是一种比较保守的策略,并不是在所有的网络条件下都能保证良好的性能,存在以下3个问题:

①建立新的TCP连接时,在慢启动阶段,由于发送方无法了解到瓶颈链路的带宽,所以在每个回路响应时间(RTT)内都会将拥塞窗口(cwnd)的数量增加一倍,假如慢启动阈值(ssthresh)比较大,发送方窗口也增加到足够大时,连接将会丢失大约一半的数据包;

②TCP慢启动在传输数据前,是要先设定好参数,然后按照参数开始传输的,取拥塞窗口(cwnd)数为1个数据包大小,取慢启动阈值(ssthresh)为64个数据包大小,TCP连接在闲置一段时间后,再使用慢启动算法重新开始通信,当网络可用带宽较大时,会造成网络资源利用率降低及延迟增加;

③虽然TCP给予窗口的拥塞控制机制对于传输大批量文件具有良好的适应性,但是当这一机制为万维网应用等短小数据流服务时性能较差,往往需要几个RTT时间探测合适的网络带宽,传输延迟较大[2]。

3 改进的拥塞控制算法

3.1 基本思想

针对慢启动算法中存在的问题,人们已经提出了很多解决方案,在相关研究的基础上提出一个基于历史连接参数和令牌技术的改进算法,通过调整慢启动阶段初始参数的设置来提高TCP的性能[3]。在拥塞控制的慢启动阶段,让相类似的连接实例共享拥塞控制信息库,利用一个缓存表把类似的连接实例的相关参数保存下来,如果下次需要建立相类似的连接时,可以使用该表中的历史连接参数对新的连接进行初始化,避免了重新探测网络带宽的过程,减少了传输延迟。

但是,往往根据缓存表信息设置的初始窗口(cwnd)会大于一个数据包的大小,在建立连接时,如果在开始进行数据传输时不采取相应的措施,容易造成大量的突发数据在很短的时间内注入网络,加重拥挤程度,为了避免这一情况,可在发送方引入令牌控制的思想,使用RTT/cwnd作为令牌的生成速度,用来调节初始窗口中的数据包在一个RTT时间内均匀发送[4],一直到确认信号(ACK)自计时开始。

3.2 算法实现

基于前面的算法思想,该算法只需要对发送方进行修改,具体算法如下:

①建立一个缓存表,用于存放连接参数(如目标主机地址、cwnd、ssthresh、RTT等),当每一次建立新的连接时,根据历史记录,如存在与之匹配的历史记录,则从缓存表中取出相应的信息,然后对新的连接的参数进行初始化(RTT,ssthresh值保持不变),cwnd值取决于上一个连接结束前是处于慢启动阶段还是拥塞避免阶段,如果是在慢启动阶段,cwnd的值设为原值的1/2,如在拥塞避免阶段,cwnd的值设为原值减1;

②发送方在传输数据的过程中,如果遇到cwnd值减少,则将当前的拥塞参数保存在缓存中,然后使用如下方法计算并存储拥塞参数的初始值:t=now-times,cwnds=(1-f(α,t))×cwndc+f(α,t)×cwnds),其中(0≤f(α,q)≤1,0≤α≤1),t是该记录在缓存中的存储时间,now是系统当前时间,times是该记录被存储在缓存中的时间,cwnds是当前缓存表中保存的拥塞窗口大小,cwndc是当前连接获得的拥塞窗口大小。值得注意的是拥塞参数保存的时间越长,反映网络当前状态的可能性越小,所以,在保存拥塞参数时,必须考虑时间的影响;

③当根据缓存信息设置好初始参数并建立一个新的连接时,初始窗口的大小往往大于一个数据包,为了避免初始窗口中的大量数据包注入网络,可使用令牌技术控制数据包须在第一个RTT内均匀发送,将突发的数据流转化为相对平缓传输的数据流。令牌机制仅在发送窗口中使用,采用令牌机制时,发送方在发送前先调用申请令牌的函数,获得发送令牌,每获得一个令牌就发送一个数据包,令牌的产生速度由RTT/cwnd来确定,这样就确保了在第一个RTT时间内数据包是按照一定的时间间隔发送的,降低了数据的突发性。

4 使用NS2进行算法的仿真分析

4.1 NS2及其仿真步骤

NS2是一种针对网络技术的,面向对象的、离散事件驱动的网络仿真模拟平台,能够仿真多种局域网和广域网性能。NS2仿真分2个层次:①是基于OTcl编程的层次。利用NS已有的网络元素实现仿真,无需修改NS本身,只需编写OTcl脚本;②是基于C++和OTcl编程的层次。如果NS中没有所需的网络元素,则需要对NS进行扩展,添加所需网络元素,即添加新的C++和OTcl类,编写新的OTcl脚本[5]。

进行网络仿真前,首先分析仿真涉及哪个层次,假设用户已经完成了对NS的扩展,或者NS所包含的构件已经满足了要求,那么进行一次仿真的步骤大致如下[6]:

①开始编写OTcl脚本。首先配置模拟网络拓扑结构,此时可以确定链路的基本特性,如延迟、带宽和丢失策略等;

②建立协议代理,包括端设备的协议绑定和通信业务量模型的建立;

③配置业务量模型的参数,从而确定网络上的业务量分布;

④设置Trace对象。NS通过Trace文件来保存整个模拟过程。仿真完后,用户可以对Trace文件进行分析研究;

⑤编写其他的辅助过程,设定模拟结束时间,至此OTcl脚本编写完成;

⑥用NS解释执行刚才编写的OTcl脚本;

⑦对Trace文件进行分析,得出有用的数据;

⑧调整配置拓扑结构和业务量模型,重新进行上述模拟过程。

4.2 运用NS2仿真分析

根据上述仿真步骤,运用NS2进行仿真分析如下:

⑴编写OTcl脚本

配置模拟网络拓扑结构,对应的拓扑结构图如图1所示。

图1 拓扑结构图

⑵各时刻进程信息:

时刻与进程信息如下:

⑶演示过程与分析

源端开始向接收端发送报文段,拥塞窗口(cwnd)大小为1时,发送0号分组,当接收到0号ACK后,拥塞窗口(cwnd)增加到2,发送1,2号分组,接收到1,2号ACK后,同理,按指数规律增加拥塞窗口,拥塞窗口(cwnd)大小增加到8后,一直保持在最大值8上。发送完所有38个分组,收到31号ACK后,FTP传送结束。从以上过程数据可以看出,经过改进后算法,在慢启动后期,拥塞窗口cwnd越接近慢启动阈值,ssthresh增长越趋于平缓,最后能平滑地过渡到拥塞避免阶段[7],能很好地解决慢启动阶段存在的问题,有效地对网络拥塞进行控制。

5 结束语

慢启动算法是网络拥塞控制中的一种重要的算法,在网络建立连接或重传超时的情况下,都会转入慢启动阶段,慢启动算法的好坏对于网络拥塞控制的性能有着直接的影响。一个好的慢启动算法能够降低慢启动阶段数据包的丢弃率,提高链路的利用率,还能降低数据传输的延迟[8]。文章提出的基于历史连接参数和令牌技术的改进算法,通过调整慢启动阶段初始参数的设置来提高TCP的性能。通过NS2仿真分析也证明了改进的慢启动算法的有效性。

[1]刘文远,冯 波,龙承念等.一种新的TCP 拥塞控制慢启动策略[J].小型微型计算机系统,2005,26(1):23-25.

[2]林 荔.基于拥塞控制和资源调节的DDOS 攻击防范策略[J].计算机与网络,2011,37(18):71-73.

[3]王 强,普杰信,刘 伟.TCP 拥塞控制慢启动策略的研究[J].微电子学与计算机,2007,24(12):210-212.

[4]陈 晶,郑明春,孟 强.一种基于历史连接的网络拥塞控制算法及其性能分析[J].计算机研究与发展,2003,40(10):1470-1475.

[5]刘星宇.TCP 拥塞控制算法的NS 模拟实验[J].实验技术与管理,2011,28(9):79-81.

[6]杜玉林,张术平,王 炜.随机早期检测算法公平性的改进[J].计算机与网络,2009,35(3):112-115.

[7]张宗福.无线局域网安全问题及解决方案[J].计算机安全,2011(6):48-51.

[8]黄 敏,张鹏丽,段 焰.基于Petri 网的Internet 拥塞控制慢启

猜你喜欢

令牌控制算法数据包
称金块
基于路由和QoS令牌桶的集中式限速网关
SmartSniff
动态令牌分配的TCSN多级令牌桶流量监管算法
基于ARM+FPGA的模块化同步控制算法研究
一种优化的基于ARM Cortex-M3电池组均衡控制算法应用
一种非圆旋转工件支撑装置控制算法
DI材横向厚差自动控制算法及其应用
视觉注意的数据包优先级排序策略研究
令牌在智能小区访客系统的应用