![消除 WiFi 负载下路由器间歇性高 ping 现象](https://linux22.com/image/1513245/%E6%B6%88%E9%99%A4%20WiFi%20%E8%B4%9F%E8%BD%BD%E4%B8%8B%E8%B7%AF%E7%94%B1%E5%99%A8%E9%97%B4%E6%AD%87%E6%80%A7%E9%AB%98%20ping%20%E7%8E%B0%E8%B1%A1.png)
在过去的一个月里,我经历了 WiFi 网络上所有计算机间歇性向家用路由器发送高 ping 值的情况。每发送 10 次左右的 ping 值,ping 值就会从可接受的 1-3 毫秒上升到大约 800 毫秒。
已经有类似的问题服务器故障和超级用户有一些非常好的答案。具体答案超级用户指出,在网络上运行负载(例如,运行 μTorrent)似乎可以消除高 ping 值。
我尝试了一下,结果是一样的。以下是 PingPlotter 的 ping 值: ping 日志
请注意,当我打开 μTorrent 时,图表就变得平坦了。
我目前不想一直使用 μTorrent,而是想创建一个可以对网络施加负载的轻量级程序。我尝试编译超级用户答案,但最终出现了以下错误:
error: macro undefined: 'log!'
--> rust.rs:11:7
|
11 | log! ("wifi_load] Error fetching {}: {}", url, err);
| ^^^
error: aborting due to previous error
那么我该如何创建一个程序来实现类似于打开 μTorrent 的效果呢?我想指出的是,我不是程序员,我不一定需要使用 Rust — 只需要完成目标。
谢谢!
答案1
在空闲的 Wi-Fi 上每秒发送一次 ping 是查找延迟问题的一种糟糕方式,因为您实际上并没有测量您认为正在测量的内容。问题在于 Wi-Fi 客户端通常由电池供电,并且喜欢使用 802.11 省电模式来节省电量,当似乎没有任何流量要发送或接收时,该模式会短暂关闭 Wi-Fi 无线电(可能只有十分之几秒,但时间长了就很耗电)。
每秒一次的 ping 流量不足以阻止 802.11 省电模式启动,因此由于省电模式,您会看到较长的 ping 时间。
为了验证这一理论,请尝试每秒运行 20 次 ping。不确定 Windows 是否支持,但在 Linux 或 macOS 上会这样:sudo ping -i 0.05 192.168.0.1
。这使您每 802.11 信标间隔(通常是十分之一秒)发送(和接收)两次 ping,这通常足以阻止省电启动。
为了不启动省电模式而无谓地堵车是相当愚蠢的。这就好比说:“嘿,当我在红绿灯前停车时,我的汽车引擎转速会降低到怠速!当我在红绿灯前停车时,我应该踩油门让引擎保持加速吗?”答案是“不,让它减速可以节省能源。当你需要时,它会立即再次加速!”