目录
1. NS3的安装与测试
(本人用的是 ubuntu 16.04.7,NS3 的版本是 ns-3.33,visualizer 模块问题一直无法解决。)
(可能是 ns 的版本问题,换了 ns-3.29 之后就好了。)
2. 实例学习
安装完成后:
-
进入ns-allinone-3.29目录
-
再进入ns-3.29
把 example/tutorial 里面的实例(first.cc、second.cc、third.cc 等文件)都复制到 scratch 里面方可执行
./waf --run scratch/first (后面的 .cc 不要)命令来查看运行结果(具体原因自行了解)。
2.1 生成 xml 文件(动画文件)
例:打开 first.cc,在头文件包含部分加入【#include "ns3/netanim-module.h"】
然后在最后找到有一句【 Simulator::Run();】
在其之前加入一行代码【AnimationInterface anim("first.xml");】
再运行一遍,就可以在 ns-3.33 文件夹中看到 first.xml 文件了,要在仿真界面打开它的话,需要把它放进scratch文件夹中。
2.2 图形仿真器(Netanim)的使用
-
进入 netanim-3.33 文件夹
-
执行【./NetAnim】命令进入仿真界面
-
便可点击文件夹图标,在 scratch 文件夹中选择想要运行的 xml 文件
2.3 可视化工具pyviz
执行命令【./waf --run scratch/first --vis】
网上有很多 first.cc、second.cc、third.cc 等文件的注解示例,对于初学者,首先要看懂 examples/tutorial/ 里面的几个 .cc 文件,之后再去 /src 里面找到自己喜欢的致力于学习,切不可操之过急。
3. NS3 基础架构图
4. 关键元素
4.1 Node
ns-3中基本计算设备被抽象为节点。节点由C++中的Node类来描述。Node类提供了用于管理仿真器中网络组件表示的各种方法,包括应用程序,协议栈,外设卡及驱动程序等。
4.2 Applicatioin
在ns-3中,需要被仿真的用户程序被抽象为应用。应用在C++中用Application类来描述。这个类提供了管理仿真时用户层应用的各种方法。开发者应当用面向对象的方法自定义和创建新的应用。UdpEchoClientApplication 和UdpEchoServerApplication:一个client/server应用来发送和回应仿真网络中的数据包。
4.3 Channel
通常我们把网络中数据流流过的媒介称为信道。包括:CsmaChannel, PointToPointChannel和WifiChannel。在ns-3的模拟环境中,你可以把节点连接到代表数据交换信道的对象上。在这里,基本的通信子网这一抽象概念被称为信道,在C++中用Channel类来描述。
4.4 NetDevices
NetDevices由C++中的NetDevice类来描述。NetDevice类提供了管理连接其他节点和信道对象的各种方法,并且允许开发者以面向对象的方法来自定义。例如CsmaNetDevice, PointToPointNetDevice, 和 WifiNetDevice。
4.5 TopologyHelper
在现实的网络中,你会发现主机已装有(或者内置)的网卡。在ns-3中你会发现Nodes附加了NetDevices。在大型仿真网络中,你需要在Nodes、NetDevices和Channels之间部署许多连接。
既然把NetDevices连接到Nodes、Channels,配置IP地址等等事情在ns-3是很普遍是任务,那么我们干脆提供了Topology Helpers来使这个工作变得尽可能的容易。举例来说:创建一个NetDevices,配置一个MAC地址,把此NetDevices装载到Nodes上,设置Nodes的协议栈,以及连接NetDevices到一个Channels,这些事情都需要许多分立的ns-3核心操作。而当需要把许多设备连接到多点Channels,在网际间将单个网络进行连接,则需要对ns-3核心进行更多更多的分立操作。我们提供了TopologyHelpers来整合这些大量分立的步骤,使其成为一个简单易用的操作。很明显,这样做可以极大地方便用户。
5. 通信流程(消息传递机制)
6. NS3的移动模型
ns-3 支持的移动模型类包含:
(1) 一个用于跟踪和维护 object 当前笛卡尔坐标和速度的移动模型
(2)可以用来注册移动模型的轨迹变换监听器的轨迹变换通知器的跟踪源
(3)一些用来放置节点和移动模型的 Helper 类
类名 | 模型名 |
---|---|
ConstantPosition | 定点模型 |
ConstantVelocity | 固定速度模型 |
ConstantAcceleration | 固定加速度模型 |
GaussMarkov | 随机模型 |
Hierarchical | 分层模型 |
RandomDirection2D | 二维随机方向模型 |
RandomWaypoint | 随机路径模型 |
SteadyStateRandomWaypoint | 稳态随机路径模型 |
7. 节点装载流程
-
创建节点
-
创建链路类型
-
为节点创建具有链路类型的设备
-
为节点创建协议栈
-
设置节点和网络IP
-
配置业务应用