为什么 LAN 唤醒数据包包含 16 个目标 MAC 地址重复?

为什么 LAN 唤醒数据包包含 16 个目标 MAC 地址重复?

来自Wireshark 网页

目标 MAC 块包含目标 IEEE 地址的 16 个副本,没有任何间断或中断。

这 16 个重复有什么具体原因吗?

答案1

我认为,该值必须正好是 16。

魔包技术(白皮书,出版物编号 #20213)由 AMD 和惠普于 1995 年左右开发。第 2 页摘录:

“由于以太网控制器已经具有内置地址匹配电路......”他们建议重新使用它,添加一个计数器“计算 IEEE 地址的 16 个重复项”。

他们的理由是,添加 WOL 应该很简单,而实际实现则完全没有限制。这似乎不是历史性的武断(“哦,16 看起来足够长”),因为:

  1. 基于您已有的/您知道的。例如,假设我们喜欢 2 的幂,因此喜欢十六进制数字。方便的是,十六进制数字(4 位)保存 0-15 之间的正值。我们的处理器会检查所有数学运算,如果我们尝试将 1 添加到已经“最大”的值(例如 15),则会设置溢出“标志”。因为这很常见,我们甚至可能有一个针对溢出条件的特殊指令,因此在伪代码中:

    Initialize a single counter that holds values from 0-15.
    Set it to 0.
    Watch the network. When I see the signal:
    Loop:
      Do I see my address at the right spot?
      Yes: Add 1 to counter.
        Did I just overflow? (15+1 = 0?)
        Yes: Jump out of loop to "wake up" code.
    ...otherwise
    Loop again.
    
  2. 芯片信号线。AMD 提到的“电路”非常深奥,所以您真正需要知道的是,我们可以想象一个简单的情况,其中“设置为 1 的位”对应于芯片中某处的“高”电压,在“引脚”处可见。

Arduino 就是一个很好的例子:将内存位设置为 1,Arduino 就会将输出引脚设置为“高”。这种电压变化通常通过驱动 LED 来演示,但通过晶体管的魔力,它可以自动激活、中断或“唤醒”其他电路或芯片。

让我们假设一个更自然的十六进制表示(两个十六进制数字,如 FF,经常出现在 IP、掩码和 MAC 地址中)并将 Arduino 的“输出引脚 5”与计数器中的“位位置 5”绑定:

Memory      Value  Event
0000 0000   00     Nothing, so keep adding 1...
0000 1111   0F     Nothing, but add 1...
0001 0000   10     Arduino pin 5 high. New voltage interrupts other circuits.

因为内存位置与该引脚绑定,所以它很优雅,而且都是硬件:只需不断加 1,无需干扰驱动程序或 BIOS 开发人员代码。反正你只是一个电路制造商。你将提供一个高电平引脚,供其他芯片制造商的硅片使用,这是每个人都在做的事情。在现实世界中,它稍微复杂一些(例如,ENC28J60 规范以可怕的细节阐述了这一点),但这就是要点。

在此之后,人类的显而易见性似乎更像是副作用而不是目标。对于计算机来说,4 个 MAC 副本就足够了,但现在计数器不会溢出,而且它不再简单。因此,更有可能的目标是让尽可能多的硅片、驱动程序和 BIOS 设计师实现它,而 16 让每个人都可以在“溢出”和直接信号之间进行选择,而无需重新架构和重新设计。

扮演人类检测的魔鬼代言人,那么下一个具有相同灵活性的更高数字怎么样:256?这不起作用:数据段本身会产生比以太网帧更大的 WOL 数据包(当时) 可能。

所以对我来说这意味着 16 是 WOL 段的唯一值是。

答案2

是的。这很简单,而且有人意外发送这些数据的可能性几乎为零。

您想要简单,因为 NIC 中功率非常低的微控制器必须能够永久监视原始以太网网络流量,并在看到这种模式时采取行动,并且您不想意外打开系统,因为随机网络数据流是打开系统的命令。

答案3

我认为这主要是为了确保只有魔术包才能真正唤醒计算机。当扫描数据包时,会发现此序列没有查看任何协议标头(例如 IP 地址、端口号),数据包必须易于识别,误报率接近于零。随机网络协议发送包含 16 倍计算机 MAC 地址的数据包的概率接近于零,但如果只有一次重复,误报率就会高得多。

答案4

16,因为数到 16 是极其简单的逻辑。重复 MAC 地址是因为芯片上已经有地址匹配逻辑。AMD 白皮书

相关内容