哪种Mesh协议最好?
不能一概而论。 在 Zigbee,Thread 和蓝牙Mesh之间存在着基本的架构差异。 ZigBee和 Thread 可以在使用时可能会用到flooding,但通常使用路由网格来最小化网络开销,从而干扰信息传递。 蓝牙Mesh则允许设备的配置作为路由器来减少flooding的影响。 蓝牙技术联盟(SIG)将此称为"托管式洪峰处理"。
ZigBee和 Thread 网络包括路由节点和终端节点。 路由节点通常是线路供电的,可以作为Mesh的骨干。 端节点通常由电池驱动,在网格的外围运行,并使用路由器传递信息。 在创建网格时,将建立路由表。 路由表是一个分类目录,它告诉每个设备如何与网格中的其他设备进行通信。 通过这种方式,一个节点可以通过网格以精确的路径发送消息,有效地与另一个节点进行通信。 这对网格的吞吐量有积极的影响,并且可以随着网格的增长而减少延迟。
在历史上,路由网格更受欢迎,因为它提供了更高效的通信和可预测的性能。 另一方面,对于协议栈的开发人员来说,路由更难实现。
已经部署的系统,一个产品必须可以交互操作是一个重要的因素考虑。 以住宅为例,其中一些设备可能使用 Zigbee 或 Thread 形成一个Mesh网络。 一个网关或者一个集线器和网关的组合很可能已经将这些设备连接到云端以获得额外的服务。 手机可能也会与云沟通,然后再回到设备上。
为了支持电话到设备的直接通信,或者支持一个生态系统,如苹果 HomeKit,蓝牙连接是必需的。 如果所有的设备都支持该协议,蓝牙就可以与另一个Mesh网络结合起来,或者单独作为一个Mesh网络使用。 在设备中增加对多个协议的支持也可以提供好处,比如使用手机在没有Zigbee 或 Thread 网络的情况下安装或使用设备。
连接需求应该考虑整个生态系统,从终端设备,到任何网关或中心,到应用程序层和服务提供者。 网络技术,如 Zigbee 和蓝牙网格,不能本地支持 IP 必须首先适应网关的 IP。 这个过程涉及到将网络级有效载荷映射到 IP 数据报上,并将网络级有效载荷重新打包。 相比之下,本地网络本身支持 IP,如 Thread,可以在不干预的情况下提前和路由应用程序有效载荷。 在本地网络中加密的数据包可以保持端到端的安全。
ZigBee 和 Thread 的包结构
Zigbee 和 Thread 都使用 IEEE 802.15.4中127字节的数据包,基础数据速率为250 kbps。 虽然相同,但数据包结构不同,导致有效负载的大小略有不同。 图2显示了 Zigbee 数据包格式,结果是一个68字节的有效负载。 对于68字节以上的有效载荷,Zigbee 将碎片分成多个数据包。 Thread数据包格式如图3所示,结果是一个63字节的有效负载。 对于63字节以上的有效载荷,thread协议栈使用6LoWPAN。这些都是构建应用程序时需要关注的设计参数。
图3 ZigBee 的数据包格式
图4 Thread 的数据包格式
它们都会将较大的信息分解成更小的信息。 对于 Zigbee 来说,应用层会发生分段处理,并且从源到目的地进行端到端的执行。 对于线程来说,分割是在6LoWPAN 层完成的。
对于这些网络中的单播转发,一旦设备准备好发送,消息就会被转发。 对于多播转发,有一些网络需求:
对于 Zigbee 设备来说,只在64毫秒抖动之后,设备才会发送多播消息。 然而,在重新传输初始消息之前,启动装置有500毫秒的间隔。
Thread设备使用 RFC7731 MPL 转发多播消息。涓流计时器被设置为64毫秒,这样设备在重新发送之前可以随机返回。
BLE 的包结构
BLE有如下的数据包结构,以减少无线传输时间和功耗。 蓝牙Mesh进一步完善了这个数据包结构,增加了网格和安全性能。
图5 蓝牙Mesh 的数据包结构
这意味着蓝牙Mesh只有12或16个字节可用于有效负载,除此之外,数据包被分割成单独的数据包,然后在目的地重新组装。 这个分段包携带一个header,标识应用中有效负载的分段和12字节,但最后一段除外,它们可以更短。 然而,蓝牙网格规范空间中需要额外的处理这些分段包,从而增加了延迟并减少吞吐量。 由于所有的吞吐量和延迟分析都是基于应用的有效负载,可以看到,蓝牙网格将需要比 Zigbee 或 Thread 更多的数据包。
路由与flooding的对比
Zigbee,Thread 和蓝牙网络是为智能家居和智能建筑设计的。 Zigbee 支持几种路由技术,包括用于路由发现的flooding或群组消息; 网格中控制消息的下一跳路由; 以及通向网关的多对一路由,然后使用到设备的源路由。 Zigbee 网络同时使用所有这些方法也是正常的。
Thread也支持下一跳路由和flooding。 然而,Thread网络将下一跳路由维护到所有路由器,作为正常网络维护的一部分,而不是一个执行路由发现的设备。 Thread还将处理可伸缩性的活跃路由器数量降到最低。 以前,这被视为嵌入式802.15.4网络的限制,因为网络在大量路由器的存在下flooding限制了组播通信的频率和可靠性。 需要注意的是,Thread网络管理了活跃路由器的数目和间隔,不需要用户干预或管理。
蓝牙网支持管理flooding。 这是Mesh上的一个微调,用户可以指定哪些设备参与了flooding。 这将减少flooding的影响,但需要用户确定其网络中路由器的适当密度和拓扑结构,这可能变得很困难。 随着网络条件的变化,哪些设备参与了flooding也可能需要改变,这也将需要用户干预。
蓝牙还有类似于 Zigbee 或 Thread 的终端设备,称为"友邻"设备。 一个友邻装置与一个相邻的有线节点耦合在一起,而友邻的数据包则由有线节点存储。 友邻设备会定期醒来询问邻居是否有任何数据包。 有线节点只在一定的时间段内保存数据包,所以"友邻"需要使用其配对的中继节点进行签入。
图6 蓝牙Mesh 示例
对网格拓扑的研究可以分析网络规模。 这些网络表现得差异很大,在考虑10节点网络或200节点网络时,路由和管理技术往往需要改变。
通常情况下,在一个小网络中,设备可以通过一两跳和非常简单的路由或flooding就可以适合。 随着网络规模的扩大,增加了复杂性,例如设备间的更多的跳跃; 设备的密度,这可能干扰彼此发送消息; 更多的关注延迟和可靠性。 如果使用flooding类型的信息来打开100盏灯,通常不能接受只打开了98或99个开关。 这种类型的问题在10节点网络中很少见,但在100节点网络中可能变得普遍。
硅实验室的测试结论
为了最小化设备测试的可变性,测试可以在固定拓扑中进行,在这些拓扑结构中,射频路径通过分路器和衰减器连接在一起,以确保该拓扑不会随着时间和测试而改变。 硅实验室采用了七跳测试,以确保网络拓扑。 当然,MAC地址过滤也可以用来实现网络拓扑。
关注的度量指标
在以前应用场景中,设计者希望为应用建立一个健壮的网络。 在评估网络的健壮性时,需要关注的测量指标包括吞吐量、延迟和可靠性。 这三种测量方法可以准确地预测给定网络的健壮性。
吞吐量: 定义了网络的可伸缩性(有多少设备可以发送正常的流量) ,以及高级数据操作的行为,如向设备推送固件更新
时延: 描述了行动的发生需要多长时间。 它是涉及最终用户交互的关键参数(而不是机器对机器的通信) ,因为很多人能够体会到超过100毫秒的操作。 对于需要同时进行操作的过程,例如打开多盏灯,时间必须低于100毫秒,以便最终用户不会抱怨灯光连续亮起时产生"爆米花"效应。
可靠性: 但是当用户与诸如灯光和开关等日常设备互动时,用户期望100% 的可靠性。 实际上,硅谷实验室测试的可靠性达到99.999% 。
无论使用什么样的无线技术,这些都是Mesh网络测量的关键因素,并且与设备和无线系统的设计目标密切相关。
基准测试
硅实验室使用了无线 Gecko SoC 平台进行了测试,该平台可以运行蓝牙网、线程、 Zigbee 和专有协议, 同时使用了硅实验室的蓝牙、线程和 Zigbee 软件协议栈。 测试环境是一个商业办公大楼,有活跃的 Wi-Fi 和 Zigbee 网络。 无线测试集群被部署在走廊、会议室、办公室和空旷地区。
100字节有效负载的吞吐量
图7 吞吐量与多跳的对比
典型的网络包括两到三跳,吞吐量根据跳数不同而变化,协议性能随着跳数的增加而变得相似,蓝牙Mesh的小数据包有效负载导致吞吐量减少。