实际上可以在不需要时间同步的情况下允许休眠节点。基本思想是多次发送消息,直到节点最终唤醒。当然还有很大的空间可以进行巧妙的优化,因此有数百种基于此想法的 MAC 层方法。
但是由于您的问题专门询问 MAC 层,其中节点知道何时提前传输,即时分多址 (TDMA),我将重点介绍这些方法。
正如您已经提到的,一个问题是时钟漂移,因此设备必须定期唤醒以进行时间同步。在我们所讨论的典型短距离无线应用中,单跳上的信号传播持续时间本身并不是什么大问题。因此,中央协调器以节点已知的规则时间间隔发送包括当前时间的信标就足够了。
在多跳网络中,它变得更加复杂。仅仅转发信标是行不通的,因为延迟太高了。解决方案是多个(如果不是全部)节点发送信标,即从更靠近协调器的节点接收信标,用它校正自己的时钟漂移,并用校正后的时间发送自己的信标。你只需要避免建立圈子(去过那里,做过......)。
由于现在网络中的每个节点都具有相同的时间概念,因此存在第二个问题:节点如何知道他应该何时醒来进行发送或接收?基本上有四种方法,也可以组合使用:
公共时隙:所有节点同时唤醒并使用基于竞争的访问方法来传输它们的数据包优点:容易(如果您知道如何进行 CSMA/CA)。缺点:容易发生冲突,吞吐量较低。
预定义:对于有限数量的节点,您可以只为节点分配固定插槽。例如,节点 2 可以在第一个时隙中向节点 1 发送,节点 3 可以在第二个时隙中向节点 2 发送。优点:专用插槽,无冲突。缺点:拓扑必须固定(在无线网状网络中非常困难)。
集中式:中央协调器从节点请求有关拓扑的信息,计算全局调度并将其再次分发给节点。优点:不需要预定义的拓扑。缺点:扩展性差,容易发生拓扑变化(整个过程必须重新启动)。
去中心化:两个想要通信的节点自己协商插槽。这非常复杂,因为它们必须确保没有相邻设备同时进行传输。优点:由于协商是本地的,因此可以很好地扩展。缺点:实现复杂。
IEEE 802.15.4 标准中包含两种相关技术,目前受到很多研究的关注:TSCH 和 DSME。
TSCH 本身非常基础。它只解决了时间同步问题,而将时隙分配问题留给了上层。有 6TiSCH 试图填补这一空白,但它仍在进行中。有一些实现,例如包含在Contiki或OpenWSN 中。
另一方面,DSME 已经提供了一种用于分散时隙协商的机制。我们实际上已经构建了一个名为openDSME的开源实现。虽然有运行模拟的视频教程,但遗憾的是,硬件实现的文档仍然不足。如果您想使用它,请提出另一个问题或直接与我们联系。