1. ns3概述
1.1 ns3
ns-3(network simular)是一款由C++语言编写的开源项目,主要运行的平台是GUN/Linux。ns-3主要用于模拟计算机网络。它可以在一台计算机上模拟物理世界中各种类型和规模的网络结构。用户需要经过下载源代码、编译源代码、编写仿真脚本、运行模拟脚本4个基本步骤。ns-3提供各种用于网络模拟的应用程序接口,用户在模拟脚本中调用或者修改这些API构建自己的虚拟网络结构。
ns-3支持的网络协议如下:
应用层 | 分组产生器、应用层协议(ping) |
---|---|
传输层 | TCP、UDP |
网络层 | IPv4、IPv6、ICMPv6、路由协议 |
链路层及物理层 | 无线:LTE、WiFi、车载网、水下通信网 有线:点对点网络、CSMA网络 |
1.2 ns3相关学习资料
ns-3 tutorial: ns-3的基本概念和使用方法。
ns-3manual: 深入讲解ns-3的架构、设计原理、和ns-3核心模块的主要技术细节。
Module library: 由各个模块的开发者编写而成的文档,分别讲解各个模块的背景知识、设计架构以及使用方法。适合在编写某一模块的脚本或二次开发时使用。
Doxygen:从源代码中生成的在线文档。用户可以在Doxygen网页中浏览源代码、查询ns-3中的C++类、函数和变量的定义,了解类与类之间的继承关系等程序细节信息。Doxygen在编写模拟脚本和进行扩展开发的过程中非常有用。
2.ns3环境搭建
-
环境
Ubuntu16.04以上(不同的Ubuntu版本会导致g++编译器版本不同,存在细小的差异)
g++ 编译器(ubuntu16.04中g++版本为:g++ 5.4.0)
git
注:Ubuntu系统可以选择在VM虚拟机安装。g++、git是Ubuntu系统自带的无需另行安装。 -
下载
本项目选择ns-3版本为3.34。(ns-3.34于2021年7月14日发布。)
$ cd
$ mkdir workspace
$ cd workspace
$ wget https://www.nsnam.org/release/ns-allinone-3.34.tar.bz2
$ tar xjf ns-allinone-3.34.tar.bz2
- 编译
$ cd ns-allinone-3.34
$ ./build.py --enable-examples --enable-tests
**注:**ns3中build是利用waf实现的,这里是利用自带的python脚本–build.py执行waf的。如果使用ns-3进行更高级的配置和工作通常会涉及到使用本机ns-3构建系统Waf。ns-3-allinone目录下的build.py脚本一般只在首次编译ns-3源代码时使用。后续的编译和运行脚本等操作都需要在ns-3.34目录下完成.
waf 编译过程:
$./waf configure #对ns-3项目进行配置
waf配置选项:
选项名 | 含义 |
---|---|
–enable-example | 编译时包含如右目录中的示例脚本:ns-3.34/examples/,ns-3.34/src/<模块名>/test |
–enable-test | 编译时包含如右目录中的测试脚本:ns-3.34/src/<模块名>/test |
–enable-profile | 修改编译模式:debug 或者 optimized |
注:
在默认情况下,"./waf"在编译时不包括示例脚本和测试脚本,采用的编译模式是debug。
debug 和 optimized 的区别:
NS_LOG和NS_ASSERT只有在debug模式下才起作用。eg: hello-simulator.cc中的"NS_LOG_NUCODE(“Hello Simulator”);"语句只有在debug模式才会打印信息。
推荐的做法是在debug模式适用于调试脚本或开发新协议时使用。optimized模式适用于大量测试时开启,以节省开销。
- 运行
$ cd ns-3.34
$ ./waf --run scratch-simulator.cc
-
调试
代码调试工具选择vscode。
vscode 安装调试环境:
第一步:在Ubuntu安装vscode。
第二步:在scr同级目录下添加vscode调试配置文件–.vscode .vscode下载地址第三步:开始调试,这里以调试first.cc为例。