文章目录

  • 前言
  • 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. JAVA零基础安装教程+环境变量配置

    JAVA零基础安装教程+环境变量配置 JAVA官网 JAVA的下载选择 JAVA的正式安装 JAVA环境变量的配置 JAVA 8的安装包下载 注:嫌麻烦的直接点击 5. JAVA 8的安装包下载,即可 ...

  2. 三、Python零基础安装教程,用Eclipse编写Python程序

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...

  3. html怎么在线安装,web前端零基础学习教程,如何安装HTML编辑器!

    原标题:web前端零基础学习教程,如何安装HTML编辑器! HTML 编辑器推荐: 可以使用专业的 HTML 编辑器来编辑 HTML,菜鸟教程为大家推荐几款常用的编辑器: Notepad++:http ...

  4. ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course

    ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course! 教程大小解压后:4.96G 语言:英语+中英文字幕(机译)时长 ...

  5. Wireshark零基础使用教程(超详细)

    「作者主页」:士别三日wyx 「作者简介」:CSDN top100.阿里云博客专家.华为云享专家.网络安全领域优质创作者 「专栏简介」:此文章已录入专栏<网络安全快速入门> Wiresha ...

  6. 视频教程-Python零基础入门教程-Python

    Python零基础入门教程 从2012年从事互联网至今有7年软件编程经验,曾任职国内北京互联网公司,中南林业大学授课Python 现任逻辑教育Python课程负责人,精通Python语言,精通人工智能 ...

  7. SEO零基础入门教程(外链的发布和软文编写)

    seo的作用是众所周知的,对网站进行seo优化,可以给网站带来大量的搜索引擎流量.但是想要做好网站优化也有难度,尤其是对于seo新手来说,因为缺乏理论和实战,所以seo新手需要多加练习.那么具体seo ...

  8. 视频教程-ARDUINO零基础入门教程【代码编程篇】-Arduino

    ARDUINO零基础入门教程[代码编程篇] 精通各种单片机编程,有十年以上ARDUINO,51单片机/STM32/PIC/AVR编程,硬件设计,绘图,编程经验.熟悉各种常用传感器使用和物联网通讯 赵勇 ...

  9. SEO新手入门,SEO零基础入门教程,新手做SEO怎么做

    seo的作用是对网站进行seo优化,可以给网站带来大量的搜索引擎流量.但是想要做好网站优化也有难度,尤其是对于seo新手来说,因为缺乏理论和实战,所以seo新手需要多加练习.那么具体seo新手入门应该 ...

最新文章

  1. RHEL4- WEB服务(十二)用户访问apache服务器认证
  2. (转)android四种动画
  3. 从接触FPGA开始...
  4. odoo连接外部数据库
  5. 7天拿到阿里安卓岗位offer,附高频面试题合集
  6. 在线平互动台活动启动《Discover How to Make the Computer Easier to Use with Windows Vista》...
  7. python pyecharts map不显示_pyecharts 地图不显示问题
  8. java抽象工厂模式_java简单工厂模式和抽象工厂模式
  9. @DependsOn
  10. 微信群总是有人发广告?我用Python写个机器人消灭他!
  11. windows性能监视器API
  12. HTML/CSS/Javascript在线代码运行网站汇总
  13. 反病毒工具-Wireshark
  14. 别混淆你想要什么和能否实现
  15. 计算机网络之什么是 DoS、DDoS、DRDoS 攻击
  16. 转: 网页设计中的一些色彩搭配技巧
  17. js 二进制、十进制、十六进制的互相转换
  18. Image Pyramid
  19. python for ArcGIS 绘制南京市板块地图
  20. 企业在产品同质化的今天如何提高竞争力

热门文章

  1. spring boot 设置tomcat post参数大小限制修改
  2. 【JAVA】JIT和AOT
  3. USTC算法设计与分析-总结
  4. 布朗大学计算机科学博士怎样,数学差的人不配学计算机?布朗大学教授告诉你一毛钱关系都没有!...
  5. 深入理解Arduino下的ESP8266_Non-OS_SDK API④ SPI Flash接口
  6. 机器人仿真或者开发平台
  7. torchvision之Dataset用法
  8. html离线教程,HTML5离线存储整理
  9. 拉普拉斯变换和拉普拉斯分析基于matlab总结
  10. 03-数据字典模块开发