![WOL——通过互联网进行局域网唤醒](https://linux22.com/image/1270975/WOL%E2%80%94%E2%80%94%E9%80%9A%E8%BF%87%E4%BA%92%E8%81%94%E7%BD%91%E8%BF%9B%E8%A1%8C%E5%B1%80%E5%9F%9F%E7%BD%91%E5%94%A4%E9%86%92.png)
我的问题已经非常具体,但可能很容易解决。我按照互联网上的许多指南设置了局域网唤醒,并设法让它运行得很好,尽管我仍然有一个问题。
我可以通过 LAN 甚至 3G 唤醒我的电脑,但是当我通过 3G 发送时,我只能在关闭电脑后大约一两分钟发送(可能更长),但如果花费更长时间,我的电脑将无法启动。
指南中提到了路由器在一段时间后会忘记我的 MAC 地址的问题,但如果这是问题所在,它应该通过专用网络工作吗?我该如何解决这个问题?
我在 DIR-615 路由器上安装了 DD-WRT。我想要唤醒的计算机运行的是 Windows 7 Ultimate。
答案1
WoL 的工作原理是将特殊格式的以太网数据包发送到您计算机的 MAC 地址。如果您在本地网络 (LAN) 上,您可以直接与计算机的 MAC 地址通信,并且 WoL 始终运行良好。
在本地网络之外的任何地方,您都依赖 IP 路由通过网络转发 IP 封装数据包,以到达您的计算机。此转发依赖于最后一跳(从路由器到您的计算机)的 ARP(地址解析协议)。
您的路由器会保存哪些 IP 地址映射到哪些 MAC 地址的记录 - ARP 表 - 它会定期清除陈旧的条目。
在正常网络操作下,路由器首先向网络中的所有计算机(MAC 地址 ff:ff:ff:ff:ff:ff)发送一个 ARP WHOHAS 数据包,请求具有数据包中指定的 IP 地址的计算机以 ARP HAS 数据包进行响应,表明它具有该 IP 地址。该数据包将在 ARP 表中缓存一段时间。
如果计算机处于切换状态(或处于睡眠状态),网络堆栈将无法再做出任何响应,因此 ARP WHOHAS 请求永远不会成功 - 因此路由器无法确定将数据包发送到哪里 - 因此 WoL 会失败。
有两种可能的方法可以解决这个问题:
- 在路由器上设置静态 ARP 条目
如果路由器能够永久存储 MAC->IP 映射,那么这是迄今为止最简单的方法。这样就无需使用 ARP 来尝试发现计算机的 MAC 地址。
- 在本地网络上有另一个永不休眠并能够为您执行 WoL 的网络设备。
似乎真的可以打败物体,但这可能是进行远程 WoL 的唯一方法。