如何诊断和可视化对wifi路由器的高ping时间?


65

我发现距路由器仅一跳之遥的wifi路由器的ping时间不稳定,有时甚至很长。ping 192.168.1.1有时会延迟400-800ms。

有很多方法可以尝试(固件,路由器放置,AP通道等),但是我想更系统地解决这个问题:

  • 首先,如何可视化网络性能?
  • 然后,如何基准测试给定配置的性能,以便在进行调整后可以可靠地进行比较?

如果不是现货安装,您正在使用什么路由器和/或板载路由器软件?
杰夫·克莱顿

@JeffClayton Linksys WRT54GSv2(老派)正在运行Tomato(Shibby)。曾经用于运行DD-WRT,但它存在许多问题,并且难以维护。
Paul Irish

1
您有实际问题吗?还是纯粹是装饰性问题?WiFi路由器通常并非设计为超快速ping响应器,而是需要完成的工作。
David Schwartz

1
@DavidSchwartz我们应该能够在10毫秒内完成到无线AP的完整往返,不是吗?如果您的WiFi内部延迟超过500毫秒,那么您从网络/互联网提取的每个数据包都会遭受此延迟。是杀手
Paul Irish

1
@PaulIrish完全正确,但这与ping时间无关。Ping衡量网络延迟加上ping响应延迟本身的总和。SoHo WiFi路由器并不是有效的ping响应器,因此不建议使用ping来测量网络延迟。
David Schwartz

Answers:


78

这个serverfault答案对如何做有很好的高级指导-从此开始。最后一步确实是个难题:大概您(我是说,我)不想为此购买专用硬件...

以下是一些不错的工具,首先用于了解本地wifi网络内的连接状况,然后再了解Internet终结点。

Wifi工具

NetSpot(适用于Mac)

它跟踪本地WiFI AP,并提供SNR,信道,信号强度等基本数据。它还可以对物理空间进行基本的站点调查,以指示强度和干扰。在AP发现模式下,您还可以绘制随时间变化的信号强度图表,从而可以测试布置并调整干扰可能性。 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

适用于Android的Wifi速度测试

很有帮助。您将在计算机上运行一个简单的python服务器,该应用程序可以测试一些方案,从而为您提供实时速度反馈。

在此处输入图片说明

Wifi Analyzer,另一个出色的android应用,对哪些AP wifi通道处于活动状态有一些有价值的看法。可能是无需做大量工作即可选择AP信道的最佳免费工具。

iPerf

广受好评的工具,用于了解本地网络性能。您需要两个框,一个作为服务器,一个作为客户端。您可以设置许多参数,运行测试,然后查看带宽和抖动的结果。我认为它可以与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结合)

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服务器重定向链接来查找最近的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上发生冲突。)

为此,我充分利用了AndroidWifi速度测试,并在我将东西搬到公寓时定期运行。由于它每200毫秒左右报告一次更新,因此当干扰丢弃我的数据包时,它可以清楚地进行通信。

我绝对建议阅读Metageek 的《常见干扰源》指南。(他们还使InSSIDer和其他Wifi分析工具看起来不错。)

在此处输入图片说明

我没有的一种工具是物理频谱分析仪。手机和笔记本电脑只能检测Wifi AP,而无法接收来自蓝牙或其他基于RF的技术的干扰。Metageek在这个领域有一些不错的解决方案(Wi-SpyinSSIDer Office),希望我们能看到更多像AirShark这样的工具。


这些是精美的工具,可更新我的笔记。
杰夫·克莱顿

另一个“快速且肮脏”的工具非常宝贵,因为它的可移植性是适用于Android设备的Wifi分析器。
davidgo,2015年

好的 我简要提到了WiFi分析仪;它可能是了解AP信道干扰的最佳工具,但就我而言,这不是问题。也就是说,它确实做得很好。
Paul Irish

很棒的清单,谢谢。总是要尝试的另一件事是看看没有 wifi 会发生什么。一旦我遇到了我以为是wifi问题的问题,但是直接插入为wifi AP供电并运行iPerf的电缆中,就会发现Bad Cable是真正的罪魁祸首!
Ryan Dlugosz 2015年

1
嗯 蓝牙不太可能引起您所描述的那种干扰,它通常的AFS跳频模式可以避免2.4GHz的典型20MHz Wi-Fi信号。您没有运行40Mhz频道吗?
2015年

4

正如我在上面的评论中指出的:通常用于诊断Wi-Fi问题的工具实际上可能会导致此问题。扫描Wi-Fi网络时,无线电必须关闭信道,通常它会告诉AP为它缓冲帧,以便它可以“休眠”,然后切换信道进行扫描。

此外,自推出AirDrop以来,iOS和OS X将关闭Wi-Fi无线电频道以寻找其他AirDrop服务,并且由于优胜美地将定期退出频道以支持切换。


1
要点-过去我曾使用InSSIDer注意到此问题-很高兴对此进行解释。
尼克

3

所以我也有这些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));}} 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.