我有一个任务会消耗大量的互联网带宽。通常我只会在路由器中设置 QoS 设置,但我当前的路由器没有此功能,而且无法更换。因此,我想控制带宽密集型任务的运行时间,以免影响正常使用。
互联网有 3 个潜在用户,2 个使用 Android 手机,1 个使用 iPhone。所有设备似乎都会响应 ping,因此我可以设置一个脚本来监控这些设备是否在家中。但是,我读到过,现代智能手机可能会在闲置期间关闭 wifi,而且我们也有固定的互联网访问设备(三星智能电视),这可能是唯一可以访问互联网的设备。此外,即使 ping 100% 的时间都有效,也会有一段很长的时间,当每个人都在睡觉时,任务可以运行。
我们的日程安排是随机的,因此设置定时时间表是行不通的。
我希望尽可能不打扰地完成这项工作,即不在手机上安装应用程序,也不在可能被视为“丑陋”的房间中添加硬件,但除了手动打开和关闭任务外,我不知道该怎么做。我不介意编写自己的脚本,但我不知道我可以使用什么作为输入。
我们的 Cogeco 路由器确实有“运动传感器”来检测存在,但似乎没有用于此的 API。
答案1
然而,我读到一些文章说现代智能手机可能会在不活动时关闭 Wi-Fi
如果他们处于不活跃期,那么实际上就意味着互联网未被积极使用因此您可以将其视为“人不在场”。
通常我只是在路由器上设置 QoS 设置,
您仍然可以在运行任务的机器上设置流量整形,将其限制为 WAN 连接总容量的 80% 等。
下载数据时,高带宽使用率通常不会对普通网页浏览或视频流产生重大负面影响。如果确实如此,那么除了“大量带宽消耗”之外,还有其他问题。
(对于 Linux 上的 TCP,也许可以将连接设置为使用 TCP-LP 拥塞控制算法 - 它对其他用户的影响较小 - 但即使是默认值也应该表现得“公平”。)
如果你是上传大量数据 – 将其限制为可用上传量的 80% 以解决 QoS 不足的问题(为 TCP ACK 等留出一些空间)。
如何自动检测其他人是否正在使用互联网
我想到两种方法:
您的家用路由器可能支持 UPnP IGD,以便应用程序自动进行端口转发。此协议还包括 WAN 监控 -
upnpc -l
或者upnpc -L
会向您显示当前“发送/接收的字节数”,如果您以一秒为间隔进行两次测量,您将获得近似的“MB/s”利用率,并且您将能够看到是否有人在进行视频通话或类似操作。许多家庭互联网连接都受到 Bufferbloat 的严重影响,大量使用会导致延迟大幅增加(这可能是您的高带宽任务对其他用户产生如此负面影响的原因)。您实际上可以利用这一点,监视器您知道附近某个主机的延迟(可能是托管在同一 ISP 的 DNS 服务器)——如果延迟突然增加,则意味着有人正在大量使用网络。
此方法无法帮助您检测游戏等少量但对延迟敏感的流量,但至少可以检测大量的上传/下载。