当前位置: 首页 > news >正文

ns3入门基础教程

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回显应用进行通信。模拟运行时,网络数据包将被捕获和记录,以便进行分析和调试。

相关文章:

ns3入门基础教程

ns3入门基础教程 文章目录 ns3入门基础教程ns环境配置测试ns3环境ns3简单案例 ns环境配置 官方网站&#xff1a;https://www.nsnam.org/releases/ 代码仓库&#xff1a;https://gitlab.com/nsnam/ns-3-dev 如果安装遇到问题&#xff0c;可以参考以下博文&#xff1a; https://…...

计算机视觉

目录 一、图像处理 main denoise 二、Harris角点检测 三、Hough变换直线检测 四、直方图显著性检测 五、人脸识别 六、kmeans import 函数 kmeanstext 七、神经网络 常用函数&#xff1a; imread----------读取图像 imshow---------显示图像 rgb2hsv---------RGB转…...

NSSCTF第10页(3)

[LitCTF 2023]彩蛋 第一题&#xff1a; LitCTF{First_t0_The_k3y! (1/?) 第三题&#xff1a; <?php // 第三个彩蛋&#xff01;(看过头号玩家么&#xff1f;) // R3ady_Pl4yer_000ne (3/?) ?> 第六题&#xff1a; wow 你找到了第二个彩蛋哦~ _S0_ne3t? (2/?) 第七题…...

MySQL性能分析工具的使用

1. 统计SQL的查询成本&#xff1a;last_query_cost SHOW STATUS LIKE last_query_cost; 使用场景&#xff1a;它对于比较开销是非常有用的&#xff0c;特别是我们有好几种查询方式可选的时候。 SQL 查询是一个动态的过程&#xff0c;从页加载的角度来看&#xff0c;我们可以得到…...

Uniapp使用AES128加解密16进制

在对接低功耗蓝牙时&#xff0c;我们需要对蓝牙传输数据进行加解密&#xff0c;由于我们对接的命令是16进制&#xff0c;如5500020101aa00&#xff0c;每个16进制表示特定的含义&#xff0c;所以直接对16进制加解密 import CryptoJS from crypto-js// AES128 加密函数 functio…...

C++基础——类与对象

1 概述 C是面向对象的语言&#xff0c;面向对象语言三大特性&#xff1a;封装、继承、多态。 C将万事万物抽象为对象&#xff0c;对象上有其属性和行为。 2 封装 2.1 封装的意义 封装是面向对象的三大特性之一&#xff0c;封装将属性和行为作为一个整体&#xff0c;对属性和…...

人工智能-卷积神经网络

从全连接层到卷积 我们之前讨论的多层感知机十分适合处理表格数据&#xff0c;其中行对应样本&#xff0c;列对应特征。 对于表格数据&#xff0c;我们寻找的模式可能涉及特征之间的交互&#xff0c;但是我们不能预先假设任何与特征交互相关的先验结构。 此时&#xff0c;多层感…...

MySQL的event的使用方法

MySQL的event的使用方法 一、事件定时策略 1、查看event事件开启状态 SHOW VARIABLES LIKE event_scheduler;如图&#xff0c;Value值 ON&#xff1a;打开&#xff0c;OFF&#xff1a;关闭。 2、设置event事件打开 SET GLOBAL event_scheduler ON;如果MySQL重启了&#x…...

Leetcode Daily Challenge 1845. Seat Reservation Manager

1845. Seat Reservation Manager 题目要求&#xff1a;初始化一个SeatManager类包括默认构造函数和类函数&#xff0c;所有的seat初始化为true。reverse函数返回最小的true&#xff0c;然后把这个编号的椅子赋值为false。unreverse(seatNumber)函数把编号为seatNumber的椅子恢…...

Blender vs 3ds Max:谁才是3D软件的未来

在不断发展的3D建模和动画领域&#xff0c;两大软件巨头Blender和3ds Max一直在争夺顶级地位。 随着技术的进步和用户需求的演变&#xff0c;一个重要问题逐渐浮出水面&#xff1a;Blender是否最终会取代3ds Max&#xff1f;本文将深入探讨二者各自的优势和劣势、当前状况&…...

MapReduce:大数据处理的范式

一、介绍 在当今的数字时代&#xff0c;生成和收集的数据量正以前所未有的速度增长。这种数据的爆炸式增长催生了大数据领域&#xff0c;传统的数据处理方法往往不足。MapReduce是一个编程模型和相关框架&#xff0c;已成为应对大数据处理挑战的强大解决方案。本文探讨了MapRed…...

【已解决】ModuleNotFoundError: No module named ‘dgl‘

禁止使用下面方法安装DGL,这种方法会更新你的pytorch版本&#xff0c;环境越变越乱 pip install dgl 二是进入DGL官网&#xff1a;Deep Graph Library (dgl.ai)&#xff0c;了解自己的配置情况&#xff0c;比如我cuda11.8&#xff0c;ubuntu&#xff0c;当然和linux是一样的 …...

R 复习 菜鸟教程

R语言老师说R好就业&#xff0c;学就完了 基础语法 cat()可以拼接函数&#xff1a; > cat(1, "加", 1, "等于", 2, \n) 1 加 1 等于 2sink()&#xff1a;重定向 sink("r_test.txt", splitTRUE) # 控制台同样输出 for (i in 1:5) print(i…...

第十二章《搞懂算法:朴素贝叶斯是怎么回事》笔记

朴素贝叶斯是经典的机器学习算法&#xff0c;也是统计模型中的一个基本方法。它的基本思想是利用统计学中的条件概率来进行分类。它是一种有监督学习算法&#xff0c;其中“朴素”是指该算法基于样本特征之间相互独立这个“朴素”假设。朴素贝叶斯原理简单、容易实现&#xff0…...

【从0到1开发一个网关】网关Mock功能的实现

文章目录 什么是Mock?如何实现Mock什么是Mock? Mock(模拟)是一种测试技术,用于创建虚拟对象来模拟真实对象的行为。Mock对象模拟了真实对象的行为,但是不依赖于真实对象的实现细节。它们可以在测试中替代真实对象,以便进行独立的单元测试。 需要使用Mock的原因包括以下几…...

前端框架Vue学习 ——(三)Vue生命周期

生命周期&#xff1a;指一个对象从创建到销毁的整个过程。 生命周期的八个阶段&#xff1a;每触发一个生命周期事件&#xff0c;会自动执行一个生命周期方法&#xff08;钩子&#xff09; mounted&#xff1a;挂载完成&#xff0c;Vue 初始化成功&#xff0c;HTML 页面渲染成功…...

相机滤镜软件Nevercenter CameraBag Photo mac中文版特点介绍

Nevercenter CameraBag Photo mac是一款相机和滤镜应用程序&#xff0c;它提供了一系列先进的滤镜、调整工具和预设&#xff0c;可以帮助用户快速地优化和编辑照片。 Nevercenter CameraBag Photo mac软件特点介绍 1. 滤镜&#xff1a;Nevercenter CameraBag Photo提供了超过2…...

游戏专用....

游戏专用&#xff1a;星际战甲 APP窗口以及键鼠监控 import tkinter as tk import time,threading from pynput.keyboard import Key,Listener import pynput.keyboard as kbclass myClass:def __init__(self):self.root tk.Tk()self.new_text self.flag threading.Event()…...

第三方登录和第三方支付

第三方登录 在现代Web应用中&#xff0c;提供第三方登录选项已经变得非常普遍。用户可以使用其社交媒体或其他在线帐户&#xff08;如Google、GitHub或Facebook&#xff09;来访问您的应用程序&#xff0c;而无需创建新的用户名和密码。这提供了更好的用户体验&#xff0c;减少…...

SpringMvc执行流程(含过滤器Filter+拦截器interceptor)

目录 1.Mvc的概念 2.SpringMvc的概念 3.SpringMvc的核心组件 4.SpringMvc的执行流程 5.SpringMvcFilterInterceptor执行流程 一、Mvc的概念 Mvc(Model View Controller)&#xff1a;Mvc是一种设计规范&#xff0c;它将数据、视图、业务逻辑代码进行分离&#xff0c;降低代码…...

【UDS基础】简单介绍“统一诊断服务“

1. 前言 我们将在这个实用教程中介绍UDS的基础知识,重点关注在CAN总线上的UDS(UDSonCAN)和CAN诊断(DoCAN)。此外,我们还会介绍ISO-TP协议,并解释UDS、OBD2、WWH-OBD和OBDonUDS之间的差异。 最后,我们将解释如何请求、记录和解码UDS消息,并提供一些实际示例,例如记录…...

深度学习框架TensorFlow.NET之数据类型及张量2(C#)

环境搭建参考&#xff1a; 深度学习框架TensorFlow.NET环境搭建1&#xff08;C#&#xff09;-CSDN博客 由于本文作者水平有限&#xff0c;如有写得不对的地方&#xff0c;往指出 声明变量&#xff1a;tf.Variable 声明常量&#xff1a;tf.constant 下面通过代码的方式进行学…...

Pandas指定多列组合形成新列

目录 1、数据准备2、多列组合 1、数据准备 df pd.DataFrame({first_name: [A, B], last_name: [a, b]}) print(df.to_string()) first_name last_name 0 A a 1 B b 2、多列组合 2.1、方式一&#xff1a;使用cat() df[full_name] df[firs…...

硕鼠——视频下载利器

相信很多做自媒体、剪辑的同志们&#xff0c;经常会遇到一个棘手的问题&#xff1a;剪辑的素材从何而来。诸如很多高燃混剪的视频&#xff0c;往往需要多个影视作品中的原画来进行二次创作&#xff0c;可是这些视频素材从何而来呢&#xff1f; 有小伙伴们提出&#xff0c;通过录…...

Android 13.0 Launcher3 app图标长按去掉应用信息按钮

1.前言 在13.0的rom定制化开发中,在Launcher3定制化开发中,对Launcher3的定制化功能中,在Launcher3的app列表页会在长按时,弹出微件和应用信息两个按钮,点击对应的按钮跳转到相关的功能页面, 现在由于产品需求要求禁用应用信息,不让进入到应用信息页面所以要去掉应用信息…...

10 DETR 论文精读【论文精读】End-to-End Object Detection with Transformers

目录 DETR 这篇论文&#xff0c;大家为什么喜欢它&#xff1f;为什么大家说它是一个目标检测里的里程碑式的工作&#xff1f;而且为什么说它是一个全新的架构&#xff1f; 1 题目 2摘要 2.1新的任务定义&#xff1a;把这个目标检测这个任务直接看成是一个集合预测的问题 2.…...

高数笔记05:不定积分与定积分

图源&#xff1a;文心一言 时间比较紧张&#xff0c;仅导图~~&#x1f95d;&#x1f95d; 第1版&#xff1a;查资料、画导图~&#x1f9e9;&#x1f9e9; 参考资料&#xff1a;《高等数学 基础篇》武忠祥 &#x1f433;目录 &#x1f433;目录 &#x1f433;不定积分 &#…...

【代码随想录】算法训练计划13

1、347. 前 K 个高频元素 题目&#xff1a; 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2] 思路&#xff1a; sort.Slice学习一下&#xff0c;其实还有so…...

Python图像处理之OpenCV模块

Python图像处理 1、OpenCV模块简介2、OpenCV模块图像常用操作3、PIL与OpenCV图像格式转换4、图像识别应用案例4.1、人脸识别4.2、车牌识别4.3、文本识别1、OpenCV模块简介 OpenCV(Open Source Computer Vision Library)是一个基于BSD许可(开源)发行的跨平台计算机视觉库,主…...

动态规划-丑数

** 描述 把只包含质因子2、3和5的数称作丑数&#xff08;Ugly Number&#xff09;。例如6、8都是丑数&#xff0c;但14不是&#xff0c;因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第 n个丑数。 数据范围&#xff1a; 0≤n≤2000 要求&#x…...