NS3 WiFi模型内容翻译

ns3-model-library.pdf wifi-model 翻译

wifi-model

33.1 Design Documentation

ns3 节点(nodes)能够包含一系列网络设备(NetDevice)对象,就像实际的计算机包含单独的接口卡一样,例如,以太网卡,WiFi,蓝牙等。这一章描述ns3的WifiNetDevice和相关的模型。通过添加WifiNetDevice对象到ns3的节点(nodes)中,它就可以创建基于802.11的基础设施和adhoc网络模型。

33.1.1 Overview of the model

WifiNetDevice模型是一个基于IEEE802.11标准的无线网络接口控制器。我们将会更加详细的看到它的细节,但只是简略的细节,ns3提供了802.11模型的这些方面:

基本的802.11 DCF(Distributed coordination function)基础设施和adhoc模式
802.11a 802.11b 802.11g 802.11n(包括2.4和5GHz带宽) 和802.11ac物理层
延伸与802.11n的MSDU aggregation and MPDU aggregation ,同时支持两种聚合的结合
延伸于802.11e的QoS-based EDCA and queueing
使用不同的传播损耗模型和传播延迟模型的能力,请参见章(Propagation)传播获取更多细节
不同的速率控制算法,包括Aarf,Arf,Cara,Onoe,Rraa,ConstantRate,Minstrel
802.11s(mesh),该协议在其他章节有描述

在ns3中提供的一系列802.11模型提供了一个精确的802.11规范的MAC层,并提供了802.11a/b/g/n/ac规范的不那么慢的PHY层模型。

在ns3,节点可以在不同的信道上有不同的WifiNetDevices,同时WifiNetDevices可以与其他的设备类型共存;这消除了在ns2中结构的限制。然而,现在,还不存在交叉信道干扰或耦合的模型。

WifiNetDevices的源码在目录src/wifi下。

代码的实现是模块化的,大约提供了四个级别的模型:

    1.PHY layer models
    2.MAC low models: they implement DCF and EDCAF
    3.MAC high models:they implement the MAC-level beacon generation, probing, and association state machines
    4.可以被MAC low models使用的Rate control algorithms

下面,我们介绍每一层的概述。关于更多的细节稍候会讨论。

MAC high models

现在已有三个MAC high models,该模型提供了三个无线拓扑元素(non-mesh,mesh equivalent,都是ns3::RegularWifiMac的子类,不再这里讨论它):Access Point(AP)(ns3::ApWifiMac),non-AP Station(STA)(ns3::StaWifiMac),和独立于基础服务设备的STA(ns3::AdhocWifiMac).

三种模型中最简单的是ns3::AdhocWifiMac,它实现了无任何种类的信标的产生,探测和关联的WIFI MAC。

     The ns3::StaWifiMac class implements an active probing and association state machine that handles automatic re-association whenever too many beacons are missed. Finally, ns3::ApWifiMac implements an AP that generates periodic beacons, and that accepts every attempt to associate.

这三种MAC high models共享同一个父类ns3::RegularWifiMac,它暴露出MAC配置的几个属性:QosSupported属性,允许配置802.11e/WMM-STYPE QOS支持;HtSupported属性,允许配置802.11n高吞吐量形式;VhtSupported属性,允许配置802.11ac更高吞吐量样式支持。

MAC low layer

MAC low layer分为以下三个组件:

1. ns3::MacLow 该类管理 RTS/CTS/DATA/ACK交互。
2. ns3::DcfManager和ns3::DcfState,实现了DCF和EDCAF功能。
3. ns3::DcaTxop和ns3::EdcaTxopN,用于处理在需要的情况下的包队列,包分组,包重传等。The ns3::DcaTxop object is used high MACs that are not QoS-enabled,and for transmission of frames (e.g., of type Management) that the standard says should access the medium using the DCF. ns3::EdcaTxopN is is used by QoS-enabled high MACs and also performs 802.11n-style MSDU aggregation.

Rate control algorithms

有几种MAC low layer使用的rate control algorithms.完整的可以使用的速率控制算法将会在一个单独的一节中提供。

PHY layer models

PHY层是在ns3::WifiPhy类中单独实现的。物理层模型的实现的完整的描述是在论文:Yet Another Network Simulator中,基于802.11b的可用的结果的验证报告在techinical report中。

33.1.2 The WifiChannel and WifiPhy models

无线信道wifichannel可以使用一组ns3::WifiNetDevice网络接口连接在一起。ns3::WifiPhy对象是在wifinetdevice中的,用于接收从信道接收的数据比特。对于信道的传播模型,可以使用传播模块;详见Propagation一节。
本节总结了误码率计算的描述,该误码率在论文中把在802.11a协议中的前向纠错考虑了进去,并描述了一个包是否被成功接收所实现的算法。请参阅“Yet Another Network Simulator”的更多细节。

PHY层的状态会是下面五种其中的一种:

  1. TX:the PHY is currently transmitting a signal on behalf of its associated MAC(phy层正在发送与之关联的MAC的信号)
  2. RX:the PHY is synchronized on a signal and is waiting until it has received its last bit to forward it to the MAC.(phy已经同步了信号,正在等待止到接收到最后一个比特位,然后转发到MAC层)
  3. IDLE:the PHY is not in the TX, RX, or CCA BUSY states.(PHY层空闲)
  4. CCA Busy:the PHY is not in TX or RX state but the measured energy is higher than the energy detection threshold.(PHY不在TX,RX状态,但是测得的能量高于能量探测阈值)
  5. SLEEP:the PHY is in a power save mode and cannot send nor receive frames.(PHY处于节能状态,不发送也不接收)

当PHY不是IDLE状态时(也就是说,另外的更早的包已经在接收器中同步了,或者他自己在发送数据),一个新的包的第一个比特位被接收,此时,接收的包将被丢弃。否则,如果PHY处于IDLE或者CCA Busy状态,我们计算这个新的信号的第一位比特的接收能量,并于能量探测阈值进行比较(as defined by the Clear Channel Assessment function mode 1)。如果包的能量高,PHY则转移状态到RX,并且当包的最后一个比特位被接收时发起一个事件。否则,PHY停留在IDLE或者CCA Busy状态,并丢弃这个包。

The energy of the received signal is assumed to be zero outside of the reception interval of packet k and is calculated from the transmission power with a path-loss propagation model in the reception interval. where the path loss expo-nent, n, is chosen equal to 3, the reference distance, d 0 is choosen equal to 1.0m and the reference energy is based on a Friis propagation model.
When the last bit of the packet upon which the PHY is synchronized is received, we need to calculate the probability that the packet is received with any error to decide whether or not the packet on which we were synchronized could be successfully received or not: a random number is drawn from a uniform distribution and is compared against the probability of error.
To evaluate the probability of error, we start from the piecewise linear functions shown in Figure SNIR function over time. and calculate the SNIR function.

从SNIR funtion,我们可以派生出计算用于传输的调制和解调的误码率BER和误包率PER。请参考[pei80211ofdm], [pei80211b], [lacage2006yans],[Haccoun] and [Frenger] 以了解更多的可用的BER/PER模型的细节.

WifiChannel configuration

WifiChannel的实现使用了传播损耗模型和传播延时模型,这两个模型在ns3的Propagation模块中有提供。

33.1.3 The MAC model

802.11分布式协调功能(DCF)是用来计算当授予访问传输介质的时候。如果我们使用一个经过每一个时隙的周期性的定时器,那么实现DCF将会特别的容易,我们选择使用在【ji2004sslswn】所描述的方法,回退时间无论是否需要,都是延时计算的,尽管声称这比简单的周期定时器方法具备更好地性能。

DCF程序的回退在【ieee80211】的9.2.5.2节中描述的。

  1. 无论由物理层或者虚拟CS机制所指示的发现媒质忙,回退程序应为STA调用来传送一个帧。
  2. 即使没有另外传输任务在当前队列中,A backoff procedure shall be performed immediately after the end of every transmission with the More Frag-ments bit set to 0 of an MPDU of type Data, Management, or Control with subtype PS-Poll

总之,如果队列空,一个新到的包应该在信道感知空闲DIFS后,马上被传输。如果队列不空,并且在一个成功的MPDU之后没有更多的分组,节点应该开始回退定时器。

一些用户观察到,802.11MAC与空队列的空闲信道将会马上发送达到该模型的第一帧,而无须等待DIFS或者回退,并想知道这是否合规。根据协议标准,“The backoff procedure shall be invoked for a STA to transfer a frame when finding the medium busy as indicated by either the physical or virtual CS mechanism.”因此在这种情况下,媒介并不能发现在当前忙,站点将会马上传输。

更高层的MAC功能的实现是在一系列C++类中,功能:

• packet fragmentation and defragmentation,
• use of the RTS/CTS protocol,
• rate control algorithm,
• connection and disconnection to and from an Access Point,
• the MAC transmission queue,
• beacon generation,
• MSDU aggregation,
• etc.

33.1.4 Rate control algorithms

多种速率控制算法在ns3中是可用的。一些速率控制算法是用在真实设备中的实际算法;其他一些算法是在文献中找到的。下面的速率控制算法是在MAC low layer中使用的:

真实设备中的算法有:

ArfWifiManager(WifiHelper的默认算法)【Automatic Rate Fallback(ARF) algorithm 自动速率回退算法 1997年】
OnoeWifiManager
ConstantRateWifiManager
MinstrelWifiManager
文献中的算法:
IdealWifiManager
AarfWifiManager【2004年】
AmrrWifiManager
CaraWifiManager
RraaWifiManager【2006年】
AarfcdWifiManager
ParfWifiManager
AparfWifiManager

ConstantRateWifiManager

该算法对每一个包使用相同的传输模式。用户可以设置对于所有“unicast”包的期望的“DataMode”和所有“request”控制包的“ControlMode”(例如RTS).

控制响应帧(比如CTS,ACK)的传输参数的选择规则在802.11标准中是相当清晰的。ns3遵从了这样的标准和从一系列正常速率或者强制性速率选择作为控制响应帧的速率的选择性。这就意味着,即使ConstantRateWifiManager被使用,控制响应帧也可能使用不同的速率进行发送。

ConstantRateWifiManager的ControlMode属性仅仅别用与RTS帧。CTS和ACK帧的速率是根据802.11标准进行选择的。然而,用户仍然可以手动添加WifiMode到基本的速率中,这将允许控制响应帧以其他的速率进行发送。请参考project wiki进一步了解这是如何实现的。

可用的属性有:

DataMode:(默认WifiMode::OfdmRate6Mbps)specify a mode for all non-unicast packets
ControlMode:(默认WifiMode::OfdmRate6Mbps)specify a mode for all ‘request’ control packets

IdealWifiManager

这个速率控制算法根据前一个包的发送的信噪比SNR来选择最好的模式。考虑节点A发送单播包到节点B。当B成功接收到从A发送的包时,B记录所接受的包的SNR到ns3::SnrTag,然后,添加标签到ACK并返回给A。通过这样做,A能够了解发送到B的包的信噪比SNR,并使用一种带宽之外的机制(因此算法名字就是“ideal”)。然后A使用SNR从一个一系列SNR阈值中选择一个传输模式,而这个阈值是从目标BER和特定模式的SNR/BER曲线构建的。
可以的属性有:
BerThreshold(默认10e-6):The maximum Bit Error Rate that is used to calculate the SNR threshold for each mode.最大误码率,用于计算每种模式的SNR阈值。

MinstrelWifiManager

该算法是源于madwifi 工程的速率控制算法。它是当前LInux内核默认的速率控制算法。
Minstrel跟踪每个成功发送可用速率帧的概率。然后通过乘以速率的概率计算期望的吞吐量。这种方法被选择用于确保不会选择最低速率而趋向于最高速率(尽管最低速率具有更高的概率)。
在monstrel中,大致10%的传输是在所谓的lookaround rate发送的。lookaround rate的目标就是迫使minstrel尝试使用比当前速率更高的速率。
更多关于minstrel的细节,请看【linuxminstrel】。


IEEE 802.11 标准在物理层支持利用多种速率进行传输,但是并未规定速率选择策略。速率自适应的速率选择算法核心是及时获取能够实时反映信道状态的信息。
目前获取信道信息的方法主要有两大类:

1. 信道物理信息直接获取。 比如获取信噪比SNR,接受信号强度,误码率BER
2. 基于统计的方法.

目前的速率自适应可分为以下4类:

  1. 利用传送帧连续的成功和失败次数来估计信道质量。比如ARF算法,如果连续没有收到两个ACK,则降低一档速率,发送下面的数据并启动一个定时器;如果连续收到10个帧或者定时器时间到,则提高发送速率。缺点:连续成功或失败的次数很难及时适应信道的快速变化。

  2. 利用物理层指标(如SNIR,RSS)估计信道质量。缺点:已有文献证明SNIR,RSS等指标和丢帧率并没有很强的对应关系,而且基于跨层的设计思想在实际应用中存在困难。

  3. 每隔一段时间以不同速率发送一个或者一些试探帧,用来估计不同数量在信道中的表现。这种方法提高了对其他速率的实时估计能力,但是因为不能发送过多的试探帧,导致个别试探帧的成败决定了速率选择,容易造成误判。如SampleRate。

  4. 利用近一段时间的数据帧的统计特征来决定发送速率。比如RRAA。RRAA在一段时间(窗口)内统计丢帧率等信息,并将其与相应的门限进行比较。这种方法屏蔽了因为随机丢帧而导致的误判,如果窗口选择合适,能够对信道变化作出及时反应。

内容来源:http://blog.csdn.net/forsiny/article/details/4805783


33.1.5 Modifying wifi model

在性能研究的时候,更改默认的wifi模式是普通的任务之一。在这一节,我们提供了如何更改默认的wifi模式的概述。依赖于你的目的,通常的任务是(排序不分先后):
1.通过更改wifi-mac-header..完成创建或者更改默认的WIFI帧/头
2.MAC low更改。例如,处理新的/更改的 控制帧(考虑RTS/CTS/ACK/Block ACK),更改成两路/四路交互。用户通常更改mac-low.
来完成这个任务。控制帧的处理效果是在MacLow:ReceiveOk.
3.WIFI队列管理。文件dca-txop.和edca-txop-n.是对这个任务有帮助的。
4.信道接入管理。用户应该更改文件dcf-manager.*,该文件授权访问DcaTxop和EdcaTxopN.
5.被WIFI远程站点管理器所处理的分组和RTS阈值。注意:wifi remote station manager简单的指示fragmentation和RTS是否需要。当RTS/CTS被MacLow处理时,Fragmentation被DcaTxop或者EdcaTxopN所处理
6.更改或者添加新的速率控制算法,可以通过创建一个新的WIFI remote station manager类或者更改一个存在的类完成。

33.1.6 Note on the current implementation

• 802.11g does not support 9 microseconds slot
• PHY_RXSTART is not supported
• 802.11e TXOP is not supported
• 802.11n MIMO is not supported
• 802.11n/ac MIMO is not supported
• 802.11n/ac beamforming is not supported
• PLCP preamble reception is not modeled
• BSSBasicRateSet for 802.11b has been assumed to be 1-2 Mbit/s
• BSSBasicRateSet for 802.11a/g has been assumed to be 6-12-24 Mbit/s
• cases where RTS/CTS and ACK are transmitted using HT formats are not supported
• Only ConstantRateWifiManager is supported by 802.11n or 802.11ac

33.2 User Documentation
33.2.1 Using the WifiNetDevice

实现提供了模块化,使得WifiNetDevice具备强大的低级别的配置,但复杂。基于这个原因,我们提供了一些帮助类以一种简单的方式完成一些普通的操作,同时提供了ns3的属性系统来控制底层模型的参数。
使用底层ns3 API和期望添加一个WifiNetDevice到节点上,必须创建一个WifiNetDevice实例,和许多构成的对象,以一种合适的方式绑定在一起(WifiNetDevice为未来的可扩展性,在某种程度上已经非常模块化)。在底层api,这需要大约20行代码(请看ns3::WifiHelper::Install,ns3::YansWifiPhyHelper::Create).在某些点,一个信道WifiChannel必须被创建,也包含了一些构成的对象(请看ns3::YansWifiChannelHelper::Create)。

然而,一些可用的帮助类可以使用,如果愿意使用默认值的话,添加设备和信道只用几行代码就能完成。当然也可以使用额外的api允许通过属性系统来改变默认值。经常使用的属性值在Attributes节中已经列出来了。脚本examples/wireless可以浏览看看这是怎么做的。接下来,我们描述创建一个WifiNetDevice从底层(WifiChannel)到设备层(WifiNetDevice)的通常的步骤。

为了创建一个WifiNetDevice,用户主要需要配置五步:

  1. 配置WifiChannel:WifiChannel关系到信号在相同的信道上从一个设备到另一个设备。WifiChannel主要的配置是传播损耗模型和传播延时模型。
  2. 配置WifiPhy:WifiPhy关系到从WifiChannel发送和接收无线信号。这里,WifiPhy依赖于接收的信号的强度和噪声决定每一帧是否被成功解码。所以,WifiPhy的主要配置是误码率模型,该模型就是最后计算基于信号的成功解码帧的概率。
  3. 配置WifiMac:这一步更多的是与the architecture and device level有关。用户配置wifi architecture(例如adhoc or ap-sta)和是否支持Qos(802.11e),HT(802.11n),VHT(802.11ac)特性。
  4. 创建WifiDevice:在这一步,用户配置期望的wifi标准(例如802.11b,802.11g,802.11a,802.11n or 802.11ac)和速率控制算法。
  5. 配置mobility:最后,mobility模型通常需要在WifiNetDevice可用之前配置。

YansWifiChannelHelper

YansWifiChannelHelper具有一个不同寻常的名字。读者可能会疑惑为什么使用这样的名字。该模型是从yans simulator提取出来的,名字也是引用自它。该帮助类可以创建一个带有默认传播损耗模型(PropagationLoss)和传播延时模型(PropagationDelay)的WifiChannel。

用户所使用的经典代码如下:

    YansWifiChannelHelper wifiChannelHelper = YansWifiChannelHelper::Default ();
    Ptr<WifiChannel> wifiChannel = wifiChannelHelper.Create ();

特别的是,默认的信道模型使用的是3的指数的信道模型,所用的传播时延等于一个常数值,就是光速(ns3::ConstantSpeedPropagationDelayModel),所用的传播损耗是基于一个默认的log distance model(ns3::LogDistancePropagationLossModel)。请注意,默认的log distance model is configured with a reference loss of 46.6777 dB at reference distance of 1m。The reference loss of 46.6777 dB was calculated using Friis propagation loss model at 5.15 GHz.The reference loss 模型如果使用802.11b,802.11g,802.11n(由于它们工作在2.4GHZ)必须被改变。

注意上面在创建一个帮助对象和一个实际的仿真对象的区别。在ns3中,帮助对象(仅仅用于帮助APP)是在栈(它们可以使用new操作符创建和使用deleted销毁)中创建的。然而,实际的ns3对象继承自ns3::Object类,并且分配一个智能指针。如果你不熟悉智能指针,请参看ns3-manual中关于ns3 object model一章的内容。

下面的两个方法在配置YansWifiChannelHelper是有用的:

• YansWifiChannelHelper::AddPropagationLoss adds a PropagationLossModel to a chain of PropagationLossModel
• YansWifiChannelHelper::SetPropagationDelay sets a PropagationDelayModel

YansWifiPhyHelper

物理层设备(基类ns3::WifiPhy)在ns3中是与ns3::WifiChannel相连接的。我们需要为YansWifiChannel创建合适的WifiPhy对象。这里YansWifiPhyHelper就可以胜任这个工作。

YansWifiPhyHelper类配置了一个对象工厂来创建一个YansWifiPhy实例,并添加一些其他的对象到该实例中,包括可能补充的ErrorRateModel误码率模型和指向MobilityModel移动模型的指针。典型的用户代码如下:

    YansWifiPhyHelper wifiPhyHelper = YansWifiPhyHelper::Default ();
    wifiPhyHelper.SetChannel (wifiChannel);

YansWifiPhyHelper默认配置NistErrorRateModel(ns3::NistErrorRateModel)误码率模型。你可以使用YansWifiPhyHelper::SetErrorRateModel方法更改误码率模型。

可选的是,如果pcap跟踪记录是需要的话,用户可以使用下面的代码使得pcap跟踪可用:

YansWifiPhyHelper::SetPcapDataLinkType (enum SupportedPcapDataLinkTypes dlt)
    ns3支持802.11的RadioTap和Prism轨迹扩展。

注意,我们还没有实际创建一个WifiPhy对象;我们只是准备了告诉YansWifiPhyHelper与之连接的信道。Phy对象会在下一步创建。

802.11n/ac PHY层可以使用长800ns或者短400ns的OFDM guard intervals。为了配置这个参数,可以使用下面的一行的代码(这个例子中,使用的是short guard interval的支持):

wifiPhyHelper.Set ("ShortGuardEnabled", BooleanValue(true));

更多的是,802.11提供了一种可选的模式(GreenField mode)来减少preamble durations(前沿持续时间),并且这也是唯一一种与802.11n设备兼容的模式。可以使用下面的代码启用这种模式:

wifiPhyHelper.Set ("GreenfieldEnabled",BooleanValue(true));

802.11nPHY层可以支持20(默认)或者40MHZ信道带宽,802.11ac PHY层可以使用20,40,80(默认),160MHZ信道带宽。由于信道带宽值被WifiHelper::SetStandard重写,可以使用下面Config::Set代码在安装后进行配置:

    WifiHelper wifi = WifiHelper::Default ();
    wifi.SetStandard (WIFI_PHY_STANDARD_80211ac);
    wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", 
                                  StringValue("VHtMcs9"), "ControlMode",StringValue("VHtMcs9"));
    VhtWifiMacHelper mac = VhtWifiMacHelper::Default ();
    //Install PHY and MAC
    Ssid ssid = Ssid ("ns3-wifi");
    mac.SetType ("ns3::StaWifiMac",
        "Ssid", SsidValue (ssid),
        "ActiveProbing", BooleanValue (false));
    NetDeviceContainer staDevice;
    staDevice = wifi.Install (phy, mac, wifiStaNode);
    mac.SetType ("ns3::ApWifiMac",
        "Ssid", SsidValue (ssid));
    NetDeviceContainer apDevice;
    apDevice = wifi.Install (phy, mac, wifiApNode);
    //Once install is done, we overwrite the channel width value
    //(一旦安装之后,我们可以重写信道带宽)
    Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/ChannelWidth", UintegerValue (160));

WifiMacHelper

下一步是配置MAC模型。我们使用WifiMacHelper来完成。WifiMacHelper可以完成MAC low 模型和MAC high模型。用户必须决定采用哪种模型:802.11/WMM-style Qos , 802.11n-style Hight throughput(HT),802.11ac-style Very High throughput(VHT)

NqosWifiMacHelper and QosWifiMacHelper

ns3::NqosWifiMacHelper和ns3::QosWifiMacHelper均可以配置一个对象工厂来创建一个ns3::WifiMac实例。它们用来配置像MAC类型的参数。
前者ns3::NqosWifiMacHelper不支持以下类型的MAC实例的创建:802.11e/WMM-style QoS,802.11n-style High throughput (HT),802.11ac-style Very High throughput (VHT)。
例如下面的用户代码配置了一个不支持QOs和HT的MAC类型实例,并且没有AP,仅有STA的一个基础设施网络,SSID设置为ns-3-ssid:

    NqosWifiMacHelper wifiMacHelper = NqosWifiMacHelper::Default ();
    Ssid ssid = Ssid ("ns-3-ssid");
    wifiMacHelper.SetType ("ns3::StaWifiMac",
            "Ssid", SsidValue (ssid),
            "ActiveProbing", BooleanValue (false));
可以使用ns3::QosWifiMacHelper来代替ns3::NqosWifiMacHelper来创建一个支持Qos的MAC实例。
下面的代码使用ns3::QosWifiMacHelper创建了一个支持Qos的AP:
QosWifiMacHelper wifiMacHelper = QosWifiMacHelper::Default ();
    wifiMacHelper.SetType ("ns3::ApWifiMac",
            "Ssid", SsidValue (ssid),
            "BeaconGeneration", BooleanValue (true),
            "BeaconInterval", TimeValue (Seconds (2.5)));

支持Qos的MAC模型可以工作在流量属于四种不同访问策略下:AC_VO 语音流,AC_VI 视频流,AC_BE 尽最大努力流,AC_BK后台流。为了使MAC为MSDU决定一个合适的AC,转发到这些MAC层的包应该被使用一个TID(traffic id)的ns3::QosTag标记,否则该包将被属于AC_BE策略。

为了创建一个ad-hoc MAC实例,简单的使用ns3::AdhocWifiMac代替ns3::StaWifiMac和ns3::ApWifiMac即可。

HtWifiMacHelper

ns3::HtWifiMacHelper配置一个对象工厂来创建一个ns3::WifiMac实例。它用于支持创建802.11n-style High throughput (HT) 和支持QoS类型的MAC实例。特别的,该对象也可以用来设置:

1. 为了使用802.11n MSDU聚合特性,为特定的访问策略AC设置MSDU聚合
2. 可以设置像threshold(阈值)(块ACK机制应该被使用的包的数量)的块ACK参数和闲置超时。

例如,下面的代码配置了一个HT MAC,不支持AP,支持STA,QOS保证,聚合AC_VO,和AC_BE的块ACK,这样的基础设施网络,它的AP的SSID为ns-3-ssid:

    HtWifiMacHelper wifiMacHelper = HtWifiMacHelper::Default ();
    Ssid ssid = Ssid ("ns-3-ssid");
    wifiMacHelper.SetType ("ns3::StaWifiMac",
                "Ssid", SsidValue (ssid),
                "ActiveProbing", BooleanValue (false));
    wifiMacHelper.SetMsduAggregatorForAc (AC_VO, "ns3::MsduStandardAggregator",
                    "MaxAmsduSize", UintegerValue (3839));
    wifiMacHelper.SetBlockAckThresholdForAc (AC_BE, 10);
    wifiMacHelper.SetBlockAckInactivityTimeoutForAc (AC_BE, 5);

这个对象也可以使用ns3::QosWifiMacHelper以相同的方式进行设置。

VhtWifiMacHelper

ns3::VhtWifiMacHelper配置一个对象工厂来创建一个ns3::WifiMac实例。用于支持创建以下类型的MAC实例:802.11ac-style Very High throughput (VHT) 和支持 QoS保证。这个对象与HtWifiMacHelper很相似。

WifiHelper

我们现在准备创建WifiNetDevices.首先,让我们创建一个默认设置的WifiHelper:

WifiHelper wifiHelper = WifiHelper::Default ();

这一步都做了什么呢?它默认设置802.11aWIFI标准,和设置ns3::ArfWifiManager作为RemoteStationManager。你可以通过调用WifiHelper::SetRemoteStationManager方法改变RemoteStationManager。为了改变采用的wifi标准,可以调用WifiHelper::SetStandard方法来设置想要的标准。

现在,让我们使用上面所描述的对象wifiPhyHelper和wifiMacHelper,安装到在一系列节点“c”上的WifiNetDevices:

NetDeviceContainer wifiContainer = WifiHelper::Install (wifiPhyHelper, wifiMacHelper, c);

这样就创建了一个WifiNetDevice,它包含WifiRemoteStationManager,WifiMac,WifiPhy(连接到匹配的WifiChannel上的)。
WifiHelper::SetStandard方法设置了定义在已选的标准版本中的可变的默认的定时参数,可重写已经存在的或者已经配置过的值。为了改变已经给WifiHelper::SetStandard重写的参数,应该在安装后使用Config::Set来配置:

    WifiHelper wifi = WifiHelper::Default ();
    wifi.SetStandard (WIFI_PHY_STANDARD_80211n_2_4GHZ);
    wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", 
                                  StringValue("HtMcs7"), "ControlMode",StringValue("HtMcs7"));
    HtWifiMacHelper mac = HtWifiMacHelper::Default ();
    //Install PHY and MAC
    Ssid ssid = Ssid ("ns3-wifi");
    mac.SetType ("ns3::StaWifiMac",
            "Ssid", SsidValue (ssid),
            "ActiveProbing", BooleanValue (false));
    NetDeviceContainer staDevice;
    staDevice = wifi.Install (phy, mac, wifiStaNode);
    mac.SetType ("ns3::ApWifiMac",
            "Ssid", SsidValue (ssid));
    NetDeviceContainer apDevice;
    apDevice = wifi.Install (phy, mac, wifiApNode);
    //Once install is done, we overwrite the standard timing values
    Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/Slot", TimeValue (MicroSeconds (slot))
    Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/Sifs", TimeValue (MicroSeconds (sifs))
    Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/AckTimeout", TimeValue (MicroSeconds (
    Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/CtsTimeout", TimeValue (MicroSeconds (
    Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/Rifs", TimeValue (MicroSeconds (rifs))
    Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/BasicBlockAckTimeout", TimeValue (Micr
    Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/CompressedBlockAckTimeout", TimeValue

有许多ns3属性可以被上面的helpers对象使用来改变默认的行为,例子脚本程序展示了如何改变默认行为。

Mobility configuration

最后,一个移动模型必须在wifi device上进行配置。移动模型被用于计算传播损耗和传播时延。在下一节中提供了两个例子。用户可以引用Mobility模块一章获取更多细节。

Example configuration

我们提供了两个典型的配置wifi网络的例子程序-一个例子程序使用adhoc网络,一个例子程序使用基础设施网络。两个例子程序在examples/wireless目录(wifi-simple-adhoc.cc 和 wifi-simple-infra.cc)。鼓励用户学习examples/wireless目录下的例子。

AdHoc WifiNetDevice configuration

在这个例子中,我们创建了两个adhoc节点,配置了802.11a wifi设备。我们使用ns3::ConstantSpeedPropagationDelayModel作为传播延时模型,使用带有3的指数的ns3::LogDistancePropagationLossModel作为传播损耗模型。两个设备都配置12Mbps固定速率的ConstantRateWifiManager。最后,我们使用ns3::ListPositionAllocator手动放置节点位置:

std::string phyMode ("OfdmRate12Mbps");
    NodeContainer c;
    c.Create (2);
    WifiHelper wifi;
    wifi.SetStandard (WIFI_PHY_STANDARD_80211a);
    YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
    // ns-3 supports RadioTap and Prism tracing extensions for 802.11
    wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
    YansWifiChannelHelper wifiChannel;
    wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
    wifiChannel.AddPropagationLoss ("ns3::LogDistancePropagationLossModel",
                "Exponent", DoubleValue (3.0));
    wifiPhy.SetChannel (wifiChannel.Create ());
    // Add a non-QoS upper mac, and disable rate control (i.e. ConstantRateWifiManager)
    NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
    wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                    "DataMode",StringValue (phyMode),
                    "ControlMode",StringValue (phyMode));
    // Set it to adhoc mode
    wifiMac.SetType ("ns3::AdhocWifiMac");
    NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, c);
    // Configure mobility
    MobilityHelper mobility;
    Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
    positionAlloc->Add (Vector (0.0, 0.0, 0.0));
    positionAlloc->Add (Vector (5.0, 0.0, 0.0));
    mobility.SetPositionAllocator (positionAlloc);
    mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
    mobility.Install (c);
    // other set up (e.g. InternetStack, Application)Infrastructure (access point and clients) 
    //  WifiNetDevice configuration

这是一个典型的代码,展示了用户如何配置一个接入点AP和一系列客户端。在这个例子中,我们创建一个接入点和两个客户端。每一个节点配置802.11bwifi设备:

    std::string phyMode ("DsssRate1Mbps");
    NodeContainer ap;
    ap.Create (1);
    NodeContainer sta;
    sta.Create (2);
    WifiHelper wifi;
    wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
    YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
    // ns-3 supports RadioTap and Prism tracing extensions for 802.11
    wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
    YansWifiChannelHelper wifiChannel;
    // reference loss must be changed since 802.11b is operating at 2.4GHz
    wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
    wifiChannel.AddPropagationLoss ("ns3::LogDistancePropagationLossModel",
                    "Exponent", DoubleValue (3.0),
                    "ReferenceLoss", DoubleValue (40.0459));
    wifiPhy.SetChannel (wifiChannel.Create ());
    // Add a non-QoS upper mac, and disable rate control
    NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
    wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                    "DataMode",StringValue (phyMode),
                    "ControlMode",StringValue (phyMode));
    // Setup the rest of the upper mac
    Ssid ssid = Ssid ("wifi-default");
    // setup ap.
    wifiMac.SetType ("ns3::ApWifiMac",
            "Ssid", SsidValue (ssid));
    NetDeviceContainer apDevice = wifi.Install (wifiPhy, wifiMac, ap);
    NetDeviceContainer devices = apDevice;
    // setup sta.
    wifiMac.SetType ("ns3::StaWifiMac",
            "Ssid", SsidValue (ssid),
            "ActiveProbing", BooleanValue (false));
    NetDeviceContainer staDevice = wifi.Install (wifiPhy, wifiMac, sta);
    devices.Add (staDevice);
    // Configure mobility
    MobilityHelper mobility;
    Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
    positionAlloc->Add (Vector (0.0, 0.0, 0.0));
    positionAlloc->Add (Vector (5.0, 0.0, 0.0));
    positionAlloc->Add (Vector (0.0, 5.0, 0.0));
    mobility.SetPositionAllocator (positionAlloc);
    mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
    mobility.Install (ap);
    mobility.Install (sta);
    // other set up (e.g. InternetStack, Application)

33.2.2 Note on the current implementation

• 802.11g supports a default of long slot time (20 microseconds)
• PHY_RXSTART is not supported
• 802.11e TXOP is not supported
• 802.11n/ac MIMO is not supported
• 802.11n/ac beamforming is not supported
• PLCP preamble reception is not modeled
• BSSBasicRateSet for 802.11b has been assumed to be 1-2 Mbit/s
• BSSBasicRateSet for 802.11a/g has been assumed to be 6-12-24 Mbit/s
• cases where RTS/CTS and ACK are transmitted using HT formats are not supported
• Only ConstantRateWifiManager is supported by 802.11n or 802.11ac

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容