我发现距路由器仅一跳之遥的wifi路由器的ping时间不稳定,有时甚至很长。ping 192.168.1.1
有时会延迟400-800ms。
有很多方法可以尝试(固件,路由器放置,AP通道等),但是我想更系统地解决这个问题:
- 首先,如何可视化网络性能?
- 然后,如何基准测试给定配置的性能,以便在进行调整后可以可靠地进行比较?
我发现距路由器仅一跳之遥的wifi路由器的ping时间不稳定,有时甚至很长。ping 192.168.1.1
有时会延迟400-800ms。
有很多方法可以尝试(固件,路由器放置,AP通道等),但是我想更系统地解决这个问题:
Answers:
这个serverfault答案对如何做有很好的高级指导-从此开始。最后一步确实是个难题:大概您(我是说,我)不想为此购买专用硬件...
以下是一些不错的工具,首先用于了解本地wifi网络内的连接状况,然后再了解Internet终结点。
它跟踪本地WiFI AP,并提供SNR,信道,信号强度等基本数据。它还可以对物理空间进行基本的站点调查,以指示强度和干扰。在AP发现模式下,您还可以绘制随时间变化的信号强度图表,从而可以测试布置并调整干扰可能性。
很有帮助。您将在计算机上运行一个简单的python服务器,该应用程序可以测试一些方案,从而为您提供实时速度反馈。
Wifi Analyzer,另一个出色的android应用,对哪些AP wifi通道处于活动状态有一些有价值的看法。可能是无需做大量工作即可选择AP信道的最佳免费工具。
广受好评的工具,用于了解本地网络性能。您需要两个框,一个作为服务器,一个作为客户端。您可以设置许多参数,运行测试,然后查看带宽和抖动的结果。我认为它可以与jPerf GUI一起使用,以绘制图表和调整参数。
brew install iperf
iperf -s # on server, next one on client
iperf -c 192.168.1.XXX -P 1 -i 1 -p 5001 -f m -t 60
ping您的所有traceroute跃点。提供趋势数据。疯狂棒极了。
brew install mtr
mtr 8.8.4.4
常见的ookla speedtest.net东西的CLI版本。项目维护者宣称这是不一致的,但是仍然可以方便地衡量较大的差异。
wget -O speedtest-cli https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
chmod +x speedtest-cli
speedtest-cli --list | head # and chose a top server (sorted by distance)
speedtest-cli --server 2761 # re-use the same server
自动诊断服务器,用于对终端系统和最后一英里的网络问题进行故障排除。经过一连串的测试后,将显示“ 结果摘要”页面,如下所示。我建议使用此NPAD服务器重定向链接来查找最近的NPAD服务器(它们都已结束),并使用该主机名进行测试。
wget http://netspeed.usc.edu:8000/diag-client.c
cc diag-client.c -o diag-client
# ./diag-client <server_name> <port> <target_RTT> <target_data_rate_in_MB/S>
./diag-client ps.psc.xsede.org 8001 30 5
我花了好几个小时来做所有这些事情,尝试不同的事情(从DD-WRT切换到Tomato固件)并阅读。原来这不是网络层,并且是很好的旧射频干扰,主要来自蓝牙!我在路由器5英尺内有我的电脑,一个蓝牙鼠标和键盘。(而旧路由器仍在2.4Ghz上发生冲突。)
为此,我充分利用了Android的Wifi速度测试,并在我将东西搬到公寓时定期运行。由于它每200毫秒左右报告一次更新,因此当干扰丢弃我的数据包时,它可以清楚地进行通信。
我绝对建议阅读Metageek 的《常见干扰源》指南。(他们还使InSSIDer和其他Wifi分析工具看起来不错。)
我没有的一种工具是物理频谱分析仪。手机和笔记本电脑只能检测Wifi AP,而无法接收来自蓝牙或其他基于RF的技术的干扰。Metageek在这个领域有一些不错的解决方案(Wi-Spy和inSSIDer Office),希望我们能看到更多像AirShark这样的工具。
所以我也有这些Wi-Fi ping波动到路由器。
PING 192.168.0.1 (192.168.0.1): 56 data bytes
64 bytes from 192.168.0.1: icmp_seq=0 ttl=63 time=2.334 ms
64 bytes from 192.168.0.1: icmp_seq=1 ttl=63 time=1.813 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=63 time=2749.664 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=63 time=1748.912 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=63 time=748.162 ms
64 bytes from 192.168.0.1: icmp_seq=5 ttl=63 time=1.796 ms
64 bytes from 192.168.0.1: icmp_seq=6 ttl=63 time=1.806 ms
64 bytes from 192.168.0.1: icmp_seq=7 ttl=63 time=1.991 ms
64 bytes from 192.168.0.1: icmp_seq=8 ttl=63 time=1.797 ms
64 bytes from 192.168.0.1: icmp_seq=9 ttl=63 time=1.832 ms
64 bytes from 192.168.0.1: icmp_seq=10 ttl=63 time=1.713 ms
64 bytes from 192.168.0.1: icmp_seq=11 ttl=63 time=1.819 ms
64 bytes from 192.168.0.1: icmp_seq=12 ttl=63 time=1.616 ms
64 bytes from 192.168.0.1: icmp_seq=13 ttl=63 time=1.748 ms
64 bytes from 192.168.0.1: icmp_seq=14 ttl=63 time=1.677 ms
64 bytes from 192.168.0.1: icmp_seq=15 ttl=63 time=3427.213 ms
64 bytes from 192.168.0.1: icmp_seq=16 ttl=63 time=2426.371 ms
64 bytes from 192.168.0.1: icmp_seq=17 ttl=63 time=1425.634 ms
64 bytes from 192.168.0.1: icmp_seq=18 ttl=63 time=424.834 ms
64 bytes from 192.168.0.1: icmp_seq=19 ttl=63 time=1.829 ms
64 bytes from 192.168.0.1: icmp_seq=20 ttl=63 time=1.691 ms
64 bytes from 192.168.0.1: icmp_seq=21 ttl=63 time=2.038 ms
64 bytes from 192.168.0.1: icmp_seq=22 ttl=63 time=1.679 ms
^C--- 192.168.0.1 ping statistics ---
23 packets transmitted, 23 packets received, 0% packet loss
round-trip min/avg/max/stddev = 1.616/564.346/3427.213/1015.102 ms
我将路由器(从TL-WR743ND切换到DIR-815),尝试了多个Wi-Fi USB适配器(主要是TP-LINK,尽管我也认为D-Link DWA-160也存在问题),从2.5 GHz切换到了5GHz并搜寻频道。运气不好,问题仍然存在。
直到我注意到执行网络速度测试或运行bittorrent客户端时,ping正常。它仅在网络空闲时才波动。
TP-LINK适配器可能是Windows 7的问题或问题,但是当我在Wi-Fi上加一点负载时,波动就消失了,网络也可以正常工作。
到目前为止,我已经做了一些Rust程序来保持我的Wi-Fi网络正常运行。
// Need a constant wifi load in order not to have the ping drops.
fn wifi_load() {
// This *might* be useful if the router suddenly supports Keep-Alive.
// Not the case with DIR-815 though, we'll keep making new connections to it.
let config = hyper::client::pool::Config {max_idle: 1};
let client = hyper::client::Client::with_pool_config (config);
loop {
let url = "http://192.168.0.1/css/init.css";
if let Err (err) = client.get (url) .send() {
log! ("wifi_load] Error fetching {}: {}", url, err);
sleep (Duration::from_secs (9));}
sleep (Duration::from_millis (100));}}