节点
基本设备被抽象为节点,用C++的node类来描述。
NodeContainer类用于追踪一组节点指针,特别是在设备助手一次在多个节点安装设备,需要在大量的相同节点上安装设备。
// 新建两个节点对象
NodeContainer nodes;
nodes.Create (2);
应用
需要被仿真的用户程序被抽象为应用,用C++的Aapplication类来描述。
UdpEchoClientApplication:回显服务器端所回复的分组,同时记录时间
UdpEchoServerApplication:由UdpEchoServerHelper管理
信道
把节点连接到代表数据交换信道的对象上,用C++的channel类来描述。
信道模型例子:
CsmaChannel : 模拟一个可以用于实现载波监听多路访问通信子网中的媒介。
PointToPointChannel : 这个类代表简单的点对点信道,无多点通信能力,最多可以由2个点至点连接的网络设备。在通道中有两种”线“。第一个连接的设备获取0号线上的传输,第二个设备得到1号线上的传输。
WiFiChannel
网络设备
网络设备:硬件设备和软件设备的总和,用C++的NetDevice类来描述。
网络设备安装在节点上,使得节点通过信道和其他节点通信。NetDevice类提供类管理连接节点和信道对象的各种方法,并且允许开发者以面向对象的方法来定义。
CsmaNetDevice
PointToPointNetDevice
WiFiNetDevice
拓扑帮助
在节点、网络设备、信道之间部署许多连接,用Helper类。
创建一个网络设备,配置一个MAC地址,把此网络设备装载到节点上,设置节点中的协议栈以及连接网络设备到一个信道上,需要许多分立的NS3核心操作。
TopologyReaderHelper : 这个类使得更容易配置和使用通用的TopolgyReader
InternetStackHelper : 是一个安装PointToPointHelper对象和点到点网络设备的网络协议栈的拓扑生成器类,为每一个节点容器中的节点安装一个网络协议栈(如TCP、IP、UDP)
优化技术
数据跟踪与采集的方法分成两类:
Logging系统 : 直接将执行过程显示在命令行中,调试仿真脚本。
Tracing系统 : 将采集到的数据直接存放在一个文件中,以便后期的处理与分析。
Logging系统提供7个等级,由高至低:
- LOG_ERROR 记录错误信息
- LOG_WARN 记录警告信息
- LOG_DEBUG 调试信息
- LOG_INFO 程序相关信息
- LOG_FUNCTION 当有函数被调用时,该调用信息就被记录
- LOG_LOGIC 对于整体逻辑的描述
- LOG_ALL 包含上述的所有信息
例子:
LogComponentEnable("UdpEchoClientApplication",LOG_LEVEL_INFO);
LogComponentEnable("UdpEchoServerApplication",LOG_LEVEL_INFO);
Tracing系统:
包含Tracing Sources、Tracing Sink以及两者合一
Tracing系统常用的Helper类:
-
ASCII Tracing 以ASCII格式的信息输出
例子:使用EnableAsciiAll函数,通知所有helper将所有的关于point to point设备的仿真信息都打印成Ascii格式
AsciiTraceHelper ascii;
pointToPoint.EnableAsciiAll (ascii.CreateFileStream ("Asciifirst.tr"));
- PCAP Tracing 生成以pcap为后缀的格式文件,使用wireshark文件打开并分析