基于NS3的无线自组网仿真实现

2014-12-31 00:36陈运海
电脑知识与技术 2014年35期
关键词:仿真

陈运海

摘要:该文首先介绍了NS3.20在Fedora20环境下的安装过程,并重点介绍了无线自组网的拓扑设计及仿真程序设计过程,最后用NS3仿真了无线自组网通信的过程。

关键词:无线自组网;NS3;仿真

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)35-8365-03

Implementation of Wireless Ad-hoc Network Simulation Based on NS3

CHEN Yun-hai

(Department of Electronic Information Technology, Shenzhen Senior Technical Institute, Shenzhen 518116, China)

Abstract: First the process of installing the simulator NS3.20 and the system of Fedora20 was presented. Then this paper introduces the topological structure of to a Wireless Ad-hoc Network and the design of simulation process. Finally this paper simulate the communication process of the Wireless Ad-hoc Network by using NS3 Simulator.

Key words: Wireless Ad-hoc Network; NS3; Simulation

近年来,随着计算机和网络通信技术的迅速发展,研究人员不断开发新的网络协议、算法和应用,以适应日益增长的网络通信需要。因此,网络仿真日益成为分析、研究、设计和改善网络性能的强大工具,它通过在计算机上建立一个虚拟的网络平台,来实现真实的网络环境的仿真。网络技术研究人员在仿真环境中不仅能对网络通信、网络设备、协议以及网络应用进行设计研究,还能对网络的性能进行分析和评估。目的是在网络项目实施的过程前期和实施过程中提供指导。

相对于其它的网络模拟软件而言,NS3是比较年轻的网络工具。NS3避免了一些其它网络模拟软件的缺点,尽量吸收其他模拟软件的优点。NS3是应用现代软件工程技术和网络仿真技术而设计开发的新一代网络模拟工具。

本文介绍了在Fedora20环境下,安装NS3.20模拟软件的具体方法,并在此基础上开发了一套无线自组网的仿真程序,对从事这方面的科研人员及教学人员具有一定的指导作用。

1 Fedora20及NS3.20环境的安装

1.1 Fedora20的下载与环境安装

首先在WINDOWS下安装虚拟机VMware8.0版本,然后到网站http://fedoraproject.org/get-fedora下面免费下载镜像Fedora-20-i386-DVD.iso,在虚拟机VMware8.0中安装此镜像,将fedora系统安装好。

NS3内核是是使用C++语言开发的,并提供Python接口,因此,安装NS3之前需要安装许多安装包,安装软件包一定要将自己的系统与外网连接,有些依赖软件包系统直接从外网下载并安装。使用下列命令安装软件包:

yum install gcc gcc-c++ python python-devel

yum install mercurial

yum install bzr

yum install gsl gsl-devel

yum install gtk2 gtk2-devel

yum install gdb valgrind

yum install doxygen graphviz ImageMagick

yum install python-sphinx dia texlive texlive-latex

yum install flex bison

yum install tcpdump

yum install sqlite sqlite-devel

yum install libxml2 libxml2-devel

yum install uncrustify

yum install openmpi openmpi-devel

yum install boost-devel

yum install graphviz graphviz-devel python-setuptools-devel python-kiwi pygoocanvas

easy_install pygraphviz

yum install cmake glibc-devel.i686 glibc-devel.x86_64

在运行命令yum install graphviz graphviz-devel python-setuptools-devel python-kiwi pygoocanvas 时,系统提示有错误信息,与某些软件发生冲突;这时候,要先用下列命令删除冲突的软件:

rpm —e vim-minimal

rpm -e sudo

然后,再安装上述命令后,再完成后续命令的安装。

1.2 NS3.20网络模拟器的安装endprint

在网站http://www.nsnam.org上免费下载软件包ns-allinone-3.20.tar.bz2,然后拷贝到虚拟机Fedora20的系统/root目录下,然后用命令:tar —jxvf ns-allinone-3.20.tar.bz2进行解压缩。解压缩完成后,用以下命令进入相关目录:

cd /root/ns-allinone-3.20/ns-3.20/

然后执行:

. /waf configure —enable-examples —enable-tests

最后执行命令:

./waf

执行完后,如果出现如图1的画面,即编译安装成功。

2 无线自组网IP地址的分配和拓扑结构设计

2.1 无线自组网的IP地址分配

我们将16个无线自组网都当成一个独立的节点,既可以充当路由器,又可以充当终端节点。它们的IP地址都位于同一个网络10.1.1.0中,如图1所示。

2.2 无线自组网拓扑结构图

无线自组网节点作为一个独立的无线节点,可以再空间中自由移动,同时,在一范围内可进行互相通信。其拓扑结构如图2所示。

无线自组网络可以互相之间通信,每个节点既充当路由器,又充当终端。我们假定节点n0与节点n15通信,来模拟数据在无线自组网中的通信过程。

3 用NS3仿真无线自组网

3.1 用NS3创建16个独立的无线节点

我们首先创建16个无线节点,并配置无线节点通信所需要的参数。最主要的代码如下:

NodeContainer wifiAdhocNodes;

wifiAdhocNodes.Create (16); //创建16无线自组网节点

WifiHelper wifi = WifiHelper::Default ();

NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default (); //配置Mac与Phy

wifiMac.SetType ("ns3::AdhocWifiMac");

YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();

YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); //创建无线节点互连通道

wifiPhy.SetChannel (wifiChannel.Create ());

NetDeviceContainer wifiAdhocDevices = wifi.Install (wifiPhy, wifiMac, wifiAdhocNodes); //创建节点的无线设备(无线网卡)

InternetStackHelper stack; //安装协议栈

stack.Install (wifiAdhocNodes);

Ipv4AddressHelper address; //设置无线节点的IP地址

address.SetBase ("10.1.1.0", "255.255.255.0");

Ipv4InterfaceContainer AdhocInterfaces;

AdhocInterfaces = address.Assign (wifiAdhocDevices);

3.2 应用层模拟

1) 服务端节点设置

16个节点创建并配置完后,我们在最后一个节点n15放置echo服务端程序,其主要代码为:

UdpEchoServerHelper echoServer (9); //设置服务器端口号9

ApplicationContainer serverApps = echoServer.Install (wifiAdhocNodes.Get (15)); //服务端程序安装在节点n15。

serverApps.Start (Seconds (1.0)); //服务端程序在1秒生效

serverApps.Stop (Seconds (10.0)); //服务端程序在10秒停止。

2) 客户端节点设置

我们将回显客户端放在节点n0上,其主要代码为:

UdpEchoClientHelper echoClient (AdhocInterfaces.GetAddress (15), 9);//让客户端与服务端及其端口关联

echoClient.SetAttribute ("MaxPackets", UintegerValue (100)); //设置通信时参数

echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));

echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

ApplicationContainer clientApps =

echoClient.Install (wifiAdhocNodes.Get (0)); //客户端程序安装在节点n0

clientApps.Start (Seconds (2.0));//客户端在 2秒中生效

clientApps.Stop (Seconds (10.0)); //客户端在10秒钟停止

4 用NS3仿真无线自组网运行效果

4.1 节点之间数据流向显示

在 Fedora20操作系统中,运行:

./waf —run scratch/adhoctest

则可以看出,移动节点n0与n15节点,可正常通信;显示的数据流向如图4所示,客户端与服务端之间的数据传送和应答顺利。

4.2 节点之间通信效果显示:

用Pyviz工具,可以查看节点之间互相通信的效果图,运行以下命令:

./waf —run scratch/adhoctest —vis

则可以看出,刚开始,在路由选择阶段,数据流向多个节点,如图5所示。一旦两个节点之间明确了路由,数据流向比较稳定,如图6所示。

5 结束语

本文主要仿真了无线自组网传送数据的过程。在仿真过程中,设计了无线自组网络节点,并仿真了数据传送的过程。可在此基础上,进一步研究不同算法对不同环境下的数据传送效果。希望对从事这方面的研究者有所启发。

参考文献:

[1] ns-3 documentation[EB/OL]. http://www.nsnam.org/docs/doxygen/index.html.

[2] ns-3 developers[EB/OL].http://www.nsnam.org/developers/overview.

[3] 马春光,姚建盛.ns-3网络模拟器基础与应用[M].北京:人民邮电出版社,2014.

[4] 黄化吉,冯穗力,秦丽姣.NS网络模拟和协议仿真[M].北京:人民邮电出版社,2010.endprint

在网站http://www.nsnam.org上免费下载软件包ns-allinone-3.20.tar.bz2,然后拷贝到虚拟机Fedora20的系统/root目录下,然后用命令:tar —jxvf ns-allinone-3.20.tar.bz2进行解压缩。解压缩完成后,用以下命令进入相关目录:

cd /root/ns-allinone-3.20/ns-3.20/

然后执行:

. /waf configure —enable-examples —enable-tests

最后执行命令:

./waf

执行完后,如果出现如图1的画面,即编译安装成功。

2 无线自组网IP地址的分配和拓扑结构设计

2.1 无线自组网的IP地址分配

我们将16个无线自组网都当成一个独立的节点,既可以充当路由器,又可以充当终端节点。它们的IP地址都位于同一个网络10.1.1.0中,如图1所示。

2.2 无线自组网拓扑结构图

无线自组网节点作为一个独立的无线节点,可以再空间中自由移动,同时,在一范围内可进行互相通信。其拓扑结构如图2所示。

无线自组网络可以互相之间通信,每个节点既充当路由器,又充当终端。我们假定节点n0与节点n15通信,来模拟数据在无线自组网中的通信过程。

3 用NS3仿真无线自组网

3.1 用NS3创建16个独立的无线节点

我们首先创建16个无线节点,并配置无线节点通信所需要的参数。最主要的代码如下:

NodeContainer wifiAdhocNodes;

wifiAdhocNodes.Create (16); //创建16无线自组网节点

WifiHelper wifi = WifiHelper::Default ();

NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default (); //配置Mac与Phy

wifiMac.SetType ("ns3::AdhocWifiMac");

YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();

YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); //创建无线节点互连通道

wifiPhy.SetChannel (wifiChannel.Create ());

NetDeviceContainer wifiAdhocDevices = wifi.Install (wifiPhy, wifiMac, wifiAdhocNodes); //创建节点的无线设备(无线网卡)

InternetStackHelper stack; //安装协议栈

stack.Install (wifiAdhocNodes);

Ipv4AddressHelper address; //设置无线节点的IP地址

address.SetBase ("10.1.1.0", "255.255.255.0");

Ipv4InterfaceContainer AdhocInterfaces;

AdhocInterfaces = address.Assign (wifiAdhocDevices);

3.2 应用层模拟

1) 服务端节点设置

16个节点创建并配置完后,我们在最后一个节点n15放置echo服务端程序,其主要代码为:

UdpEchoServerHelper echoServer (9); //设置服务器端口号9

ApplicationContainer serverApps = echoServer.Install (wifiAdhocNodes.Get (15)); //服务端程序安装在节点n15。

serverApps.Start (Seconds (1.0)); //服务端程序在1秒生效

serverApps.Stop (Seconds (10.0)); //服务端程序在10秒停止。

2) 客户端节点设置

我们将回显客户端放在节点n0上,其主要代码为:

UdpEchoClientHelper echoClient (AdhocInterfaces.GetAddress (15), 9);//让客户端与服务端及其端口关联

echoClient.SetAttribute ("MaxPackets", UintegerValue (100)); //设置通信时参数

echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));

echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

ApplicationContainer clientApps =

echoClient.Install (wifiAdhocNodes.Get (0)); //客户端程序安装在节点n0

clientApps.Start (Seconds (2.0));//客户端在 2秒中生效

clientApps.Stop (Seconds (10.0)); //客户端在10秒钟停止

4 用NS3仿真无线自组网运行效果

4.1 节点之间数据流向显示

在 Fedora20操作系统中,运行:

./waf —run scratch/adhoctest

则可以看出,移动节点n0与n15节点,可正常通信;显示的数据流向如图4所示,客户端与服务端之间的数据传送和应答顺利。

4.2 节点之间通信效果显示:

用Pyviz工具,可以查看节点之间互相通信的效果图,运行以下命令:

./waf —run scratch/adhoctest —vis

则可以看出,刚开始,在路由选择阶段,数据流向多个节点,如图5所示。一旦两个节点之间明确了路由,数据流向比较稳定,如图6所示。

5 结束语

本文主要仿真了无线自组网传送数据的过程。在仿真过程中,设计了无线自组网络节点,并仿真了数据传送的过程。可在此基础上,进一步研究不同算法对不同环境下的数据传送效果。希望对从事这方面的研究者有所启发。

参考文献:

[1] ns-3 documentation[EB/OL]. http://www.nsnam.org/docs/doxygen/index.html.

[2] ns-3 developers[EB/OL].http://www.nsnam.org/developers/overview.

[3] 马春光,姚建盛.ns-3网络模拟器基础与应用[M].北京:人民邮电出版社,2014.

[4] 黄化吉,冯穗力,秦丽姣.NS网络模拟和协议仿真[M].北京:人民邮电出版社,2010.endprint

在网站http://www.nsnam.org上免费下载软件包ns-allinone-3.20.tar.bz2,然后拷贝到虚拟机Fedora20的系统/root目录下,然后用命令:tar —jxvf ns-allinone-3.20.tar.bz2进行解压缩。解压缩完成后,用以下命令进入相关目录:

cd /root/ns-allinone-3.20/ns-3.20/

然后执行:

. /waf configure —enable-examples —enable-tests

最后执行命令:

./waf

执行完后,如果出现如图1的画面,即编译安装成功。

2 无线自组网IP地址的分配和拓扑结构设计

2.1 无线自组网的IP地址分配

我们将16个无线自组网都当成一个独立的节点,既可以充当路由器,又可以充当终端节点。它们的IP地址都位于同一个网络10.1.1.0中,如图1所示。

2.2 无线自组网拓扑结构图

无线自组网节点作为一个独立的无线节点,可以再空间中自由移动,同时,在一范围内可进行互相通信。其拓扑结构如图2所示。

无线自组网络可以互相之间通信,每个节点既充当路由器,又充当终端。我们假定节点n0与节点n15通信,来模拟数据在无线自组网中的通信过程。

3 用NS3仿真无线自组网

3.1 用NS3创建16个独立的无线节点

我们首先创建16个无线节点,并配置无线节点通信所需要的参数。最主要的代码如下:

NodeContainer wifiAdhocNodes;

wifiAdhocNodes.Create (16); //创建16无线自组网节点

WifiHelper wifi = WifiHelper::Default ();

NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default (); //配置Mac与Phy

wifiMac.SetType ("ns3::AdhocWifiMac");

YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();

YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); //创建无线节点互连通道

wifiPhy.SetChannel (wifiChannel.Create ());

NetDeviceContainer wifiAdhocDevices = wifi.Install (wifiPhy, wifiMac, wifiAdhocNodes); //创建节点的无线设备(无线网卡)

InternetStackHelper stack; //安装协议栈

stack.Install (wifiAdhocNodes);

Ipv4AddressHelper address; //设置无线节点的IP地址

address.SetBase ("10.1.1.0", "255.255.255.0");

Ipv4InterfaceContainer AdhocInterfaces;

AdhocInterfaces = address.Assign (wifiAdhocDevices);

3.2 应用层模拟

1) 服务端节点设置

16个节点创建并配置完后,我们在最后一个节点n15放置echo服务端程序,其主要代码为:

UdpEchoServerHelper echoServer (9); //设置服务器端口号9

ApplicationContainer serverApps = echoServer.Install (wifiAdhocNodes.Get (15)); //服务端程序安装在节点n15。

serverApps.Start (Seconds (1.0)); //服务端程序在1秒生效

serverApps.Stop (Seconds (10.0)); //服务端程序在10秒停止。

2) 客户端节点设置

我们将回显客户端放在节点n0上,其主要代码为:

UdpEchoClientHelper echoClient (AdhocInterfaces.GetAddress (15), 9);//让客户端与服务端及其端口关联

echoClient.SetAttribute ("MaxPackets", UintegerValue (100)); //设置通信时参数

echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));

echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

ApplicationContainer clientApps =

echoClient.Install (wifiAdhocNodes.Get (0)); //客户端程序安装在节点n0

clientApps.Start (Seconds (2.0));//客户端在 2秒中生效

clientApps.Stop (Seconds (10.0)); //客户端在10秒钟停止

4 用NS3仿真无线自组网运行效果

4.1 节点之间数据流向显示

在 Fedora20操作系统中,运行:

./waf —run scratch/adhoctest

则可以看出,移动节点n0与n15节点,可正常通信;显示的数据流向如图4所示,客户端与服务端之间的数据传送和应答顺利。

4.2 节点之间通信效果显示:

用Pyviz工具,可以查看节点之间互相通信的效果图,运行以下命令:

./waf —run scratch/adhoctest —vis

则可以看出,刚开始,在路由选择阶段,数据流向多个节点,如图5所示。一旦两个节点之间明确了路由,数据流向比较稳定,如图6所示。

5 结束语

本文主要仿真了无线自组网传送数据的过程。在仿真过程中,设计了无线自组网络节点,并仿真了数据传送的过程。可在此基础上,进一步研究不同算法对不同环境下的数据传送效果。希望对从事这方面的研究者有所启发。

参考文献:

[1] ns-3 documentation[EB/OL]. http://www.nsnam.org/docs/doxygen/index.html.

[2] ns-3 developers[EB/OL].http://www.nsnam.org/developers/overview.

[3] 马春光,姚建盛.ns-3网络模拟器基础与应用[M].北京:人民邮电出版社,2014.

[4] 黄化吉,冯穗力,秦丽姣.NS网络模拟和协议仿真[M].北京:人民邮电出版社,2010.endprint

猜你喜欢
仿真
Proteus仿真软件在单片机原理及应用课程教学中的应用
工业机器人模拟仿真技术在职业教育中的应用浅析
一种帮助幼儿车内脱险应急装置的仿真分析
论虚拟仿真实训系统在口腔实验教学中的应用
基于机电设备电气控制线路排故的仿真系统设计
Buck开关变换器的基本参数设计及仿真分析
试析PLC控制下的自动化立体仓库仿真情况分析
基于MADYMO的航空座椅约束系统优化设计
中国体态假人模型与FAA Hybrid Ⅲ 型假人模型冲击差异性分析
机械加工仿真技术研究