精华内容
下载资源
问答
  • NS-3教程(2):NS-3简单介绍
    千次阅读
    2016-11-04 19:42:59

    本文主要介绍一些NS-3入门性质的知识。

    简介


    什么是NS-3?

    ns-3是一个离散事件驱动网络模拟器,主要作为研究和教学使用。ns-3是基于GNU GPLv2下的免费的开源软件。ns-3意图最终能够完全取代ns-2。

    NS-3虽然冠以一个“3”,但事实上跟它广泛流行的前任NS-2并非一脉相承,或者从使用角度上说,仅仅继承了一个名称而已。NS-3基本上是一个新的 模拟器,不支持NS-2的API。NS-3是完全用C++编写的(也有可选的Python接口),而NS-2一部分模块使用C++而另一部分使用 OTcl。因而NS-3最大的特点就是脚本可以C++或Python语言,而在NS-2中,我们使用的是OTcl。
    NS-3的功能仍旧在开发中,因此它远没有NS-2完善(当然NS-2的维护也在进行中)。NS-3并不包含目前所有NS-2的功能,但它具有某些新的特性:正确的多网卡处理、IP寻址策略的使用、更详细的802.11模块等等。

    NS-3的一些名词解释

    POSIX: Portable Operating System Interface

    一组操作系统API的协议/标准族,最开始为了Unix系统上的可移植性而开发的,也适用于其他操作系统。

    Doxygen: Documentation Generator

    支持C++、C、Java、Objective-C、Python、IDL、Fortran、VHDL、PHP、C#等各种语言的文档生成器,用于从源代 码中生成说明文档。(类似于我之前使用过的Sandcastle,貌似更加强大些,有必要得学习一下。)

    nam: Network Animator

    基于Tcl/TK的网络动画演示工具,能提供拓扑和包级别的动画以及数据流观察。(参考http://www.isi.edu/nsnam/nam/

    Mercurial:

    NS-3代码维护使用的源码版本控制管理系统

    Waf:

    NS-3项目使用的新一代的基于Python的构建系统(Build System)

    WireShark:

    一种GUI包嗅探器。由于NS-3能生成.pcap文件,因此可以使用类似于WireShark的软件对数据进行分析

    tcpdump:

    另一种包嗅探器。在Linux下使用CLI进行数据分析

    资源


    编译系统Waf

    读者下载NS-3的源码到本地系统之后,需要对源码进行编译来生成可执行程序。正如源码管理方式多种多样,编译源码也有多种工具。最常用的工具是make. Make最出名的一点:它可能是编译大型和高可配置型系统最难的一种方法。因此,有很多替代工具被开发出来。最近,大型高可配置系统的编译工具大多选择用Python语言来开发。
    NS-3的编译系统采用了Waf。它是用Python开发的新一代编译管理系统。读者不必掌握python,即可编译现有的NS-3项目。如果读者想要扩展现有的NS-3系统,大多数情况只需了解Python知识的很少且非常直观的一个子集。
    对于想了解Waf细节的读者,可以访问http://code.google.com/p/waf/ .

    开发环境

    通常,NS-3使用者的工作环境为Linux或者类Linux系统,NS-3的脚本由C++或者Python编写。从NS-3.2开始,NS3的API提供了python语言接口,但是所有的模块都是由C++编写的。

    套接字编程

    我们假定读者对本教程所举例子中的Berkeley套接字API基本熟悉。如果您不了解套接字,我们建议您学习一下这些API和一些常见的使用例程。

    概念概述


    节点 (Node)

    在因特网术语中,任何一台连接到网络的计算设备被称为主机,亦称为终端。 ns -3是一个网络模拟器,而非一个专门的因特网模拟器,为此我们避开术语“主机”,因为这个词太容易让人联想到因特网和及其相关协议。因此,我们选用了一个来源于图论,在其他网络模拟器中亦广泛使用的术语:节点。
    ns-3中基本计算设备被抽象为节点。节点由C++中的Node类来描述。Node类提供了用于管理仿真器中网络组件表示的各种方法。
    你应该将节点设想为一台可以添加各种功能的计算机。为了使一台计算机有效地工作,我们可以给它添加应用程序,协议栈,外设卡及驱动程序等。NS3采用了与此相同的模型。

    应用程序 (Application)

    计算机软件通常可分为两大类: 系统软件和应用软件。系统软件根据计算模型配置和管理计算机中的各种资源,例如内存,处理器周期,硬盘,网络等。系统软件通常并不直接使用这些资源来完成用户任务。用户往往需要运行应用程序来完成一些特定的任务,而应用程序需要使用由系统软件控制的资源。
    通常,系统软件和应用软件的界线表现为特权级的变化,而这种变化是通过操作系统的自陷功能(operating system traps)来实现的。在ns-3中并没有真正的操作系统的概念,更没有特权级别或者系统调用的概念。然而,我们有应用程序的概念。正如“现实世界”中在计算机上运行应用程序以执行各种任务一样,ns-3仿真环境中的应用程序在节点上运行来驱动模拟过程。
    在ns-3中,需要被仿真的用户程序被抽象为应用。应用在C++中用Application类来描述。这个类提供了管理仿真时用户层应用的各种方法。开发者应当用面向对象的方法自定义和创建新的应用。在第一个示例脚本,我们会使用Application类的实例:UdpEchoClientApplication 和UdpEchoServerApplication。也许你已经猜到了,这些应用程序包含了一个client/server应用来发送和回应仿真网络中的数据包。

    信道

    在现实世界中,人们可以把计算机连接到网络上。通常我们把网络中数据流流过的媒介称为信道。当你把以太网线插入到墙壁上的插孔时,你正通过信道将计算机与以太网连接。在ns-3的模拟环境中,你可以把节点连接到代表数据交换信道的对象上。在这里,基本的通信子网这一抽象概念被称为信道,在C++中用Channel类来描述。
    Channel类提供了管理通信子网对象和把节点连接至它们的各种方法。信道类同样可以由开发者以面向对象的方法自定义。一个信道实例可以模拟一条简单的线缆(wire),也可以模拟一个复杂的巨型以太网交换机,甚至无线网络中充满障碍物的三维空间。
    我们在本教程中将使用几个信道模型的实例,包括:CsmaChannel, PointToPointChannel和WifiChannel。举例来说,CsmaChannel信道模拟了用于一个可以实现载波侦听多路访问通信子网中的媒介。这个信道具有和以太网相似的功能。

    网络设备

    以前,如果想把一台计算机连接到网络上,你就必须买一根特定的网络线缆,并在你的计算机上安装称为外设卡的硬件设备。能够实现网络功能的外接卡被称为网络接口卡(网卡)。现在大多数计算机出厂时已经配置了网卡,所以用户看不到这些的模块。
    一张网卡如果缺少控制硬件的软件驱动是不能工作的。在Unix(或者Linux)系统中,外围硬件被划为 “设备”。设备通过驱动程序来控制,而网卡通过网卡驱动程序来控制。在Unix和Linux系统中,网卡被称为像eth0这样的名字。
    在ns-3中,网络设备这一抽象概念相当于硬件设备和软件驱动的总和。NS3仿真环境中,网络设备相当于安装在节点上,使得节点通过信道和其他节点通信。像真实的计算机一样,一个节点可以通过多个网络设备同时连接到多条信道上。
    网络设备由C++中的NetDevice类来描述。NetDevice类提供了管理连接其他节点和信道对象的各种方法,并且允许开发者以面向对象的方法来自定义。我们在本教程中将使用几个特定的网络设备的实例,它们分别是CsmaNetDevice, PointToPointNetDevice, 和 WifiNetDevice。正如以太网卡被设计成在以太网中工作一样,CsmaNetDevice被设计成在csma信道中工作,而PointToPointNetDevice 在PointToPoint信道中工作,WifiNetNevice在wifi信道中工作。

    拓扑生成器

    在现实的网络中,你会发现主机已装有(或者内置)的网卡。在ns-3中你会发现节点附加了网络设备。在大型仿真网络中,你需要在节点、网络设备和信道之间部署许多连接。
    既然把网络设备连接到节点、信道,配置IP地址等等事情在ns-3是很普遍是任务,那么我们干脆提供了“拓扑生成器”来使这个工作变得尽可能的容易。举例来说:创建一个网络设备,配置一个MAC地址,把此网络设备装载到节点上,设置节点的协议栈,以及连接网络设备到一个信道,这些事情都需要许多分立的ns-3核心操作。而当需要把许多设备连接到多点信道,在网际间将单个网络进行连接,则需要对ns-3核心进行更多更多的分立操作。我们提供了拓扑生成器来整合这些大量分立的步骤,使其成为一个简单易用的操作。很明显,这样做可以极大地方便用户。

    参考文章

    http://www.cnblogs.com/lovemo1314/category/282691.html

    官方文档 https://www.nsnam.org/documentation/

    个人主页: www.nicetony.space

    更多相关内容
  • ns-3 仿真输出时延;吞吐量;抖动率等参数,内有具体的方法和相应的代码,希望能帮到大家.
  • 之前做实验的一些代码 主要关注SDN-handover目录、scratch目录,以及生成的一些dat文件即可,其他的文件是ns-3自带的。
  • NS-3网络仿真软件

    2017-09-25 18:54:39
    NS3是一个离散事件模拟器,旨在满足学术研究和教学的需求。NS3项目是一个始于2006年的开源项目,负责开发ns3软件。 NS-3并不是NS-2的扩展,而是一个全新的模拟器
  • 关于网络仿真平台NS3的开发与使用讲解
  • ns-3实例代码注释大全

    2018-03-18 21:05:44
    该文档,为ns-3.2.6中的默认文档/examples/tutorial/目录下的五篇文档注释,非常详细!基本都达到来逐字逐句的注释,很适合初学者学习使用!
  • ns-3的QUIC实现 QUIC代码库 该存储库包含在ns-3中本机IETF QUIC实现的代码中。 描述了该实现。 请使用此查找错误/问题。 安装 先决条件 要使用此模块运行仿真,您将需要安装ns-3,在src目录中克隆此存储库,从quic...
  • NS-3网络模拟器基础与应用,对学习NS3软件以及相关使用十分有帮助
  • ​ns(来源于“network simulator”)是一系列离散事件网络模拟器,包括ns-1、ns-2和ns-3。他们主要应用于研究和教学。ns-3是自由软件,以GNU GPLv2协议分发。​——百度百科 wifi是日常生活中不可或缺的一部分,在...

    ​ns(来源于“network simulator”)是一系列离散事件网络模拟器,包括ns-1、ns-2和ns-3。他们主要应用于研究和教学。ns-3是自由软件,以GNU GPLv2协议分发。​——百度百科

    wifi是日常生活中不可或缺的一部分,在工业和物联网场景也得到了越来越多的应用,在ns-3网络模拟器的说明文档里面占有46页的比重(说明文档总共605页,四十多章),可见wifi模块在ns-3体系中占有很重要的地位。

    ns-3体系中有一种对象称为 节点 node,每一个node相当于一台电脑,一个Linux主机平台,每个node上面可以安装一个或几个网卡,网卡称为net device,net device可以是以太网有线网卡,也可以是蓝牙 wifi 无线网卡(蓝牙也是传输数据,也可以组网,所以也算是net device)。

    目录

    WIFI模块的功能介绍

    ns-3中创建的wifi net device支持802.11的如下特性

    以上的都是对网卡的模拟,以下是信道、运动之类的模拟

    WIFI模块的简单组成与收发模型

    wifi模块包含以下几个重要的部分:

    一个标准的发送流程可以总结如下:

    一个标准的从信道收信号的过程如下:

    WIFI Mac&Phy的更加精确的描述

    High Mac在调用的时候涉及以下3个模块:

    Low Mac有以下三个模块组成:

    Phy模块的三个组成部分:


    WIFI模块的功能介绍

    ns-3中创建的wifi net device支持802.11的如下特性

    DCF、中心化的infrastructure 和 去中心化的点对点ad hoc

    网卡可设置为802.11 a/b/g/n/ac/ax,其中n支持全部的2.4G/5G,ax支持全部的2.4G/5G/6G

    支持11n中的msdu聚合和mpdu聚合,支持msdu聚合之后mpdu接着聚合的双层聚合

    支持11ax 的上下行OFDMA和多用户EDCA——还能配置多用户EDCA的参数

    基于Qos的EDCA机制(来自11e)

    来自802.11s的蜂窝自组网

    支持802.11p也叫做WAVE的这种为汽车这类高速运动设备准备的协议

    以上的都是对网卡的模拟,以下是信道、运动之类的模拟

    不同的传播损耗模型和传播延迟模型

    (根据链路仿真和参考文献确认过的)真实的误包模型和帧检测模型

    不同的速率控制算法:Aarf, Arf, Cara, Onoe, Rraa, ConstantRate, Minstrel and Minstrel-HT
    总的来说,ns-3的WiFi模块,精确实现了80211mac并包级模仿了80211的phy。

    由于多网卡可以并存,ns-3可以用来仿真多网卡不同信道的干扰。

    所有wifi module的源码都在src/wifi中。

    WIFI模块的简单组成与收发模型

    wifi模块包含以下几个重要的部分:

    Phy层模型:标准协议对应phy以及修正案对应phy都有。负责收发在物理信道上面的帧,查询interference helper和错误率模型,用SINR(姑且理解成SNR信噪比把,区别不是很大)算出来帧接收成功的概率

    Low Mac:包括DCF和EDCA这两个媒体接入协议,RTS CTS这两个帧保护协议,ACK和BlockACK。这些协议被 帧交换管理器(Frame ExchangeManager,管理某一版修正案对应的帧交换序列)信道接入管理器(ChannelAccessManager产生接入信道的命令)和Mac中间实体(MACMiddleEntity 管理包队列,解包,包重传——会通过检查wifi remote station manager来确认是否需要重传)

    High Mac:实现非严格实时进程,比beacon帧组装,probe过程,连接状态状态机,速率控制算法。学术上,High mac也叫upper mac,比模拟款多出一些软件实现vs严格实时性的硬件实现.高层mac包括adhoc的/AP的/STA的 MAC模型,实现了关联、发beacon之类的功能。

    接下来贴一张ns-3 wifi模块的结构图:

    下行链路最顶层的就是 网卡层 网络设备,下一层就是高层MAC,再下一层就是Low Mac(三部分,MAC 中层  帧交换管理器  信道接入管理器),再下一层就是WIFI的phy层,然后就接入信道了(WIFI信道也是ns-3模拟出来的——当然)

    信道负责jie'h搜所有连接的物理层的发出来的信号,根据传播损失模型和传播延迟模型确定啥时候把多强的信号广播给各个连在自己身上的PHY。

    一个标准的发送流程可以总结如下:

    发给网卡一个数据包,指出接收方地址和使用的协议版本,网卡给把包放到队列传给high mac,high mac把包放到队列里给TxOp,在信道接入管理器确定信道可以接入的时候,TxOp开始传输,包被传到帧交换管理器,帧交换管理器侦听信道接入管理器的状态,确认信道可以接入就发包到phy,phy页侦听信道接入管理器,信道能发就发信号波形到信道。

    一个标准的从信道收信号的过程如下:

    phy检测到信道里面的前导码,报告帧交换管理器信号接收正确还是错误并传上去正确的数据,再传到Mac中间层再传到High MAC最终到网卡层。

    WIFI Mac&Phy的更加精确的描述

    High Mac在调用的时候涉及以下3个模块:

    ( ns3::ApWifiMac ),建立AP型的high mac,有Beacon,接受association request并回response

    ( ns3::StaWifiMac ),建立STA型的high mac,有prob和association,beacon miss太多会自动reassociation

    ( ns3::AdhocWifiMac )ad hoc就是几个STA自己组网,不要AP,构成BSS的模式,没有Beacon,没有prob,也没有association。

    这三个模块都隶属于一个大类ns3::RegularWifiMac,这个大类有上述三个模块里面的基本功能,也有一些11e的WMM的Qos功能。

    Low Mac有以下三个模块组成:

    上面提到过两次,Low Mac的三个组成部分是帧交换管理器、信道接入管理器和Mac中间实体

    帧交换管理器:Frame ExchangeManager,管理某一版修正案对应的帧交换序列,也负责帧的聚合、重传、RTS/CTS、ACK/Block ACK

    信道接入管理器:ChannelAccessManager,产生接入信道的命令,也就是DCF和EDCAF(此处EDCAF与EDCA应该是同意的)功能

    Mac中间实体:MACMiddleEntity 管理包队列,这部分在TX和RX的时候功能不同,又被分为了两部分:一个有名字的ns3::Txop和一个没有正式命名的MACRXMiddle,TxOp这里是用来管理包队列的,用来来传输介入信道服从DCF的帧。除了普通的Txop之外,还有QosTxOp,也就是符合Qos的发送队列,介入信道需要EDCA的。

    Phy模块的三个组成部分:

    首先先说Phy的主要任务:对MAC传来的数据包采样、模拟传输过程的功耗,接下来就是PHY的三个主要组成部分:

    包是否接收成功判断部分:根据信噪比、当前是否睡眠(睡眠了自然就接受失败)、调制方式来模拟信号接收结果,可能成功也可能失败。

    一个接收信号强度记录模块,记录接收的信号强度,判定包正常收到或失败以后,我们还可以查看当时这个包收到的时候,干扰信号的功率强度。

    根据调制方式和标准类型的错误模型,用于计算成功接收数据包的概率。

    Phy有两种yans和Spectrum,yans是基本的物理层功能,仿真的对象就是包的错误率,Spectrum还会模拟信号的频率分解和同时在一个信道上不仅仿真wifi还可以加个蓝牙 zigbee等同频协议。

    展开全文
  • 直接代码执行(DCE)是ns-3的框架,它提供了在ns-3内执行用户空间和内核空间网络协议或应用程序的现有实现的工具,而无需更改源代码。 例如,可以使用真实的ping应用程序来代替使用ns-3的ping类应用程序的实现。 您...
  • Ns-3-Adding-text-in-packets 将真实文本数据添加到 ns-3 数据包中。 座右铭是成功地将真实数据从一个节点发送到另一个节点。这已在 ns-3 中的三个示例中实现。 代码执行的先决条件: 将安装 ns-3。 安装后,...
  • NS-3库,用于使用MQ Telemetry Transport(MQTT)协议模拟环境。 有关更多信息,请访问Wiki。 您可以在此处查看有关如何将此库集成到NS-3中的指南:http://www.eg.bucknell.edu/~perrone/2010/08/27/creating-a-new-...
  • ns-3 Turorial

    2019-03-25 09:29:59
    Ns3 projects legends work out for all types of protocols and gives major support for academic students and research scholars。---http://ns3projects.com
  • 本文介绍了ns-3模拟基本流程:1)选择或开发相应的模块 2)编写网络仿真脚本 3)仿真结果分析 4)依据仿真结果调整网络配置参数或修改源代码 此外,还介绍了ns-3中的一些概念:节点Node,应用Application,信道...

    ns-3模拟基本流程

    1)选择或开发相应的模块

    根据实际仿真对象和仿真场景选择相应的仿真模块:如是有线局域网络(CSMA)还是无线局域网络(Wi-Fi);节点是否需要移动(mobility);使用何种应用程序(application);是否需要能量(energy)管理;使用何种路由协议(internet、aodv等);是否需要动画演示等可视化界面(visualizer、netanim)等。

    2)编写网络仿真脚本

    有了相应的模块,就可以搭建网络仿真环境。ns-3仿真脚本支持在2种语言:C++和python,但是2种语言的API接口是一样的(部分API还没有提供python接口)。

    编写ns-3仿真脚本的大体过程如下:

    • 生成节点:ns-3中节点相当于一个空的计算机外壳,接下来要给这个计算机安装网络所需要的软硬件,如网卡,应用程序,协议栈等。
    • 安装网络设备:不同的网络类型有不同的网络设备,从而提供不同的信道,物理层和MAC层,如CSMA,Wi-Fi,WiMAX和point-to-point等。
    • 安装协议栈:ns-3网络中一般是TCP/IP协议栈,依据网络选择具体协议,如是UDP还是TCP,如何选择不同的路由协议(OLSR、AODV、Global等)并为其配置相应的IP地址,ns-3既支持IPv4也支持IPv6。
    • 安装应用层协议:依据选择的传输层协议选择相应的应用层协议,但有时需要自己编写应用层产生网络数据流量的代码。
    • 其他配置:如节点是否移动,是否需要能量管理。
    • 启动仿真:整个网络场景配置完毕,启动仿真。

    API(Application Programming Interface,应用程序编程接口)
    是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    ns-3仿真的基本模型如下图所示:
    ns-3基本模型
    搭建ns-3网络仿真场景和搭建实际网络类似,首先需要有网络节点,ns-3中使用节点Node的概念;节点需要有网络设备,类似于网络接口卡,ns-3中有网络设备Net Device的概念;网络设备通过传输媒体连接,ns-3中使用信道Channel的概念来代表传输媒体。其中,信道Channel和网络设备Net Device是对应的,CSMA网络设备对应CSMA的信道,Wi-Fi网络设备对应Wi-Fi的信道。

    以上概念使网络节点实现了物理连接,但要真正实现通信还需要软件的支持,也就是协议。应用层产生数据,利用类socket编程实现数据分组的向下传递,数据分组通过协议栈——TCP/IP向下传递给网络设备,该网络设备包括MAC层,物理层协议,于是数据分组就像在真实的网络中流动一样,由数据帧转换成二进制流,最终变成信号通过媒信道传输到目地节点。

    目的节点收到数据分组后从下往上逐层转交,由媒体信号转换成二进制,由二进制转换成数据帧,再由数据帧转换成IP数据分组,然后经由传输层的端口号转交给相应的进程(应用程序application)。这样就在ns-3中完成了一次和真实网络极为相近的完整数据传输过程。

    3)仿真结果分析

    仿真结果一般有两种,一种是网络场景,如节点拓扑结构,移动模型等,一般可以通过可视化界面(pyviz或NetAnim)可以直接观测到。另一种是网络数据,它除了可以在可视化界面下进行简单统计,也可以通过专门的统计框架(stats)或者通过ns-3提供的追踪(tracing)系统收集,统计和分析相应的网络数据,如数据分组的延迟、网络流量、分组丢失率等。

    4)依据仿真结果调整网络配置参数或修改源代码

    有时实际结果与预期相差较大,这时就需要分析原因(是网络参数有问题还是协议本身有问题),然后重新设计,仿真,直到达到满意的结果。

    ns-3中的一些概念概述:

    结点Node

    在因特网术语中,连接到网络的计算设备称为主机终端系统。由于ns-3是网络模拟器,而不是特定的Internet模拟器,因此我们故意不使用术语host,因为它与Internet及其协议密切相关。相反,我们使用一个更通用的术语,也可以用于源于图论的其他模拟器——节点

    在ns-3中,基本计算设备抽象称为节点。这个抽象在C ++中表示由类Node表示(在ns-3中也这样表示)。 Node类提供了用于在模拟中管理计算设备的表示方法。

    我们应该将Node视为要添加功能的计算机。添加应用程序、协议栈、外围卡及其相关驱动程序,使计算机能够做有用的工作。

    应用Application

    通常,计算机软件分为两大类:系统软件、应用程序。
    系统软件根据某种计算模型组织各种计算机资源,如内存,处理器周期,磁盘,网络等。用户通常运行应用程序获取并使用由系统软件控制的资源来实现某个目标。

    通常,系统和应用程序软件之间的分离线是在操作系统中发生的权限级别更改时进行的。在ns-3中没有真正的操作系统概念,特别是没有特权级别或系统调用的概念。但是,我们确实有应用程序的概念。正如软件应用程序在计算机上运行以在“现实世界”中执行任务一样,ns-3应用程序在ns-3节点上运行,以在模拟世界中驱动模拟。

    在ns-3中,生成一些要模拟的活动的用户程序的基本抽象是应用程序。这个抽象在C ++中由类Application表示。 Application类提供了在模拟中管理我们的用户级应用程序版本的表示的方法。期望开发人员在面向对象的编程意义上专门化Application类来创建新的应用程序。

    信道Channel

    在现实世界中,人们可以将计算机连接到网络,数据在这些网络中流动的媒体通常称为信道。将以太网电缆连接到墙上的插头时,将计算机连接到以太网信道。在ns-3的模拟世界中,将节点连接到表示通信信道的对象。这里基本的通信子网抽象称为信道,并由C ++类Channel表示。

    Channel类提供了管理通信子网对象和将节点连接到它们的方法。在面向对象编程意义上,开发人员也可以专门使用信道。Channel specialization可以模拟像电线一样简单的东西,还可以模拟像大型以太网交换机那样复杂的东西,或者在无线网络的情况下充满障碍物的三维空间。

    网络设备Net Device

    过去,如果您想将计算机连接到网络,则必须购买特定类型的网线和称为需要在计算机中安装的外围设备卡的硬件设备。如果外围设备卡实现了某些网络功能,则称为网络接口卡或网卡。今天,大多数计算机都内置了网络接口硬件,用户看不到这些构建块。

    如果没有软件驱动程序来控制硬件,NIC(network interface controller网卡)将无法运行。在Unix(或Linux)中,一块外围硬件被归类为Device。设备使用设备驱动程序进行控制,网络设备(NIC)使用网络设备驱动程序(统称为网络设备)进行控制。在Unix和Linux中,可以通过名称(例如eth0)来引用这些网络设备。

    在ns-3中,网络设备抽象涵盖软件驱动程序和模拟硬件网络设备“安装”在节点中,以使节点能够通过信道与模拟中的其他节点通信。就像在真实计算机中一样,节点可以通过多个NetDevices连接到多个通道。

    网络设备抽象在C ++中由NetDevice类表示。 NetDevice类 提供了管理 Node和Channel对象连接的方法;并且可能由面向对象编程意义上的开发人员专门化。

    拓扑助手Topology Helpers

    在实际网络中,我们将找到具有添加(或内置)NIC的主机。在ns-3中,我们会说你会发现带有NetDevices的节点。

    在大型模拟网络中,需要在Node、NetDevices 和Channels之间安排许多连接。由于将NetDevices连接到节点、将NetDevices连接到通道、分配IP地址等都是ns-3中的常见任务,因此我们提供了所谓的拓扑辅助工具,以使其尽可能简单。例如,可能需要许多不同的ns-3核心操作来创建NetDevice、添加MAC地址、在节点上安装该网络设备、配置节点的协议栈,然后将NetDevice连接到Channel,将多个设备连接到多点通道然后将各个网络连接到互联网络中将需要更多操作。ns-3提供拓扑辅助对象,将这些许多不同的操作组合成一个易于使用的模型,以方便使用。

    展开全文
  • 全书共7章,按循序渐进方式,逐渐深入的展示NS3的相关内容。 ns2与ns3有很大的不同,这是非常不错的一本ns3入门学习辅导资料。 鉴于纸质书已经绝版,特提供电子扫描档方便需要的人使用。 【人民邮电出版社】2014.1
  • ns-3-tutorial.pdf

    2018-01-23 13:50:02
    ns-3-tutorial是初学者学习ns3必须看的官方手册!包括了安装,模块介绍,示例程序等等上手的帮助介绍,不可多得的学习资料
  • ns-3-dce-fattree 备忘录。 用 quagga 克隆 net-next-sim。 要使用 dce-quagga 进行克隆,arch/sim/Makefile 的补丁位于此存储库中。 编译 net-next-sim cd ...
  • ns-3 仿真输出时延;吞吐量;抖动率等参数,内有具体的方法和相应的代码
  • 转载自 github 上的一个 ns-3 模块
  • ns-3基础学习

    2013-03-09 17:17:48
    整理了一些关于ns-3入门学习的资料,包括使用手册和几篇论文,供初学者参考。
  • NS-3安装配置

    千次阅读 2020-10-15 21:21:10
    win10系统下vmware+ubuntu安装+NS-3安装 tip:本篇是NS-3安装,vmware与ubuntu安装请看系列其他文章。 ps:以下仅记录了本人安装时遇到的各类问题。仅针对ubuntu。遇到其他问题&其他类型虚拟机请参考其他文章。...

    win10系统下vmware+ubuntu安装+NS-3安装

    tip:本篇是NS-3安装,vmware与ubuntu安装请看系列其他文章。


    ps:以下仅记录了本人安装时遇到的各类问题。仅针对ubuntu。遇到其他问题&其他类型虚拟机请参考其他文章。


    前言

    信息网络建模与仿真这门课要装……具体的我也没学QAQ……好像这是个很nice的东西^ _ ^

    操作环境:VMware Workstation 15 Pro

    虚拟机发行版:ubuntu-20.04.1-desktop-amd64(64位虚拟机)

    安装教程:参考我的同系列文章

    NS安装包:直接通过linux shell获得ns-allinone-3.32

    一、安装步骤

    1.安装ns-3依赖

    命令如下(示例):

     //缺少依赖、版本冲突什么的感觉安装不起来就用aptitude指令试一试:sudo aptitude install 加上软件包
    //如果没有安装aptitude就sudo apt-get install aptitude
    sudo apt-get install gcc g++ python python-dev  //这句会说需要选中python2 而非python之类的话,那么就再输入一个命令 sudo apt-get install python2;如此类推,后面出现类似提示也这么操作
    sudo apt-get install mercurial  
    sudo apt-get install bzr  
    sudo apt-get install gdb valgrind  
    sudo apt-get install gsl-bin libgsl0-dev libgsl0ldbl    //这句在执行时出现错误libgsl0lbdl已经废弃,可以由其他软件包libgsl2取代,那么就输入sudo apt-get install libgsl2;诸如此类,后面出现类似提示也这么操作
    sudo apt-get install flex bison libfl-dev 
    sudo apt-get install tcpdump  
    sudo apt-get install sqlite sqlite3 libsqlite3-dev  
    sudo apt-get install libxml2 libxml2-dev  
    sudo apt-get install libgtk2.0-0 libgtk2.0-dev  
    sudo apt-get install vtun lxc  
    sudo apt-get install uncrustify  
    sudo apt-get install doxygen graphviz imagemagick  
    sudo apt-get install texlive texlive-pdf texlive-latex-extra texlive-generic-extra texlive-generic-recommended     //这句在执行时出现错误E:无法定位软件包texlive-pdf 把不可以定位的软件包先删掉,重新执行这个指令,安装其余软件包。
    sudo apt-get install texinfo dia texlive texlive-pdf texlive-latex-extra texlive-extra-utils texlive-generic-recommended texi2html       
    sudo apt-get install python-sphinx dia        
    sudo apt-get install python-pygraphviz python-kiwi python-pygoocanvas libgoocanvas-dev  //这里可能也会报错无法定位软件包blablabla看下面解决办法
    sudo apt-get install qt4-qmake   //如果这一步不行 可以改成sudo apt-get install qt5-default
    sudo apt-get install qt4-dev-tools //这个是后边NetAnim仿真界面需要依赖的软件包
    sudo apt-get install libboost-signals-dev libboost-filesystem-dev
    sudo apt-get install openmpi-bin openmpi-doc libopenmpi-dev
    sudo apt-get install cmake libc6-dev libc6-dev-i386 libclang-dev llvm-dev automake
    

    总结出现问题解决方案

    • [1] 缺少依赖、版本冲突什么的安装不了

    用aptitude指令试一试:

    sudo aptitude install 加上软件包名称
    
    • [2] 没有安装aptitude
    sudo apt-get install aptitude
    
    • [3] 需要选中python2 而非python之类

    那么就再输入一个命令 sudo apt-get install python2;如此类推,后面出现类似提示也这么操作

    • [4] 执行时出现错误E:无法定位软件包texlive-pdf

    把不可以定位的软件包先删掉,重新执行原来指令-无法定位的软件包名称,安装其余软件包。

    • [5] 执行时出现错误libgsl0lbdl已经废弃,可以由其他软件包libgsl2取代

    那么就输入sudo apt-get install libgsl2;诸如此类,出现类似提示也这么操作

    • [6] E:无法定位软件包 python-pygoocanvas E: 无法定位软件包 libgoocanvas-dev

    ps:这个加了之后能解决很多无法定位软件包的问题
    step1 安装vim

    sudo apt-get install vim
    

    step2 编辑软件源文件sources.list

    sudo vim /etc/apt/sources.list
    

    step3 添加源
    在sources.list文件末尾添加

    deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse
    

    在这里插入图片描述
    step4 保存退出

    :wq
    

    step5 更新软件源

    sudo apt-get update
    

    step6 重新安装

    sudo apt-get install ……
    

    评论区有同学建议使用清华镜像源,对于没有科学上网的朋友的网速会很友好,所以给出使用清华镜像源的方式,请参考我的其他博客。

    2.下载NS-3安装包

    参考官网:

    This option is for the new user who wishes to download and experiment
    with the most recently released and packaged version of ns-3. ns-3
    publishes its releases as compressed source archives, sometimes
    referred to as a tarball. A tarball is a particular format of software
    archive where multiple files are bundled together and the archive is
    usually compressed. The process for downloading ns-3 via tarball is
    simple; you just have to pick a release, download it and uncompress
    it.

    Let’s assume that you, as a user, wish to build ns-3 in a local
    directory called workspace. If you adopt the workspace directory
    approach, you can get a copy of a release by typing the following into
    your Linux shell (substitute the appropriate version numbers, of
    course)

    $ cd
    $ mkdir workspace
    $ cd workspace
    $ wget https://www.nsnam.org/release/ns-allinone-3.32.tar.bz2
    $ tar xjf ns-allinone-3.32.tar.bz2
    

    评论区给的建议:安装在/opt/nsnam目录下面,这样方便日后删除
    如果你和我一样这个虚拟机只是单纯为了跑这一个软件交作业……那就当上面没说Orz

    Notice the use above of the wget utility, which is a command-line tool
    to fetch objects from the web; if you do not have this installed, you
    can use a browser for this step.

    Following these steps, if you change into the directory
    ns-allinone-3.32, you should see a number of files and directories

    $ cd ns-allinone-3.32
    $ ls
    bake      constants.py   ns-3.32                README
    build.py  netanim-3.108  pybindgen-0.21.0       util.py
    

    到这里ns-3发行版构建的准备工作就完成了

    3.构建ns-

    前面使用tarball下载,则进入、workspace/ns-allinone-3.32/ns-3.32这个目录下面,输入

    $ ./build.py --enable-examples --enable-tests
    

    等待一会……
    如果没有问题的话,最终应该看到以下以下信息:

    Waf: Leaving directory '/path/to/workspace/ns-allinone-3.32/ns-3.32/build'
    'build' finished successfully (6m25.032s)
    
    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
    
    Leaving directory ./ns-3.32
    

    关于未构建模块的部分

    Modules not built (see ns-3 tutorial for explanation):
    brite                     click
    

    官网解释如下:

    This just means that some ns-3 modules that have dependencies on
    outside libraries may not have been built, or that the configuration
    specifically asked not to build them. It does not mean that the
    simulator did not build successfully or that it will provide wrong
    results for the modules listed as being built.
    简单来说,就是没什么影响,并不意味着无法成功构建。

    ok,继续跟着官网走,用waf构建

    到目前为止,我们已经使用build.py脚本或
    bake工具开始构建ns-3。这些工具对于构建ns-3和支持库很有用,它们调用ns-3目录来调用Waf构建工具进行实际构建。Waf的安装与ns-3源代码捆绑在一起。大多数用户迅速过渡到直接使用Waf来配置和构建ns-3。因此,要继续,请将您的工作目录更改为最初构建的ns-3目录。

    这不是严格要求的,但是稍微绕道并了解如何对项目的配置进行更改将非常有价值。您可能要做的最有用的配置更改是构建代码的优化版本。默认情况下,您已经配置了项目以构建调试版本。让我们告诉项目进行优化的构建。为了向Waf解释它应该进行包括示例和测试的优化构建,您将需要执行以下命令:

    $ ./waf clean
    $ ./waf configure --build-profile=optimized --enable-examples --enable-tests
    

    等待一会后,能看见类似以下内容的输出:

    Setting top to                           : /home/ns3user/workspace/bake/source/ns-3-dev
    Setting out to                           : /home/ns3user/workspace/bake/source/ns-3-dev/build
    Checking for 'gcc' (C compiler)          : /usr/bin/gcc
    Checking for cc version                  : 7.3.0
    Checking for 'g++' (C++ compiler)        : /usr/bin/g++
    Checking for compilation flag -march=native support : ok
    Checking for compilation flag -Wl,--soname=foo support : ok
    Checking for compilation flag -std=c++11 support       : ok
    Checking boost includes                                : headers not found, please provide a --boost-includes argument (see help)
    Checking boost includes                                : headers not found, please provide a --boost-includes argument (see help)
    Checking for program 'python'                          : /usr/bin/python
    Checking for python version >= 2.3                     : 2.7.15
    python-config                                          : /usr/bin/python-config
    Asking python-config for pyembed '--cflags --libs --ldflags' flags : yes
    Testing pyembed configuration                                      : yes
    Asking python-config for pyext '--cflags --libs --ldflags' flags   : yes
    Testing pyext configuration                                        : yes
    Checking for compilation flag -fvisibility=hidden support          : ok
    Checking for compilation flag -Wno-array-bounds support            : ok
    Checking for pybindgen location                                    : ../pybindgen (guessed)
    Checking for python module 'pybindgen'                             : 0.21.0
    Checking for pybindgen version                                     : 0.21.0
    Checking for code snippet                                          : yes
    Checking for types uint64_t and unsigned long equivalence          : no
    Checking for code snippet                                          : no
    Checking for types uint64_t and unsigned long long equivalence     : yes
    Checking for the apidefs that can be used for Python bindings      : gcc-LP64
    Checking for internal GCC cxxabi                                   : complete
    Checking for python module 'pygccxml'                              : not found
    Checking for click location                                        : not found
    Checking for program 'pkg-config'                                  : /usr/bin/pkg-config
    Checking for 'gtk+-3.0'                                            : not found
    Checking for 'libxml-2.0'                                          : yes
    checking for uint128_t                                             : not found
    checking for __uint128_t                                           : yes
    Checking high precision implementation                             : 128-bit integer (default)
    Checking for header stdint.h                                       : yes
    Checking for header inttypes.h                                     : yes
    Checking for header sys/inttypes.h                                 : not found
    Checking for header sys/types.h                                    : yes
    Checking for header sys/stat.h                                     : yes
    Checking for header dirent.h                                       : yes
    Checking for header stdlib.h                                       : yes
    Checking for header signal.h                                       : yes
    Checking for header pthread.h                                      : yes
    Checking for header stdint.h                                       : yes
    Checking for header inttypes.h                                     : yes
    Checking for header sys/inttypes.h                                 : not found
    Checking for library rt                                            : yes
    Checking for header sys/ioctl.h                                    : yes
    Checking for header net/if.h                                       : yes
    Checking for header net/ethernet.h                                 : yes
    Checking for header linux/if_tun.h                                 : yes
    Checking for header netpacket/packet.h                             : yes
    Checking for NSC location                                          : not found
    Checking for 'sqlite3'                                             : not found
    Checking for header linux/if_tun.h                                 : yes
    Checking for python module 'gi'                                    : 3.26.1
    Checking for python module 'gi.repository.GObject'                 : ok
    Checking for python module 'cairo'                                 : ok
    Checking for python module 'pygraphviz'                            : 1.4rc1
    Checking for python module 'gi.repository.Gtk'                     : ok
    Checking for python module 'gi.repository.Gdk'                     : ok
    Checking for python module 'gi.repository.Pango'                   : ok
    Checking for python module 'gi.repository.GooCanvas'               : ok
    Checking for program 'sudo'                                        : /usr/bin/sudo
    Checking for program 'valgrind'                                    : not found
    Checking for 'gsl'                                                 : not found
    python-config                                                      : not found
    Checking for compilation flag -fstrict-aliasing support            : ok
    Checking for compilation flag -fstrict-aliasing support            : ok
    Checking for compilation flag -Wstrict-aliasing support            : ok
    Checking for compilation flag -Wstrict-aliasing support            : ok
    Checking for program 'doxygen'                                     : /usr/bin/doxygen
    ---- Summary of optional NS-3 features:
    Build profile                 : optimized
    Build directory               :
    BRITE Integration             : not enabled (BRITE not enabled (see option --with-brite))
    DES Metrics event collection  : not enabled (defaults to disabled)
    Emulation FdNetDevice         : enabled
    Examples                      : enabled
    File descriptor NetDevice     : enabled
    GNU Scientific Library (GSL)  : not enabled (GSL not found)
    Gcrypt library                : not enabled (libgcrypt not found: you can use libgcrypt-config to find its location.)
    GtkConfigStore                : not enabled (library 'gtk+-3.0 >= 3.0' not found)
    MPI Support                   : not enabled (option --enable-mpi not selected)
    NS-3 Click Integration        : not enabled (nsclick not enabled (see option --with-nsclick))
    NS-3 OpenFlow Integration     : not enabled (Required boost libraries not found)
    Network Simulation Cradle     : not enabled (NSC not found (see option --with-nsc))
    PlanetLab FdNetDevice         : not enabled (PlanetLab operating system not detected (see option --force-planetlab))
    PyViz visualizer              : enabled
    Python API Scanning Support   : not enabled (Missing 'pygccxml' Python module)
    Python Bindings               : enabled
    Real Time Simulator           : enabled
    SQlite stats data output      : not enabled (library 'sqlite3' not found)
    Tap Bridge                    : enabled
    Tap FdNetDevice               : enabled
    Tests                         : enabled
    Threading Primitives          : enabled
    Use sudo to set suid bit      : not enabled (option --enable-sudo not selected)
    XmlIo                         : enabled
    'configure' finished successfully (6.387s)
    

    4.测试ns-

    运行./test.py 来运行ns-3的测试代码,如果权限不够,就改为sudo ./test.py
    稍等片刻,应该能看到如下内容:

    Waf: Entering directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
    Waf: Leaving directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
    'build' finished successfully (1.799s)
    
    Modules built:
    aodv                      applications              bridge
    click                     config-store              core
    csma                      csma-layout               dsdv
    emu                       energy                    flow-monitor
    internet                  lte                       mesh
    mobility                  mpi                       netanim
    network                   nix-vector-routing        ns3tcp
    ns3wifi                   olsr                      openflow
    point-to-point            point-to-point-layout     propagation
    spectrum                  stats                     tap-bridge
    template                  test                      tools
    topology-read             uan                       virtual-net-device
    visualizer                wifi                      wimax
    
    PASS: TestSuite wifi-interference
    PASS: TestSuite histogram
    
    ...
    
    PASS: TestSuite object
    PASS: TestSuite random-number-generators
    92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
    

    接下来,常规操作helloworld来一下。

    $ ./waf --run hello-simulator
    

    获得结果:

    在这里插入图片描述
    完成撒花~❀❀❀

    展开全文
  • NS-3 这是一个NS-3项目,旨在模拟Adhoc路由协议。
  • 将 MATLAB 与 NS-3 网络模拟器联合仿真,结合 MATLAB 和 NS-3 的强大功能。 在 MATLAB 中描述场景,从 MATLAB 运行仿真,捕获结果并在 MATLAB 中将它们可视化。 可选择使用 MATLAB WLAN PHY 和信道模型,而不是 NS-3...
  • ns-3 lte模块详细介绍文档

    热门讨论 2012-06-08 15:23:32
    详细讲述了ns3 中lte模块的各个细节,十分有用
  • 本书以工程实践为导向,从平台选择到编译安装ns-3,从设计开发仿真脚本到收集、统计和分析仿真数据,从ns-3内核模块再到其他上层重要模块,深入浅出地介绍了ns-3的相关重要内容,并且配备大量示例,以供读者参考。...
  • ns-3 教程 —— 入门

    千次阅读 2018-03-27 10:25:33
    本节的目的是让用户在一个从未安装过 ns-3 的机器上进入工作状态。 它涵盖了支持平台、前提条件、获取 ns-3 的方法,构建 ns-3 的方法,以及验证你构建的系统和运行简单的程序。 概述 ns-3 被构建为能够协同工作...
  • ubuntu安装配置NS-3

    2022-02-22 11:05:23
    NS安装包:ns-allinone-3.27 (也可以从官网上下载https://www.nsnam.org/releases/) 1. 安装编译环境 sudo apt install build-essentail 实际上就是安装了GNU GCC编译工具套装 我在安装时,提示lock进程被占用,...
  • NS-3教程(1):NS-3开发环境搭建

    千次阅读 2016-11-02 22:25:27
    ns-3开发环境搭建教程。
  • ns-3-manual_ns3_

    2021-10-01 04:10:25
    ns3英文教程,详细的说明了ns3各个模块
  • 本文对NS-3支持的几个路由协议进行了总结,介绍了各个路由协议的使用环境及特点,总结了相关API,对NS-3仿真路由方面有很大帮助。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 468,142
精华内容 187,256
关键字:

ns-3

友情链接: chengcifenxi.rar