前言
最近做仿真实验需要用到NS3系统,开始学习时是真的折磨人啊!!!
小编搜集各种资料并数次尝试,整理出一套最新安装流程,以供各位参考。
小编因为要仿真5G通信系统,安装的是最新版本3.40,在3.36版本以前安装过程和此教程有些出入,需要注意区分。
一、NS-3 简介
ns-3 是一组 C++ 库(通常编译为共享库),可以用 C++ 或 Python 程序来构建模拟场景并执行模拟。在核心库中我们可以调用可用代码库的子集来构建程序,也还可以编写链接其他C++共享库(或导入其他Python模块)的程序,也就是其他人贡献的非核心库代码,此外也可以自己编写成熟的代码库,并上传共享给其他人使用(这是成熟大佬们的操作)。
ns-3 使用 CMake 构建系统(在版本 3.36 之前,使用 Waf 构建系统)。它可以从命令行或通过代码编辑器程序构建。
大多数用户使用 C++ 来编写 ns-3 程序; Python 调用不太常用,但也可以用 Python 进行数据处理。从 ns-3.37 开始,ns-3 使用 cppyy 生成运行时 Python 绑定,从 ns-3.39 版本开始,ns-3 在 Pip 存储库中可用,在ns-3.39之后使用 Python 编写程序会变得简单一些。
二、准备工作
2.1 运行环境准备
ns-3 有各种可选扩展,但主要功能只需要 C++ 编译器(g++ 或 clang++)、Python(版本 3.36 或更高版本)、CMake 和构建系统(例如 make、ninja、Xcode)。详细环境准备工作可以参见文章:NS3最全配套环境设置-CSDN博客
这里我们仅关注如何在最新的 C++ 编译器和 Python 运行时支持支持的系统上启动并运行 ns-3。
1) 对于 ‘Linux’,请使用 g++ 或 clang++ 编译器。
2)对于 macOS,请使用 clang++(可在 Xcode 或 Xcode 命令行工具中使用)。
3) 对于 Windows,可以在大多数用例中使用带有 MinGW64 工具链的 Msys2 工具(自 ns-3.37 起)。
对于 ns-3.37 之前的版本,或者要使用模拟模式或 Python 绑定,我建议使用 Linux 虚拟机或适用于 Linux 的 Windows 子系统。
2.2 各类工具版本要求
如果想正常使用NS3系统仿真,要匹配合适的工具版本,当然是越新越好,高版本基本兼容低版本。以下是各个工具版本要求,供大家参考:
类型 | 工具 | 最低版本要求 |
下载工具 | git (使用Git下载需要) tar 和 bunzip2(网页下载需要) | 没有版本要求 |
编译器 | g++ clang++ (两个编译器二选一) | >= 9 >= 10 |
环境配置 | Python3 | >= 3.5 |
构建系统 | Cmake make, ninja, Xcode(任选一个) | >= 3.10 没有版本要求 |
如果不知道自己系统里是否安装了以上工具或者不清楚版本的,可以在终端命令栏中输入以下命令来查看:
工具 | 查看版本命令 |
g++ | $ g++ --version |
clang++ | $ clang++ --version |
Python3 | $ python3 -v |
Cmake | $ cmake --version |
需要下载或者更新工具版本可以通过 git 或者源存档下载(网络浏览器、wget或curl),有需要的可以参考我另一篇NS3工具准备的文章,这里不多描述了。
三、下载安装
下载安装主要有两种方式,任选一种就可以。
1. 方法一:下载tarball
从官网下载tarball压缩包,然后解压到一个目录中,可以自定义目录,例如: ns-allinone-3.40 ,解压包中包含了 ns-3 和一些其他程序,下面是使用 wget 命令行下载,也可以通过浏览器官网下载。
下载 tarball:
$ wget https://www.nsnam.org/releases/ns-allinone-3.40.tar.bz2
解压:
$ tar xfj ns-allinone-3.40.tar.bz2
进入解压后文件夹:
$ cd ns-allinone-3.40/ns-3.40
以下是文件夹显示内容:
进入ns-3.40文件后显示以下内容:
2. 方法二:从 Git 存储库克隆
从 Git 库中下载包:
$ git clone https://gitlab.com/nsnam/ns-3-dev.git
进入文件夹:
$ cd ns-3-dev
注意:
1)如果你选择方法一,解压tar包,你的目录文件名称会包含版本号,如果选择方法二,克隆ns-3,你的目录命名为ns-3-dev。
2)两种方法都可以,看个人习惯,熟练使用 git 的各位用Git库可能更顺手一些。默认情况下,Git 将迁出 ns-3 master 分支,这是一个开发分支,便于开发管理。而使用方法一下载的包,如名字所言‘all in one’,只有一个主目录。
3)使用 git 方法安装的,所有版本都在 Git 中标记,因此如果想查看过去的版本,可以进行如下操作:
$ git checkout -b ns-3.40-release ns-3.40
四、构建和测试 ns-3
通过下载版本压缩包或克隆 Git 存储库获得源代码后,下一步是使用 CMake 构建系统配置。以下命令使用 CMake 的 Python 包装器(称为 ns3),它简化了命令行语法,类似于 Waf 语法。有多个选项可以控制构建,但通常首先会为默认构建配置文件(启用断言并支持 ns-3 日志记录)启用示例程序和测试:
$ ./ns3 configure --enable-examples --enable-tests
根据 CPU 的速度,配置命令可能需要几秒钟到一分钟不等(考验电脑性能的时候到了)。
然后,使用 ns3 程序构建 ns-3 模块库和可执行文件:
$ ./ns3 build
构建时间根据 CPU 核心数量、CPU 和内存的速度以及构建模式(更快的调试模式,还是更慢的默认或优化模式)而有所不同。附加配置(本文未介绍,可参考我另一篇文章)可用于限制构建的范围,并且 ccache(如果安装)可以加快速度。一般来说,计划在更快的工作站上花费几分钟进行构建。
最开始构建模块库的时候会非常慢,它是把所有配置、库以及代码都构建一个副本,我用的虚拟器,配备了2个 CPU, 4G处理内存,新构建一次库需要40分钟左右,也和我配置工具比较完善有关。但构建一次后,尤其是安装 ccache 之后,只要不清理构建缓存,更新代码,构建新文件速度会很快,十几秒到一分钟不等。所以 ccache 一定要安装,虽然占用内存比较大。
构建完成后可以运行单元测试来检查构建:
$ ./test.py
该命令应该运行数百个单元测试。如果它们通过了,就成功完成了 ns-3 的初始构建。
初学者安装到此就结束了,如果你要是用 Python 操作 NS3, 那么可以继续看下一章节。
五、Python库: ns-3 install
大多数用户不会将 ns-3 库安装到典型的系统库目录中;相反,它们只是将库留在构建目录中,ns3 Python 程序将找到这些库。
当然,也可以执行安装步骤:
$ ns3 install
需要注意的是,安装库的位置由在配置步骤中指定的 --prefix 选项设置。前缀默认为/usr/local。对于给定的 --prefix=$PREFIX,安装步骤会将标头安装到 $PREFIX/ include 目录,将库和 pkgconfig 文件安装到 $PREFIX/lib 目录,并将一些二进制文件安装到 $PREFIX/ libexec 目录。例如,./ns3 configure --prefix=/tmp,后跟 ./ns3 build 和 ./ns3 install,将导致文件安装在 /tmp/include、/tmp/lib 和 /tmp/libexec 中。
此外,ns3 脚本会阻止以 root(或 sudo 用户)身份运行该脚本。因此,使用默认前缀 /usr/local 时,除非用户具有该目录的写入权限,否则安装将失败。即便尝试使用 sudo ./ns3 install 强制执行此操作也会失败,因为 ns3 程序中的检查模块会阻止以 root 身份运行。此检查由 ns-3 维护者安装,以确保新手用户的安全,新手用户可能会在 root shell 中运行 ./ns3,然后在普通 shell 中运行,并对错误感到困惑,从而导致缺乏修改文件的权限。对于知道自己在做什么并且想要安装到特权目录的用户,可以注释掉 ns3 程序中的拒绝_run_as_root() 语句(第 1400 行左右),然后运行 sudo ./ns3 install。
如果还有疑问的小伙伴可以看 ns3 官网安装教程:ns-3.40 | ns-3