建立信号强度对wifi网络速度的影响



我正在开发一个网络支持框架(最初用于Android),其中包括三个基本服务:主机发现网络通信QoS监视器

对于最后一项服务,我试图实现一种方法,该方法返回单个主机可以定期发送到另一个主机的最大每秒消息数(MPS)

根据要发送的对象的大小和网络速度,我可以很容易地用可以通过网络发送的理想MPS得到粗略估计。当我试图将信号强度(SS)包含在等式中时,问题就出现了。

protected int getMPS(NetworkApplicationData message, Context context) {
    int messageSizeBits  = MemoryUtils.sizeOf(message) * 8;
    int networkSpeedMbps = getNetworkSpeed(context);
    float signalStrength = getNetworkSignalStrength(context);
    // FIXME: what about signalStrength?
    return networkSpeedMbps * 1024 * 1024 / messageSizeBits;
}

因此,这里的基本问题是:关于无线网络中信号强度对速度的影响,是否有任何预先建立的研究?

在做一些测试时,我注意到,根据信号强度,已建立的网络速度会发生变化。例如,使用"标准化"的100%SS,Android API返回54Mbps的网络速度值;在40%SS的情况下,API返回7Mbps的网络速度值。我应该只依赖Android API返回的网络速度值吗?在这种情况下,我会得到一个被高估的MPS。

无论如何,我需要知道解决这个问题的正确方法,并将计算建立在正式研究的基础上。

这是EE和CS中研究得很好的主题。WiFi网络吞吐量主要取决于两个因素:信噪比(SNR)值和网络拥塞。前者是物理层(PHY)问题,而后者是MAC层问题。在两个层测量的数据速率肯定不同。

在PHY,数据速率由SS(或者更准确地说,信噪比)决定。根据香农的信息理论,SS越高意味着数据速率越高。PHY处的数据速率假定单个WiFi设备在没有任何争用的情况下连续传输。但现实世界并非如此。54Mbps是具有高SS的典型PHY数据速率。

在MAC,数据速率是通过PHY数据速率乘以WiFi设备在CSMA协议下赢得竞争的时间百分比来获得的。即使只有一对WiFi设备,在MAC层测量的数据速率(与在应用层测量的几乎相同)也大约是PHY数据速率的一半。

回到你的问题,在一个清晰的WiFi网络中,将从Android API返回的网络速度减半,以粗略估计实际数据速率。在繁忙的网络中,您的实际数据速率只能通过在线测量得出,并且它一直在变化。

最新更新