我在公司网络中设置局域网唤醒时遇到一个奇怪的问题。
以下情况对于要唤醒的工作站是正确的:
- 在 BIOS 和网卡设置中启用了 WOL
- 路由器将始终为该工作站分配相同的 IP 地址(MAC 地址)
- 网卡配置为自动获取IP地址
发送 WOL 命令的工作站与要唤醒的工作站位于同一子网中。现在,如果我尝试唤醒机器,会发生以下情况:
开始条件:机器已关闭一天或多天
- 如果我通过网络广播发送 WOL 命令(仅允许测试),机器将成功唤醒
- 如果我直接向该工作站发送 WOL 命令(使用 IP 地址、子网掩码、DNS 名称),该机器将不会唤醒。
- 仅当我至少手动启动机器一次后,才能通过向其 IP 地址直接发送 WOL 命令来唤醒机器。
有人知道为什么如果机器关闭时间较长,则无法通过其 IP 地址直接唤醒,以及为什么如果我使用“广播”作为 WOL 方法,这会起作用?
任何回复都将不胜感激。
答案1
正如@ott的评论所提到的,您不能将单播流量发送到当时未在网络上活动的机器。“在网络上活动”对不同的设备有不同的含义...对于第 3 层设备(如您的 PC 或路由器),它意味着“此设备在过去 4 小时内的某个时间与机器对话过”(取决于 arp 超时),对于第 2 层设备(如交换机),它意味着“交换机在过去 5 分钟的某个时间看到了带有该源 mac 地址的数据包”(取决于 mac 老化时间)。
您指出,单播 WOL 在设备打开然后关闭时有效,但您没有说明它是否会在机器关闭后的某个时间停止工作。这是因为路由器(或在同一子网中生成 WOL 数据包的 PC)具有 arp 条目(4 小时超时)并且可以创建发往正确机器的数据包,但是交换机要么知道 mac 地址所属的端口(WOL 在 mac 老化时间内发送),要么已经使该 mac 地址超时,因此它将未知目的地视为广播。一旦 arp 条目超时,路由器(或 PC)将无法封装 WOL 数据包,因为它没有任何内容可放入 dest-mac 字段。
要实现此功能,您需要使用广播,没有其他可靠的方法。要使 WOL 在与服务器所连接网络不同的网络上工作,您需要使用定向广播数据包(发送到远程网络广播地址的单播数据包,正确配置的远程路由器将允许该数据包并将其作为广播发送到目标网络)。