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模块的三个组成部分:
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中。
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最终到网卡层。
( 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的三个组成部分是帧交换管理器、信道接入管理器和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的主要任务:对MAC传来的数据包采样、模拟传输过程的功耗,接下来就是PHY的三个主要组成部分:
包是否接收成功判断部分:根据信噪比、当前是否睡眠(睡眠了自然就接受失败)、调制方式来模拟信号接收结果,可能成功也可能失败。
一个接收信号强度记录模块,记录接收的信号强度,判定包正常收到或失败以后,我们还可以查看当时这个包收到的时候,干扰信号的功率强度。
根据调制方式和标准类型的错误模型,用于计算成功接收数据包的概率。
Phy有两种yans和Spectrum,yans是基本的物理层功能,仿真的对象就是包的错误率,Spectrum还会模拟信号的频率分解和同时在一个信道上不仅仿真wifi还可以加个蓝牙 zigbee等同频协议。