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 - 初始化相互引用的静态字段时出错

android - 使用 Canvas 使位图可点击

java - 使用android访问本地网络文件

java - 如何读取类中的全局属性文件?

java - 第一次需要帮助在 eclipse 上使用 java 设置 SQLite

java - 密码保护我的 android 应用程序(简单的方法)

java - 如何在android中使用ViewFlipper从ImageURLs的ArrayList制作幻灯片?

android - 使用 Google Maps API 的 Android 应用离线模式

c++ - bad_weak_ptr with boost 智能指针

iphone - iPhone 上端口 80 上的 Web 服务器