什么是网络唤醒
网络唤醒(Wake-on-LAN,WOL)是一种计算机局域网唤醒技术,用它可以通过网络唤醒一台计算机。
幻数据包(Magic Packet)
幻数据包是一个广播帧,由6个连续的0xFF字节和16个目标节点的MAC地址组成,用于远程唤醒网络设备。
数据包格式如下
字节偏移 | 原始值 | 说明 |
---|---|---|
0x00-0x05 | 70 70 fc 03 88 c3 | 目标 MAC —— 直投(directed magic packet)。若采用广播则会是 ff ff ff ff ff ff。 |
0x06-0x0b | 64 64 4a 3d c7 f6 | 源 MAC —— 发送工具所在主机的网卡地址。 |
0x0c-0x0d | 08 42 | EtherType = 0x0842,已被 IANA 保留给 Wake-on-LAN。 |
0x0e-0x13 | ff ff ff ff ff ff | 同步流 (sync stream) —— 6 × FF,这正是 WOL 规范的开头。 |
0x14-0x73 | 70 70 fc 03 88 c3 × 16 | 目标 MAC 重复 16 次(96 byte)。抓包截断于 0x73,后面继续是同样的序列,直至填满整个帧。 |
对于实际使用来说,在发包的时候,无需指定源MAC和目标MAC
普通 UDP/TCP/IPv4/IPv6 套接字工作在 L4/L3,开发者只用关心端口和 IP;
L2 细节(MAC 地址、以太类型、CRC 校验和等)由 内核 + 网卡 自动补齐。
这样一来,同一段代码既能在以太网跑,也能在 WLAN、拨号 PPP、隧道接口上跑,而不需要每种介质都重写一次。
自动解析与填充流程
步骤 | 谁来做 | 主要动作 |
---|---|---|
应用层 | send()/sendto() | 只交付 载荷(例如 WOL 魔术包 102 byte)和“目的 IP/端口”或“广播 IP”。 |
内核协议栈 | L4/L3 | 计算 UDP/TCP 校验和 → 封装 IP 头。 |
内核协议栈 | ARP/ND | 如果目的 IP 在本网段:查询 ARP 缓存;没有就广播 ARP,拿到 目的 MAC。若发送广播 IP(255.255.255.255),直接设为 FF\:FF\:FF\:FF\:FF\:FF。 |
内核协议栈 | L2 | 把 目的 MAC(ARP 或广播得到)+ 源 MAC(本机网卡硬件地址) 写入帧头;设置 EtherType(0x0800, 0x0842 …)。 |
网卡硬件 | PHY | 追加 FCS(CRC-32),发射比特流。 |