首页 > 范文大全 > 正文

网络仿真及其在网络拥塞控制研究中的应用

开篇:润墨网以专业的文秘视角,为您筛选了一篇网络仿真及其在网络拥塞控制研究中的应用范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:网络仿真是一种专门对实际网络进行模拟与分析的工具,是网络研究者研究新理论新算法经济而有效的手段。本文研究网络仿真软件NS2的功能扩展及网络仿真实现过程,并将其应用于网络拥塞控制的研究中,研究了模糊自适应PID网络拥塞控制算法,取得了较好的效果。

关键词:网络仿真;网络拥塞;网络拥塞控制

中图分类号:TP393

文献标识码:A

1引言近

十几年来,计算机网络飞速发展,其应用领域不断拓展,应用模式不断丰富,网络数据流量激增,网络拥塞问题也变得越来越严重。拥塞控制是保证网络鲁棒性的关键因素,同时又牵涉到网络运行的经济性,也是为网络提供QoS保证的必要前提。因此,对网络拥塞控制的研究具有重要的理论意义和实际应用价值,是当前网络研究的一个热点问题[1,2]。

NS2(Network Simulator Version2)是由UC Berkely大学开发的基于事件驱动的仿真器,是一种免费的开放源代码的网络仿真软件[3],用C++和Otcl语言编写而成,能近乎真实地模拟网络环境,支持的协议广泛可以在各个层次上模拟网络的运行,可运行在Linux、Unix、Solaris、Windows等平台上供研究人员进行二次研发。NS2采用开放的体系结构,用户可以根据需要进行功能扩展,但现有的一些中文文献重在讨论NS2的模块组成、仿真脚本的编写技巧等方面[4-7],对NS2扩展原理的讨论相对较少。本文研究了网络仿真软件NS2的功能扩展及网络仿真实现过程,并将其应用于网络拥塞控制的研究中,研究了模糊自适应PID网络拥塞控制算法,取得了较好的控制效果。

2NS2网络仿真及实现

2.1NS2网络仿真过程

网络仿真一般要经过建立模型、模拟实现和结果分析三个过程。NS2仿真分两个层次:一个是基于Otcl编程的用户层次,利用已有的网络元素实现仿真,只需编写Otcl脚本;另一个层次是基于C++和Otcl编程的系统层次,如果没有所需的网络元素,就需先进行功能扩展,添加所需的网络元素。这就要利用分裂对象模型,增加新的C++和Otcl类,然后再编写Otcl脚本。仿真过程如图1所示。图1NS2网络仿真过程

2.2NS2网络仿真的功能扩展与实现

已有的NS2软件往往不能直接提供新的协议和算法,网络研究者要不断研究新的协议和算法,为网络的发展作前瞻性的研究分析,就需要对NS2的功能进行扩展,一般步骤如下:

•定义或继承C++协议类;

•编写该类成员函数和协议算法;

•建立这个类在TCL中连接类;

•把C++代码绑定到TCL,即将C++类中的成员变量和成员函数影射到TCL类中;

•修改makefile文件,用make命令重新编译生成ns.exe文件,则新建的对象被加入到NS2的网络组件库中,可以被用户在TCL中调用。

3NS2在网拥塞控制研究中的应用

网络拥塞是一种持续过载的状态,此时用户对网络资源(包括链路带宽、存储空间和处理器处理能力等)的需求超过了其固有的容量。网络拥塞控制算法对保证Internet的稳定具有十分重要的作用。目前,已提出多种网络拥塞控制算法,本文对NS2进行功能扩展,并应用于网络拥塞控制研究中,研究了一种模糊自适应PID网络拥塞控制算法,取得了较好效果。

3.1模糊自适应PID网络拥塞控制算法

模糊自适应PID网络拥塞控制算法运用模糊数学的基本理论和方法,把规则、条件及操作用模糊集表示,并把这些模糊控制规则及有关信息(如评价指标、初始PID参数等)作为知识存入计算机知识库,然后计算机根据系统实际响应情况(即专家系统的输入条件),运用模糊推理,自动实现对PID参数的自动修改和完善,以达到最佳控制效果。

网络丢包概率表达式如下:为实现模糊自适应PID网络拥塞控制算法,需建立一个新的fuzzyQueue类。由式(3)(4)可看出,在fuzzyQueue的结构中应有一组变量来记录相关参数的初始值,如控制器初始值a、b、c及采样频率等。此外,还需另有一组参数记录fuzzyQueue的一些历史状态(如上一时刻队列长度及丢包率等)以便计算新的丢包率。所以用如下两个结构:edp和edv,其中edp(early drop parameters)记录初始参数情况,这些参数值由用户提供,程序运行中不再改变;edv(early drop variables)记录队列的历史状态信息,这些变量值在程序运行中会动态改变,由该段代码是edp结构,其中mean-pktsize为平均包大小,bytes和setbit为两个标志,bytes通过0、1设置指出队列长度是通过缓存中包的个数来计算还是通过字节来计算,setbit指出当检测到拥塞时是否采用标记位的办法,a、b、c为模糊自适应PID算法中的参数,w为采样频率,qref为期望队列长度。

该段代码是edv结构,其中v-prob为丢包概率,count和count-bytes分别为目前丢包的个数和丢包字节数,eold为上一时刻队列误差,eoldold为上两时刻队列误差。该算法每隔一段时间要对丢包概率更新一次。为保证这个过程周期性进行,需要建立一个fuzzyCalcTimer类,它是timer-handler的子类。以上结构是建立最重要的类fuzzyQueue的必要支持。在fuzzyQueue类中,最主要成员变量包括:fuzzyCalcTimer CalcTimer、edp edp-、edv edv-、int curq(当前队列长度)、PacketQueue q-。

程序中要先得到当前队列长度:int qlen = qib- ? q-->byteLength() : q-->le ngth(),然后更新丢包概率:

其中qib-标志队列长度是用包的个数来表示还是用字节数来表示。当qib-为1时,表示用字节数来表示队列长度。edv-.v-prob为上一时刻的丢包概率,edv-.qold为上一时刻队列长度,eoldold为上两时刻队列误差。而edp-.mean-pktsize为平均包大小,edp-.qref为期望队列长度,edp-.a、edp-.b、edp-.c为算法和模型提供的参数。随后添加以下代码,以对状态变量进行更新:

在ns-allinone-2.29下的ns-default.tcl文件里对TCL变量初始化:队列长度使用包进行计算,采样频率为170Hz,期望队列长度为300个包,平均包大小为600字节,检测到拥塞时直 接丢包,初始的丢包率和队列长度为0。

最后打开ns-allinone-2.29下的makefile文件,在其输出文件列表中加入新协议的输出文件queue/fuzzy.o,然后执行命令make。NS2的功能得以扩充,即可仿真网络拥塞控制算法的效果。

4仿真实验

考虑如图2所示的网络拓扑结构,瓶颈链路位于路由器R1和R2之间,链路容量15 Mbps(3750packets/s,分组缺省大小为500 bytes),延时10 ms。假设图中连接数n为500,所有的500个TCP连接均为持久性的FTP业务源,发送节点与R1之间的链路容量均为10 Mbps,传输延时10 ms,R2与接收节点之间的链路容量也均为10 Mbps,传输延时10 ms。除R1的队列管理采用各种AQM算法外,其余队列管理算法均为DropTail,所有节点的队列缓存大小为600Packets,队列大小期望值为300Packets。图2网络拓扑结构图3两种算法的控制效果图3给出了PID和模糊自适应PID两种网络拥塞控制算法下的控制效果。由仿真结果可以看出,模糊自适应PID网络拥塞控制算法在调节时间上明显优于PID网络拥塞控制算法,且该算法始终将队列保持在目标队列附近,同时队列的抖动也明显小于PID网络拥塞控制算法的队列抖动,模糊自适应PID网络拥塞控制算法的控制效果比PID网络拥塞控制算法的控制效果好。

5小结

本文研究和探讨了网络仿真软件NS2的功能扩展及仿真实现过程,并将其应用于网络拥塞控制的研究中,研究了模糊自适应PID网络拥塞控制算法,从仿真结果可以看出,模糊自适应PID网络拥塞控制算法具有较好的控制效果。

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。