ns3入门基础教程

news2024/11/27 8:48:19

ns3入门基础教程

文章目录

    • ns3入门基础教程
      • ns环境配置
      • 测试ns3环境
      • ns3简单案例

ns环境配置

官方网站:https://www.nsnam.org/releases/
代码仓库:https://gitlab.com/nsnam/ns-3-dev
如果安装遇到问题,可以参考以下博文:
https://blog.csdn.net/yangzhenyu2/article/details/116205406
以及:
https://blog.csdn.net/rical730/article/details/71730163

测试ns3环境

首先编辑一个很简单的.cc文件,测试ns3环境是否安装成功,在./scrach/目录下新建一个.cc文件(first.cc),然后写入代码:

#include "ns3/core-module.h"

using namespace ns3;

int main(int argc, char *argv[]){
        std::cout<<"hello ns3"<<std::endl;
        Simulator::Run();
        Simulator::Destroy();
        return 0;
}

接下来进行编译:

./waf build

然后运行:

./waf --run scrach/first

运行结果:
在这里插入图片描述

ns3简单案例

首先展示代码以及运行结果,然后再给出该代码的详细讲解:

#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"


using namespace ns3;
int main (int argc, char *argv[]){
  NodeContainer nodes;
  nodes.Create (2);

  PointToPointHelper pointToPoint;
  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
  pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

  NetDeviceContainer devices;
  devices = pointToPoint.Install (nodes);

  InternetStackHelper stack;
  stack.Install (nodes);

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

  Ipv4InterfaceContainer interfaces = address.Assign (devices);

  UdpEchoServerHelper echoServer (9);//echoServer(port number)

  ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
  serverApps.Start (Seconds (1.0));
  serverApps.Stop (Seconds (10.0));

  UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9);
  echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
  echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
  echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

  ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));
  clientApps.Start (Seconds (2.0));
  clientApps.Stop (Seconds (10.0));

  std::ostringstream oss("scratch/lab02");
  pointToPoint.EnablePcapAll (oss.str ());
  pointToPoint.EnableAsciiAll (oss.str ());

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

运行结果:
在这里插入图片描述
这段代码是一个C++程序,使用了NS-3网络模拟框架,用于模拟一个简单的点对点网络通信场景。以下是对代码的解读:

  1. 包含头文件:代码一开始包含了一系列NS-3库的头文件,这些头文件提供了必要的类和函数,以便创建和模拟网络拓扑和通信。

  2. 命名空间:使用using namespace ns3;将ns3命名空间引入到当前的代码作用域,以便在代码中使用NS-3库的类和函数,无需显式指定命名空间。

  3. main 函数:这是程序的主函数,它是程序的入口点。

  4. 创建节点(NodeContainer):通过NodeContainer类创建了一个名为 nodes 的节点容器,容器中包含两个节点(nodes.Create(2))。

  5. 创建点对点连接(PointToPointHelper):使用 PointToPointHelper 类创建了一个点对点连接的帮助器对象 pointToPoint,并配置了连接的数据速率和延迟属性。

  6. 安装网络设备:通过 pointToPoint.Install(nodes) 安装了点对点连接设备,并将设备存储在 devices 变量中。

  7. 安装网络协议栈(InternetStackHelper):通过 InternetStackHelper 类的 Install 方法,将网络协议栈安装到节点上。

  8. 分配 IPv4 地址:使用 Ipv4AddressHelper 类来分配 IPv4 地址。设置了基础地址为 “10.1.1.0” 和子网掩码为 “255.255.255.0”,然后通过 address.Assign(devices) 分配地址给连接设备,结果存储在 interfaces 变量中。

  9. 配置服务器应用(UdpEchoServerHelper):创建了一个 UDP 回显服务器的帮助器对象 echoServer,并指定了端口号 9。

  10. 安装服务器应用:通过 echoServer.Install(nodes.Get(1)) 将回显服务器应用安装在节点1上,然后设置了应用的启动时间和停止时间。

  11. 配置客户端应用(UdpEchoClientHelper):创建了一个 UDP 回显客户端的帮助器对象 echoClient,并配置了客户端的目标地址(使用 interfaces.GetAddress(1) 获取节点1的地址)和端口号 9。

  12. 安装客户端应用:通过 echoClient.Install(nodes.Get(0)) 将回显客户端应用安装在节点0上,并设置了应用的启动时间和停止时间。

  13. 启用网络数据包捕获和记录:使用 pointToPoint.EnablePcapAll()pointToPoint.EnableAsciiAll() 启用了对网络数据包的捕获和记录,并指定了记录文件的名称。

  14. 运行模拟:通过 Simulator::Run() 开始运行网络模拟。

  15. 销毁模拟:通过 Simulator::Destroy() 结束模拟并清理资源。

总的来说,这段代码创建了一个包含两个节点的点对点网络拓扑,其中一个节点充当服务器,另一个节点充当客户端,它们之间通过UDP回显应用进行通信。模拟运行时,网络数据包将被捕获和记录,以便进行分析和调试。

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

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

相关文章

19、Flink 的Table API 和 SQL 中的内置函数及示例(1)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

吴恩达《机器学习》6-4->6-7:代价函数、简化代价函数与梯度下降、高级优化、多元分类:一对多

一、代价函数 逻辑回归的代价函数是用来度量模型预测与实际结果之间的差异的。与线性回归使用均方误差不同&#xff0c;逻辑回归使用的代价函数在数学上更为复杂。为了理解逻辑回归的代价函数&#xff0c;首先要明白逻辑回归的假设函数&#xff1a; ℎ&#x1d703;(&#x1…

【高德地图API】JS高德地图API实现多边形绘画,高德获取多边形提交数据

目录 前言效果实现引入js 在项目中使用效果图引入htmlCSS具体实现JS调用说明添加的时候修改的时候判断是否在范围内 java绘画和判断是否在范围内pom.xml依赖引入import引入实现 前言 高德地图官方API&#xff1a;https://lbs.amap.com/demo/javascript-api/example/overlayers…

计算机编程软件编程基础知识,中文编程工具下载分享

计算机编程软件编程基础知识&#xff0c;中文编程工具下载分享 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件&#xff0c;象如图这个实例…

LangChain+LLM实战---用AI(大模型)重构推荐系统

原文&#xff1a;Reimagining the Recommendation Engine AI助手的崛起 人工智能正在改变我们与在线应用程序互动的方式。目前&#xff0c;我们使用搜索引擎、新闻源和精心设计的菜单来导航&#xff0c;这些菜单引导我们找到所需的信息或服务。然而&#xff0c;我相信目前人工…

【IK分词器安装】

安装IK分词器&#xff1a; 下载链接&#xff08;如果es版本不同可以修改下版本号&#xff09;&#xff1a;https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip 通常下载是比较慢的&#xff1a;有需要可以从…

OFDM同步--载波频率偏差CFO

参考书籍&#xff1a;《MIMO-OFDM无线通信技术及MATLAB实现》 实验图基本都截取自该本书 一、什么是CFO OFDM解调是采用同步检波的方式&#xff0c;需要在接收机使用与发射机相同的载波信号进行向下变换恢复出基带信号。但在实际使用中无法获得完全相同的载波信号&#xff0c;…

Mybatis-Plus自动填充功能配置和使用 [MyBatis-Plus系列] - 第494篇

历史文章(文章累计490+) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《

测试开发之自动化篇-有效测试数据管理

我们知道在测试设计时&#xff0c;对于一些操作相似的场景&#xff0c;可以采用步骤同数据相分离的方法来描述。这样的用例内容精炼、逻辑清晰&#xff0c;也利于未来自动化测试脚本的复用。 数据驱动测试是一种流行的软件测试方法&#xff0c;用于归纳性、结构化和集中化地描…

Linux开发板移植FTP服务器和OpenSSH时发现的问题

先上结论&#xff1a;如果在linux开发板上移植了OpenSSH&#xff0c;那么不仅可以远程登录Linux开发板&#xff0c;还可以用FileZilla在windows和Linux开发板之间传输文件&#xff0c;这时候就不需要移植vsftpd(移植vsftpd后windows可以用FileZilla跟Linux开发板传输文件)了&am…

【Unity ShaderGraph】| 快速制作一个 表面水纹叠加效果

前言 【Unity ShaderGraph】| 快速制作一个 表面水纹叠加效果一、效果展示二、表面水纹叠加效果三、应用实例 前言 本文将使用ShaderGraph制作一个表面水纹叠加效果&#xff0c;可以直接拿到项目中使用。对ShaderGraph还不了解的小伙伴可以参考这篇文章&#xff1a;【Unity Sh…

CentOS/RHEL7环境下更改网卡名称为CentOS6的传统命名规则

图片 CentOS/RHEL7网卡命名规则介绍 图片 传统的Linux服务器网卡的名称命名方式是从eth0,eth1,eth2....这种方式命名的&#xff0c;但是这个编号往往不一定准确对应网卡接口的物理顺序&#xff0c;常规模式下我们使用的服务器设备可能只有一张网卡&#xff0c;若网卡较多的情…

抖音10月榜单有哪些看点?

10月20日&#xff0c;抖音双11好物节在抖音平台正式开启抢跑&#xff0c;据数据显示&#xff0c;截止10月31日平台多项双11销售增长记录再次被刷新。 *新抖双十一活动也已开启&#xff0c;最高可省30788元&#xff0c;活动详情&#x1f449; 抖音平台内大促氛围火爆&#xff0…

桶装水订水系统水厂送水小程序开发;

桶装水小程序正式上线&#xff0c;支持多种商品展示形式&#xff0c;会员卡、积分、分销等功能&#xff1b; 开发订水送水小程序系统&#xff0c;基于用户、员工、商品、订单、配送站和售后管理模块&#xff0c;对每个模块进行统计分析&#xff0c;简化了分配过程&#xff0c;提…

虹科教您 | 如何选择超声波储罐液位传感器(一)

在储罐中安装传感器时需要考虑&#xff1a; 1.避开障碍物 - 罐壁或罐内的其他障碍物会导致测距读数不准确。 2.放置会影响读数 - 初始的过滤设置是让传感器优先考虑大目标而不是小目标和噪音源。这有利于储罐液位监测的应用&#xff0c;因为液位往往会产生最大的返回声波。 …

ES 报错问题汇总

报错1&#xff1a; curl -XGET http://192.168.56.115:9200/_license解决方式 在 es/config/elasticsearch.yml文件,把开启密码验证把此处也修改成false xpack.security.enabled: false 报错2&#xff1a; 解决方式&#xff1a; 查看服务器es的license信息&#xff0c;发现 …

信驰达RF-DG-52PAS CC2652P Zigbee 3.0 USB Dongle烧录指南

一、使用前准备 RF-DG-52PAS是信驰达科技基于美国 TI CC2652P和CP2102为核心设计的Zigbee 3.0 USB Dongle,可烧录 Z-Stack 3.x.0协调器固件&#xff0c;可以直接连接到计算机或树莓派&#xff0c;通过ZHA或 Zigbee2MQTT连接到 Home Assistant或其他开源物联网平台。还可以烧录…

软件测试面试看这套全网最权威最全面的800+面试题,你值得拥有

想转行的&#xff0c;想跳槽涨薪的&#xff0c;想换一份更舒服更美好的工作的现在可以准备起来了。 软件测试作为IT届最亲民的门槛最低的准入行业&#xff0c;每年在这个时候会迎来很多的小白&#xff0c;在自学一段时间后&#xff0c;马上面临着面试的压力。 全网最权威最全…

【方法】Word文档如何防止更改?

做好的Word文档&#xff0c;担心查看的时候&#xff0c;不小心做了更改&#xff0c;除了可以将Word文档转换成PDF&#xff0c;还可以直接在Word文档里设置保护&#xff0c;防止更改&#xff0c;下面小编来分享3种常用的保护方法。 方法一&#xff1a;设置以“只读方式”打开文档…

CZ发布减半倒计时!暗示投资者熊转牛拐点即将到来?

近日&#xff0c;币安创始人兼首席执行官赵长鹏(CZ)在推特贴出一张时间表&#xff0c;引起百万人浏览热议&#xff0c;他似乎在暗示投资者&#xff0c;熊市转为牛市的拐点即将到来。 “4年周期&#xff0c;”赵长鹏在推特写道&#xff0c;附图标出比特币减半时间表&#xff0c;…