基于NS2的网络仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课设(三):基于NS2的网络仿真
一、课程设计目的
1、理解NS2的基本概念;
2、熟悉安装NS2的实验环境和基本操作;
3、仿真分析UDP通信协议;
4、学会生成NS2的Tcl脚本及仿真结果分析;
二、课程设计原理
1、UDP协议
(1)协议概述
UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向事务的简单不可靠信息传送服务。
(2)协议功能描述
UDP在IP数据报的头部仅仅加入了复用和数据校验(字段),UDP首部字段由4个部分组成,其中两个是可选的。各16位的源端口和目的端口用来标记发送和接受的应用进程,因为UDP不需要应答,所以源端口是可选的,如果源端口不用,那么置为零。在目的端口后面是长度固定的以字节为单位的长度字段,用来指定UDP数据报包括数据部分的长度。
由于缺乏可靠性,UDP应用一般必须允许一定量的丢包、出错和复制。由于UDP协议缺乏拥塞避免和控制机制,需要基于网络的机制来减小因失控和高速UDP流量负荷而导致的拥塞崩溃效应。UDP协议只在IP的数据报服务之上增加了很少的功能,这就是端口的功能(有了端口,运输层就能进行复用和分用)和差错检测的功能。另外,UDP协议应用程序可以是客户机,也可以是服务器程序,不必向TCP协议应用程序那样必须分别建立客户机程序和服务器程序。在远程控制软件中,如果在局域网内部传输屏幕信息,则使用UDP协议比较容易实现。但UDP协议不提供可靠性,它的可靠性是交给其他网络设备来解决。同时用UDP协议来传输的数据一般较小,它需要IP协议来为它对数据进行分段。
2、NS2概述
NS2(Network Simulator version2,网络仿真软件第二版)是一种面向对象的网络仿真器,本质上是一个离散事件模拟器。目前NS2可用于仿真各种不同的通信网络,已经实现的仿真模块有:网络传输协议,如TCP和UDP;业务源流量产生器,如FTP、Telnet、Web CBR和VBR;路由队列管理机制,如Droptai、RED和CBQ;路由算法,如Dijkstra,以及无线网络的WLAN,Ad hoc路由,移动IP和卫星通信网络等。NS2也为进行局域网的仿真而实现了多播以及一些MAC 子层协议。
NS2使用C++和OTcl作为开发语言。NS2可以说是OTcl的脚本解释器,它包含仿真事件调度器、网络组件对象库以及网络构建模型库等。事件调度器用于计算仿真时间,并且激活事件队列中的当前事件,执行一些相关的事件,网络组
件通过传递分组来相互通信,但这并不耗费仿真时间。所有需要花费仿真时间来处理分组的网络组件都必须要使用事件调度器,它先为这个分组发出一个事件,然后等待这个事件被调度回来之后,才能做下一步的处理工作。事件调度器的另一个用处就是计时。由于效率的原因,NS2将数据通道和控制通道的实现相分离,为了减少分组和事件的处理时间,事件调度器和数据通道上的基本网络组件对象都使用C++写出并编译的,这些对象通过映射对OTcl解释器可见。
NS2结构图
3、Tcl介绍
Tcl的全称是Tool Command Language,属于脚本语言的一种,它具有可以依照原型进行快速开发、脚本编程、GUI编写和测试方面应用广泛的特点。在NS2中为网络进行参数配置的脚本都是用Tcl编写而成的。Tcl主要由语言部分和解释器部分两部分组成,相对其他脚本语言而言,Tcl不但编程能力强劲而且能够方便地向应用程序中添加Tcl解释器,从而大幅提高编程效率。Tcl只支持“字符串”一种数据结构,一种分割符就是空格。
Tcl本身不提供面向对象的支持,但是语言本身很容易扩展到支持面向对象。许多C语言扩展都提供面向对象能力,包括XOTcl,Incr Tcl等。另外SNIT 扩展本身就是用Tcl写的。使用最广泛的Tcl扩展是TK。TK提供了各种OS平台下的图形用户界面GUI。另一个流行的扩展包是Expect,Expect提供了通过终端自动执行命令的能力,例如(passwd,ftp,telnet等命令驱动的外壳)。OTcl 是面向对象的Tcl,它在Tcl中增加了对象的支持,如类的定义、继承与封装、构造和析构函数等。
4、NS2的仿真过程
进行网络仿真前,首先分析仿真涉及哪个层次,NS2仿真分两个层次:一个是基于OTcl编程的层次,利用NS2已有的网络元素实现仿真,无需修改NS2本身,只需编写OTcl脚本;另一个是基于C++和OTcl编程的层次,如果NS2中没有所需的网络元素,则需要对NS2进行扩展,添加所需网络元素,即添加新的C++和OTcl类,编写新的OTcl脚本。
假设用户已经完成了对NS2的扩展,或者NS2所包含的构件已经满足了要求,那么进行一次仿真的步骤大致如下:
(1)开始编写OTcl脚本。首先配置模拟网络拓扑结构,此时可以确定链路的基本特性,如延迟、带宽和丢失策略等。
(2)建立协议代理,包括端设备的协议绑定和通信业务量模型的建立。
(3)配置业务量模型的参数,从而确定网络上的业务量分布。
(4)设置Trace对象。NS2通过Trace文件来保存整个模拟过程,仿真完后,用户可以对Trace文件进行分析研究。
(5)编写其他的辅助过程,设定模拟结束时间,至此OTcl脚本编写完成。(6)用NS2解释执行刚才编写的OTcl脚本。
(7)对Trace文件进行分析,得出有用的数据。
(8)调整配置拓扑结构和业务量模型,重新进行上述模拟过程。
NS2采用两级体系结构,为了提高代码的执行效率,NS2将数据操作与控制部分的实现相分离,事件调度器和大部分基本的网络组件对象后台使用C++实现和编译,称为编译层,主要功能是实现对数据包的处理;NS2的前端是一个OTcl 解释器,称为解释层,主要功能是对模拟环境的配置、建立。从用户角度看,NS2是一个具有仿真事件驱动、网络构件对象库和网络配置模块库的OTcl脚本解释器。NS2中编译类对象通过OTcl连接建立了与之对应的解释类对象,这样用户间能够方便地对C++对象的函数进行修改与配置,充分体现了仿真器的一致性和灵活性。
如下图为NS2的仿真流程图:
三、课程设计具体内容
1、实验环境
硬件为联网的PC机,软件为ubuntu12.04.2系统,ns-allinone-2.3,所使用的开发语言是Otcl,C++。
2、利用NS2仿真UDP通信协议