ns-3.35_wifi-he-network.cc_ns-3网络仿真工具wifi脚本解析_wifi脚本网络拓扑_ns-3wifi6吞吐脚本关键注释_吞吐部分_基础ns-3

31 篇文章 1 订阅
21 篇文章 8 订阅

整体描述

脚本可配置若干he(802.11ax)参数,最终的输出是显示的吞吐

脚本为每个HE MCS值输出UDP或TCP goodput,这取决于MCS值(0到11);

默认仿真所有信道宽度(20、40、80或160 MHz)和保护间隔(800ns、1600ns或3200ns);

PHY比特率在整个模拟运行期间保持不变;

接入点AP和站点STA距离越大,goodput越小;

//此模拟中的数据包属于BestEffort访问类(AC\U BE)。

//通过选择DL MU PPDU的确认序列,可以聚合

//向AP发送循环调度程序,以便AP通过DL OFDMA发送DL MU PPDU。

目录

整体描述

参数配置

一些原理以及拓扑搭建

测试效果


参数配置

众所周知,不知道咋使用一个脚本可以--help查看,我们可以看到wifi-he-network.cc脚本里面有以下可以选的选项,解读如下:

Program Options:
    --frequency:              Whether working in the 2.4, 5 or 6 GHz band (other values gets rejected) [5]
#WiFi的频段,只能选2.4G 5G 6G,不能选其他,默认选5G
    --distance:               Distance in meters between the station and the access point [1]
#AP-STA距离,默认1米
    --simulationTime:         Simulation time in seconds [10]
#仿真时间,默认10秒一条——虽然标注10秒,实测180s,设为1s时,实测大约18s,0.5s,大约9s,以此类推,时间太短,吞吐会低的离谱,太长又没啥必要,酌情(与mcs也有关,mcs选的越大,仿真耗时就越长)
    --udp:                    UDP if set to 1, TCP otherwise [true]
#想要udp就置1,不然就其他,默认udp
    --useRts:                 Enable/disable RTS/CTS [false]
#用不用RTS/CTS这种探寻-退避的方式,默认不用——不用更快——如果信道干净
    --useExtendedBlockAck:    Enable/disable use of extended BACK [false]
#扩展BlockAck,默认关闭
    --nStations:              Number of non-AP HE stations [1]
#几个sta,默认一个,多点吞吐变大,太多互相干扰吞吐急剧恶化,同时,站点越多,仿真时间越长,但不是2个站点速度就是1个的两倍
    --dlAckType:              Ack sequence type for DL OFDMA (NO-OFDMA, ACK-SU-FORMAT, MU-BAR, AGGR-MU-BAR) [NO-OFDMA]
#OFDMA选项,可以选不用ofdma,单用户多用户和多用户聚合
    --mcs:                    if set, limit testing to a specific MCS (0-11) [-1]
#mcs,同等带宽越大越快
    --payloadSize:            The application payload size in bytes [700]
#应用数据包大小,越大吞吐越大,但是太大(9999)吞吐会减小
    --phyModel:               PHY model to use when OFDMA is disabled (Yans or Spectrum). If OFDMA is enabled then Spectrum is automatically selected [Yans]
#仿真时采用什么物理信道模型——关于这个我有讲过
    --minExpectedThroughput:  if set, simulation fails if the lowest throughput is below this value [0]
#默认不配置,配置之后,吞吐一旦小于这个值就仿真结束
    --maxExpectedThroughput:  if set, simulation fails if the highest throughput is above this value [0]
#默认不配置,配置之后,吞吐一旦大于这个值就仿真结束

一些原理以及拓扑搭建

关于yans和spectrum的解析见这个链接

ns-3-model-library wifi 浅析_ns-3wifi部分解析_ns-3网络模拟器wifi部分文档分析_Part1_Mr_liu_666的博客-CSDN博客https://blog.csdn.net/Mr_liu_666/article/details/123597203

 关于网络拓扑的搭建和IP地址的分配看third的解析,几乎一致:

ns-3.35_third.cc_ns-3网络仿真工具wifi脚本解析_wifi脚本网络拓扑_ns-3third脚本全注释_基础ns-3_ns-3入门_ns-3third脚本解析_Part1_Mr_liu_666的博客-CSDN博客IntroBG:ns-3网络仿真工具是一个用于搭建网络拓扑,测试网络算法、模拟不同环境的网络性能的一套软件,这套软件由多个小模块构成(wifi ipv4之类的模块),运行时调用哪个就编译链接哪个。(这一段是我的理解)NS2(Network Simulator, version 2)是一种面向对象的网络仿真器,本质上是一个离散事件模拟器。由UC Berkeley开发而成。它本身有一个虚拟时钟,所有的仿真都由离散事件驱动...https://blog.csdn.net/Mr_liu_666/article/details/121625416ns-3.35_third.cc_ns-3网络仿真工具wifi脚本解析_wifi脚本网络拓扑_ns-3third脚本全注释_基础ns-3_ns-3入门_ns-3third脚本解析_Part2_Mr_liu_666的博客-CSDN博客icon-default.png?t=M4ADhttps://blog.csdn.net/Mr_liu_666/article/details/122203797对于mcs,如果不设置就会遍历,对于带宽和guard interval也是,我这里为了测试最高吞吐做了如下修改:

for (int channelWidth = 160; channelWidth <= maxChannelWidth; ) //带宽从20M遍历到最大带宽,原来的初始值是20
        {
          for (int gi = 800; gi >= 800; ) //guard interval从 3.2us减小到0.8us  ,原来的初始值是3200,单位ns
..........

配置完参数,创建了拓扑又分配了IP,接下来就应该上吞吐量应用了:

    if (udp)
        {
          //UDP flow
          uint16_t port = 9;//UDP吞吐量应用将采用端口9
          UdpServerHelper server (port);//服务器检测端口9
          serverApp = server.Install (wifiStaNodes);//服务器运行在STA上
          serverApp.Start (Seconds (0.0));
          serverApp.Stop (Seconds (simulationTime + 1));//在一次吞吐测试结束1s后服务器才停下——保证吞吐测试不断
          for (std::size_t i = 0; i < nStations; i++)//每个sta都要进行吞吐测试
            {
              UdpClientHelper client (staNodeInterfaces.GetAddress (i), port);//创建UDP client,目标server在STA上,ns-3的仿真机制是client分时给server发包
              client.SetAttribute ("MaxPackets", UintegerValue (4294967295u));//规定最多发多少包
              client.SetAttribute ("Interval", TimeValue (Time ("0.00001"))); //packets/s,发包间隔,倒数就是每秒包数,包调少了之后吞吐下降,包调多了多的包丢了,吞吐不变,仿真时间变长
              client.SetAttribute ("PacketSize", UintegerValue (payloadSize));//单个包多大,调大了在不丢包的情况下会增加吞吐
              //ApplicationContainer clientApp = client.Install (wifiApNode);//把client应用安装在p2p节点0(也就是AP)上
              ApplicationContainer clientApp = client.Install (p2pNodes.Get (1));//把client应用安装在p2p节点1上
              clientApp.Start (Seconds (1.0));
              clientApp.Stop (Seconds (simulationTime + 1));//在一次吞吐测试结束1s后服务器才停下——保证吞吐测试不断
             }
           }
                

测试效果

我修改了拓扑加入了p2p部分,网络拓扑如下:

 我的命令是:

./waf --run "test --frequency=5 --simulationTime=2 --udp=1 --nStations=1 --mcs=11  --phyModel=Yans --payloadSize=1000"

我的测试结果是:

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值