NS3基本介绍

NS3简介

NS3是一个离散事件模拟器,意在满足学术和教学要求。它是由C++编写的开源项目,主要运行平台是GUL/Linux(如Ubuntu等)。对于Windows系统,可以通过安装虚拟机来运行。
NS3主要用来模拟计算机网络,可以在一台计算机上模拟现实世界中的各种类型与规模的网络。
主要功能如下:

  • 网络模拟功能
  • 辅助功能,如trace生成功能,可以使用户通过第三方软件对NS3产生的数据进行数据分析。移动模块可以为节点自动分配起始位置和移动轨迹。能量模块可以计算无线节点的能量损耗。建筑模块,可以模拟无线网络中的建筑,用户可以根据需要进一步设置建筑的楼层、房间数目、墙壁用料等环境细节。NS3基本模型如下图:
    NS3基本介绍_第1张图片

NS3中的各个模块

重要概念

模块 用途
core ns3内核模块,实现了ns-3的基本机制,智能指针,属性,回调,随机变量,日志,追踪,事件调度等
network 网络数据分组模块,一般仿真都会使用
Internet 实现了TCP/IP相关的协议族,IP, ARP, UDP, TCP等
applications 几种常见的应用层协议
mobility 移动模型模块,为节点添加移动属性
status 统计框架模块,方便对仿真数据的收集、分析和统计
tools 统计工具,作图工具gunplot
netanim 动画演示工具
visualizer 可视化界面工具

几种典型的网络模块

在NS-3中,结点和信道被分别抽象为Node、Channel以及结点中连接信道的网络设备NetDevice类这三个C++类,不同类型的信道对应不同的NetDevice和Channel子类。我们有以下几种网络模块。

模块 用途
point-to-point 点对点网络
CSMA 实现基于IEEE802.3的以太网网络,包括MAC层,物理层和媒体信道
Wi-Fi 实现基于IEEE802.11a/b/g的无线网络,也可以是有基础设施的ad hoc网络
mesh 实现基于IEEE802.11s的无线mesh网络
wimax 实现基于IEEE802.16标准的无线城域网络

几种ad hoc网络路由协议模块 :aodv, dsdv, olsr。
这些模块当中,core,network,internet和status是ns-3的基础模块,学习和开发其它模块首先要掌握这几个基础模块。

NS3当中重要的类

  • Node类:节点,代表主机路由等。ns-3中的基本计算设备被抽象为节点。此节点是一个可以添加各种功能的计算机。当然仅仅是个计算机,要想使它工作,还需要添加网卡,协议栈,应用程序。

  • Application类:代表网络应用程序,如客户端应用程序。计算机软件中通常分为系统软件和应用软件。应用软件完成用户工作,系统软件管理计算机中的内存,CPU,硬盘,网络等各种资源。在ns-3中并没有正常的操作系统的概念,但是用应用程序的概念。在ns-3中,需要被仿真的用户程序被抽象为应用。在C++中用Application类描述。

    bulk-send-application
    on-off-application
    udp-client/server
    udp-echo-client/server

所有应用程序要分别用apps.Start(), apps.Stop()设置应用的启动停止时间,注意服务器程序要比客户端早启动

uint16_t port = 4000;
UdpServerHelper server (port);
ApplicationContainer apps = server.Install (c.Get (1));
apps.Start (Seconds (1.0));
apps.Stop (Seconds (10.0));

Udp应用,顾名思义,构建一个udp应用,客户端往服务器端发数据。可以设置数据包的大小,数量,发送间隔

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。

UdpClientHelper client (serverAddress, port);//绑定服务器地址,地址用interface.GetAddress方法获取
client.SetAttribute ("MaxPackets", UintegerValue (320));//发送多少个包
client.SetAttribute ("Interval", TimeValue (0.05));//发送间隔
client.SetAttribute ("PacketSize", UintegerValue (1024));//包大小
apps = client.Install (n.Get (0));//安装到哪个节点
apps.Start (Seconds (2.0));
apps.Stop (Seconds (10.0));

OnOffApplication:OnOff应用是个开关应用,开的时候产生流量,关的时候不产生流量。

  • Channel类:信道。通常把网络中数据流过的媒介称作为信道,在ns-3中,节点需要连接到信道上来进行数据交换,在C++中用Channel类来描述,一个信道实例可以模拟一条简单的线缆,也可以是一个复杂的巨型以太网交换机,甚至是一个无线网络中充满障碍物的三维空间。

    CsmaChannel
    PointToPointChannel
    Wi-FiChannel

  • Net Device类:把计算机连接到网络上,必须用网线连接到网卡上。现在计算机出厂的时候都已经配置了网卡,所以用户一般看不到这些模块。一张网卡只是个外围设备,设备需要驱动软件来控制,如果缺少软件驱动它还是不能工作的。在ns-3中,网络设备这一抽象概念相当硬件设备和软件驱动的总和。网络设备安装在节点上,然后节点之间通过信道和其他节点通信。这个网络和信道是相对应的,就像无线网卡不能连接网线,只能在在无线环境中使用。C++中用NetDevice类来描述网络设备。

    CsmaNetDevice
    PointToPointNetDevice
    Wi-FiNetNevice

  • Topology Helper:使用各种toptlogy helper将Net Device连接到Node和channel上,配置Netdevice和channel,分配IP地址等

NS3拓扑构造

构建拓扑一般是使用以下步骤

先构建节点,网络类型。节点使用网络连接起来生产网卡
给网卡绑定IP地址,生成网络接口(之后可以在接口上做业务)
使用拓扑帮助

Device = Helper.Install(Node);
/*  生成网卡
    Device是网卡
    Helper是网络类型,
    Node是要来连接的节点
*/

Interface = Address.Assign(Device);
/*
    绑定IP
    Interface是网络接口接口,供后续Application使用
    Address是网络地址,是一个网段
    Device是网卡
*/

Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
/*
    用拓扑帮助类构建路由
*/

NS3脚本编写过程

  1. 头文件
  2. 名字空间(using namespace ns3),将Ns3项目和非Ns3项目分开,在其使用标准库函数时需要添加std名字空间,如std::cout等
  3. NS_LOG_COMPONENT_DEFINE(“firstscriptExample”)//允许脚本使用Log系统中的宏定义打印辅助信息。
  4. Main()函数中的准备工作,如读取命令行参数,设置最小模拟时间单元,开启Log组件等。
  5. 创建网络拓扑,Node,Channel,EntDevice。创建节点,配置信道属性,创建信道并连接节点。
  6. 安装TCP/IP协议簇
  7. 安装应用程序:Application,有很多不同的分组收发定义,如BulkSendApplication使用了贪恋分组发送模型。OnOffApplication使用了ON/OFF分组发送模型。
  8. 数据生成
  9. 启动与结束。1.生成节点,如网卡,协议栈等,一个节点可以安装多个NetDevice,连接多个Channel,拥有多个IP地址。2.安装网络设备,如CSMALWIFI。3.安装协议栈,NS3一般是TCP/IP协议栈。4.安装应用层协议。5.其他配置(节点是否需要移动等)。

试着用这个过程来分析第一个first.cc的脚本编写过程。

你可能感兴趣的:(NS3,c++,网络)