ns-3 官方链接:https://www.nsnam.org/wiki/Installation
切记:不要改ubuntu下的下载链接镜像sources.list,可以一步一步执行完成依赖环境的安装
备注:pip无法定位,通过sudo apt install python3-pip安装解决
学习书目参考:《开源网络模拟器ns-3 : 架构与实践》 / 周迪之编著
如有侵权,请联系删除。
1,ns-3(network simulator)是一款C++写开源项目,主要运行平台GUN/Linux,在Windows下也可使用Cygwin或VS运行,但不能使用部分功能如与物理网络交互等
2,ns-3没有图形界面,模拟网络时需要做以下步骤:
(1)下载源代码
(2)编译源代码
(3)编写模拟脚本
(4)运行模拟脚本
3,ns-3支持C++,python
4,计算机网络分为两部分:
(1)结点和连接结点的信道所组成的网络拓扑
(2)运行在结点和信道中的网络协议
5,ns-3模拟的虚拟网络中:结点和信道被抽象成C++类;结点和信道的连接被抽象成不同C++对象之间的关联。
6,在ns-3中可以模拟出:有线网络的点对点协议(PPP)和总线网络,无线网络中的无线局域网(基于802.11系列标准),长期演进技术(LTE)
7,采用了离散事件(Discrete Event)的模拟技术,可逼真的模拟物理世界中的各种协议:应用层中的各种分组产生器、传输层的TCP和UDP、网络的IPv4和IPv6协议、链路层和物理层的PPP,IEEE 802.11a/b/g/n 和LTE协议等
8,辅助功能:trace生成功能,则可利用第三方软件(wireshark、tcpdump)对ns-3产生的数据进行分析。
9,其主要用于模拟网络拓扑和运行其中的网络协议,关注的是协议行为。ns-3不考虑:结点内部的硬件延迟、CPU使用率等
10,waf命令:负责C++源代码编译和脚本运行。
11,ns-3是由不同模块(model)所组成的项目。如:LTE模块负责实现LTE网络协议栈。Internet模块负责实现TCP/IP协议栈;Wi-Fi模块负责实现IEEE802.11系列协议。
12,文档系统
文档类型 | 具体内容 | 阅读方式 |
---|---|---|
ns-3 tutorial | 基本概念和使用方法 | 详细阅读 |
ns-3 manual | 深入讲解ns-3的架构、设计原理和ns-3核心模块中的主要技术细节 | 了解ns-3原理 |
Model library | 分别讲解每个模块的背景知识、设计架构以及使用方法 | 编写某一模块的脚本或二次开发 |
Doxygen | 一个工具网站:浏览源代码,查询ns-3中的C++类、函数和变量的定义 | 编写模拟脚本和进行扩展开发时使用 |
ns-3 wiki | 安装指南、代码提交流程、版本发布等辅助信息,其中还包含一些没有整合入主程序的模块和补丁 | 可查找所需代码避免重复工作 |
13,
1,在ns-3.28的其他目录中运行waf,备注:waf存在缺陷,只能在ns-3.28目录下执行。
当前用户在“ns-3.28/src/internet/model”目录下查看TCP源代码,想运行“ns-3.28/examples/tcp/tcp-bulk-send.cc”脚本,则需要执行以下代码:
../../.././waf --run tcp-bulk-send
ns-3tutorial使用shell函数来简化这个过程,其中“hg root”表示ns-3.28的绝对路径,可将其添加到linux的“.bashrc”中保存。
$function waff{cd $(hg root)&&./waf$*;}
$waff --run tcp-bulk-send
2,保存waf输出结果
保存信息到指定的文件夹,可以使用如下命令,
//保存std::cout输出至output文件
./waf --run script_name 1> output
//保存NS_LOG输出(即std::clog)至output文件
./waf --run script_name 2> output
1,头文件
(1)Core模块和network模块头文件是所有脚本必须包括的。其分别定义了ns-3的核心功能(如模拟事件,事件调度等)和基本网络组件(如网络节点、分组和地址等)。
(2)Internet和application模块尽管不是必需的,但会经常用到,其中Internet模块定义了TCP/IP协议栈。Application模块定义了应用层的分组转发模型(如贪婪模型,ON/OFF模型等)
2,名字空间
整个ns-3源代码受“ns3”名字空间保护,必须申明:
using namespace ns3;
3,NS_LOG_COMPONET_DEFINE
使用log系统中的宏定义打印辅助信息,
4,main()函数中的准备工作
设置最小模拟时间单元,开启Log组件
5,创建网络拓扑
(1)在物理网络中,一个网络拓扑由若干结点和连接这些结点的信道组成。——>Node,Channel以及结点连接信道的网络设备NetDevice类,3个C++类。不同类型的信道对应不同的NetDevice和Channel子类,其中,NetDevice主要负责实现链路层协议,Channel主要负责物理层协议。如下图关系:
1,sphinx安装问题,请移步官方文档,即可快速解决
http://sphinxsearch.com/docs/current.html#installing-debian
2,GSL的安装过程,出现问题,请按照下面的说明进行,直接安装gsl-1.7不会出问题,(本机系统ubuntu16.04)
参考链接:https://coral.ise.lehigh.edu/jild13/2016/07/11/hello/
其中,运行出错,找不到链接库:
./a.out: error while loading shared libraries: libgsl.so.0: cannot open shared object file: No such file or directory
解决方法:
参考:https://blog.csdn.net/deeplan_1994/article/details/83927832
3,安装pip的过程中遇到的问题;
问题结果:
sudo apt-get install cmake libc6-dev libc6-dev-i386 libclang-6.0-dev llvm-6.0-dev automake pip
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package pip
解决办法:
参考链接:https://askubuntu.com/questions/672808/sudo-apt-get-install-python-pip-is-failing?newreg=e1eb9d0ee2504a6490ab81a40676498f
具体代码:
$ sudo apt-get update && sudo apt-get install python3-pip
$ sudo apt-get update && sudo apt-get install python-pip
备注:其他换源在我的几次尝试中是没有解决问题的。
4, netanim后又多了一个(nopython)
解决问题的参考链接:https://blog.csdn.net/megaarthur/article/details/21464681
官方参考:https://www.nsnam.org/wiki/NetAnim_3.104#Debian.2FUbuntu_Linux_distribution:
环境配置参看官方文档:https://www.nsnam.org/wiki/Installation
具体命令代码如下:
//第一步:下载Python辅助脚本
larry@larry-VirtualBox:~$ hg clone http://code.nsnam.org/ns-3-allinone/
//查看其目录结构:
larry@larry-VirtualBox:~$ ls ns-3-allinone/
build.py constants.py dist.py download.py README util.py
//第二步:下载allinone源代码包
larry@larry-VirtualBox:~/ns-3-allinone$ python download.py -n ns-3.28
//备注,不指定版本,是下载ns-3-dev,有一些正在开发的功能
//查看包内结构;
larry@larry-VirtualBox:~/ns-3-allinone$ ls
bake constants.py dist.py netanim pybindgen util.py
build.py constants.pyc download.py ns-3.28 README util.pyc
第三步:编译
larry@larry-VirtualBox:~/ns-3-allinone$ python build.py --enable-examples
//结果显示:
Waf: Leaving directory `/home/larry/ns-3-allinone/ns-3.28/build'
Build commands will be stored in build/compile_commands.json
'build' finished successfully (18m55.485s)
Modules built:
antenna aodv applications
bridge buildings config-store
core csma csma-layout
dsdv dsr energy
fd-net-device flow-monitor internet
internet-apps lr-wpan lte
mesh mobility mpi
netanim (no Python) network nix-vector-routing
olsr point-to-point point-to-point-layout
propagation sixlowpan spectrum
stats tap-bridge test (no Python)
topology-read traffic-control uan
virtual-net-device visualizer wave
wifi wimax
Modules not built (see ns-3 tutorial for explanation):
brite click openflow
//第四步:运行
//备注:需要进入ns-3.28目录下进行
larry@larry-VirtualBox:~/ns-3-allinone/ns-3.28$ ./waf --run hello-simulator
//运行的结果:
Waf: Entering directory `/home/larry/ns-3-allinone/ns-3.28/build'
Waf: Leaving directory `/home/larry/ns-3-allinone/ns-3.28/build'
Build commands will be stored in build/compile_commands.json
'build' finished successfully (2.715s)
Hello Simulator
备注:当改动了现有脚本或者编写了一个新脚本时,则需要对ns-3项目重新编译,直接在ns-3.28目录下,运行“./waf"命令编译即可。
build.by一般只在第一次下载ns-3代码库时使用。