每次我打电话给我的 ISP 投诉
我无法访问互联网。
,他们问我
您是否拔下了路由器的电源插头,等待了几分钟,然后重新插上电源?
我不明白为什么固件还没有为我做到这一点。每 60 秒 ping 一次(例如 google),如果失败,则启动系统重置,这应该很容易。连续执行 3 次,然后放弃并通知用户自我诊断结果。
此外,根据我的经验,固件开发从遍布代码的调用中受益匪浅assert()
。这些调用通常会在开发过程中挂起设备(while(1);
),以便向开发人员指出问题所在。当出现 aseert() 时,为什么不快速记录一条日志消息,然后正常重启呢?运行时吹气? 路由器是软实时机器,因此,为了容错而出现一些停机时间(用户不需要像某些野蛮人一样从电源适配器重新启动路由器)是值得的。
为什么手动重启路由器仍然是一项经常需要执行的任务?
答案1
因为它的硬件和软件质量不达标,无法处理所有故障情况,例如电压峰值、突然的链路故障或内存泄漏。经过全面测试的路由器(如思科或瞻博网络的路由器)可能在其使用寿命内永远不需要重新启动,除非您遇到罕见的错误或更新软件。
答案2
通常这不是路由器本身的故障,而是 ADSL/Cable 调制解调器方面的故障。
线路上的电压尖峰可能会导致调制解调器进入锁定状态,从而导致通信失败。这就是为什么您的 ISP 会要求关闭并重新打开这个老生常谈的问题。线路上的电压尖峰可能由多种原因造成,包括该地区的雷电或公共网络中的连接故障。如果您经常断开连接,那么这听起来像是一条不可靠的链路。
大多数专业级路由器都具有某种链路监控功能,并会重新启动锁定的链路。多年来,我已经将此类监控写入许多系统。大多数家用级设备由于成本原因没有这样做。它们只是变得更便宜了 - 它们没有软件脉冲 UART 或其他线路驱动器芯片的复位引脚的能力。
顺便说一句,你只需要尝试联系沿途的下一个设备。如果世界上所有的路由器每隔几分钟就 ping 一下像 Google 这样的设备,Google 就会非常不高兴。