【网络仿真】ns-3基础(上)

   日期:2024-12-26    作者:b923083 移动:http://ljhr2012.riyuangf.com/mobile/quote/35384.html

资料

  1. ns-3官网:http://www.nsnam.org/
  2. ns-3官方开发文档:https://www.nsnam.org/releases/ns-3-34/documentation/
  3. ns-3维基百科(文档中没有的内容)、FAQ问题解答:https://www.nsnam.org/support/
  4. ns-3相关文献:https://www.nsnam.org/education/

使用waf配置编译ns-3系统

 

测试安装

 
 
 
  1. 节点
    Node类描述节点,提供添加外设卡、驱动程序、协议栈、应用程序等功能。
    NodeContainer类,拓扑生成器,用于创建、管理
    使用节点,保存一组节点指针。
 
  1. 应用
    Application类描述。
    UdpEchoServerHelper和UdpEchoClientHelper为Application类实例。(动物类->实例:熊猫类
  2. 信道
    Channel类,实例包括:CsmaChannel(模拟了载波侦听多路访问通信子网中的媒介,有以太网的功能)、PointToPointChannel(最多2个点到点连接的网络设备)、WifiChannel(无线信道
  3. 网络设备(网卡
    NetDevice类,提供连接节点和信道对象的各种方法。实例有:CsmaNetDevice、PointToPointNetDevice、Wi-FiNetDevice。
    NetDeviceContainer类存放(类似NodeContainer类)。
  4. 拓扑帮助
    Helper类,用于网络设备配置到节点、连接信道、配置IP地址等。
    例如TopologyReaderHelper类可以配置和使用TopologyReader;InternetStackHelper安装PointToPointHelper对象和网络协议栈。

3.2.1 Logging系统

将执行结果输出命令行中(类似cout、printf)。

 
 
 

添加附加前缀

 

自定义Logging代码(输出自定义信息

 

3.2.2 命令行参数

作用:不修改脚本,用命令行传递参数来修改脚本中的变量。

 
 
 

挂钩自定义变量

 
 

3.2.3 Tracing系统

  • 作用:将执行结果输出一个文件中。
  • 3个基本概念:Tracing Sources、Tracing Sink、连接的统一机制。
  • Helper类:AsciiTraceHelper生成文档
  1. ASCII Tracing:以ASCII格式的信息输出
 
 
  1. PCAP Tracing
    生成.pacp格式文件,可用于Wireshark工具打开分析。
 
 
 

4.1.1 PyViz 可视化模块

 

其他信息:http://www/nsnam.org/wiki/index.php/PyViz

4.1.2 NetAnim 动画演示工具

在脚本文件中写入代码,以生成XML记录文件。

 

运行

 

在netanim界面中点击open->first.xml->play

详细信息:http://www.nsnam.org/wiki/index.php/NetAnim

第三方网络数据分组显示和统计分析工具,读取ns-3的trace文件,并进行统计和分析。

4.2.1 TcpDump

TcpDump (dump the traffic on a network),读取pcap文件,截获分组,分析头部,输出

使用方法
在脚本first.cc中加入代码

 

在命令行中使用TcpDump

 
 

4.2.2 Wireshark

使用方法

  1. 写脚本
    例子:examples/stats/wifi-example-sim.cc
 
 

第三方作图工具,有gnuplot类,可产生gnuplot数据,最后由gnuplot读取数据生成图表,从而进行仿真数据统计分析。

 

详细信息:http://www.gnuplot.info/
ns-3提供了Gnuplot类和GnuplotDataset类
ns-3中使用方法(例子ns-3.xx/src/tools/examples/gnuplot-example.cc

 
 

方法二:每次独立重复实验时,全局种子不变,每次设置不同的标识。改变标识有几种方式
a. 调用函数RngSeedManager::SetRun(3)设置不同的运行标识。

 

b. 修改全局变量NS_GLOBAL_VALUE值来修改运行标识。

 

c(推荐. 使用命令行传递参数修改运行标识

 

d. 使用build

 

随机变量

ns-3中用来声明随机变量的类,都有一个基类RandomVariableStream。其基类有

  1. UniformRandomVariable: 最基本的类。给定一个最大值和最小值,按均匀分布方式返回一个随机数。
 
  1. ConstantRandomVariable: 返回一个固定的数,默认为0
 

在C++中还要为成员函数建立成员函数指针、区分成员函数指针和函数指针

 
  1. 什么是回调机制?what
    例如调用快排函数,函数参数中有回调函数地址,可以传递自己的比较函数。这种被调用者(快排函数)调用调用者的排序函数(cmp,称为回调。
  2. 怎么用回调机制?how
    ns-3提供了Callback类的API接口
  • 静态函数
 
  • 类成员函数回调
 
 
  1. 面向对象设计
  2. 对象基类
    ns-3提供了3个对象基类:Object、ObjectBase、SimpleRefCount。若每个类继承这种类,就可以包含ns-3提供的特有特性
基类属性Object属性系统、对象聚合系统、智能指针和引用计数系统ObjectBase属性系统、对象聚合系统SimpleRefCount智能指针和引用计数系统
  1. 内存管理与引用计数指针(Ptr类
    ns-3使用引用计数来管理内存 。
 
  1. 聚合
  • why?
    例如ns-3中,Node类在任何网络终端中都使用,但不同网络终端的构建和协议不同,为了创建满足不同网络节点需求,就要使用聚合,将不同构件聚合到节点中。
  • what?
  • how?
    例如,将IPv4协议加入节点中
 
 
  • 对象模型:设置实例化模型的参数。
  • Object类:多数ns-3类都是继承Object类。所有继承Object的类都可以包含一个叫TypeId的元数据类,用于记录类的元信息(包括唯一标识字符串、子类的基类、子类的构造函数)。
  • 例子:Node类,静态成员函数GetTypeId
 
  • 属性系统:管理和组织仿真中内部对象(方便用户访问模拟中内部变量,e.g. cwnd
  • 例如:DropTailQueue类,无符号整型成员变量m_maxPackets(用来控制队列的大小
 

在脚本中操纵属性系统中的数据(src/point-to-point/examples/main-attribute-value.cc)

 
 

写自己的网络模块

  1. 添加现有类的成员变量到元数据系统中
    例如TcpSocket类的成员变量:uint32_tm_cWnd。使用TCP模块时想用元数据获得、设置变量的值,而ns-3没有提供这个变量,用户可以在元数据系统中添加声明
 

从而可以用指向TcpSocket类的指针执行设置和获取操作。

  1. 向属性系统中添加自定义类
    例如:把自定义的类A加入到系统属性中
 
 

作用:追踪某仿真数据。
Tracing系统由三部分构成:Tracing Sources, Tracing Sinks, 连接前两者的方法。

  1. Tracing Sources提供信息(生产者)。
  2. Tracing Sinks使用信息做相关事务(消费者)。
  3. 二者关联。使用到回调。

(1)使用函数TraceConnectWithoutContext将二者关联。

例子(examples/tutorial/fourth.cc

 
 

(2)使用“配置路径”将Trace Sources和Trace Sink关联起来。
例子:third.cc改写,通过定义一个Trace Sink输出移动节点的位置变化信息。

 
 

(3)如何确定Trace Sources
ns3官网->API文档->Modules->C++Constructs Used by All Modules->The list of all trace sources->找到可以直接使用的Trace Sources。



特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号