java - 确定信号强度对 WiFi 网络速度的影响

标签 java android networking wifi qos

我正在开发一个网络支持框架(最初针对 Android),其中包括三个基本服务:主机发现网络通信QoS 监控 em>.

对于最后一项服务,我正在尝试实现一种方法,该方法返回单个主机可以定期发送到另一个主机的最大每秒消息数 (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 网络速度值;当 SS 为 40% 时,API 返回 7Mbps 网络速度值。我应该只依赖 Android API 返回的网络速度值吗?在这种情况下,我大部分都会得到高估的 MPS。

无论如何,我需要知道解决这个问题的正确方法是什么,并根据正式研究进行计算。

最佳答案

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

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

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

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

关于java - 确定信号强度对 WiFi 网络速度的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18368820/

相关文章:

java - 令人困惑的测试失败 - 夏令时

java - 为什么引用静态 final 字段不会触发类加载?

python - Twisted 是 httplib2/socket 的替代品吗?

java - 应用程序关闭后广播接收器仍在运行 - Android

java - 如何轮换来自同一台机器的每个请求的IP地址

linux - Iptables 或在网关中重定向 IP 的东西 (GNU/Linux)

java - 如何围绕正方形移动图像

java - 类似 IDM 的 java 应用程序

java - 如何将 View 添加到livedata观察器内的cardview

android - 编译时在 "NOT": syntax error: , 附近:如果不存在则创建虚拟表