基于NS-3的星型网络拓扑构建(一)

前言

        无线传感网络课程设计结束,新学习了NS-3仿真软件的使用,过程中遇到了许多问题,也总结了一些心得,打算写下来以作记录。尤其在过程中深感这方面可参考的资料匮乏与琐碎,所以系统的记录下整个过程,望能对他人有所启发。

        环境配置是在WMware虚拟机运行平台上安装的Linux Ubuntu操作系统,然后在 Ubuntu操作系统上安装NS-3网络仿真器。

        本次仿真设计通过NS-3软件完成,使用可视化程序 NetAnim来显示节点部署情况,利用gawk工具通过awk脚本来计算网络的吞吐量和通信时延等参数,并且使用绘图软件Gnuplot实现参数的可视化

仿真环境搭建

       首先对于虚拟机的搭建我参考的以下两个博文,Ubuntu选择的18.04版本,老版本虽然操作界面没那么美观但是参考资料更多,亲测好用:

VMware安装Ubuntu 18.04虚拟机https://blog.csdn.net/Mark_md/article/details/110879073?spm=1001.2014.3001.5506

VMware下载安装教程https://blog.csdn.net/weixin_45912291/article/details/108894737?spm=1001.2014.3001.5506

        安装完成Ubuntu操作系统后,就要安装本次的主角--NS-3网络仿真软件,整个安装过程指令多、时间长,务必耐心安装,磨刀不误砍柴工,安装流程参考下面链接:

ubuntu 18.04安装NS-3教程https://blog.csdn.net/qq_39346534/article/details/107298205

对于安装过程中出现的几个问题做以下总结:

1.【E:无法定位软件包 python-pygoocanvas E: 无法定位软件包 libgoocanvas-dev】
解决方案参考:解决方案1https://blog.csdn.net/qq_39346534/article/details/108594862

2.【安装openmpi*时存在依赖】

(1)sudo apt-get install aptitude                  // 首先得安装 aptitude 工具

(2)udo aptitude install <package name>   // 使用 aptitude 安装需要的依赖项

PS: 这里的依赖项是上图中的openmpi的子包,逐个安装,会有几个包提示仍无法安装,可以忽略,不会影响后续实验。

至此,实验环境搭建完毕,可以运行一下NS-3中的例程文件first.cc(在examples文件夹中)检查安装是否成功,所有的运行文件都要放在NS-3的scratch文件夹中运行,运行指令:

 ./waf --run scratch/first

传感网络构建

Step1:创建网络节点

        创建一个节点作为中心节点,其他节点直接与中心节点相连,整个网络由中心节点进行集中式管理,各节点的通信都要经过中心节点,AP(无线接入点)就是本实验中网络的中心节点。 本次设置了6个接入点(STA站点),每一个连接到无线网络中的终端(如笔记本电脑、PDA及其它可以联网的用户设备)都可称为一个站点。程序如下:

uint32_t nSta = 6;

NodeContainer staNodes;

staNodes.Create(nSta);

NodeContainer apNodes;

apNodes.Create(1);

Step2:设置通信信道和物理层

        在NS-3中可以把节点连接到代表数据交换信道的对象上。在这里,基本的通信子网这一抽象概念被称为信道,用C++编写的Channel类来描述,Channel类提供了管理通信子网对象和把节点连接至信道的各种方法。一个信道实例可以模拟一条简单的线缆,也可以模拟一个复杂的巨型以太网交换机,信道模型的实例包括:

点对点信道PointToPointChannel:P2P的有线网络连接是两个终端直接建立有线连接,不经过中继设备直接交换数据或服务。

多点接入信道CsmaChannel:总线型的网络连接是采用单根传输线作为总线,所有工作站都共用一条总线,总线中任一节点发生故障不会造成整个网络的瘫痪。

无线信道WifiChanne:无线型网络是两个终端不通过电缆等有线方式,将无线电波作为载波和物理层的网络建立节点之间的连接。

我们使用的是无线通信信道和经典PHY模型。程序如下:

YansWifiChannelHelper channel=YansWifiChannelHelper::Default();

YansWifiPhyHelper phy=YansWifiPhyHelper::Default();

phy.SetChannel(channel.Create());

WifiHelper wifi;

wifi.SetRemoteStationManager("ns3::AarfWifiManager");

Step3:配置通信的数据链路层

        配置通信的Mac类型以及基础设置SSID,无线网的名字为ns-3-ssid,并且安装AP和STA节点通信设备。然后向网络节点加入移动模型,让STA可以在x、y轴正负50范围内随机移动,AP节点位置固定。程序如下:

WifiMacHelper mac;

Ssid ssid=Ssid("ns-3-ssid");

mac.SetType("ns3::StaWifiMac","Ssid",SsidValue(ssid),"ActiveProbing",BooleanValue(false));

NetDeviceContainer staDevices;

staDevices=wifi.Install(phy,mac,staNodes);

mac.SetType("ns3::ApWifiMac","Ssid",SsidValue(ssid));

NetDeviceContainer apDevice;

apDevices=wifi.Install(phy,mac,apNode);

MobilityHelper mobility;

mobility.SetPositionAllocator("ns3::GridPositionAllocator","MinX",DoubleValue(0.0),"MinY",DoubleValue(0.0),"DeltaX",DoubleValue(5.0),"DeltaY",DoubleValue(10.0),"GridWidth",UintegerValue(3),"LayoutType",StringValue("RowFirst"));

mobility.SetMobilityModel("ns3::RandomWalk2dMobilityModel","Bounds",RectangleValue(Rectangle(-50,50,-50,50)));

mobility.Install(staNodes);

mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");

mobility.Install(apNode);

Step4:配置网络层和运输层

        为传感网节点安装TCP/IP协议栈。安装了TCP/IP协议栈的节点还不能直接通信,还需要为节点的网络设备分配IP地址:声明一个地址生成器对象,地址从10.1.1.0开始,并以255.255.255.0为子网掩码分配地址,地址分配默认是从1开始并单调递增。中心节点的IP地址为10.1.1.7,6个STA节点IP地址为10.1.1.1至10.1.1.6。程序如下:

InternetStackHelper stack;

stack.Install(staNodes);

stack.Install(apNode);

Ipv4AddressHelper address;

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

Ipv4InterfaceContainer wifiInterfaces;

wifiInterfaces=address.Assign(staDevices);

address.Assign(apDevice);

Step5:配置应用层

        在NS3中并没有真正的操作系统的概念,更没有特权级别或者系统调用的概念,NS-3中的应用是对物理世界中应用程序内部网络通信功能的抽象,即模拟分组的发送和接收行为。在NS3中,需要被仿真的用户程序被抽象为应用,用Application类来描述,这个类提供了管理仿真过程中用户层应用的各种方法,常用Application的子类有:UdpEcho、OnOffApplication、PacketSink。在这里使用Application类的两个实例:EchoClient和EchoServer发送和回应仿真网络中的数据包。程序如下:

UdpEchoServerHelper echoServer(9);

ApplicationContainer serverApps=echoServer.Install(staNodes.Get(0));

serverApps.Start(Seconds(1.0));

serverApps.Stop(Seconds(15.0));

UdpEchoClientHelper echoClient(wifiInterfaces.GetAddress(0),9);

echoClient.SetAttribute("MaxPackets",UintegerValue(50));

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

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

Step6:生成后续数据处理文件

        最后生成一些数据文件,包括生成PCAP类型文件用于查看具体数据包内容、生成用于netanim的XML类型文件用于观察网络的拓扑结构、对数据包进行追踪得到TR类型文件用于后续数据吞吐量等的计算。程序如下:

phy.EnablePcapAll("star");

AnimationInterface anim("star-ljy.xml");

anim.SetMaxPktsPerTraceFile(99999999999999);

AsciiTraceHelper asciiTraceHelper;

phy.EnableAsciiAll(asciiTraceHelper.CreateFileStream("star-ljy.tr"));

拓扑结构可视化

        对于传感网络的可视化使用NS3可视化工具NetAnim,首先配置NetAnim。进入到netanim目录,在空白处右键,在终端中打开,通过下面四条指令生成NetAnim工具:

Build

make clean
qmake NetAnim.pro
make

        然后在本目录下执行指令./NetAnim,就会弹出NetAnim窗口,说明配置完成。在该窗口下打开之前编译生成的XML类型文件即可观察到传感网络的可视化仿真,如下图所示:

         因为设计的STA节点是可移动AP节点是固定的,所以仿真效果中节点6是固定的,节点0至5位置是不断变化的。

PS: 执行qmake指令时可能会出现command cant found的报错提示,本人的解决方案是去QT官方网站下载一个qt软件安装qmake,之后与NS-3建立软连接。本人下载的是qt-opensource-linux-x64-5.12.9.run版本。

软连接建立参见:qmake建立连接https://blog.csdn.net/hrbust_cxl/article/details/121484839

至此网络仿真建立完成。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
NS-3是一个网络仿真器,而Netanim是NS-3的可视化工具,用于展示仿真结果。安装Netanim需要先完成NS-3的配置和编译。首先,按照官方文档完成NS-3的配置,并通过hello world测试确认配置成功。接下来,安装synaptic插件,可以使用apt-get命令进行安装。然后,使用synaptic安装三个插件:qt4-qmake、libqt4-dev和libxml2-dev。安装完成后,进入NS-3文件夹,编译安装Netanim。最后,使用Netanim打开生成的xml记录文件,即可展示仿真结果。 具体的安装步骤如下: 1. 安装synaptic插件,可以使用命令sudo apt-get install synaptic进行安装。 2. 启动synaptic,可以使用命令sudo synaptic进行启动。 3. 使用synaptic搜索并安装三个插件:qt4-qmake、libqt4-dev和libxml2-dev。如果没有安装,可以右键点击插件,选择"mark for installation",然后点击"Apply"进行安装。 4. 进入NS-3文件夹,编译安装Netanim。首先进入ns-allinone-3.xx文件夹,然后进入netanim-3.xxx文件夹。执行make clean命令清理编译文件,然后执行qmake NetAnim.pro命令生成Makefile,最后执行make命令进行编译。 5. 使用Netanim打开生成的xml记录文件。进入NetAnim目录,执行./NetAnim命令打开Netanim。点击"Open XML trace file"按钮,选择生成的xml文件,即可展示仿真结果。 需要注意的是,在编译脚本文件时,要确保wscript文件中包含netanim模块,并且编译的脚本文件要和wscript文件在同一目录下。在脚本末尾的Simulator::Run()命令前一行添加AnimationInterface anim("文件的名字.xml")命令,以指定生成的xml文件。 综上所述,安装和使用NS-3的可视化工具Netanim的步骤如上所述。 #### 引用[.reference_title] - *1* [NS-3安装可视化工具Netanim](https://blog.csdn.net/zhaiwenbin22944/article/details/115894032)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [可视化工具NetAnim在NS-3中的使用](https://blog.csdn.net/m0_46466697/article/details/105354849)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值