首先让我们解释一下上下文,对于一门课程,我必须创建一些协议来节省IoT IEEE 802.15.4 网络中的功耗(因此如何优化路由,故障检测等。)以节省能源,因为设备使用电池供电)。网络应该是一棵树,每个节点只有一个父节点(我知道这不是最好的解决方案,但那是老师的要求)。我们必须使用Rime的广播和(r)单播来构建它。 Rime地址是两个8位值(可以扩展为两个16位值,但我要避免使用它们来使数据包尽可能小)。
在contiki上一切正常,因为rime会自动为节点分配地址(基于将节点添加到模拟时给出的节点ID)。当使用硬件时,所有节点都具有相同的硬编码ID(因此具有相同的地址),并且当然没有任何作用。因此,我开始考虑如何为网络中的新节点分配地址?
提出了不同的解决方案:
请勿动态执行此操作,并在要添加到网络的每个新节点中对地址进行硬编码。根据我的阅读,这是一种常见的做法,但是我对此并不满意,因为它对用户不太友好,我们必须维护每个网络中所有给定地址的列表。
所有连接到网络的节点都必须询问根节点它们可能采用的地址(就像在普通的Internet网络上一样),但这需要双向的大量消息,而且这些设备确实很慢。这将花费大量时间,并且不仅会在根节点和新节点上而且还会在它们之间的所有节点上消耗大量能量。此外,根节点将跟踪已经给定的所有地址,并且它们没有太多的内存,因此当有很多节点时...
与 2。中的想法相同。但是在此,父节点不会为新孩子提供唯一的地址,而是提供一系列地址,孩子将选择一个地址并将其能够给他的孩子们一个新的范围(同样,这是普通网络所做的事情)。这是比以前更好的解决方案,但是最大的缺点是我们的网络深度有限(很多)。如上文所述,地址是两个8位的值,这使65536个不同的地址成为可能,并且使用此解决方案,网络的最大深度将为6,因此在最坏的情况下,只能将6个节点添加到网络中...
最后一个想法是让新节点在启动时选择一个地址。这将是一个随机值。因此,我试图找到在网络上拥有两倍相同地址的可能性,并且我意识到这是与birthday problem相同的问题。经过一番数学运算后,我发现了以下统计数据:
我们可以看到它很快就增加了重复的机会,对于300个节点,我们有50%的机会重复节点。当我们仔细观察时,可以发现在40个节点以下,重复节点的机率不到1%,这成为可接受的概率。
但是我们仍然有可能有重复的节点,这对于小型网络是可行的,大型网络将需要将地址编码为两个16位值(我试图避免这种情况)。该地址的两个16位值的优点是,即使对于相当大的网络(没有图形或数字显示……),具有重复节点的机会也非常低。我的计算机不喜欢计算2 ^ 32!)
首先,感谢您阅读这里。我知道这可能不是实际问题,而是更多的讨论,但我仍然希望对这个问题有一个好的解决方案。
我应该选择哪种选择?简单的解决方案,不要试图使 这是动态还是动态可能的解决方案?有一些 已经解决了这个问题的 protocols (不确定这是不是正确的术语)?
欢迎任何对我的推理提出建议或批评的人,任何新主意都将受到欢迎。
感谢您花时间阅读所有这些内容。