Wol -> Wake On Lan ,局域网唤醒

阅读本文需要有一定的知识储备和使用经验

这功能 只能局域网 里用,原因是依赖 MAC 地址

进电脑固件设置需要有一定能力,乱改设置把电脑开不了机了和 UP 没啥事

本文介绍的是 Wake On Lan <- 划重点,是局域网,要看 WAN 的,请看3 其他问题.2 最好的方法

Wol^1是一种网络标准,允许通过网络消息启动关机状态的计算机,俗称远程开机局域网

前提条件

  • 主板支持:首先,你的电脑要支持远程开机没有硬件功能软件再好都没用,一般来讲,电脑支持 PCIe 2.2 标准(其实这个标准很早就推行了)
  • 保持供电:没电你用毛电脑
  • 网卡支持:你的电脑网卡要与路由器有线连接。无线也行,但需要支持 WoWLAN 的补充标准(可以加钱解决一切问题 -> 换网卡)

    注:有的老\差网卡可能不支持远程开机,具体方法除了查阅说明书外,也可在关机状态下将网线插上去,看看插在 路由器、交换机 上的状态灯会不会亮起,通常有网络包时,电脑网卡的状态指示灯也会闪一下。(不一定,也可能没有设置关机时开启此设备)

配置步骤

启用幻数据包支持

在 BIOS、EFI 固件中配置

在开机时准确按下进入BIOS Setup的键,包括但不限于F2DEL等等进入 BIOS 设置菜单
找到与下列短语有关的配置:

  • remote wake-up
  • wake on WAN
  • resume by LAN
  • resume on LAN
  • wake up on LAN
  • power on by LAN
  • power up by LAN
  • resume by PCIe
  • resume on PCIe
  • wake up on PCIe
  • power on by PCIe
  • power up by PCIe
  • 唤醒设置
  • 幻数据包

等等,总之和 wakeWANLAN这些词,也可能在PCIe之类的菜单里出现

BIOS 中不一定存在和网络唤醒有关的设置,但新电脑通常都会有相关设置

列如用来举例的这台电脑,BIOS 里和网络有关的东西一点没有,但它的板载网卡确实支持网络唤醒。

在系统中配置

无论魏晋,在前面配置了,在这里也要配置

进入操作系统,在开始中搜索devmgmt.msc,打开设备管理器(其实右键 Win 菜单也有个设备管理器,但照顾一下Win7的用户)

  1. 找到 网络适配器 ,然后找到你的网卡(譬如Realtek PCle GbE Family ControllerQualcomm Atheros AR8151 PCI-E Gigabit Ethernet Controller (NDIS 6.30)
  2. 双击打开设备属性,找到 电源管理 ,勾选 允许系统关闭此设备以节约电源允许此设备唤醒计算机
  3. 至于下面这个 只允许幻数据包唤醒计算机 可勾可不勾
    如果勾了,那么只有特定的 Wol 网络帧才能唤醒计算机;如果不勾,则只要有与该网口有关的网络通讯,都会唤醒计算机(不与该网口有关的不会唤醒,所以不需要担心网络上搞个广播电脑自己开了)
    如果不勾,可能本来没想打开的设备会莫名其妙打开也不知道咋回事,可以勾上(犹在公共场合,可以防止骚扰)
    一般还是建议勾上。
  4. 切换到 高级 选项卡,将属性 关机网络唤醒魔术封包唤醒什么奇怪翻译Wake on magic packet 之类名称的值设置为 开启Enabled
  5. 应用后退出

电源设置

没错,这个也要配置

对于 用户 来讲。PC有以下几个状态

  • 睡眠

但其实还挺复杂,光关机就有 2 个状态

描述后的部分是重新写的,因为 原文 实在看不懂

参见下表

状态 ACPI 状态 描述
正在运行Working S0 G0 系统完全可用。 未使用的硬件组件可以通过进入较低的电源状态来节省电源。
新 式 待 机Modern Standby睡眠 S0 低功耗 某些 SoC 系统支持称为 新式待机 的低功耗空闲状态。在此状态下,系统可以非常快速地从低功耗状态切换到大功率状态,以响应硬件和网络事件。支持新式待机的系统不使用 S1-S3。原文如此
睡眠Sleep S1 S2 S3 系统似乎已关闭。 S1-S3 状态消耗的电力量小于 S0,S4以上。 S3 消耗的功率小于 S2,S2 消耗的功率于 S1。 系统通常支持这三种状态之一,而不是全部三种状态。在 S1-S3 状态的状态中,将刷新易失性内存以保持系统状态。 某些组件保持电源,以便计算机可以从键盘、LAN 或 USB 设备的输入中唤醒。在桌面上使用的混合睡眠是系统使用具有 S1-S3休眠文件的地方。 休眠文件保存系统状态,以防系统在睡眠时断电。注意: 支持新式待机的 SoC 系统不使用 S1-S3。就是睡眠,其中S3态最常见
休眠Hibernate S4 系统似乎已关闭。 能耗降低到最低水平。 系统将易失性内存的内容保存到休眠文件以保留系统状态。 某些组件保持电源,以便计算机可以从键盘、LAN 或 USB 设备的输入中唤醒。 如果工作上下文存储在非易失性媒体上,则可以还原它。快速启动 是在创建休眠文件之前注销用户的位置。 这允许较小的休眠文件,更适合具有较少存储功能的系统。系统将内存的内容保存到休眠文件中,然后把休眠文件丢掉系统根目录里,然后关闭电脑。原文说还要给某些设备如 USB 供电,以便快速打开电脑,至少我到现在也没见过实现这个功能的电脑,此外,这个状态电脑是可以 G3 的 (都关机了肯定可以呀)
软关机Soft off 关机 S5 G2 系统似乎已关闭。 此状态由完全关闭和启动周期组成。就是平常你点 关机 后的状态
机 械 关 闭Mechanical off 完全关机 G3 系统完全关闭,无需电源。 系统仅在完全重新启动后返回到工作状态。系统完全断开电源,除时钟电池及相关模块保持供电外,不消耗电力

从 Windows 8.1 开始至今(Windows 11),系统将 快速启动(S4)作为默认的关机方式。而在这种关机状态下,是 不支持 网络唤醒的。

休眠快速启动的原理是一样的,但应用场景不同,写入休眠文件的内容也不同

就一般来讲,休眠会把几乎所有内存都写入内存文件,而快速启动只会写入譬如驱动程序、服务的内存进内存文件。

这也是大多数 WoL 相关的教程(包括本文)都会教你 关闭快速启动的原因:

如果你的电脑不支持休眠,那也肯定不支持快速启动

  1. 打开 控制面板
  2. 硬件和声音 -> 电源选项 -> 更改电源按钮的功能
  3. 在下面的 关机设置 里 取消勾选 启用快速启动(推荐)
    (如果是禁用状态无法设置,先点击 更改当前不可用的设置 进行授权)

验证

唤醒设备

命令提示符运行

1
powercfg -devicequery wake_armed

C:\Users\Administrator>powercfg -devicequery wake_armed
Qualcomm Atheros AR8151 PCI-E Gigabit Ethernet Controller (NDIS 6.30)

C:\Users\Administrator>
这里可以看到只有网卡一个设备被允许唤醒计算机

电源状态

可以 Win + R 运行下命令查看支持电源状态:

1
cmd /k powercfg /a

可以看到系统只有 S3 睡眠

C:\Users\Administrator>cmd /k powercfg /a
此系统上有以下睡眠状态:
待机 (S3)

此系统上没有以下睡眠状态:
待机 (S1)
系统固件不支持此待机状态。

待机 (S2)
    系统固件不支持此待机状态。

休眠

无法检索详细理由说明此系统上的睡眠状态不可用。
C:\Users\Administrator>_

成果

如果没有其他问题,将配置好的本机正常关机;再通过别的电脑之类的,就可以尝试远程启动这台电脑了。

可以用 WOl.exewakeonlan

DOWN:https://www.gammadyne.com/wol.exe

具体用法就不说了

其他问题

断电恢复

因为 WoL 的原理是关电脑不关网卡:虽然关机了,但网卡仍然处于低功耗工作状态。 如果意外断电,所有硬件——都得离线关闭这不废话吗,除了时钟芯片有电池,别的没电有毛用

系统离线后再恢复供电,在重新上电后,大概可以自动恢复到断电之前的状态;
有些就不行了,因此网络唤醒就失效了。

  • BIOS 里是否支持 Restore AC Power Loss blue断电恢复 / 来电开机 / 意外断电后来电状态 ),设置为 label Last State blue之前的状态 / 断电前的最后状态

最好的方法

Wol包实际上是一个网络帧

大概长这样:

Offset | 0 1 2 3 4 5 6 7 8 9 A B C D E F |
00000000 | FF FF FF FF FF FF 50 E5 49 58 91 8A 50 E5 49 58 |
00000010 | 91 8A 50 E5 49 58 91 8A 50 E5 49 58 91 8A 50 E5 |
00000020 | 49 58 91 8A 50 E5 49 58 91 8A 50 E5 49 58 91 8A |
00000030 | 50 E5 49 58 91 8A 50 E5 49 58 91 8A 50 E5 49 58 |
00000040 | 91 8A 50 E5 49 58 91 8A 50 E5 49 58 91 8A 50 E5 |
00000050 | 49 58 91 8A 50 E5 49 58 91 8A 50 E5 49 58 91 8A |
00000060 | 50 E5 49 58 91 8A |
结构就是 (6*ff + 16*MAC)
也是很奇怪的东西,喊一声,然后在网上喊16遍你的名字,试图叫醒你。,肯定走UDP协议,只去不回,不需要客户端应答。

附表:传输协议层级

TCP/IP 五层模型 常用协议
5 应用层 HTTPS、HTTP、Telnet、FTP、SMTP、DNS、RDP
4 传输层 TCP、UDP
3 网络层 IP、ICMP、RIP、IGMP、OSPF
2 数据链路层 以太网、令牌环、PPP、PPTP、L2TP、ARP、ATMP
1 物理层 网线、光纤、电磁波

WoL 在 2 层 数据链路层 传播。
从上表可以看到,由于无关具体的传输协议(TCP / UDP)但实际通常用UDP,只要网卡识别到特定的 广播帧 就会唤醒电脑。

如果使用内网穿透,从 WAN 直接发送 WoL 请求,就必须依靠路由器的ARP 绑定端口映射 来精确地把数据包塞到设备嘴里。麻烦不说,还不稳定

那咋办呢,弄端口映射还挺麻烦,所以可以换一种方法,
网络唤醒在局域网中是管用的,所以可以用 SSH 连接到内网设备上(NAS、服务器)的终端,用发包程序(如WOL.exe)把幻包发出去,这样就实现了 Wake On Wan,也不需要弄静态 ARP。


@注解

  1. WoL 技术由 AMD 和惠普共同开发,于 1995 年作为标准提出。此后,该标准很快被 IBM、Intel 和其他公司采用。