NS-3源码学习(四)wifi-ent-network.cc

发布时间 2023-11-29 12:22:20作者: PolarisZg

NS-3源码学习(四)wifi-ent-network.cc

设定的参数

  • bool udp{true};udp/tcp 通信选择

  • bool downlink{true};AP -> STA : downlink = true / STA -> AP : downlink = false 数据发送方向选择

  • bool useExtendedBlockAck{false}; 启用扩展块确认,默认不启用,即块确认的大小为64,启用后块确认缓冲区大小会被修改为256

  • Enhanced Multi-Level Soft Recovery(增强型多级软恢复),暂时不知道这个参数有什么用

    • bool useExtendedBlockAck{false};

    • std::string emlsrLinks;

    • uint16_t paddingDelayUsec{32};

    • uint16_t transitionDelayUsec{128};

    • uint16_t channelSwitchDelayUsec{100};

    • bool switchAuxPhy{true};

  • double simulationTime{10};仿真时间,即该仿真网络运行的时间,单位为秒

  • double distance{1.0};AP结点和STA结点之间的距离,该仿真系统是一个静态系统,AP与STA之间的距离保持不变

    • 默认情况下原始的仿真程序仅含有一个STA和一个AP,因此这里仅提供了一个距离的参数。所以在这种仅提供一个距离参数的情况下,若设置了多个STA结点,多余的STA节点的位置是无法受控制的
  • 三个频率:double frequency{5}; 、double frequency2{0}; 、double frequency3{0};

    • 这里应该是指的STA或AP结点支持的频率,这三个频率吧不能设置为同样的值,除非为0
  • std::size_t nStations{1};STA结点的数量

  • std::string dlAckSeqType{"NO-OFDMA"};802.11ACK报文的确认格式

    • 此处提供了四个选项:NO-OFDMA, ACK-SU-FORMAT, MU-BAR, AGGR-MU-BAR

    • NO-OFDMAACK-SU-FORMAT:默认的块确认类型,不使用OFDMA,确认块占用一整个信道,仅对单一的某个数据的发送方进行确认

    • MU-BAR:使用WifiAcknowledgment::DL_MU_TF_MU_BAR机制进行块确认,即单个用户发送块之前先通知,并使用Multi-User Block Acknowledgment机制来进行确认,该机制允许接收端在一个块确认帧中对多个发送的用户进行确认

    • AGGR-MU-BAR:改进的多用户确认格式

  • bool enableUlOfdma{false}; 对上行链路启动OFDMA,一般来说在TCP通信中使用,因为UDP通信的过程中数据接收端仅需要向发送端回复MAC层的ACK报文,因此上下行的划分是清晰明了的,对ACK报文的确认格式也可以在上面的参数进行设置,而且即使不启动上行的OFDMA,考虑到ACK报文很短,也不会对速度造成很大的影响。但是对于TCP通信,上下行都会传输大量的数据包,因此需要设定上行链路是否启动OFDMA。

    • bool enableBsrp{false};该参数的设置和上述参数相关,在设置上下行均启动OFDMA且使用TCP通信的情况下,该参数决定是否启动BSRP报告,BSRP 可用于在 Wi-Fi 6 网络中报告传输缓冲区的状态信息
  • int mcs{0}; mcs值设置,默认为0,下表来源 新华三Wi-Fi 7技术白皮书-6W100

    img

  • int channelWidth{20};信道宽度,单位为MHz,对于2.4GHz可以取20,40;对于5GHz和6GHz,可以取20,40,80,160;暂时不能取320MHz(仅存在于6GHz)宽度的信道

    • 而且,当前国内对无线电的管理政策中也没有允许WiFi使用6GHz的信道
  • int gi{3200};物理层传输的符号之间的间隔,可以取800,1600和3200,单位为纳秒

  • uint32_t payloadSize =700;一个UDP或TCP包的大小,注意到这个值不能过大,过大会导致在过小的mcs值的情况下无法在规定的时间内传输完整个数据包

  • Time tputInterval{0};每隔tputInterval时间输出一次这段时间的传输速率

  • double minExpectedThroughput{0};、double maxExpectedThroughput{0};设置了最小和最大的传输速率,若统计的速率超过这个范围则会报错

  • Time accessReqInterval{0};多用户请求信道访问之间的时间间隔,一般来说,会用到某个信道内多个STA,或单一STA与AP进行TCP通信时使用

  • u_int64_t udpMaxPackets{4294967295U};UDP通信过程中传输的数据包的数量,这里设置为了一个很大的数字,代表将在整个仿真时间内大量的传输数据,用来测试该网络中传输速率的极限。

开启RTS机制

img

img

ACK报文类型

img