您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > 实验指导书-实验八:NS3基础仿真实验
-1-计算机网络实验实验指导书实验名称NS3基础仿真实验电子信息与通信学院实验指导书2一、实验目的1.了解网络仿真的意义2.熟悉NS-3的基本语句3.安装并熟悉使用NS-34.用NS-3搭建最基本的网络仿真场景二、实验背景(一)网络仿真技术近年来,随着计算机和网络通信技术的不断发展,网络技术的研究也进入到了一个飞速发展的时期。研究人员不断开发出新的网络协议、算法和应用,以适应日益增长的网络通信需要。然而由于网络的不可控、易变和不可预测等特性的存在,给新的网络方案的验证、分析和比较带来了极大的困难。目前网络通信的研究一般分为以下3种方法。1)分析方法:在理论和协议层面上对网络通信技术或系统进行研究分析,抽象出数学分析模型,利用数学分析模型对问题进行求解。如采用数学建模、协议分析、状态机、集合论以及概率统计等对多种理论分析手段和方法对通信网络及其算法、协议、网络性能等各个方面进行研究。2)网络模拟:即计算机模拟仿真算法。网络模拟日益成为分析、研究、设计和改善网络性能的强大工具,它通过在计算机上建立一个虚拟的网络平台,来实现真实网络环境的模拟,网络技术研究人员在这个平台上不仅能对网络通信、网络设备、协议以及网络应用进行设计研究,还能对网络的性能进行分析和评价。3)实验网方法:对网络协议、网络行为和网络性能采用建立实验室测试网络、网络测试平台(networktestbed)和小规模商用实验网络的方式对网络进行实战检验。就是设计出研究所需要的合理硬件和软件配置环境,建立测试床和实验室,在现实的网络上进行研究。以上3种方法有利有弊,相辅相成并各有侧重点。理论研究适用于早期研究与设计阶段,对新算法和新技术进行理论准备和验证,除了人力和知识,几乎不需要什么额外成本。实验网方法是网络和系统在投入实际应用前的一次系统的演练,能够发现网络设计与用户需求之间的相合度以及检验网络实际使用的效用和性能。该阶段建设成本很高,要求技术和设备开发相对成熟,网络系统基本成型,主要是对业务、系统稳定性能和服务性能的检验。而网络模拟阶段可以说是理论方法和实验网方法的中间阶段,它可以对新协议进行初步实现和验证,并有助于新协议的及时调整和改进。网络模拟阶段由于采用计算机软件进行模拟,使得很多研究工作人员能够研究大规模网络和学习新协议新算法的设计和实现,并且能够在网络实用钱对其进行检验和改进。此外,它还可以在各种新老系统和算法之间进行比较而不必花费巨资去建立多个实际系统。因此,网络模拟是网络通信研究中一种非常重要的方法。(二)NS-3简介俗话说“工欲善其事必先利其器”。为了方便网络研究人员的研究工作,一款好的网络电子信息与通信学院实验指导书3模拟软件是必不可少的。它必须具备以下特点:1)能够提供简单易用的使用界面,能方便快捷地建立和修改模拟环境和模拟配置;2)能够提供常用的绝大部分网络协议、算法和应用模块;3)能够方便地进行配置和扩展,有利于添加新的协议和算法。当前有许多优秀的网络模拟软件,如NS-2(networksimulatorversion2)、OPNET(optimizedperformancenetworkengineeringtool)、OMNet++(objectivemodularnetworktestbedinC++)、GloMoSim(globalmobileinformationsystemsimulator等,这为网络研究和开发人员提供了很好的网络模拟平台。相比于以上提到的网络仿真软件,NS-3是比较年轻的网络仿真工具。NS-3是尽量吸取现有网络模拟工具的优点并避开其缺点,应用现代软件工程思想和网络仿真技术而设计开发的新一代网络模拟工具。NS-3不是NS-2的扩展,而是一个全新的网络模拟器,是由美国华盛顿大学的ThomasR.Henderson教授及其研究小组在美国自然科学基金(NFS)的支持下,于2006年开始应用现代网络模拟技术和软件开发技术设计并开发的一个全新网络模拟工具。NS-3广泛汲取了现有优秀开源网络模拟器如NS-2、GTNetS、Yans等的成功技术和经验,专门用于教育和研究用途的离散事件模拟器,它基于GNUGPLv2许可,可以免费地获取、使用和修改。NS-3相对简单易学、可扩展性好、节省资源,并且能提供高性能的,与真实网络相近的网络仿真,尤其能够集成到实验床和虚拟机环境,逐渐得到学术界的认可,在和仿真相关的国际会议如SIMUTools、SpringSim、ICST-NSTools等,以及网络方面的顶级会议如Sigcomm、Infocom等研究和使用NS-3的文献逐渐增多,详。三、实验原理(一)NS-3仿真基本流程使用NS-3进行网络仿真时,一般经过以下4个步骤。1)选择或开发相应模块根据实际仿真对象和仿真场景选择相应的模块:如是有线局域网络(CSMA)还是无线局域网络(Wi-Fi);节点是否需要移动(mobility);使用何种应用程序(application);是否需要能量(energy)管理;使用何种路由协议(internet、aodv等);是否需要动画演示等可视化界面(visualizer、netanim)等。2)编写网络仿真脚本有了相应的模块,就可以搭建网络仿真环境,NS-3仿真脚本支持2种语言:C++和Python,但是2种语言的API接口是一样的,部分API可能还没有提供Python接口。编写NS-3仿真脚本的大体过程如下。生成节点:NS-3中节点相当于一个空的计算机外壳,接下来要给这个计算机安装网络所需要的软硬件,如网卡、应用程序、协议栈等。安装网络设备:不同的网络类型有不同的网络设备。从而提供不同的信道、物理层和MAC层,如CSMA、Wi-Fi、WiMAX和point-to-point等。安装协议栈:NS-3网络中一般是TCP/IP协议栈,依据网络选择具体协议,如是UDP电子信息与通信学院实验指导书4还是TCP,选择何种不同的路由协议(OLSR、AODV和Global等)并为其配置相应的IP地址,NS-3既支持IPv4也支持IPv6。安装应用层协议:依据选择的传输层协议选择相应的应用层协议,但有时需要自己编写应用层产生网络数据流量的代码。其他配置:如节点是否移动,是否需要能量管理等。启动仿真:整个网络场景配置完毕,启动仿真。图3-1NS-3基本模型NS-3仿真的基本模型如图3-1所示,搭建NS-3网络仿真场景和搭建实际网络类似,首先需要网络节点,NS-3中使用节点的概念;节点需要有网络设备,类似于网络接口卡,NS-3中有相应网络设备的概念;网络设备通过传输媒体连接,NS-3中使用信道的概念来代表传输媒体,设置信道延迟等属性,并且和实际网络相似:信道和网络设备是对应的,CSMA网络设备对应CSMA的信道,Wi-Fi网络设备对应Wi-Fi的信道。以上概念使网络节点实现了物理连接,但要实现通信,还需要软件支持,也就是协议,应用层产生数据,利用类socket编程(和真实的BSDsocket很像)实现数据分组的向下传递,数据分组通过协议栈—TCP/IP向下传递给网络设备(可以简单理解为网卡),该网络设备包括MAC层、物理层协议,于是数据分组就像在真实网络中流动一样,由数据帧转换成二进制流,最终变成信号通过媒体信道传输到目的节点。目的节点收到数据分组后从下往上逐层转交,由媒体信号转换成二进制,由二进制转换成数据帧,再有数据帧转换成IP数据分组,然后经由传输层的端口号转交给相应的进程(应用程序application),至此在NS-3中完成了一次和真实网络极其相近的完整数据传输过程。3)仿真结果分析仿真结果一般有2种:一是网络场景,二是网络数据。网络场景如节点拓扑结构、移动模型等,一般通过可视化界面(PyViz或NetAnim)可直观观测到;网络数据也可在可视化界面下有简单的统计,此外,可以通过专门的统计框架(status)或者自行通过NS-3提供的追踪(tracing)系统收集、统计和分析相应的网络数据,如数据分组的延迟、网络流量、分组丢失率和节点消息缓存队列等。4)根据仿真结果调整网络配置参数或修改源代码有时实际结果和预期相差较远,这时我们要分析原因,是网络参数有问题,还是协议本电子信息与通信学院实验指导书5身有出入等,然后再重新设计,重新仿真,如此反复,直到达到满意的结果。四、实验内容(一)NS-3基础实验示例示例first.cc所在位置为ns-3.16/example/tutorial/,该目录是学习编写NS-3脚本的基础示例。该脚本仿真的网络场景非常简单,只是在2个节点间创建一个简单的点到点通信,但是“麻雀虽小,五脏俱全”,下面大家一起逐行仔细学习,深入体会编写NS-3网络仿真脚本的方法和过程,相信从中会有所收获,以下是对其分析。1.代码规范首先看看NS-3的代码规范和基本结构:在文件中的第一行是emacs模式行,这行告诉了源代码中使用的预定格式(代码风格)。下面的一大段(略去一部分)和许多大型的软件开发项目一样,NS-3项目采用了一套所有贡献代码必须遵守的代码风格。NS-3仿真器使用了GNUGeneralPublicLicense许可。在NS-3的每一个文件头看到相应的GNU法律条文。通常会在GPL内容的上方看到一个相关机构的版权声明,而在GPL内容的下方会有相应的作者列表。NS-3中好多代码在此都有作者列表和其联系方式(个人主页或邮箱等),这个信息使读者可以和原作者联系、交流,获得更多关于代码以外的信息,这也是学习NS-3的另外一个好方法,不能闭车造门,一定要开放、交流!2.头文件为了帮助高层的脚本用户处理大量系统中的include文件,会把所有的文件根据模块功能进行大致的分类,提供了按大致功能分类的一组include文件,在使用时只需要选择包含几个头文件即可。在编译的过程中,每一个NS-3的include文件被放在build目录下一个叫NS-3的目录中,这样做可以避免include文件名的冲突。ns3/core-module.h与src/core目录下的ns-3模块相对应。如果你查看ns3目录会发现大量的头文件。当你编译时,Waf会根据配置把在ns3目录下的公共的头文件放到build/debug或者build/optimized目录下。Waf也会自动产生一个模块include文件来加载所有的公共头文件。3.ns-3命名空间电子信息与通信学院实验指导书6ns3命名空间。C++用using来把ns-3命名空间引入到当前的(全局的)声明域中,这个声明就是说,你不用为了使用ns-3的代码而必须在所有的ns-3代码前打上ns3::作用域操作符。ns-3工程是在一个叫做ns3的C++命名空间中实现的,这把所有与ns-3相关的声明,集中在一个与全局命名空间相区别的命名空间中。但是如果使用标准C++的内容可能就要加上std::前缀了。4.日志此时会遇到第一个陌生的语句,查阅API文档(遇到不认识的语句,这是最好甚至是唯一的办法),从文档中能够了解到这条语句的宏定义。该语句的定义语句出现在log.h头文件的第122行,功能是用特殊的名字定义一个日志组件。语句实际上是生成一个LogComponent类型的对象g_log,并且通过构造函数LogComponent(name)初始化,变量name通过宏定义传递参数。5.主函数这就是脚本程序的主函数声明。ns-3脚本没有什么特别的,就和一个普通的C++程序一样,你需要定义一个会被第一个执行的主函数。下面两行脚本是用来使2个日志组件生效的,它们被内建在EchoClient和EchoServer的应用中:这两行代码将“UdpEcho”应用程序的客户端和服务器端的日志级别设为“INFO”级。这样,当仿真产生数据分组发送和接收时,对应的应用就会输出相应的日志消息到相关的日志模块。ns-3日志系统对于读者阅读、调试和编写代码是很有用的,总是通过程序的输出来了解程序的执行的细节。6.生成网络
本文标题:实验指导书-实验八:NS3基础仿真实验
链接地址:https://www.777doc.com/doc-7314610 .html