MAC地址不是唯一的
MAC可以重复,也可以重复。造成这种情况的原因有很多,其中之一是它们不必(全局)唯一。
MAC在本地网络上必须是唯一的,因此ARP / NDP可以完成其工作,并且交换机知道将传入数据报发送到的位置。通常(不一定)满足先决条件并且一切正常,仅仅是因为在同一LAN上拥有两个相同MAC的可能性(即使它们不是唯一的)也很低。
另一个原因是,仅存在的设备多于地址。虽然48位地址听起来似乎每个人的地址在年底之前都足够,但事实并非如此。
地址空间分为两个24位半部分(稍微复杂一些,但让我们忽略一些小细节)。一半是OUI,您可以向IEEE注册并以大约2000美元的价格分配给您的公司。剩下的24位,您可以随心所欲。当然,您可以注册几个OUI,这是较大的参与者所做的。
以英特尔为例。他们已经注册了7个OUI,总共给他们提供了1.16亿个地址。
我的计算机主板(使用X99芯片组),笔记本电脑的主板以及我在过去10到15年间拥有的每台基于x86的计算机的主板中,都有 Intel网卡作为该芯片组的一部分。当然,全球有超过1.16亿台基于Intel的计算机。因此,它们的MAC 不可能唯一(从全局意义上来说)。
另外,据报道,有一些案件……价格便宜……制造商只是在“偷”别人的OUI地址。换句话说,他们只是使用了一些随机地址。我听说过制造商也只将相同的地址用于完整的产品范围。两者都不是真正合规的,也不是很有意义,但是您能做些什么。这些网卡存在。再说一遍:如果将地址用于它们的预期用途,那么变成实际问题的可能性仍然很小,您需要在同一LAN上放置两个地址,以便注意。
现在,如何处理您的问题?
解决方案可能比您想像的要简单。您的物联网设备很可能需要一些时间概念,通常时间是通过NTP自动获取的。NTP的典型精度在微秒范围内(是的,这是微秒,而不是毫秒)。我只是跑ntpq -c rl
了肯定一下,被告知2 -20。
您的两个设备在完全相同的微秒内首次打开的可能性非常低。当然,这是有可能发生的(尤其是如果您在很短的时间内卖出了数百万个,祝贺您成功!)。但这不太可能-实际上不会发生。因此,节省了在永久存储区上首次启动后的时间。
IoT设备的启动时间在每个设备上都相同。除非那不是真的。
给定高分辨率计时器,即使在同一设备上,每次引导时间都明显不同。也许只有几个时钟滴答不同(或者,如果您读到类似CPU的时间戳计数器,则可能是几十万个),因此虽然不是很独特,但是肯定会增加一些熵。
同样,connect
第一次访问API网站所花费的时间会略有不同,但是每次都可以不同。同样,getaddrinfo
初次查找Web API的主机名时,每个设备所花费的时间会略有不同,并且是可衡量的。
连接这三个或四个熵源(MAC地址,第一次上电时间,第一次启动时间,连接时间),并从中计算出一个哈希值。MD5可以很好地达到此目的。在那里,你是独一无二的。
尽管这不能真正保证唯一性,但它“相当”可以保证它具有失败的可能性。您将必须拥有两个具有相同MAC的设备,这些设备在同一微秒内首次打开,并且花了完全相同的时间启动和连接到您的站点。那不会发生。如果发生这种情况,您应该立即开始玩彩票,因为从所有方面来看,您都一定会中奖。
但是,如果“将不会发生”还不足以作为保证,则只需在每个设备首次访问您的Web API时向它们依次传递一个数字(在服务器上生成)即可。让设备存储该号码,完成。