我正在开发一个网络支持框架(最初用于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的网络速度值; API具有40%的SS,返回7Mbps的网络速度值。我应该仅依赖Android API返回的网络速度值吗?在这种情况下,我将大多得到一个高估的MPS。
无论如何,我需要知道哪种方法可以解决这个问题,并将计算基于正式研究。
答案 0 :(得分: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返回的网络速度除以一半,以粗略估计实际数据速率。在繁忙的网络中,您的实际数据速率只能通过在线测量得出,并且一直在变化。