0

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

对于最后一项服务,我正在尝试实现一种方法,该方法返回单个主机可以定期发送到另一台主机的最大每秒消息数 (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。

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

4

1 回答 1

1

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

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

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

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

于 2013-08-25T20:47:13.937 回答