虚标的WIFI连接速度
问题的来源
在我的上一篇文章中,遇到了一个在局域网下跑不满带宽的问题。我在电脑上部署了一个服务下载服务器,讲道理在局域网下,我用手机下载文件,应该能跑满整个局域网的带宽的。但事实并非如此,下载的带宽只能跑到WIFI连接速度一半都没有。
环境
电脑 2.5G网卡 | 手机WIFI7协议 |
---|---|
![]() | ![]() |
各个方面排查问题
代码方面
由于文件下载服务器需要实现Range Request这个规范(文件指定具体范围内内容响应),所以我使用的是RandomAccessFile
进行文件指定字节的下载。
一开始,我怀疑就是因为这个文件读取的速度太慢,拉低了传输速率。于是,我换成了FileInputStream
和FileChannel
,读取文件时直接利用FileChannel
的map
方法,直接将整个文件映射到内存中,免得读取文件速度慢。
FileInputStream fileInputStream = new FileInputStream(file);
FileChannel channel = fileInputStream.getChannel();
// 将文件指定范围的数据映射到内存中
MappedByteBuffer mappedByteBuffer = channel.map(FileChannel.MapMode.READ_ONLY, rangeHeader.getStart(), rangeHeader.getEnd());
// 读取数据
byte[] bytes = new byte[1024];
mappedByteBuffer.get(bytes);
修改完代码后,手机下载速度还是没有提升,所以不是代码原因导致下载速度慢的。
网络方面
既然不是代码问题引起的,那就得转换思路。不是软件问题,那就只能是硬件问题了。哪么有啥硬件会出现问题呢?我家局域网是用WIFI来构建的,但是呢,我前两周才换小米BE5000路由器,应该不会有啥问题吧。
于是乎,我在电脑上部署了测速服务器,用于测试局域网中手机的最高速度是多少。
测速软件-OpenSpeedTest
github地址:https://github.com/openspeedtest/Speed-Test
本机部署后,测速一看,最高速度也就1500Mbps,跟下载速度上限一致。
原来是手机WIFI的连接速度和实际连接速度不符导致的问题。为什么声明的连接速度和实际的连接速度相差那么多呢?经过我DeepSeek后,得知手机上显示的连接速度是协商速率,并非实际连接速度。实际连接速度受到多种因素的影响(手机支持的WIFI协议、离路由器的距离、信道干扰等),能达到协商速率的一半就比较理想了。
总结
至此,已经定位到了为啥在局域网下跑不满带宽的原因了,是因为WIFI的协商速率并非真正意义上能达到最快速度,而是一个理想速度。那这个咱也没啥办法了😥,在手机USB协议还是2.1的情况下,WIFI已经是能达到的最快速度了,并且这个WIFI速度比起USB的速度快了很多了,足够了。