ns3 入门案例2:third.cc

代码分析

1 头文件

#include "ns3/core-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/network-module.h"
#include "ns3/applications-module.h"
#include "ns3/mobility-module.h"
#include "ns3/csma-module.h"
#include "ns3/internet-module.h"
#include "ns3/yans-wifi-helper.h"
#include "ns3/ssid.h"

2 名字空间

3 打印内容

NS_LOG_COMPONENT_DEFINE (“ThirdScriptExample”);

4 主函数(变量声明)

与案例1不同,此处定义并使用一些命令行参数。

  bool verbose = true;uint32_t nCsma = 3;uint32_t nWifi = 3;bool tracing = false;CommandLine cmd;cmd.AddValue ("nCsma", "Number of \"extra\" CSMA nodes/devices", nCsma);cmd.AddValue ("nWifi", "Number of wifi STA devices", nWifi);cmd.AddValue ("verbose", "Tell echo applications to log if true", verbose);cmd.AddValue ("tracing", "Enable pcap tracing", tracing);
`

以nWifi为例,意义为默认无线节点数目,设置大小为3,但可以通过命令行传入参数
若运行时采用以下方式,则把参数传进里面。

./waf --run "third --nWifi=18"

5 创建网络拓扑

(1)案例1涉及PPP网络,【设置链路速率、时延】代码如下

  NodeContainer p2pNodes;p2pNodes.Create (2);PointToPointHelper pointToPoint;pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));NetDeviceContainer p2pDevices;p2pDevices = pointToPoint.Install (p2pNodes);

(2)CSMA网络
CSMA可以连接多个节点,节点之间竞争使用信道
(PPP连接两个节点,专属信道)

  NodeContainer csmaNodes;csmaNodes.Add (p2pNodes.Get (1));//此处为双接口节点csmaNodes.Create (nCsma);CsmaHelper csma;csma.SetChannelAttribute ("DataRate", StringValue ("100Mbps"));csma.SetChannelAttribute ("Delay", TimeValue (NanoSeconds (6560)));NetDeviceContainer csmaDevices;csmaDevices = csma.Install (csmaNodes);

(3)Wifi网络
由一个接入点(AP)与nWiFi个移动节点组成,AP为双模节点,安装WiFi与PPP两个设备。WiFi协议包括链路层(WiFIMac)与物理层(WifiPhy)。WifiNetDevice只起到连接上下层协议的作用。
1)

    NodeContainer wifiStaNodes;wifiStaNodes.Create (nWifi);NodeContainer wifiApNode = p2pNodes.Get (0);//双模节点
//默认模型YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();//配置Channel类YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();//配置wifiPhy类phy.SetChannel (channel.Create ());

设置Channel和WifiPhy
2)

  WifiHelper wifi;wifi.SetRemoteStationManager ("ns3::AarfWifiManager");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, wifiStaNodes);//安装移动节点mac.SetType ("ns3::ApWifiMac","Ssid", SsidValue (ssid));NetDeviceContainer apDevices;//AP结点apDevices = wifi.Install (phy, mac, wifiApNode);//安装AP节点

服务集标志符(SSID)
其中,设置主要用WifiHelper设置,助手类
3)设置移动模型
设置笛卡尔坐标系,其中AP节点坐标设为原点
主要应用助手类MobilityHelper

    MobilityHelper mobility;//使用分布器GridPositionAllocator形成初始分布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"));
//利用RandomWalk2MobilityModel设置移动轨迹mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel","Bounds", RectangleValue (Rectangle (-50, 50, -50, 50)));mobility.Install (wifiStaNodes);
// 为AP节点设置移动模型,设置原点mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");mobility.Install (wifiApNode);

6 安装TCP/IP协议

  InternetStackHelper stack;stack.Install (csmaNodes);stack.Install (wifiApNode);stack.Install (wifiStaNodes);Ipv4AddressHelper address;address.SetBase ("10.1.1.0", "255.255.255.0");Ipv4InterfaceContainer p2pInterfaces;p2pInterfaces = address.Assign (p2pDevices);address.SetBase ("10.1.2.0", "255.255.255.0");Ipv4InterfaceContainer csmaInterfaces;csmaInterfaces = address.Assign (csmaDevices);address.SetBase ("10.1.3.0", "255.255.255.0");address.Assign (staDevices);address.Assign (apDevices);UdpEchoServerHelper echoServer (9);

7 安装应用程序

 ApplicationContainer serverApps = echoServer.Install (csmaNodes.Get (nCsma));serverApps.Start (Seconds (1.0));serverApps.Stop (Seconds (10.0));UdpEchoClientHelper echoClient (csmaInterfaces.GetAddress (nCsma), 9);echoClient.SetAttribute ("MaxPackets", UintegerValue (1));echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));echoClient.SetAttribute ("PacketSize", UintegerValue (1024));ApplicationContainer clientApps = echoClient.Install (wifiStaNodes.Get (nWifi - 1));clientApps.Start (Seconds (2.0));clientApps.Stop (Seconds (10.0));

具体解释可以看案例1

8 设置路由

之前一个节点设置两个网络设备(PPP CSMA),而网络属于两个不同的子网,需要连接两个字网的节点具有路由功能。才可以进行数据包的转发(PPP与CSMA之间)
此处设置路由协议为全局路由,采用最短路径优先(OSPF算法),为每个节点生成路由表。对于IPV4,此处调用Ipv4GlobalRoutingHelper的PopulateRoutingTable()函数。

 Ipv4GlobalRoutingHelper::PopulateRoutingTables ();

9 数据追踪

分析网络性能的重要前提是获取实验数据,ns3以pcap或ASCII文本形式保存在指定文件中,这部分代码往往最后编辑。

  pointToPoint.EnablePcapAll ("third");//EnablePcapAll()用于收集信道上所有链路层分组收发记录,格式Pcap,文件名前缀为third,命名规则为“前缀-节点号-网络设备”phy.EnablePcap ("third", apDevices.Get (0));csma.EnablePcap ("third", csmaDevices.Get (0), true);

10 启动与结束

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

运行程序

在ns3目录下运行

./waf --run third

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光纤交换机产品功能介绍

光纤交换机是一种高速的网络传输中继设备,又叫做光纤通道交换机、SAN交换机,光纤传输的优点是速度快、抗干扰能力强。那么,光纤交换机有哪些功能呢?接下来我们就跟随飞畅科技的小编一起来看看吧! 通道协议支持 SAN交换…

java8 streams_使用Java 8 Streams进行编程对算法性能的影响

java8 streams多年来,使用Java进行多范式编程已经成为可能,它支持面向服务,面向对象和面向方面的编程的混合。 带有lambda和java.util.stream.Stream类的Java 8是个好消息,因为它使我们可以将功能性编程范例添加到混合中。 确实&a…

光纤交换机光纤通道协议介绍

光纤通道(FC,Fibre Channel)协议是美国国家标准所指定的一种串行高速、低延时、低误码的标准协议能够为存储设备、IP 数据网、音频流等应用提供高速数据传输的骨干网络技术。随着光纤通道在不同领域的应用,在光纤通道协议的基础上…

解决E: 仓库 “http://ppa.launchpad.net/fcitx-team/nightly/ubuntu bionic Release” 没有 Release 文件。

转载声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:在NS-3中安装可视化工具pyviz的一些问题的解决_寻同学的博客-CSDN博客 今天,在更新软件时,使用以下…

POI创建的文档具有不同条件的灵活样式

介绍 这篇文章解释了基于各种标准将样式应用于文档的困难并提供了解决方案。 Java编程中的常见任务之一是根据存储在数据库中的数据创建Excel报告。 在这些情况下,Java程序员使用POI :-)。 这些报告通常具有严格的样式和数据格式规则。 数据通常是SQL查询执行的结果…

在NS-3中安装可视化工具pyviz的一些问题的解决

转载声明:本文为寻同学原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/qq_31676673/article/details/88107454 在NS-3中安装可视化工具pyviz的一些问题的解决 PyViz是一…

什么是光纤交换机?

光纤交换机是一种高速的网络传输中继设备,又叫做光纤通道交换机、SAN交换机,它较普通交换机而言,采用了光纤电缆作为传输介质。光纤传输的优点是速度快、抗干扰能力强。光纤交换机主要有两种,一是用来连接存储的FC交换机。另一种是…

java 调用 js性能_太快了,太变态了:什么会影响Java中的方法调用性能?

java 调用 js性能那么这是怎么回事? 让我们从一个简短的故事开始。 几周前,我提议对Java核心libs邮件列表进行更改 ,以覆盖当前final一些方法。 这刺激了一些讨论主题-其中之一是其中一个性能回归通过采取这是一个方法被引入的程度final免遭停…

VMware虚拟机扩展Ubuntu系统磁盘空间

转载:https://www.cnblogs.com/dongry/p/10620894.html 1 首先给虚拟机扩容 虚拟机->设置->硬盘->实用程序->扩展磁盘容量 2 启动Ubuntu系统 2.1 打开终端安装gparted,sudo apt-get install gparted;输入sudo gparted打开gparte…

光纤以太网交换机产品性能介绍

光纤以太网交换机是一款高性能的管理型的二层光纤以太网接入交换机。那么,光纤以太网交换机产品性能有哪些呢?接下来,飞畅科技的小编就来为大家详细介绍下光纤以太网交换机的产品性能,感兴趣的朋友就一起来看看吧! 光…

操作方法:具有多个Mongo存储库和Kotlin的Spring Boot 2 Web应用程序

首先,免责声明:如果您正在编写微服务 (每个人现在都对吗?)并希望它是惯用的 ,那么通常不会在其中使用几个不同的数据源。 图片取自Pixabay© https: //pixabay.com/illustrations/software-binary-sys…

2020-09-03解决pip install安装非常慢[Errno 101] 网络不可达问题

转载链接:http://huanyouchen.github.io/2019/11/21/pip-install-package-very-slow/ 问题描述 使用pip安装seaborn提示: sudo python3.5 -m pip install seabornCollecting seabornWARNING: Retrying (Retry(total4, connectNone, readNone, redirect…

环网工业交换机ERPS技术解析

ERPS(Ethernet Ring Protection Switching,以太环网保护切换协议)是ITU开发的一种环网保护协议,也称G.8032。它是一个专门应用于以太环网的链路层协议。它在以太环网完整时能够防止数据环路引起的广播风暴,而当以太环网上一条链路断开时能迅速…

交换机和路由器的区别是什么?

在我们日常生活中,上网很多时候都要用到交换机和路由器,很多人只知道二者都是用于连接上网的设备,但很少知道它们之间有什么区别,以及各自的功能。 交换机和路由器的区别: 路由器可以给你的局域网自动分配IP&#xf…

import _ssl # if we can‘t import it, let the error propagate

转载链接: https://blog.csdn.net/u013398960/article/details/107524068 实测有用

apache flume_Flume:使用Apache Flume收集客户产品搜索点击数据

apache flume这篇文章涵盖了使用Apache flume收集客户产品搜索点击并使用hadoop和elasticsearch接收器存储信息。 数据可能包含不同的产品搜索事件,例如基于不同方面的过滤,分类信息,分页信息,以及进一步查看的产品以及某些被客户…

如何选配合适的百兆或者千兆工业交换机

工业上常常会用到工业交换机,工程商在做小型网络监控方案的时候,经常需要选配合适的百兆工业交换机或千兆工业交换机,但是,到底是配百兆工业交换机还是千兆工业交换机呢?如何计算百兆工业交换机和千兆工业交换机的码率…

2020年9月14日运行代码总结

由于研究ns3gym的使用,官网案例不足,需要运行别人的代码,在本机上运行成功,但在仿真机过程中出现一类列问题。一开始以为环境配置问题,升级环境与python3.6,但在python3.6.12的安装与python默认版本的更改中…

使用Selenium自动化测试处理多个浏览器选项卡

使用Selenium进行自动化测试一直是将萌芽的自动化测试人员培养为专业人员的生命线。 硒是开源的,在全球范围内被广泛采用。 结果,您会得到社区的大力支持。 有多种用于不同语言的框架,这些框架提供与Selenium的绑定。 因此,您已经…

三层交换机工作原理介绍

每个网络主机、工作站或者服务器都有自己的IP地址和子网掩码。当主机与服务器进行通信的时候,根据自身的IP地址和子网掩码、以及服务器的IP地址,来确定服务器是否和自己处于相同的网段: 1、如果判定在相同网段内,则直接通过地址解…