当前位置:首页 >> 信息与通信 >>

Ns3网络仿真系统软件介绍


Ns3 网络仿真系统软件介绍
1 NS3 软件概述
NS-3 是一款面向网络系统的离散事件仿真软件,主要用于研究与教学目的。 NS-3 作为源代码公开的一款免费软件, 经 GNU GPLv2 认证许可, 可被大众研究、 改进与使用,它将逐步取代目前广泛应用的 NS-2 网络模拟软件。NS-3 是由 C++ 和 Python 语言编写的, 可作为源代码发布并适用

以下的系统: Linux , Unix variants, OS X, 以及 Windows 平台上运行的 Cygwin 或 MinGW 等。

1.1 NS3 模型
NS-3 的基本模型共分为五层:应用层 Applications,传输层 Transport layer, 网络层 Network layer,连接层 Link layer,物理层 Physical layer 。其中应用层 Applications,传输层 Transport layer,网络层 Network layer 与 TCP/IP 模型中的应 用层、 传输层、 Internet 层是相对应的。 另外连接层 Link layer, 物理层 Physical layer 与 TCP/IP 模型中的网络接口层相对应。NS-3 相比 NS-2 在各层上进行了更大的改 进,如下图所示。

图 1 ns-3 基本模型涵盖功能

1.2 NS3 网络构件
从 NS-3 Tutorial 中可以看到,NS-3 的架构较 NS-2 更为清晰。NS-3 中把网络 构件分为四类。

图 2 NS-3 系统网络构件模型

1.2.1 Node Node,即节点是 NS-3 软件仿真中的主体。在实际网络中,一个连接到互联网 的计算机设备称为主机或者终端系统。由于 NS3 是网络模拟器,而不是专门的互 联网模拟器,所以在仿真系统中使用节点代替实际网络中的主机。而且在其他的 模拟器中,节点这个术语也被普遍使用。在 NS3 中,基本的计算机设备的概念被 抽象为节点后,这个抽象的概念由 C++中的类节点的概念表达,它通过提供一系 列的命令函数和方法来管理模拟中的计算机设备的行为。节点作为一台计算机, 可以在其上增加一些功能应用,如应用程序、协议栈、以及带有驱动程序的周边 卡等,可以使得计算机更好的工作。 节点在 NS-3 中的被划分为基类,同时它是实例类而非抽象类。该节点包括唯 一的整型 ID,为仿真扩展用的系统 ID,网卡表(NetDevices)和应用程序表。NS-3 源代码目录 src/internet-stack 提供了实现 TCP/IPv4 协议相关的组件。 这些组件包括 IPv4,ARP,UDP,TCP 和其他相关的协议。虽然 NS-3 也会提供少部分的子类节

点,如目前已有的 Internet Node 可以实现简陋的 UDP/IPv4 协议栈,用户也可以创 建自己的子类节点,同时节点可以用来添加应用、协议、外部接口等。

图 3 NS-3 节点搭建示意图

1.2.2 NetDevice and Channel NetDevice and Channel 分别是网卡及其驱动和通道。 网卡的基本思想是为了在 网络设备层与设备无关的网络子层和 IP 层的边界上对 Linux 的架构进行网络模仿。 设备层和 IP 层有各种不同类型的网卡如: CsmaNetDevice、 PointToPointNetDevice、 WifiNetDevice, 而通道 (Channel) , 有各种不同类型的介质通道如: CsmaChannel、 PointToPointChannel、WifiChannel。

图 4 NetDevice 层与其上部层间分界

在现实世界中,用户可以将一台计算机连接到互联网。数据在网络中传输的 媒介称为通道。当你将你的以太网电线的插头插到墙上的插座,就是将你的电脑 连接到一个以太网通道。在 NS3 的模拟世界中,连接一个节点与另一个对象表现 为构建一个通信信道。在 C++中由 class Channel 表达。这个类提供一系列的方法 来管理通信网络中节点和对象以及他们之间的连接。具体的通道可以简单到一条 电线,也可以复杂到一个大型的以太网,或者三维空间中充满了障碍物的无线网 络。在 NS-3 系统中,最常用的通道有 CsmaChannel , PointToPointChannel 和 WifiChannel。例如,CsmaChannel 建立了一个版本的通信子网模型实现了一个载 波侦听多路访问通信介质,如下图所示。

图5 Channel通道模块

要将一台电脑连接到互联网,必须具备一些网络电缆和一些硬件设备即外设 卡,并且必须安装在电脑上。如果外围卡实现一些网络功能,它们就被称为网络 接口卡,或者网卡。然而目前,大多数电脑都带有内置的网络接口硬件,用户看 不到这些模块。没有软件驱动来控制硬件的话,网卡将无法正常工作。在 UNIX 中,一块外设被称为 DEVICE。这些设备通过设备驱动程序来控制,网络设备(网 卡)则通过网络设备驱动程序来控制,统称为网络设备。 。 在 C++中由 classNetDevice 来表示。这个类提供方法来管理节点和通道对象。 可 以 想 象 , 为 了 跟 通 道 相 对 应 , 相 应 的 网 络 设 备 就 有 CsmaNetDevice , PointToPointNetDevice 和 WifiNetDevice。正如一个以太网卡是为了以太网络设计 的,CsmaNetDevice 是为了 CsmaChannel 而设计的 PointToPointNetDevice,是为了 PointToPointChannel 而设计的,WifiNetDevice 是为了 WifiChannel 而设计的,如下 图所示。

图6 NetDevice虚拟设备模块类

1.2.3 Packet Packet 即信息包。NS-3 的 Packet 包括缓冲区字节:protocol header 和 trailer 是按照用户提供的 serialization and deserialization routines 在该缓冲区节中被系列化 的。

图 7 信息包发送(左)接收(右)流程图

1.2.4 Sockets and Application Sockets and Application 即接口与应用程序,是用户定义的过程,该过程对仿 真的网络产生流量, NS-3 对有不同流量模式的不同类型应用程序提供框架。 在 NS3 中,一个产生出一系列等待仿真模拟的活动行为的用户程序被抽象为应用软件程 序。这个类提供一系列的命令函数和方法来管理模拟中用户级应用程序的行为。

在 NS-3 系 统 中 , 包 含 的 应 用 程 序 有 OnOffApplication , PacketSink , UdpEchoClientApplication 和 UdpEchoServerApplication 等。

图8 Application应用程序类

例如,UdpEchoClientApplication 和 UdpEchoServerApplication 应用程序将组 成一个客户端/服务器应用程序来模拟产生和反馈网络数据包的过程。

图9 Socket接口类

1.2.5 其他网络构件 此外,NS-3 中提供了一类称为 Topology Helper 的模块,对应每种拓扑连接有 不同的 Helper(例如 CsmaNetHelper 等) ,使用这些类来模拟现实中的安装网卡、

连接、配置链路等过程,来简化工作。

2 Ubuntu 平台上 NS3 的安装运行
2.1 NS3 开发环境设置
sudo apt-get install gcc g++ python python-dev //C++和 python 安装,必装 sudo apt-get install mercurial //NS3 代码维护使用的源码版本控制管理系统 sudo apt-get install bzr //运行 python 绑定 ns-3-dev 需要 bazaar 这个组件 sudo apt-get install libgtk2.0-0 libgtk2.0-dev //基于 GTK 的配置系统 sudo apt-get install gdb valgrind //调试工具 sudo apt-get install doxygen graphviz imagemagick //文档生成器 sudo apt-get install texlive texlive-pdf texlive-latex-extra //文档生成器,从源代码中生成说明 文档 sudo apt-get install texinfo dia texlive-extra-utils texi2html //ns-3 手册和 tutorial 编写查看工具 sudo apt-get install flex bison //仿真必需的词法分析器和语法分析生成器,必装 sudo apt-get install libgoocanvas-dev //部分移动场景仿真的可视化测试需要这个组件 sudo apt-get install tcpdump //读取 pcap 的 packet traces,即包嗅探器 sudo apt-get install sqlite sqlite3 libsqlite3-dev //支持统计特性的数据库软件 sudo apt-get install libxml2 //xml 的配置存储软件 sudo apt-get install python-pygraphviz python-kiwi python-pygoocanvas //Gustavo's ns-3-pyviz 的可视化软件

2.2 NS3 安装
在 NS3 软件主页下载 ns-3-allinone 文件,之后在 Ubuntu 平台上进行安装。
cd /home/username/ns-allinone-3.5./build.py //同 NS2 的./install cd /home/username/ns-allinone-3.5/ns-3.5./waf--check //同 NS2 的./validate, waf 是 ns-3 采 用的基于 Python 的 Build System

2.3 NS3 脚本仿真流程
NS3 完全用 C++编写(可选 Python 接口) ,脚本采用 C++或 Python 语言,根 据其四种类型的网络构件。其脚本仿真大致步骤如下: a) 创建节点 Node(使用类 NodeContainer::Create( )方法) b) 使用链路 Helper 类来帮助设置链路 (包括 PointToPointHelper、 CsmaHelper、 WifiHelper 等类型) 。Helper 类虽然不属于上述四类的网络构件,但它却 极大地方便了拓扑的搭建, 它可以帮助处理实际中诸如在两个终端安装网 卡、连网线、Modern、配置上网方式、链路属性等底层工作,简化了仿真 过程,使软件可以更专注于仿真的目的 c) 安装 IP 协议栈(使用类 InternetStackHelper::Install( )方法) d) 设置 IP 地址(使用类 Ipv4AddressHelper::SetBase( )/Assign( )方法) e) 在节点 Node 上安装应用程序 (目前支持 UdpServerServer、 UdpEchoClient、 PacketSink 等) f) 设置仿真时间、启动仿真

NS-3 中提供了很多查看仿真结果的工具, 例如 Logging Module、 Command Line 参数或者 Tracing System 等, 通过仿真结果的反馈我们可以修改脚本中的一些参数, 对仿真进行微调,使仿真得到较好的结果。

3 NS3 脚本实例说明
以 NS-3 Tutorial 向导文件中的一个简单脚本为例, 对 NS-3 脚本的编译运行进 行说明。
================================================================================

#include "ns3/core-module.h" #include "ns3/simulator-module.h #include "ns3/node-module.h"

#include "ns3/helper-module.h" using namespace ns3;

NS_LOG_COMPONENT_DEFINE ("Example");

//定义名称为“Example”的日志模块

int main (int argc, char *argv[]) { //以下两个语句启用 UdpEcho 应用程序的日志记录,其级别为 LOG_LEVEL_INFO。关于 NS-3 的日志系统将在后续篇章进行介绍。 LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO); LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);

NodeContainer nodes; nodes.Create (2);

//1、创建两个节点

PointToPointHelper pointToPoint;

//2、创建 P2P 类型的 Helper //使

pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); 用 Helper 设置链路属性 pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

NetDeviceContainer devices; devices = pointToPoint.Install (nodes); //使用 Helper 将网卡安装到节点

InternetStackHelper stack; stack.Install (nodes);

//3、安装 IP 协议栈

Ipv4AddressHelper address;

//4、分配 IP 地址

address.SetBase ("10.1.1.0", "255.255.255.0"); Ipv4InterfaceContainer interfaces = address.Assign (devices); UdpEchoServerHelper echoServer (9); 服务端口 ApplicationContainer serverApps = echoServer.Install (nodes.Get (1)); //分配到网卡

//5.1、安装 UdpServer 应用服务,9 表示

serverApps.Start (Seconds (1.0)); serverApps.Stop (Seconds (10.0)); serverApps.Start (Seconds (1.0)); serverApps.Stop (Seconds (10.0)); //6.1、Server 启动时间

UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9); 装 UdpClient 应用服务,需要指明服务器 IP 以及服务端口 echoClient.SetAttribute ("MaxPackets", UintegerValue (1)); echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.))); echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

//5.2、安

ApplicationContainer clientApps = echoClient.Install (nodes.Get (0)); clientApps.Start (Seconds (2.0)); clientApps.Stop (Seconds (10.0)); //6.2、Client 启动时间

Simulator::Run (); Simulator::Destroy (); return 0; }

//6.3、启动仿真

================================================================================

当安装好 NS-3 的运行环境之后, 在 NS-3 的程序目录下会有一个 scratch 目录, 其性质类似于 VC/VC++环境下的 Debug 目录。 将上述脚本文件保存为 example.cc,复制到 scratch 下面,然后在 NS-3 目录下 使用命令 waf 完成编译,然后运行。例如: $~/NS-3.2.1 > ./waf $~/NS-3.2.1 > ./waf --run scratch/example 可以看到程序输出: Entering directory ‘~/NS-3.2.1/build’ Compilation finished successfully Sent 1024 bytes to 10.1.1.2 Received 1024 bytes from 10.1.1.1 Received 1024 bytes from 10.1.1.2

4 NS3 软件中相关名词解释
? POSIX:Portable Operating System Interface 一组操作系统 API 的协议/标准族, 最开始为了 Unix 系统上的可移植性而开发 的,也适用于其他操作系统。 ? Doxygen:Documentation Generator 支持 C++、C、Java、Objective-C、Python、IDL、Fortran、VHDL、PHP、C# 等各种语言的文档生成器,用于从源代码中生成说明文档。 ? nam:Network Animator 基于 Tcl/TK 的网络动画演示工具,能提供拓扑和包级别的动画以及数据流观 察。 (参考 http://www.isi.edu/nsnam/nam/) ? Mercurial NS-3 代码维护使用的源码版本控制管理系统 ? Waf NS-3 项目使用的新一代的基于 Python 的构建系统(Build System) ? WireShark 一种 GUI 包嗅探器。由于 NS-3 能生成 .pcap 文件,因此可以使用类似于 WireShark 的软件对数据进行分析 ? tcpdump 另一种包嗅探器。在 Linux 下使用 CLI 进行数据分析

参考文献
[1] [2] [3] [4] ns-3 project. ns-3 Software Architecture. ns-3 project. 2009, 9:1-20 ns-3 project. ns-3 Reference Manual. ns-3 project. 2009, 8:1-50 ns-3 project. ns-3 Tutorial. ns-3 project. 2009, 9: 1-70 NS-3 概念入门, http://hi.baidu.com/czlaner/blog/. 2008-12-01


相关文章:
ns-3网络仿真
应用程序以及同样的错误模型仿真输出 TCP 拥塞窗口值...("ns3::UniformRandomVariable[Min=0|Max=20]"))...基于NS_2的网络控制系统... 5页 免费 基于NS-...
Eclipse集成NS3仿真软件
Eclipse集成NS3仿真软件_计算机软件及应用_IT/计算机_专业资料。Eclipse集成NS3仿真软件的步骤收集自网络 Eclipse for NS3 配置文档 在进行配置之前,我认为你已经阅读...
ndnSIM:基于NS-3的NDN仿真工具
ndn仿真工具ndnSIM介绍的中文文档,翻译的于ndn项目组...(FIB) ,内容、存储,网络和应用程序 接口,兴趣转发...PI系统管理培训-详细版 335页 免费 国债逆回购 介绍...
高级计算机网络实验报告 ns3模拟数据中心
高级计算机网络实验报告 ns3模拟数据中心_计算机硬件及...通过 wireshark 流量仿真发现了系统可能的瓶颈,并且思考...2014年9月计算机三级软件... 【呕心推荐】2014年全...
ns3第一个程序
ns3第一个程序_计算机硬件及网络_IT/计算机_专业资料。ns3第一个程序介绍 ...("UdpEchoServerApplication", LOG_LEVEL_INFO); //着手创建拓扑和运行仿真。...
S2-WIN2003-NS-3
Ns3网络仿真系统软件介绍 14页 2财富值 S2-LINUX结业考试 6页 1财富值 可再生能源电量收购和电价... 7页 免费 NS3中文教程 44页 2财富值如要投诉违规内容,请...
NS3中文教程
读者也可以在名为 ns3-dev 的源 码仓库找到当前的 NS-3 开发树。还有 NS-...Ns3网络仿真系统软件介绍... 14页 1下载券 ubuntu+NS3安装过程 24页 1下载...
NS3对于初学者的教程,高手忽略这个吧
NS3对于初学者的教程,高手忽略这个吧_计算机软件及...正如一个文件系统在根下有目录,在 NodeList下 有...trace操 作现在是 r并 且仿真时间已经增加到 2.257...
NS3 实时仿真设置(first样例代码)
NS3 实时仿真设置(first样例代码)_信息与通信_工程科技_专业资料。以NS3样例...NS3中文教程 44页 1下载券 Ns3网络仿真系统软件介绍... 14页 1下载券 ns...
中科大高级计算机网络实验一
百度文库 专业资料 IT/计算机 计算机软件及应用...实验要求 试用 ns3 模拟仿真一个数据中心网络,并在...比较 A,B 两次实验可得出,在多对一模式下,系统...
更多相关标签:
ns3网络仿真 | ns3网络仿真模拟器 | ns3仿真 | ns3 吞吐量仿真 | ns3 lte 组播 仿真 | ns3仿真源码 | gpsr ns3下仿真 | ns3 lte仿真 |