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

【ns-3】零基础安装教程

文章目录

  • 前言
  • 1. 安装虚拟机及Ubuntu
  • 2. 安装依赖库
  • 3. 下载ns-3
  • 4. 构建ns-3

前言

近期因工作需要开始接触ns-3。作者零基础,从零开始顺利完成了ns-3的安装。本篇为ns-3安装过程记录贴或针对小白的零基础教程。

本篇内容所使用到的软件版本信息如下:VMware Workstation 16 Pro、Ubuntu 22.10以及ns-3.37。所有内容亲测无误。


1. 安装虚拟机及Ubuntu

作者首先使用VMware Workstation 16 Pro安装虚拟机,然后在此基础上安装了Ubuntu 22.10系统。由于这方面教程较多,因此作者在此不再赘述,具体可参考以下几篇文章:
虚拟机VMware下载与安装教程(详细)
VMware安装Ubuntu 18.04虚拟机(镜像下载、硬盘分区、创建虚拟机、安装系统、桥接模式网络配置)

完成上面安装虚拟机及Ubuntu的准备工作之后,我们就可以在Ubuntu的终端(Terminal)中通过命令行安装ns-3了。ns-3在其官方教程的”Getting Started“章节中提供了安装说明,并在官方wiki中提供了详细的ns-3官方安装指导,只要耐心仔细、逐条对照即可顺利完成ns-3安装。以下安装教程即参照这些官方说明,作者进行了翻译以及一定程度的总结、提炼。需要说明的是,该教程主要面向ns-3.37版本以及Ubuntu 22.10版本,如需安装其他版本的Ubuntu及ns-3还请仔细阅读ns-3官方安装指导,避免踩坑。


2. 安装依赖库

ns-3主要在GNU/Linux和macOS平台上使用C++语言开发。使用ns-3进行仿真至少需要c++编译器(g++或clang++),构建系统(CMake和make或ninja等),以及Python解释器。这是使用ns-3进行仿真的最低要求。

对于ns-3.36及以后的版本,在ns-3官方安装指导中推荐通过下面的命令行安装这些必需的库:

sudo apt install g++ python3 cmake ninja-build git

有几点说明:

  • 自2022年1月(ns-3.36版本)起,g++需要8或以上版本,但旧版的Ubuntu(18.04,16.04)默认安装的是旧版的g++,因此旧版Ubuntu用户需注意g++版本问题,ns-3官方安装指导中也给出了解决方案(亲测在Ubuntu 22.10中使用上述命令行安装的是g++ 12.2.0版本)。
  • 自2019年8月(ns-3.30版本)起,ns-3默认使用Python 3,而早期版本使用的是Python 2,因此ns-3.30版本之前的ns-3用户推荐在上面的命令行中使用“python”而不是“python 3”安装Python 2解释器。而且,在最新版(ns-3.37)的ns-3官方安装指导中要求3.6或以上版本的Python 3。
  • 如果是通过下载源存档的方式安装ns-3,则不需要安装git。

除此之外,ns-3官方安装指导还推荐ns-3.37及以后的版本安装ccache,命令行如下:

sudo apt install ccache

Ccache是一种编译器缓存优化工具,其可以加快跨多个ns-3目录的构建,代价是在缓存中使用高达5 GB的额外磁盘空间。需要说明的是,对于Ubuntu 20.04及更早的版本,通过apt命令安装的ccache版本(3.7.7或更早)可能无法提供性能优势,因此ns-3官方安装指导建议这部分用户安装4或4以上版本的ccache(可以通过源安装的方式)。对于Ubuntu 22.04及更高版本,可以直接使用apt命令安装ccache。

除了上述必需的库之外,一般还需要安装以下一些可选的库,以支持ns-3的部分拓展功能和特性:

  • Python可视化器和绑定(ns-3.37及更新版本):cppyy Python模块和Pyviz依赖
python3 -m pip install --user cppyy
sudo apt install gir1.2-goocanvas-2.0 python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython3

如果上述命令行结果报如下错误:

/usr/bin/python3: No module named pip

那么可以通过以下命令行先安装pip:

sudo apt install python3-pip
  • Python(开发)的额外最低需要:对于使用ns-3-allinone仓库(从Git克隆),需要获取额外的包并成功安装pybindgen和netanim
sudo apt install python3-setuptools git
  • Netanim:Netanim需要qt5开发工具
sudo apt install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools
  • 支持基于MPI的分布式模拟:
sudo apt install openmpi-bin openmpi-common openmpi-doc libopenmpi-dev
  • 支持bake构建工具:
sudo apt install mercurial unzip
  • 调试:
sudo apt install gdb valgrind 
  • 支持utils/check-style-clang-format.py代码风格检查程序(从ns-3.37开始):
sudo apt install clang-format
  • Doxygen和相关的内联文档:
sudo apt install doxygen graphviz imagemagick
sudo apt install texlive texlive-extra-utils texlive-latex-extra texlive-font-utils dvipng latexmk
  • ns-3手册和教程是用Sphinx写的,图片一般也是以dia的格式:
sudo apt install python3-sphinx dia
  • GNU Scientific Library (GSL)(为支持更准确的802.11b WiFi错误模型):
sudo apt install gsl-bin libgsl-dev libgslcblas0
  • 读取pcap数据包trace:
sudo apt install tcpdump
  • 支持统计框架的数据库:
sudo apt install sqlite sqlite3 libsqlite3-dev
  • 基于Xml的配置存储版本(需要libxml2 >= version 2.7):
sudo apt install libxml2 libxml2-dev
  • 基于GTK的配置系统:
sudo apt install libgtk-3-dev
  • 使用虚拟机和ns-3进行实验:
sudo apt install vtun lxc uml-utilities
  • 支持openflow模块和Boost开发库:
sudo apt install libxml2 libxml2-dev libboost-all-dev

最后汇总一下上述安装命令:

sudo apt install g++ python3 cmake ninja-build git
sudo apt install ccache
sudo apt install python3-pip
python3 -m pip install --user cppyy
sudo apt install gir1.2-goocanvas-2.0 python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython3
sudo apt install python3-setuptools git
sudo apt install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools
sudo apt install openmpi-bin openmpi-common openmpi-doc libopenmpi-dev
sudo apt install mercurial unzip
sudo apt install gdb valgrind 
sudo apt install clang-format
sudo apt install doxygen graphviz imagemagick
sudo apt install texlive texlive-extra-utils texlive-latex-extra texlive-font-utils dvipng latexmk
sudo apt install python3-sphinx dia
sudo apt install gsl-bin libgsl-dev libgslcblas0
sudo apt install tcpdump
sudo apt install sqlite sqlite3 libsqlite3-dev
sudo apt install libxml2 libxml2-dev
sudo apt install libgtk-3-dev
sudo apt install vtun lxc uml-utilities
sudo apt install libxml2 libxml2-dev libboost-all-dev

以上安装命令在Ubuntu 22.10中亲测无误,其他发行版本或其他基于Debian的系统可能略有不同。需要注意的是,ns-3官方安装指导提示Ubuntu 16.04 LTS版本可能是已知的与最新ns-3版本兼容的最古老的版本。


3. 下载ns-3

ns-3是以源代码的形式发布的。ns-3官方提供了3种下载ns-3源码的方式:

  • 从ns-3网站上下载源代码存档(即tarball)
  • 从gitlab.com克隆git存储库
  • 使用ns-3自带的源代码包管理工具bake下载ns-3源码

这里推荐使用git。

首先在主目录下新建一个目录(注意目录名不要有空格,如”ns 3“),用于保存本地git仓库:

cd
mkdir repos # 新建repos目录
cd repos
git clone https://gitlab.com/nsnam/ns-3-allinone.git # 克隆git仓库到本地

在执行上述git命令时,我们会看到如下所示的内容:

在这里插入图片描述
上述git命令完成后,我们会在我们的~/repos目录下发现一个名为ns-3-allinone的目录,如下图所示:

在这里插入图片描述

点击进入ns-3-allinone目录,我们会发现其包括以下一些文件:

在这里插入图片描述
需要注意的是,目前为止我们实际上只是下载了一些Python脚本(如上图所示),还没有下载ns-3的c++源码。下一步,我们即利用这些脚本下载并构建ns-3发行版本。

注意到在上面的ns-3-allinone目录下有一个download.py脚本,我们即利用它进一步获取ns-3相关源代码(需要在ns-3-allinone目录下执行命令),命令行如下:

cd ns-3-allinone # 进入ns-3-allinone目录
python3 download.py -n ns-3.37 # 下载ns-3.37源代码(如果想下载其他版本的ns-3,只需指定版本号)

在执行上述命令时,我们会看到如下所示的内容:

在这里插入图片描述
上述命令完成后,我们会发现ns-3-allinone目录下多了几个目录,如ns-3主项目(ns-3.37)、ns-3源代码包管理工具bake(bake)、可视化模拟工具NetAnim(netanim):

在这里插入图片描述
至此,我们就完成了ns-3的下载。


注释

除了ns-3.37这种发行版本,ns-3官方还提供开发版的ns-3下载,命令行如下:

python3 download.py

开发版包含一些正在开发的功能,没有经过完整的测试。除非是准备向ns-3提交代码或必须要使用某个新特性这种特殊情况,建议读者选择更为稳定的发行版本。


4. 构建ns-3

第一次构建ns-3项目,最常用的方式是使用ns-3-allinone目录下的build.py脚本(需要在ns-3-allinone目录下执行命令):

./build.py --enable-examples --enable-tests

上述命令行中的”–enable-examples“和”–enable-tests“参数可以让build.py同时编译ns-3自带的示例脚本和测试脚本。

构建完成后会显示如下信息:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
”Summary of optional ns-3 features“部分列出了ns-3哪些特性被启用,哪些特性被禁用。”OFF (not requested)“表示该特性默认情况下不启用,或者需要底层系统正常工作。”OFF(missing dependency)“表示该特性依赖第三方库,而第三方库没有找到,因此被禁用。“Modules configured to be built”部分列出了已完成编译的模块。“Modules that cannot be built”部分是未编译的模块。这些模块一般需要第三方库的支持,可以在后续按需添加。如果编译出错,则有可能是缺失依赖包。

为了让用户能够快速验证ns-3是否已经正确构建,ns-3项目自带了test.py脚本(在ns主项目ns-3.37目录下)。通过运行ns-3中自带的测试用例,test.py可以对ns-3的各个模块进行逐一测试:

cd ns-3.37
./test.py

在执行上述命令时,我们会看到如下所示的内容:

在这里插入图片描述
上述命令完成后,如果显示如下信息(0 failed, 0 crashed, 0 valgrind errors),则代表ns-3已经正确构建!

在这里插入图片描述

相关文章:

【ns-3】零基础安装教程

文章目录前言1. 安装虚拟机及Ubuntu2. 安装依赖库3. 下载ns-34. 构建ns-3前言 近期因工作需要开始接触ns-3。作者零基础,从零开始顺利完成了ns-3的安装。本篇为ns-3安装过程记录贴或针对小白的零基础教程。 本篇内容所使用到的软件版本信息如下:VMware…...

华为OD机试 - 新学校选址(Python)| 真题+思路+考点+代码+岗位

新学校选址 题目 为了解新学期学生暴涨的问题,小乐村要建立所新学校 考虑到学生上学安全问题,需要所有学生家到学校的距离最短. 假设学校和所有学生家都走在一条直线之上,请问学校建立在什么位置, 能使得到学校到各个学生家的距离和最短 输入 第一行: 整数 n 取值范围 [1,1…...

华为OD机试 - 最长合法表达式(Python)| 真题+思路+考点+代码+岗位

最长合法表达式 题目 提取字符串中的最长合法简单数学表达式, 字符串长度最长的,并计算表达式的值。 如果没有返回0. 简单数学表达式只能包含以下内容: 0-9数字,符号+-* 说明: 所有数字,计算结果都不超过long如果有多个长度一样的,请返回第一个表达式的结果数学表达式…...

夭寿啦!我的网站被攻击了了735200次还没崩

记得有一个看到鱼皮的网站被攻击,那时候我只是一个小小号,还在调侃,没想到我居然也有那么一天! 突袭 一个风和日丽中午,我正在和同事吃饭,一个内存oom,我的小破站崩溃了。 虽然天天被攻击吧&a…...

Java 反射深入浅出

Java 反射深入浅出📈 反射的概述:📑 Java Reflection(反射) 被视为动态语言的关键,Java并不是动态语言,但因为反射Java可以被称为准动态语言 反射机制允许程序在执行期 借助于Reflection API取得任何类的内部信息&a…...

Windows系统,安装RabbitMQ

官网地址:https://rabbitmq.com 版本:RabbitMQ 3.10.7 (1)查看支持的Erlang版本:https://rabbitmq.com/which-erlang.html (2)下载支持的的erlang版本:https://github.com/erlang/…...

代码随想录第十二天(232)

文章目录232. 用栈实现队列补充知识——Deque232. 用栈实现队列 答案思路: 在push数据的时候,只要数据放进输入栈就好,但在pop的时候,操作就复杂一些,输出栈如果为空,就把进栈数据全部导入进来&#xff0…...

自动生成代码工具配置文件及技术点详解

引言 之前发过一篇文章关于自动生成代码的项目。有小伙伴私信说要讲一下具体的思路与配置信息,现在满足一下大家的好奇! 配置信息 generator.properties配置文件中的具体内容可以看下方的配置信息说明、对应关系 key值对应含义mainPath主目录package…...

【C++】类与对象(三)

前言 本章我们接替前一章继续深入理解类的默认成员函数,赋值重载,取地址重载,及const取地址操作符重载 但是在讲剩下的三个默认成员函数之前,我们要先来了解运算符重载,因为赋值重载,取地址重载&#xff0c…...

华为OD机试 - 任务混部 (Python)| 真题+思路+考点+代码+岗位

任务混部 题目 新型冠状病毒疫情的肆虐,使得家在武汉的大壮不得不思考自己家和附近定点医院的具体情况。 经过一番调查, 大壮明白了距离自己家最近的定点医院有两家。其中医院 A 距离自己的距离是 X 公里,医院 B 距离自己的距离是 Y 公里。 由于武汉封城,公交停运,私家…...

Gin 如何编写一个接收文件的 HTTP 接口

文章目录1.前言2.ChatGPT 的回答3.小结参考文献1.前言 以前遇到编程类的问题,第一时间想到的是 Google,而现在我会问 ChatGPT。 2.ChatGPT 的回答 比如 Gin 如何编写一个接收文件的 HTTP 接口,感受下 ChatGPT 工整有序的回答吧。 使用 Gin…...

连续子数组的最大和 (贪心,动态规划) AcWing(JAVA)

输入一个 非空 整型数组,数组里的数可能为正,也可能为负。 数组中一个或连续的多个整数组成一个子数组。 求所有子数组的和的最大值。 要求时间复杂度为 O(n)。 数据范围: 数组长度 [1,1000]。 数组内元素取值范围 [−200,200][−200,200]。 …...

华为OD机试 - 括号检查(Python)| 真题+思路+考点+代码+岗位

括号检查 题目 现有一字符串 仅由(,),{,},[,]六种括号组成 若字符串满足以下条件之一,则为无效字符串 任意类型的左右括号数量不相等存在未按正确顺序(先左后右)闭合的括号, 输出括号的最大嵌套深度 若字符串无效则输出0 0 <= 字符串长度 <= 100000输入 一个只包括(…...

Redis 数据类型

我们知道 Redis 是 Key-Value 类型缓存型数据库&#xff0c;Redis 为了存储不同类型的数据&#xff0c;提供了五种常用数据类型&#xff0c;如下所示&#xff1a; string&#xff08;字符串&#xff09;hash&#xff08;哈希散列&#xff09;list&#xff08;列表&#xff09;…...

【SPSS】频数分析和基本描述统计量详细操作教程(附实战案例)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

TCP/IP网络编程——多种 I/O 函数

完整版文章请参考&#xff1a; TCP/IP网络编程完整版文章 文章目录第 13 章 多种 I/O 函数13.1 send & recv 函数13.1.1 Linux 中的 send & recv13.1.2 MSG_OOB&#xff1a;发送紧急消息13.1.3 紧急模式工作原理13.1.4 检查输入缓冲13.2 readv & writev 函数13.2.1…...

静态代理和动态代理的区别以及实现过程

前言 代理模式是一种设计模式&#xff0c;能够使得在不修改源目标的前提下&#xff0c;额外扩展源目标的功能。即通过访问源目标的代理类&#xff0c;再由代理类去访问源目标。这样一来&#xff0c;要扩展功能&#xff0c;就无需修改源目标的代码了。只需要在代理类上增加就可…...

Consul SpringCloudK8S

背景说起微服务&#xff0c;就需要用到SpringCloud&#xff0c;目前市面上主流的SpringCloud产品有这些&#xff1a;SpringCloudNeflix、Spring Cloud Alibaba、Spring Cloud for AWS、Spring Cloud Azure 和 Spring Cloud Kubernetes。其中SpringCloudNeflix已经不在更新&…...

anaconda3文件夹被移动之后,如何操作可以复用原有conda环境

anaconda3文件夹被移动A-调整conda PATH地址B-更改.conda/environments.txt中的地址C-修改conda内的变量和每个环境的pip目录A-调整conda PATH地址 B-更改.conda/environments.txt中的地址 a. 优先切换到用户根目录 b. 查看隐藏conda目录 c. 编辑 vi .conda/environments.txt…...

【Java】Stack(栈) Queue(单向队列) Deque(双向队列)

Stack (栈) Stack 是一个先进后出的栈&#xff0c;可以将其理解为一个只开了一个口子的管子&#xff0c;放进去的东西只能从这一个口进出。所以先放进去的元素在取出的时候只能到最后才能取出来。 Stack具备一下几个方法&#xff1a; boolean empty&#xff08;&#xff09; …...

自定义spring拦截器

说明&#xff1a; 一些版本比较老的spring框架的&#xff0c;是通过继承HandlerInterceptorAdapter并重写preHandle()方法&#xff0c;和继承WebMvcConfigurerAdapter并重写 addInterceptors()方法来实现拦截器的&#xff0c;但是这两个类很久前就已经过时了&#xff0c;不推荐…...

今天正式上线!虹科汽车免拆诊断云展厅:感受精准修车魅力,畅享汽修领先技术

『虹科汽车免拆诊断云展厅』 2月15日正式上线&#xff01; 在这里&#xff0c;您可以参观了解&#xff1a; 虹科Pico汽车示波器产品模型 全流程专业讲解的视频资料 产品功能和应用场景 全面详细的产品手册 还有虹科首席技术工程师在线连麦答疑&#xff01;&#xff01;&#xf…...

4.数据类型-字符串【Python】

文章目录字符串索引切片转义字符格式化符号f-string字符串操作判断&检测转换剪切&填充拼接统计格式转化练习字符串 ​ 字符串是 Python 中最常用的数据类型。可以使用单引号&#xff0c;双引号&#xff0c;3对双引号创建一个字符串。Python 中没有单独的字符类型 char…...

搞量化先搞数(上):A股股票列表免费抓取实战

到了这一步,我们学习了基础的爬虫请求库urllib和requests,尤其是后者,强大且易用,极其适合新手使用。那么今天我们就找一个相对简单的案例,来看一下如何在实战中应用爬虫技能。 相信很多朋友都对股票感兴趣,甚至有些朋友想要通过量化研究来获得超额收益。然而,想要进行…...

SpringCloud-负载均衡Ribbon

一、配置使用1、添加依赖&#xff08;该依赖包含在eureka-client依赖中&#xff09;<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency>2、在RestTemp…...

Linux入门篇(二)

Linux前言链接文件符号链接&#xff08;软链接&#xff09;硬链接shellshell 的类型shell的父子关系理解外部命令和内建命令外部命令内建命令Linux环境变量PATH环境变量前言 在这一章&#xff0c;我对Linux中有关shell较为深入的理解和环境变量方面知识的一个记录。同时&#x…...

第四部分:特殊用途的句子——第三章:虚拟

虚拟语气 1、什么是虚拟&#xff1f; 虚拟就是非真实。换句话说&#xff0c;这事不是真的&#xff0c;这事不太可能成真&#xff0c;非真实&#xff0c;就是虚拟 2、怎么表示虚拟&#xff1f; 英语是一个典型的形式来补充内容的语言&#xff0c;若要表达虚拟&#xff0c;只…...

Java中如何获取泛型类型信息

文章目录声明侧泛型使用侧泛型获取泛型类型相关方法1. Class类的泛型方法2. Field类的泛型方法3. Method类的泛型方法4. ParameterizedType类获取声明侧的泛型类型信息获取使用侧的泛型类型信息匿名内部类实现获取使用侧的泛型类型根据使用泛型位置的不同可以分为&#xff1a;声…...

【云原生】centos7搭建安装k8s集群 v1.25版本详细教程实战

文章目录前言一. 实验环境二. k8s 的介绍三 . k8s的安装3.1 搭建实验环境3.1.1 硬件层面的要求3.1.2 软件层面环境配置3.2 docker的安装3.2.1 搭建docker3.2.2 部署 cri-dockerd3.3 部署k8s3.3.1 配置添加阿里云的yum源3.3.2 安装kubeadm kubelet kubectl3.3.3 k8s-master节点初…...

c语言指针

指针 指针是存放地址的变量&#xff0c;也可以说指针地址。 对于定义p&#xff08;这里的话&#xff0c;只是定义&#xff0c;说明p是指针&#xff09;&#xff0c;p作为一个指针去指向存放数据的位置&#xff0c;而p意思是取&#xff08;p指向的内存位置的数据&#xff09;&…...

公司商城网站建设/百度指数的搜索指数

项目名&#xff1a;俄罗斯方块 组名&#xff1a;新蜂 测试者&#xff1a;韩媛媛&#xff08;nice&#xff01;团队&#xff09; 用户需求规格说明书URL&#xff1a;http://www.cnblogs.com/Boxer1994/p/6084035.html 组长博客URL&#xff1a;http://www.cnblogs.com/Boxer1994/…...

不锈钢网站建设哪家好/海外网站推广的公司

使用tomcat搭建HTTP文件下载服务器 用简单的方法实战演练搭建http服务器(Windows上) 超简单——自己搭建ftp服务器(python nodejs)...

建设美食网站的意义/友情链接站长平台

链接&#xff1a;https://www.nowcoder.com/questionTerminal/fe298c55694f4ed39e256170ff2c205f?toCommentId12726161&ran685 来源&#xff1a;牛客网 某商店规定&#xff1a;三个空汽水瓶可以换一瓶汽水&#xff0c;允许向老板借空汽水瓶&#xff08;但是必须要归还&am…...

用fw做网站页面/b2b外链代发

设备&#xff1a;iOS10.3.2的5s一&#xff1a;设备越狱1.使用g0blin 进入官网下载ipa2.然后使用Impactor 安装到手机3.打开应用进行越狱。4.越狱安装OpenSSL和Openssh发现电脑链接不上&#xff0c;网上有个大神已经提出解决方案。a->首先卸载OpenSSL和Opensshb->在手机cy…...

酒店做爰视频网站/推广软文范例100字

关于set_new_handler(转载)2010-09-05 16:59:37| 分类&#xff1a;学习心得| 标签&#xff1a;|字号大中小订阅当运算符new找不到足够大的连续内存块来为对象分配内存时将会发生什么&#xff1f;一个称为 new-handler的函数被调用。对于new-handler的缺省动作是抛出一个异常。…...

wordpress sdk/百度快照网站

下面是我最近完成的一个音乐播放器&#xff0c;是仿照网易云音乐的排版做的&#xff0c;在做这个之前&#xff0c;感觉难以下手&#xff0c;但一步一步地经过3天的奋战&#xff0c;终于实现了音乐播放器的基本功能&#xff0c;如&#xff1a;动态生成播放列表、进度条的点击与拖…...