Answers:
我认为该值必须恰好是16。
AMD和惠普大约在1995年之间开发了Magic Packet Technology(白皮书,出版号#20213)。从第2页开始:
他们建议重新使用它, “因为以太网控制器已经具有内置的地址匹配电路...” ,因此增加了一个计数器 “以计算IEEE地址的16个重复项”。
他们认为在添加WOL时应该轻而易举,同时又要使实际的实现大为开放。从历史上看,这似乎不是任意的(“哦,16个看起来足够长”),因为:
建立在您拥有/知道的基础上。例如,假设我们喜欢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.
芯片信号线。AMD对“电路”的引用引出了深层次的讨论,因此您真正需要知道的是,我们可以想象一个简单的情况,其中“位设置为1”对应于芯片某处的“高”电压,该电压在芯片上可见。 “销”。
Arduino是一个很好的例子:将内存位设置为1,而Arduino将输出引脚设置为“高”。这种电压变化通常通过驱动LED来演示,但是通过晶体管的魔力,它可以自动激活,中断或“唤醒”其他电路或芯片。
让我们假设一个更自然的十六进制表示形式(在IP,掩码和MAC地址中经常出现两个十六进制数字,例如FF),并将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规范以令人恐惧的细节进行了布局),但这就是要点。
此后,人类的显而易见性似乎比目标更具副作用。对于计算机,您的MAC的4个副本就足够了,但是现在该计数器不会溢出并且不再简单。因此,目标似乎更有可能是由尽可能多的芯片,驱动程序和BIOS设计人员来实现,而16则使每个人都可以在“溢出”和直接信号之间进行选择,而无需重新架构和重新配置。
扮演魔鬼提倡人类探测的倡导者,下一个具有相同灵活性的更高数字:256?那是行不通的:仅数据段会产生一个WOL数据包,该数据包大于当时的以太网帧。
所以对我来说,这意味着16是唯一的价值WOL段可以是。