文献综述
题目:NS2在计算机网络研究中的应用
姓名:李浩
学院:计算机与信息工程学院
班级:电子信息科学与技术052班
学号:054633240
指导老师:张盛光
NS2在计算机网络研究中的应用
作者:李浩 指导老师:张盛光
(新疆农业大学 计算机学院 新疆 乌鲁木齐 830000)
摘要:通过仿真技术对网络性能进行分析和优化已成为计算机网络研究的重要手段。NS2由于其扩展性强﹑执行效率高,已被广泛应用于各种网络的仿真。对网络研究人员而言,掌握网络仿真的重要性是不言而喻的。本文主要介绍了免费网络仿真软件NS2软件包构成、工作原理及NS仿真环境的搭建,并详细介绍了该软件使用中的难点问题。在此基础上以NS2为平台对基于一种新的速率的组播拥塞控制算法IRBMCC性能进行了大量仿真实验,并以此为例介绍了仿真过程中代码层修改、拓扑构建,以及如何将感兴趣的数据转换成x、Y坐标图像,并对最终结果进行了分析。同时还介绍了一些必要的系统安装知识。
关键词:网络仿真;模拟器;组播拥塞控制
1 引言:在研究和设计网络协议时通常需要利用仿真软件对其性能进行测试和评价,NS作为一种免费软件,以其协议代码与真实网络应用代码的相似性和仿真结果的可靠性,成为众多仿真软件中的首选。NS是一种面向对象的离散事件驱动的网络模拟器,支持多个流行的网络协议如各个版本的TCP、UDP和路由调度、拥塞控制算法等,当前版本是NS2。NS源代码完全公开,可供使用者在Unix、Linux、Windows等系统平台上使用和进行二次开发,并可以提供有线网络、无线网络中链路层及其高层精确到数据包的诸多网络行为的模拟与仿真,目前国内利用该模拟器来仿真和分析的研究人员也逐渐开始增多。
2 NS构成与仿真原理
NS是一个面向对象的、一个可扩展的、容易配置的、可编程的事件驱动仿真引擎(simulation engine),由LBNL(Law- ence Berkeley National Laboratory)的网络研究组研制开发,是DARPA支持的VINT项目的核心部分,其源代码全部公开,提供开放的用户接口,可用于各类IP网络模拟。
2.1 NS软件包及NS2的基本结构
NS软件包主要包括Tcl/Tk、OTcl、NS、Tclcl四部分。软件包各个部分的相互联系可由图1来简单刻画。OTcl是Tcl(ToolCommandLanguage)的面向对象扩展,是NS的仿真描述语言。N5仿真器共用到了六种Otcl接口类,分别是Tcl类、TclO均ect类、TclCommand类、EmbededTcl类和InstVar类。其中TclO均ect在类的层次结构中处于最高层,所有其他主要的类都从它派生而来。它有一个静态链表记录了用户创建的所有对象,每一个对象都有—个唯一的标识,记录了每个对象所属的类名。InstVar类定义了一些方法和机制,在编译类结构对象的成员变量和对应的解释类结构对象的成员变量之间建立映射,使两类变量一致共享;TK是Tcl的图形界面开发工具,帮助用户在图形环境中开发图形界面。
NS是整个软件的核心,采用编译和解释双层结构,编译层由C++类组成,它的前端是一个Otcl解释器。仿真器内核定义了有层次结构的多种类,称为编译类结构;在Otcl解释器中有相似的类结构,称为解释类结构。用户通过解释器创立新的仿真对象之后,解释器对它进行初始化,与编译类结构中相应的对象建立映射。从用户的角度看,C++代码层与OTcl代码层是一一对应的。NS中同时使用两种语言是因为C++语言执行速度快而修改和编译速度慢,故只用于编译层协议细节的实现,而Otcl修改快且可用于交互操作,用于解释层中真对象的设置。NS采用策略跟机制分离的原则,提高了代码的重用率;同时为了降低分组和事件的处理时间,事件调度器和基本的网络元素用C++进行编译,C++对象的控制权交给Otcl。
NS由事件调度器(Event Schedualer)、网络元素对象库和网络设置模型库三个主要部分组成。其中调度器是仿真器的重要组成部分,它记录当前时间,调度网络事件链表中的事件。它有一个静态成员变量instance_供所有的类访问同一个调度器,并提供函数产生新事件,指定事件发生的时间。事件和TCP分组(Event&TCP Packet)事件表示仿真器产生的实际事件,包括事件产生的时间、处理事件的事件处理器(是指所有处理事件类的基类,它只是一个虚拟函数,每个继承类实现自己的功能)。网络元素对象包括节点、链路、代理(Agent)、业务追踪(Trace)和数据源等;节点、链路、代理同时继承了NsO均ect和事件处理器类,来处理多项事务;代理是实际产生和消费分组的对象,它们属于传输层实体,运行在端主机(模拟),节点的每一个代理自动被赋与一个唯一的端口号(模拟TCP/UDP端口)。NS提供了丰富的网络元素,使用者只需要熟悉相关研究方向的基本元素,其它的可做“透明”处理。Tclcl用于提供C++和OTcl之间的接口,使对象和变量能同时出现在两种语言中。
2.2 NS仿真原理
用户在用NS仿真器进行仿真工作以前,首先需要分析该仿真过程所涉及是解释层还是编译层。如果仅涉及解释层,则只需要利用现成的网络元素编写OTcl脚本,构造合适的网络拓扑并确定链路的基本特性(如延迟、带宽和丢包策略等)以及对节点的特性化配置(如进行节点的代理、路由协议、事件调度等的初始化);此外还要建立追踪文件对仿真过程中用户感兴趣的网络元素的变化或特定的网络现象进行跟踪,以便于仿真过程结束后用XGraph进行静态或者用NAM(Network Animator)进行动态分析。其中NAM可以表现仿真的全部宏观过程,显示从开始到结束整个过程中的拓扑结构、代理行为和链路状态;XGRAPH用于对网络微观特性进行跟踪纪录并生成图形。此类模拟主要用于加深对网络协议和算法的形象理解和网络协议类教学。
如果仿真方案涉及C++代码层,途径有二,其一根据现有网络元素的C++代码进行某个算法修改或增加某个功能的实现来满足对一些现有协议功能完善的类的仿真;其二通过编写全新的协议代码,满足一些网络工程师新的设计需要。建立新的协议必须注意以下几个问题:
1)首先必须定义头文件,包括数据结构和新代理的继承结构,并建立适当的类定义;
2)定义C++代码和OTcl代码之间的接口连接;
3)定义接收函数ncv()和Tcl命令触发函数Command()及时钟类函数等必要的函数;
4)新协议代码完成后需对相关程序进行必要改动,并在NS目录下运行Make Depend和Make,重新编译NS内核,直至生成新的NS。
使用NS2进行网络仿真,最终目的是要得到实验的结果。NS提供跟踪和监视两种方式收集输出数据并存到指定文件中,来对仿真结果进行评价。
其中跟踪是指使用trace—dl记录每个包在队列或链路的行为(到达、离开、丢弃等);它的输出文件为:
十1.13450 Wp 1000 21.1.3.2.24 184
—1.13450 tcp 1000 21.1.3.2.24 184
十1.13450 tcp 1000 21.1.3.2.24 184
—1.13450 tcp 1000 21.1.3.2.24 184
r 1.26570 ack 40 23.21.1 12 179
……
各列的具体含义解释如下:第1列表示跟踪类型(+人队列、-出队列、r接收、d丢弃);第2列表示事件发生时间;第3、4列是源和目的节点号;第5列是包类型;第六列表示包大小;第七列表示当前支持ECN;第8列是IP流标识号;9、10两列表示源和目的地址;第11列是流内顺序号;第12列表示仿真生成包的标识号。而监视是指有选择的记录包的行为(如某链路上丢包的数目)或使用流监视器(flowmonitor)记录每个流的情况。其输出数据包括事先约定的流标识、包类型、流的字节数,丢包数、丢包字节数等,最多可有19项。监视获得的数据可在Linux下用Xgraph或XmgrL”,也可在Win—dows下用Excel或Ori由n等画图工具转换成便于观察和分析的X、Y坐标图。
此外,在仿真的过程中可以启动NAM进行动态模拟,但是无法进行定量分析。
整个流程从用户的角度看来如图2所示。
所以说,用NS2进行仿真的过程就是根据需要先对C++编译层进行修改或建立新的协议集,然后编写OTcl脚本源程序,包括用NS命令定义网络拓扑结构、配置业务源、业务接收点、收集统计信息,然后启动NS仿真器,调用其C++程序内核运行仿真,输出感兴趣的仿真结果,并对结果进行分析。
3仿真环境的搭建
NS仿真软件对于初次接触的人来说比较复杂,单仿真环境的搭建就是一大障碍。NS的安装在Unix、Linux、Win-dows、FmeBSD以及SunSolaris等平台下都可以进行,我们选择Linux作为NS的安装平台。
3.1 Linux安装应注意的几个问题
Linux支持的文件系统有很多种,其默认的文件格式为Ext2,并能兼容FAT、FAT32及NTFS等格式,多系统并存时一般先装Windows系统再安装Linux,而且,因为操作系统的Loader必须安装在硬盘的前8.4GB内,否则BIOS无法在启动时将控制权交给活动分区上的操作系统,解决的办法是将Win2000的OS loader和Linux的Loader(LILO:LinuxLoader)安装在硬盘的8.4GB前,其余各区不受8.4GB约束。此外在选择LILO的位置时,一定不要选择安装在MBR(MainBoot Record)上,否则,Win2000不能启动。
3.2 NS的安装
系统平台安装好以后,可在http://www.is比edu/nsnam/ns上获得最新的NS软件包,然后执行tar—xzvfns—allinone—2.26.tar.g进行解压,解压结束后所有的软件包都被安装在用户所选目录下的ns—allinone—2.26文件夹下。然后进行NS的安装,结束后,根据系统给出的提示进行路径修改,这一步是必需的,否则NS2不能正常使用。修改分为两步:在环境变量“PATH'’中加入ns—2.26下的bin、tk8.3.2/unix以及tcl8.3.2/unix的完整路径;在环境变量“LD_LIBRARY—PATH”、“LD_LIBRARY_PATH”以及“TCL_LIBRARY”加入相关的完整路径。修改完在*/ns—2.26下,键人“ns”,若出现“%”,则说明安装成功,否则Logout,再次进入*/ns—2.26,作同样的检测。
4 用NS2进行网络仿真实验
NS功能强大,从物理层到应用层、局域网到广域网、有线网到无线网,NS都提供了丰富的支持。下面将以NS2在一种改进的基于速率的组播拥塞控制算法IRBMCC仿真中的应用为例,对仿真过程中的代码层修改、拓扑构建、实验实施及实验结果的分析进行介绍。
4.1 实验目的和代码层修改
已有的基于速率的组播拥塞控制算法”’’111”l主要着眼于稳定性而忽略了控制过程的动态性,比TCP灵敏度低,往往造成了TCP的不友好性;同时,现有的可靠组播拥塞控制算法根据包丢失来判断拥塞,将NACK(Negative Acknowl-edgement)作为拥塞反馈信号,这种机制不具有扩展性。针对上述问题,本文就一种改进的基于速率的可靠组播拥塞控制机制IRBMCC(improved rate—based muhicast congestion con·trol)进行仿真,考察该算法对网络条件变化反应的灵敏性以及与TCP协议的公平性。
算法思想是选一些关键的接收者作为代表,根据延迟和带宽乘积来检测网络中数据的排队情况来判断拥塞状态,积极反馈拥塞控制信号CC(CongestionContr01),源端根据来自接收者代表的CC信号来进行速率调节而不是等到数据包丢失后才进行拥塞控制。
此算法涉及C++代码层,其中包括主要包括拥塞检测、速率调节两部分,伪码如下:
//拥塞检测部分伪码
Ifcurrentseq= =lastseq十1;
{delay:R_inv—S_inv;
ifdelay<1*S inv
r_status=increase
else ifdelay>3*S_inv
r_status=decrease;
else r_status=normal;
﹜elser_status=loss;
//速率调节
S_inv=ave_RTT;//initial
If r_status= =normal
S_rate=1/S_inv invpacketsize;
else if r_status= =increase
S_inv(t十1)=S_inv(t)*ave_RTT/(S_inv(t)+ave_RTT);
Else if r_status= =loss
S_inv(t+1)=S_inv(t)*2;
同时,为了避免反馈内陷,算法采用基于代表的反馈控制。初始时,没有代表,所有接收者都有资格发送反馈。发送者选择反馈最先到达的接收者作为代表,发送方在下一个发送的数据包中携带代表通告,只有权值比当前代表更高的接收者才发送反馈代表更新报告,申请加入代表集合。非拥塞时成周期性反馈,拥塞时及时反馈。其信号CC(CongestionContr01)主要选项如图3。
4.2 网络拓扑结构和实验结果分析
4.2.1 网络拓扑及主要参数
实验采用了图4所示的哑铃拓扑,LANIOOMb/s、瓶颈2Mb/s、发送者在左边、接收者在右边,共享瓶颈链路;为了能比较协议与TCP,采用与TCP的包大小匹配的1000字节作为包大小,100Mbps作为非瓶颈链路带宽的缺省值。另外为了说明该算法的性能,我们与已被作为当前标准组播拥塞控制算法的TFMCC进行了多方面比较。
4.2.2 实验结果及其分析
针对实验目的,将实验分组进行。
第一组实验采用图4中s1—L1—12—15—r1的部分拓扑,L1、15链路为10Mbps,瓶颈12带宽为1Mbps的路径,延迟20ms,验证该算法对网络变化的灵敏性。在实验中加入背景流,模拟网络资源变化情况:当t二0时,IRBMCC开始发送,30秒后,一个CBR流以500kbps的速率向瓶颈链路发送cross—traffic流,在60秒后,CBR的发送速率减至250kbps,以便模拟网络带宽变化,整个过程持续100秒,图5给出了实验结果。
从图5可以看出IRBMCC能根据网络资源的变化,迅速调节吞吐量,做到有效地利用网络资源。与TFMCC相比可以提前8秒左右检测到带宽的变化,做出快速反应,在一定
程度上提高了灵敏性。
第二组考察该算法的TCP友好性。实验a,同时并发一个TCP流和组播流对IRBMCC和TFMCC作对比实验,实验结果如图6所示。从图中可以看出IRBMCC能很快达到平衡状态,而TFMCC经过10几秒后才达到它的公平份额。
实验b验证多路复用时的TCP公平性,采用图4的拓扑和初始设置,随着瓶颈链路处带宽的增加而增加TCP和组播流的数量,在实验中竞争连接的数目在6到40之间变化,TCP和IRBMCC各占一半。有源端在0—5秒之间选择一个随机时间开始发送,整个模拟过程持续120秒。然后用TFMCC代替上面拓扑中的IRBMCC进行模拟。
图7和图8分别给出了连接数为8和16时TCP和IRBMCC的平均吞吐量,为了防止开始阶段行为的不同影响实验结果,我们将每个实验前60秒排除出去。
从实验a,b可以看出,IRBMCC比TFMCC有更好的TCP
友好性,且随着多路复用程度的增加,[RBMCC与TCP的平
均吞吐量基本保持一致。
至此,用仿真软件NS2进行的新算法IRBMCC性能仿真
实验结束。
4 结论
Win32 API已经被广泛应用于Windows操作系统上应用程序的开发。为解决本地进程间的通信问题,我们在过程实验平台的开发中使用了Win32 API中的管道函数。应用效果表明,管道技术尽管简单却十分有效,能够充分满足在VisualBssic程序与Visual C++程序之间进行大量频繁的数据通信的要求。
5 结束语
在介绍了NS构成、仿真原理以及仿真环境的搭建的基础上,以NS2在一种新的基于速率的组播拥塞控制算法IRBMCC仿真中的应用为例,详细介绍了仿真过程中代码层修改、拓扑构建、实验实施及实验结果的分析。随着网络规模和复杂度的不断增加、新协议的不断生成,仿真正成为一种有效的、必不可少的手段。NS作为一个源代码公开的免费开放平台,功能强大,并可根据需要进行二次开发,它在网络协议研究领域的广泛应用,已经成为必然。
参考文献:
[1] 刘炳文,李风华.Visual Basic6.0Win32 APl程序设计[M].北京:清华大学出版社,2001.
[2] 卢荣德,陈宗海,王雷.复杂工业过程计算机建模、仿真与控制的综述[J]。系统工程与电子技术,2002,24(1):27—30.
[3]王雷.企业级仿真培训支撑系统设计与开发[D].合肥:中国
科学技术大学,1999.
[4]Richter J.Windows高级编程指南[M].北京:清华大学出版社,1999.
[5] 尹立民,等.Visual Basic6.0常用编程技巧[M].北京:清华大学出版社,1999.
[6] 齐舒创作室.VisualC++6.0开发技巧及实例剖析[M]京:清华大学出版社,1999
[7] 陆成新,张卫民,廖湘科.中文版Windows NT4.0实用指南[M]。北京:人民邮电出版社,1998
[8] (美)Christopher Nepis著,王玉芬等泽.Red Hat Linux宝典[M]。北京:电子工业出版社,2001
[9] BrentBWelch,王道义等译.Tcl/Tk组合教程(第二版)[M].北京:电子工业出版社
| E-mail:web@eda100.com |
| 版权所有 Copyright© 2008 - 2010 EDA信息网(http://www.eda100.com) |
| 本网站部分文章来源于网络,如有侵权请与我们联系,我们会及时处理 |