深入解析Zigbee与无线Mesh网络技术

本文详细探讨了Zigbee无线通信协议及其Mesh网络架构,涵盖设备类型、安全机制、数据包嗅探和网络加入过程,并通过实际案例展示家庭自动化中的技术实现与安全挑战。

理解Zigbee与无线Mesh网络

前言

最近,我购买了一些家庭自动化设备,以便研究Zigbee并更好地理解这种非常流行的无线技术如何与物联网(IoT)互联,并确定该平台的实际安全性。我之前对使用蓝牙低功耗(BLE)Mesh拓扑的家庭自动化有所了解。然而,物联网设备取得了重大进展,包括但不限于:连接极低功耗设备(在许多情况下为电池供电且可持续数年)、低数据速率(20-250Kbits/秒)提供更可靠的通信,以及自形成和自修复网络,这些网络随着需求增长而扩展。

以下文档概述了我对Zigbee协议及其Mesh拓扑的研究,因为它适用于小型和大型自动化。希望其他人能从我在此过程中发现的信息中受益。

有用硬件

研究Zigbee协议的初步准备包括熟悉一些现有的硬件,用于分析和与Zigbee网络交互。很快我发现,一个非常流行的Zigbee嗅探器是RZRaven USB Sniffer,它预装了RiverLoop Security的Killerbee框架(https://github.com/riverloopsec/killerbee)(售价约100美元)。不幸的是,经过 exhaustive 搜索,我发现RZRaven已停产,无处可寻。

通过社区联系,我了解到另一个名为ApiMote的dongle也存在,它也预装了Killerbee框架。我还发现它可以通过Attify Store(https://www.attify-store.com/products/apimote-for-zigbee-sniffing-and-transmission)以149美元的价格获得。这个收发器dongle还能够进行数据包注入!

其他考虑的Zigbee嗅探器包括Nordic的nRF52840(https://www.mouser.com/new/nordic-semiconductor/nordic-nrf52840-usb-dongle)和Texas Instruments CC2531(http://www.ti.com/tool/PACKET-SNIFFER)。TI CC2531选项还附带一个令人印象深刻的GUI软件应用程序,用于解析和显示捕获的数据包。

我决定选择Api-Mote/Killerbee dongle,以及非常便宜的Texas Instruments CC2531 USB dongle(成本低于10美元)。

为什么选择Zigbee?

有些人可能会问:“为什么选择Zigbee?我们已经有了Wi-Fi和蓝牙短距离通信标准,它们提供更大的范围和支持更高的数据速率。”虽然更大的范围和更高的数据速率允许使用Wi-Fi进行出色的流媒体视频(以及在较小程度上使用蓝牙进行音频流媒体),但(Zigbee)控制和传感器网络的要求远不那么苛刻。从技术上讲,这正是Zigbee是更好选择的原因,因为控制和传感器网络节点通常彼此相距不到几米,所以范围几乎不是问题。并且可以使用非常小的数据包大小建立节点之间的通信,从而允许非常低的数据速率(20-250 kbps)。较低的数据速率和接近的节点产生更可靠的通信(更少的重试等),并且与低功耗、电池供电的端点设备配合良好,随着网络规模的持续增长,成本大幅降低。

背景信息

Zigbee是一种开放标准无线技术,旨在促进低成本、低功耗的无线物联网(IoT)网络。

具体来说,Zigbee是一种低成本、低功耗、自形成、自修复的无线Mesh网络标准解决方案,旨在提供无线控制和监控应用,重点支持电池供电、低数据速率设备。该协议通常用于家庭自动化(HA)和商业建筑自动化、工业控制系统以及医疗/保健行业。

Zigbee集成电路(IC)包括在未许可的ISM(工业、科学和医疗)频段运行的微控制器和无线电:全球大多数地区为2.4GHz。有一些设备使用sub-GHz(中国745MHz,欧洲878MHz,美国和澳大利亚915MHz),但这通常是规则的例外。Zigbee在2.4GHz ISM频段使用16个通道(11-26),每个通道宽2 MHz,通道间间隔5 MHz。应该注意的是,当Zigbee网络首次形成时,协调器(hub)将扫描可用通道并选择最佳通道进行操作(最少RF干扰),并且将来只使用该一个通道(无通道跳频)。

Zigbee是一种基于IEEE 802.15.4的无线网络标准,基本上用于传感器和控制系统之间的双向通信。Zigbee是一种短距离无线通信标准,如蓝牙和Wi-Fi,同时覆盖10到100米的范围。

通过创建可以相互通信的设备网络(在Mesh网络中),10到100米的范围可以显著扩展,使其在商业照明和工业控制自动化应用中非常有用。新设备(节点)可以轻松加入网络(理论最大限制为65,000个节点)。通信流量的重新路由(由于节点故障)为网络提供了一种自修复形式。

Zigbee端点设备(灯、插头、传感器、开关、恒温器等)功耗极低,可以在小电池上持续数年。此外,Zigbee基于开放标准的事实确保消费者和开发人员设备将互操作。

简史

Zigbee已经存在很长时间,最初在1990年代构想。IEEE 802.15.4-2003规范于2004年批准,并在次年提供,称为Zigbee 2004规范。2006年,引入了升级规范作为Zigbee 2006规范,用Zigbee集群库(ZCL)替换了2004堆栈的“键值”对结构。该库由标准化命令和属性组成,组织在组(集群)下,名称如智能能源、家庭自动化、Zigbee光链接等。

2007年,引入了Zigbee Pro,始终保持与Zigbee传统网络的后向兼容性。Zigbee Pro设备可以加入传统网络,传统设备可以加入Zigbee Pro网络。然而,路由选项不同,导致Zigbee Pro设备在传统网络上必须成为非路由Zigbee端点设备(ZED),而传统Zigbee设备在Zigbee Pro网络上必须成为ZED。

根据德国计算机电子杂志Heise Online,Zigbee家庭自动化1.2(2013)正在使用已知且无法更改的回退密钥进行加密协商。这使得许多传统设备上的加密高度脆弱。有趣的事实:当时,ZigBee联盟定义的著名默认全局信任中心链接密钥,默认值为5A 69 67 42 65 65 41 6C 6C 69 61 6E 63 65 30 39(ZigBeeAlliance09),如果在加入时应用程序未指定其他链接密钥,则设备使用或支持该密钥。注意:Zigbee 3.0(及以后)如果设备尝试使用著名的“ZigBeeAlliance09”信任中心链接密钥进行身份验证,则静默忽略加入网络的请求。

Zigbee开发平台

EmberZNet是Silicon Labs对Zigbee的实现。它包括核心Zigbee堆栈、Zigbee集群库支持和应用程序框架。借助Simplicity Studio中的AppBuilder,开发人员可以轻松创建可以在Silicon Labs开发套件之一上运行的Zigbee应用程序。

Z-Stack是SimpleLink™ CC13x2 / CC26x2软件开发工具包的一个组件。该组件支持开发基于Zigbee® 3.0规范的产品。Z-Stack是TI在CC13x2和CC26x2平台上开发认证Zigbee 3.0解决方案的完整解决方案。

Zigbee联盟

Zigbee联盟董事会由来自亚马逊、苹果、康卡斯特、谷歌、宜家、The Kroger Co.、LEEDARSON、Legrand、Lutron Electronics、MMB Networks、NXP Semiconductors、Resideo、施耐德电气、Signify(前飞利浦照明)、Silicon Labs、SmartThings、Somfy、Texas Instruments和Wulian的高管组成。

Zigbee联盟成立于2002年,是一个由500多家公司组成的团体,维护和发布Zigbee标准。该组织发布应用程序配置文件,允许多个OEM供应商创建可互操作的产品。IEEE 802.15.4和Zigbee之间的关系类似于IEEE 802.11和Wi-Fi联盟之间的关系。

截至2021年5月11日,Zigbee联盟已更名为连接标准联盟(CSA)。

技术信息

Zigbee设备类型:

  • Zigbee协调器(ZC)
  • Zigbee路由器(ZR)
  • Zigbee端点设备(ZED)

Zigbee网络恰好有一个Zigbee协调器(ZC),负责形成和协调网络。形成包括选择PAN ID(个人区域网络标识)以识别网络并确定要操作的物理无线电通道。协调器还负责配置和验证加入网络的路由器和端点设备。协调器是信任中心,并存储所有关于Zigbee网络的关键信息,包括加密密钥和链接密钥。

Zigbee路由器(ZR)代表中间节点,以协助网络中节点之间的数据中继。它们在构建Zigbee网络(交换数据包)中起重要作用。Zigbee路由器通过增加网络范围(在整个Mesh网络中中继数据包)、增加交换数据包的可靠性以及提供附加节点加入网络的手段(在协调器的帮助下)来增强Mesh网络。Zigbee路由器的一个好例子可能是智能插头(由墙壁插座供电)。该设备有无限的主电源供应,因此始终开启。这个智能插头是全功能设备(FFD)的事实使其成为路由流量的理想选择,并成为减少功能(RFD)端点设备的父设备的强候选者。

Zigbee端点设备(ZED)是逻辑上附加到Zigbee路由器(ZR)的节点,通常是诸如灯、插头、传感器、开关、恒温器等设备,并且仅与它们相关的Zigbee路由器(父设备)通信。ZED通常是电池供电设备,并且大部分时间处于睡眠状态。它们不能直接与其他Zigbee端点设备(ZED)通信。在这个意义上,ZED被认为是减少功能设备(RFD)。

ZED具有较低的功耗要求(由于主动睡眠模式),并且可以在电池上实现长寿命。相比之下,ZR和ZC(始终唤醒)具有高功耗要求,因此不能由电池供电。

ZED通常大部分时间关闭(睡眠模式),因此无法实时接收发送给它们的任何流量。它们定期唤醒并通过查询它们逻辑连接到的(父)路由器(ZR)来检查消息。注意:路由器缓冲 intended for the ZED(子设备)的数据,并且仅在ZED唤醒时轮询时发送该数据。唤醒时间由应用程序开发人员定义,而不是Zigbee规范。

ZED可以在唤醒时立即与它们的(父)路由器通信,因为ZR始终唤醒。

Zigbee堆栈

物理层

物理层包括物理无线电和MAC层的接口、无线电开/关控制、调制和解调、通道选择、链路质量估计和能量检测。Zigbee无线电与Wi-Fi共享2.4 GHz ISM频段,并使用16个通道(11-26),每个通道宽2 MHz,通道间载波间隔5 MHz。

MAC层

在MAC头中,有一个2字节字段“帧控制”。位0-2指示帧类型。通常,有四种帧类型:

  • 信标,用于扫描网络
  • 数据,用于从更高层传输数据
  • ACK,确认
  • MAC命令,MAC层的控制命令,如MAC关联过程。

在每个MAC帧的末尾,有两个字节CRC用于验证数据包的完整性。

网络层

网络层位于MAC层和应用支持子层(APS)之间,是网络管理发生的地方。网络层负责网络结构、路由和安全。

设备类型 IEEE-802.15.4定义两种网络设备类型:

  • FFD,全功能设备,能够执行IEEE 802.15.4标准中描述的所有职责,并可以接受网络中的任何角色。
  • RFD,减少功能设备(通常电池供电),能力有限。

注意:RFD设备的处理能力和内存大小通常小于FFD设备。

在Zigbee中,有三种物理设备类型:

  • 协调器(形成网络,具有路由能力,由主电源供电,必须始终保持唤醒,可以是父设备) 每个网络只能有一个协调器。协调器节点ID始终为0000。
  • 路由器(不能形成网络,具有路由能力,由主电源供电,必须始终保持唤醒,可以是父设备)
  • 端点设备(不能形成网络,没有路由能力,由主电源或电池供电,必须有父设备) 端点设备可以是非睡眠端点设备或睡眠端点设备。

网络地址 Zigbee使用PAN ID和扩展PAN ID来识别网络。

PAN ID是一个16位标识符,PAN(个人区域网络)中的所有节点将共享。PAN ID由协调器在形成网络时选择,并用于将其与其他可能恰好在同一通道上的附近网络区分开。 扩展PAN ID是一个回退网络标识符,PAN中的所有节点都知道。正常(短)PAN ID在“空中”数据包中传输,因为发送16位比发送64位更快。扩展PAN ID对于每个PAN也是唯一的,并由协调器在形成网络时选择。然而,扩展PAN ID很少在空气中传输,并且更多地用作备份标准,以防PAN ID冲突发生。使用扩展PAN ID将允许协调器与所有节点通信并建立新的PAN ID以移动并解决问题。扩展PAN ID仅在响应“主动扫描”(新节点请求加入网络)和发生罕见的PAN ID更新时在空气中发送。

设备(节点)地址 与网络地址一样,网络中的每个节点都有一个唯一的短地址和长地址,以将其与网络中的其他节点区分开。

长地址是64位IEEE分配的MAC地址(EUI-64),并且是一个全局唯一ID(GUID),通常在制造阶段分配。作为全局唯一ID意味着世界上没有两个IEEE无线电具有相同的GUID。与扩展网络地址的情况一样,长(EUI-64)地址很少在空气中发送,除了加入(信标)请求和/或解决罕见的节点地址冲突。 短地址(16位),由协调器在节点加入网络时分配,在空气中使用。称为节点ID,此地址对其家庭PAN网络是唯一的。

应用层

ZigBee应用层称为应用程序框架(AF),并在应用支持层(APS)之上运行。AF支持许多应用程序并在注册的应用程序之间处理传入数据。一些注册的应用程序在Zigbee规范中定义,而其他是供应商实现。Zigbee将应用程序定义为配置文件。ZigBee配置文件用0到240之间的整数标识,称为端点。有两种类型的应用程序配置文件:公共和供应商特定。端点ID为零的特殊配置文件是ZDO(Zigbee设备对象),用于网络配置和设置。

Zigbee联盟已经定义了一些配置文件,如智能能源、家庭自动化、商业建筑自动化、玩具等。

设备端点与逻辑端点 逻辑端点ID是一个8位值,范围从0到255。

  • 端点0保留给Zigbee设备对象(ZDO),用于网络管理目的。
  • 端点1到239可由用户应用程序使用。
  • 端点240到254保留给特殊应用程序。
  • 端点255用于广播。

广播地址 应用程序在AF层注册一个端点标识符。当AF层处理传入消息时,它基于端点标识符传递给适当的集群进行处理。如果数据包到达未注册的端点标识符,则数据包被静默丢弃。

端点是应用层中定义的逻辑扩展,可以 thought of as devices accessible through a single ZigBee radio node。例如,附加到无线电节点的灯开关可能是一个端点(物理),而附加到同一节点的调光器可能是另一个端点(逻辑),而不是一个全新的应用程序(见图1)。在另一个例子中,附加到无线电节点的智能插座条可能是一个端点(物理),而条上附加到同一节点的每个插座可能是其他端点(见图2)。

集群

Zigbee集群基于客户端/服务器模型,用于在两个或多个设备之间实现应用程序协议。集群是一组命令和属性,定义设备可以做什么(按功能分组的一组操作)。每个集群分配一个集群ID,在Zigbee集群库(ZCL)中定义。一个集群可以用几个属性和命令定义。

ZigBee集群库中的集群是一个对象,包含方法(命令)和数据(属性)。

绑定是ZigBee中的一个动作,定义了两个设备、特定端点和集群ID之间的关系。它提供了一种机制,用于将一个节点上的端点附加到另一个节点上的一个或多个端点,甚至可以应用于节点组。

安全

Zigbee网络内的安全基于网络密钥和链接密钥。任何两个应用层设备之间的单播通信使用由两个设备共享的128位链接密钥保护,而广播通信由网络中所有设备共享的128位网络密钥保护。通信的预期接收者总是知道精确的安全安排;因此,接收者知道帧是用链接密钥还是网络密钥保护的。

网络密钥 Zigbee网络安全使用网络范围的密钥进行加密和解密。网络密钥是一个128位密钥,由网络中的所有设备共享。通常,它在网络形成时由协调器随机生成。当新设备加入网络时,它们必须获得网络密钥的副本。

信任中心网络 在Zigbee网络中,向新设备分发网络密钥的角色称为信任中心(TC)。有两种安全模型,集中式安全网络和分布式安全网络。 在集中式安全网络中,只有一个信任中心,并且它是协调器。所有新设备将从协调器获取网络密钥。 在分布式安全网络(无协调器设备)中,每个路由器都是信任中心。新设备可以从任何路由器获取网络密钥,因为任何路由器都可以授权和验证希望加入的新设备。

注意:使用分布式信任中心网络或信任中心网络的决定是在网络形成时做出的。网络启动后无法更改此决定。

所有被授权加入网络的设备都有密钥的副本,并使用它来加密和解密所有网络消息。网络密钥还有一个与之关联的序列号,以识别密钥的特定实例。偶尔,当网络密钥更新时,序列号递增以允许设备识别用于保护数据包数据的网络密钥的哪个实例。序列号范围从0到255。当序列号达到255时,它回绕到0。所有作为安全Zigbee网络一部分的设备都有网络密钥的副本。

由于网络密钥需要从一个设备传输到另一个设备,密钥值在传输过程中需要加密。此加密在应用层完成。

网络层安全 数据包安全 在网络层安全的数据包由以下元素组成(见下文)。

辅助安全头 辅助头包含关于数据包安全的数据,接收节点使用这些数据来正确验证和解密数据包。这些数据包括使用的密钥类型、序列号(如果是网络密钥)、保护数据的设备的IEEE(长)地址和帧计数器。

认证和加密 Zigbee使用128位对称密钥在网络层加密所有传输。网络和辅助头以明文发送但经过认证,而网络有效负载经过认证和加密。AES-128用于创建消息整个网络部分(安全头和有效负载)的哈希,该哈希附加到消息的末尾。 此哈希称为消息完整性代码(MIC),用于通过确保消息未被修改来验证消息。接收设备对消息进行哈希处理,并将计算的MIC与附加到消息的值进行验证。对消息的更改会使MIC无效,接收节点将静默丢弃消息。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计