13.1 ZigBee简介
ZigBee技术为低功耗无线网络定义了一系列的标准,许多设备的电池寿命都能够达到5年之久。这些可观的节能特性都很大程度上来源于ZigBee设计中的一些让步,比如“较低的数据传输速率”(low data-rate transfer)、“相对近距离的传输”(relatively short-range transmission)、“持续供电网络协调器和路由器”(persistent-powered network coordinator and router),以及一个简单的协议堆栈,这个协议堆栈由多种“片上系统”(System-on-Chip,SoC)实现的。所谓的“片上系统”,就是将整个ZigBee协议堆栈(stack)、“无线传输器”(wireless transceiver)和“微处理器”(microprocessor)都集中在一个“集成电路”(Integrated Circuit,IC)上。
13.1.1 ZigBee在无线标准中的地位
一个最普遍的,也是最重要的问题是,当人们听到ZigBee的时候,他们常常会问“为什么说ZigBee是必不可少的?”。在一个拥有Wi-Fi、蓝牙,以及其他专有的解决方案的世界里,为什么我们还需要使用ZigBee呢?
这个问题只能在两个条件都成熟的时候才能回答,那就是“如果”ZigBee作为一个无线协议被广泛应用的时候,和“当”ZigBee作为一个无线协议被广泛应用的时候,我们才能找到这一问题的确定答案,现在,尽管许多迹象都表明ZigBee会继续获得更大的成功,但就目前来说,还不能过早下结论。同蓝牙和Wi-Fi相比,ZigBee是一个相对简单得多的协议,它全部的功能堆栈都在120KB的“非易失性随机访问存储器”(NVRAM)[1]内实现了,一些生产商甚至声称他们研制出了精简版本的功能堆栈(reduced-functionality stack),它的大小只有区区40KB。现在,大部分Wi-Fi网络的传输速率是54Mbps(不包括IEEE 802.11n网络和IEEE 802.11ac网络),就连蓝牙的传输速率也在3Mbps,然而ZigBee的数据传输速率只有20~250Kbps[2]。许多用户都表示Wi-Fi设备的“电池待机时间”(battery life)相对较短,比如像Wi-Fi VoIP电话这样的嵌入式设备,它充满电后的“电池待机时间”大概是8~12小时,“低功耗蓝牙”可以达到不错的“电池待机时间”,但是“低功耗蓝牙”只是提供了很有限的功率范围,因此只能把目标定位于“个人局域网络”(Personal Area Network,PAN)市场。相比之下,采用ZigBee技术“电池待机时间”能够延长到数月或者数年,对于一些高端(high-end)的服务对象来说,“电池待机时间”可以达到5年之久,并且再次充电后仍然可以继续使用。另外,即使在这种超长待机时间下,在这种低成本的接口上,其传输距离也在10~100米,甚至更长的传输距离。最后值得一提的是,ZigBee使用最简单的通信协议,简单到其协议可以少到只有三个就足够了。
其他无线协议,例如Z-Wave,在简单化和电池保护做得也十分漂亮,在某些项目上甚至超过了ZigBee。然而,Z-Wave是一个专有的协议,使用该协议所做的产品,在出售的时候,所有出售的产品都需要为Sigma Designs(Z-Wave技术的版权所有者)支付所需的许可证费用。可以说,这样一个模式等于是让Sigma Designs控制了产品的市场准入权,最终抑制了Z-Wave技术广泛的发展和创新。有关Z-Wave网络的内容,我们留在第14章讨论。
从应用程序角度来说,ZigBee协议对于高速的数据传输需要来说,并不是一个正确的协议选择,比如X光成像的传输或者BitTorrent方式的数据下载。而且,ZigBee协议对于通过实时的语音流传输语音通话,也同样不是一个正确的协议选择,因为这些实时的语音流数据要求接口有良好的扩展性以及音频鲁棒性。但是,在其他的应用场合下,当Wi-Fi和蓝牙都不能满足程序的要求时,ZigBee无线协议反而大有用武之地,这时选择ZigBee会是一个合适的选择。
13.1.2 ZigBee的部署
有一个市场的ZigBee技术已经蓄势待发,那就是“家庭自动化市场”(home automation market)。在这里,ZigBee会与“家庭控制系统”(home control system)进行连接,所连接的设备中,当然就是可以被控制的设备了,比如“电子应用类设备”、“照明控制”、“家庭安全系统”、“暖通空调”,以及其他更多的设备。除此之外,还有一些中间连接控制设备,如作为加工商生产的CentraLite产品“ZigBee供能照明开关”(ZigBee-powered light switch)和调光器(dimmer),以及用于“家庭照明自动控制智能插座”的需求。其他家庭自动化技术是用于安全目的的;Black&Decker公司(中文名“百得”)是“Kwikset SmartCode”道栓的制造商,该公司生产的“无线键盘输入系统”(wireless keypad entry system),名叫“家的连接”(Home Connect),利用ZigBee无线技术的地方包括从门把手和锁,到与后台服务器进行认证“个人身份码”值的通信,以及当有不速之客入室后,会通过“手机短信服务”短信的方式发给户主的报警机制。
对ZigBee来说,另一个有影响力的市场是的“智能电网”(smart-grid)技术,包括“先进的计量基础设施”(Advanced Metering Infrastructure,AMI)。许多国家会在智能电网技术上进行投资,本地的公共事业部门也会使用覆盖小区的无线网络同用户家中的家庭智能电表进行交互。消费者可以在他们的ZigBee温控计上通过一些智能测试仪器实时获得电价信息,例如“Google的Nest的智能恒温调节器”,其实物图如图13-1所示。
♥ 提示
“ZigBee联盟”(ZigBee Alliance)负责维护一个产品列表,所列的产品都是已被认证为“ZigBee兼容”(ZigBee compliant)的产品,这个列表的排序原则是市场的影响力、读者或用户,可以从http://www.zigbee.org/网址上获得完整的列表。
除了商业ZigBee产品之外,许多组织开发他们自己的软件来使用ZigBee传输技术,可以使用的ZigBee无线芯片有“德克萨斯仪器”(Texas Instrument)、Ember、Microchip,以及Atmel等诸多芯片。这些项目中的许多产品都在积极使用,支持生产运营、环境监测,甚至在零售业务上也可以将信用卡号码通过ZigBee无线技术进行传输。
13.1.3 ZigBee的历史和发展过程
从产品开发的角度来看,尽管ZigBee技术的诞生和技术支持在1998年,但直到2004年12月,“ZigBee联盟”才宣布批准首个“ZigBee规范”正式生效,该规范称为“ZigBee-2004”。这个版本的规范,很好地定义和包括了ZigBee的许多关键的特性,这无疑会在一些重要的技术选型方面,在一些著名的无线协议无法满足要求时,使ZigBee对这组织来说显得很有吸引力。
2006年,“ZigBee联盟”又发布“ZigBee-2006规范”,增加一些重要的特性,如“组寻址能力”(group addressing capabilities),在这个特性中,一个设备可以使用一个单一的数据包,通过向“组寻址能力”发送,就可以将信息发送到多个客户端上。在软件配置文件方面,这个新的规范进一步细化了对ZigBee协议栈软件配置文件之间的互操作性的定义,简化了通过ZigBee技术,开发“跨平台兼容”(cross-platform-compatible)的应用程序的过程。
在2007年年底,“ZigBee联盟”发现了一套新的ZigBee的特性,被称为“ZigBee Pro”。“ZigBee Pro”定义的增强的安全功能包括改进的密钥派生功能,并且能够通过“数据碎片”(data fragmentation)发送大量的信息。“ZigBee Pro”的另一组显著特性就是其增强的可扩展性,这使得一个ZigBee网络支持成千上万的设备的加入,包括一个“自动网络地址分配”机制(automated network address allocation mechanism),这在ZigBee网中,称为“随机寻址”(stochastic addressing)。其意义就是当你需要进行通信,而又不需要刻意地选择必然与谁进行通信的时候,可以由“ZigBee Pro”内置的这一“随机寻址”功能随机选择另一个设备进行通信,通信过程中的协议由二者在通信协议的层面上协商解决。
“ZigBee规范”的最新修正案在2012年发布,这次带来的新的增强特性,就是更好地支持超大规模的ZigBee的部署,包括一个“多跳(multihop)mesh[3]网范围能力上的扩展。根据该规范,超大规模的ZigBee的部署是通过改进的节点管理和支持机制完成的,这样做的原因,就是考虑到ZigBee网络越来越复杂,因此,作为网络管理员也需要维护ZigBee的部署。“ZigBee-2012规范”引入的新性能,还包括改进的“地址管理”(address management)功能,即ZigBee产品可以自动选择频率,以避免干扰,并且可以将数据包以“组寻址”(group addressing)的方式进行发送。
在ZigBee 2012规范中有一个可选特性,那就是“ZigBee联盟”还推出了一种称为“绿色能源”(Green Energy)的新功能。“绿色能源”让设备没有电池或其他电源持续供电的情况下,在加入ZigBee网络之后,根据其他设备的动作,就可以产生足以满足自己行为控制的电源。比如打开电灯开关,再比如利用振动装置,这些设备上的ZigBee通信功能才会被开启,利用产生的光能或动能获得自己的电力。通过“绿色能源”这个特性,设备加入ZigBee网络,在与ZigBee网络互动的时候不需要外部电源,大大简化了ZigBee设备部署的难度。
13.1.4 ZigBee协议层次结构
有一个机制被“ZigBee联盟”用来保持ZigBee的简单化设计,那就是使用一个结构化的协议栈来定义各个协议层,以及每个协议层上要做的事情。这个协议栈共由四层组成,分别是“物理层”(Physical layer,PHY)、“介质访问控制层”(MAC layer,MAC),“网络层”(Network layer,NWK),“应用层”(Application layer,APL),如图13-2所示。ZigBee协议所使用的“物理层”和“介质访问层”都是在“IEEE 802.15.4规范”中进行定义的,然后以这个成熟的规范为基础来定义ZigBee协议。
1.ZigBee的物理层
ZigBee的物理层由IEEE 802.15.4规范进行定义。该层所使用的频率波段在欧洲使用的是868MHz,在北美洲或南美洲使用的是915MHz,在全世界除了上述地区之外使用的都是2.4GHz。所有这些频率波段一共占用了27个信道,每个波段使用了不同的数据传输速率,如下所示:
IEEE 802.15.4协议与IEEE 802.11协议很类似,都是无线网络协议,只是IEEE 802.15.4采用“直接序列扩频”(Direct Sequence Spread Spectrum,DSSS)技术。可选的物理层还包括有“并行扩频序列的能力”(Parallel Sequence Spread Spectrum,PSSS)技术,虽然这一技术远没有“直接序列扩频”技术那样流行。
同Wi-Fi无线网络中的射频信号使用同一频率一样,在ZigBee无线网络中,其通信也是单个频率中进行,除非通过网络管理员对它进行重新配置,而在蓝牙无线网络中,通信的频率则是一直跳频变化的。因此,要在ZigBee网络进行数据包的嗅探将非常简单,因为负责侦听的程序只需要在一个频率上进行侦听即可,而不需要像蓝牙网络中,还需要不停地同步跳变。我们会在本章的后面部分讲解侦听ZigBee网络的方法。
2.ZigBee的介质访问控制层
ZigBee的介质访问控制层也是由IEEE 802.15.4规范进行定义的。这一层包含了构建扩展ZigBee网络的各项功能,包括设备互连的拓扑结构、“设备的角色”(device role)、数据包的帧结构设计,以及网络上的“建立关联”(association)与“解除关联”(disassociation)的操作。
ZigBee网络采用“设备角色”的概念,即对于每个设备,根据自己的可参与操作的角色,都有一组不同的功能。常见的“设备角色”有以下几种:
·ZigBee信任中心 (ZigBee Trust Center,TC) 这是个“全功能的ZigBee设备”(Fully Functional ZigBee Device,FFD)负责对加入ZigBee网络中的其他ZigBee设备进行认证。当一个ZigBee设备试图连接到ZigBee网络的时候,距离该设备最近的“ZigBee路由器”通知“ZigBee信任中心”有一个设备加入到当前的网络中了。“ZigBee信任中心”指示“ZigBee路由器”对那个ZigBee设备进行身份验证,或终止这个新节点的连接请求。
·ZigBee协调器 (ZigBee Coordinator,ZC)这是一个“全功能的ZigBee设备”,负责控制“个人局域网”(PAN),代表其他设备完成其信息的中继转发。“ZigBee协调器”允许其他ZigBee设备加入到“ZigBee协调器”的队伍中参与协调,或加入到ZigBee网络中参与其他各项活动。
·ZigBee路由器 (ZigBee Router,ZR) 这是一个“全功能的ZigBee设备”,可以完成转发。“ZigBee路由”的功能通常和“ZigBee协调器”相同,只是“ZigBee路由器”是从硬件角度上来看的;而“ZigBee协调器”则是通过软件角度来看的。在软件更改时会将网络管理任务交给“ZigBee协调器”来处理。“ZigBee路由器”允许其他ZigBee设备加入到“ZigBee路由器”的队伍中参与协调,或加入到ZigBee网络中参与其他各项活动。
·ZigBee终端设备 (ZigBee End Device,ZED) 这是一个“半功能ZigBee设备”(Reduced-Functionality ZigBee Device,RFD),该设备可以加入ZigBee网络中,但不能为其他设备转发帧。没有设备可以连接到“ZigBee终端设备”上,不过“ZigBee终端设备”可以连接其他特定的设备,这些设备就是“ZigBee路由器”和“ZigBee协调器”。
每个ZigBee网络都有一个协调器设备,网络的结构会决定是否需要额外的ZigBee路由设备。ZigBee网络可以被部署成星形或者网状拓扑结构,如下所示。“ZigBee路由器”为下游节点建立“通信数据包桥接”连接,比如“ZigBee路由器”在接到一个数据包后,发现这个数据包是发向某ZigBee设备或者其他“ZigBee路由器”的,那么这个“ZigBee路由器”就会将该数据包向这两种设备上转发该数据包,或者接收到这两种设备发出的数据包经由自己的路由规则转发出去,这个“ZigBee路由器”也会根据该数据包所要发送的目录节点,对该数据包进行转发,“ZigBee协调器”负责管理整个网络运行。
星形拓扑网络
Mesh网格网络
ZigBee设备能维持如此长的“电池待机时间”得益于它所采用的一种机制,那就是ZigBee设备具有一种进入持续的静止状态的能力,这种状态称为“睡眠模式” (sleep mode)。当一个ZigBee设备进入到“睡眠模式”,它会将所有的传输功能关闭一段时间,这个时间可以是数微秒到数小时不等。同时,在任何时候,ZigBee设备都能从“睡眠模式”中唤醒回来,开始同网络中的“ZigBee协调器”、“ZigBee路由器”或者是网络上的路由节点进行通信,一旦数据交换完毕则再次进入“睡眠模式”。由于随时要准备从ZigBee设备接收数据,所以“ZigBee协调器”和“ZigBee路由器”都不会进入“待机模式”,因此它们通常都会部署稳定持久的电源。
同Wi-Fi和蓝牙无线网络不同的地方是,ZigBee无线网络中,在“ZigBee介质访问控制层”上,有一些帧的类型是用于装载ZigBee的通信数据的。
·信标帧 (Beacon frame) “信标”的作用是扫描网络,寻找可能存在的“ZigBee路由器”或“ZigBee协调器”。
·数据帧 (Data frame) “数据帧”的作用是用来在设备之间交换任意数据,所交换数据包的大小是一个变化量,最高可以达到114字节。具体使用多少,要看“ZigBee介质访问控制层”头部的选项。
·确认帧 (Acknowledgement frame) 如果需要的话,发送方的ZigBee设备可以主动要求接收方ZigBee设备发送一个“确认帧”来进行回应。“确认帧”的作用就是用来表示接收方已经成功地接收到发送方所发送的请求。
·命令帧 (Command frame) ZigBee协议中的“命令帧”同802.11的“管理帧”(management frame)十分类似,负责控制网络运作,比如“建立关联”(association)、“解除关联”(disassociation)、“个人局域网ID冲突解决方案”(PAN ID conflict resolution),以及“等待处理的数据发送请求”(pending data delivery request)。
ZigBee协议使用的IEEE 802.15.4“介质访问控制层”数据帧的格式如图13-3所示。“介质访问控制层”数据帧头部的格式是可变的,这取决于其中“帧控制”字段的设置,“介质访问控制层”数据帧头部包括的字段共有“源地址”(source address)、“目标地址”(destination address)、“源个人局域网ID”(source PAN ID)、“目标个人局域网ID”(destination PAN ID),还有代表安全属性字段,这些都在“辅助安全标头”(auxiliary security header)的字段。
3.ZigBee的网络层
ZigBee协议的网络层被单独定义在ZigBee规范中,它负责实现高层的功能,比如“网络成形”(network formation)、“设备发现”(device discovery)、“地址分配”(address allocation)和“数据路由”(routing)。
“网络成形”是指一个处理过程,在该过程中,一个“全功能的ZigBee设备”会首先将自身转变为一个当前网络的“ZigBee协调器”。然后通过“设备发现”,这个“ZigBee协调器”必须选择一个合适的信道(通常情况下,设备会选择当前可用的ZigBee网络信道中编号最小的那个),然后通过随机数产生一个“个人局域网”上的ID值。该值不能与现有正在使用的,其他“个人局域网”上的ID值冲突。“ZigBee协调器”建立完毕以后,周边的其他ZigBee设备和路由器若想加入到这个ZigBee网络的设备,就可以向该网络中的“ZigBee协调器”发送“关联请求”(association request),而此时的这个“ZigBee协调器”就可以对该请求进行响应。一旦某个ZigBee设备加入到这个ZigBee网络以后,该“ZigBee协调器”就会为这个设备节点分配一个16位的网络层地址。
4.ZigBee的应用层
ZigBee的应用层是ZigBee规范中定义的最高层,规定了“应用对象”(application object)的操作和接口,而这里的“应用对象”定义了一个ZigBee设备的功能。“应用对象”是由“ZigBee联盟”参照标准功能规范开发的。还有一种可能,就是制造商为了专有的功能,也会在“应用层”开发一些“应用对象”,其目的是作为一种与ZigBee协议栈的下一层进行数据通信时所用的机制。一个简单的ZigBee设备可以支持的“应用对象”上限可以达到240个。
“ZigBee设备对象”(ZigBee Device Object,ZDO)层存在于所有的ZigBee设备中,负责提供所有ZigBee设备所需的功能接口,包括设置ZigBee“设备角色”,如前所述的“ZigBee协调器”、“ZigBee路由器”、“ZigBee终端设备”等角色;设置“安全服务”,比如设置和删除加密密钥;还有就是设置“网络管理服务”、“建立关联”和“解除关联”。总的来说,“ZigBee设备对象”层定义了一些特定的规范,一般可以称为“ZigBee设备规范”(ZigBee Device Profile,ZDP),这个规范使用保留的ZigBee应用“端点”(endpoint)0[4]。
“应用支撑子层”(Application Support Sublayer,APS)为ZigBee上的应用规范提供最基本的功能。通过“应用支撑子层”,ZigBee应用规范可以请求发送和接收无线传输系统上的数据,包括指定可选的“可靠数据传输”(reliable data delivery)方式。从“应用支撑子层”的角度来说,“可靠数据传输”不仅要求发送方在发送一个数据包后,需要接收到针对这个数据包的响应数据包,并且从该数据包中看到有“确认”(acknowledgment)的字段信息,而且还包括了在源设备和目标设备之间存在一个路由,以及包括低层ZigBee的功能可以成功地处理和传送这些帧。
13.1.5 ZigBee规范
除了“ZigBee规范”本身,“ZigBee联盟”同样联合了其他工作组作为“ZigBee联盟”的成员来共同开发“ZigBee规范”。“ZigBee规范”定义了ZigBee设备的实际功能,包括“互通性(interoperability)测试计划”,这一功能可以用于验证设备对一个特定的“ZigBee规范”的吻合度。
完整的或者正在研发中的“ZigBee规范”示例包括下面这些:
·ZigBee网络的建筑自动化 (ZigBee Building Automation,ZBA) 它提供以下功能:测量和管理照明镇流器、照明管理系统、传感器占用情况,以及其他商业建筑中常见的设备。
·ZigBee家居自动化 (ZigBee Home Automation,AHA) 实现家居的自动管理,包括照明自动控制、暖通空调控制、遮阳防晒和家庭安全报警系统。
·健康护理规范 (Health Care Profile,HCP) 支持非侵入性医疗操作,包括血压计、脉搏监视器,以及心电图。规范所关注的是连接这些设备、数据上传、远程监控等传统的网络接口。
·ZigBee光连接 (ZigBee Light Link,ZLL) 实现了一个简单的LED灯具控制的规范。通过该规范可以控制灯泡、定时器、遥控器,并在“部署形式工厂”中进行远程切换。这里的部署形式工厂是作为“易于使用的是一种常见的调光开关”。有关这方面的内容可以参见该产品的网页介绍,其链接是:http://zigbee.org/zigbee-for-developers/applicationstandards/zigbee-light-link 。
·ZigBee互联网协议 (ZigBee Internet Protocol,ZIP) 该协议基于ZigBee网络实现了IPv6的附加功能。其方式是增加基于“安全传输层协议”(Transport Layer Security,TLS)1.2的网络安全,将通信数据压缩,提供“自愈网mesh网络的支持“(self-healing mesh network),并与全球IPv6网络标准提供互连互通。
·智能能源规范 (Smart Energy Profile,SEP) 实现“家域网”(Home Area Networking,HAN),使其能通过接口提供一个“智能温控计”和“智能家电组合”,从而实现实时电费查询,以及远端设备管理和关闭功能(又称“负载控制”)。
随着越来越多的公共“ZigBee规范”推出,以及大量为满足专有技术而开发的私有规范的不断出现,使得ZigBee技术在功能和应用范围上变得日益成熟。纵观ZigBee的功能和使用目的,很显然伴随所提供的功能以外,它还需要一个安全的协议堆栈。
- NVRAM,全称是Non-Volatile Random Access Memory,即“非易失性随机访问存储器”,是指断电后仍能保持断电前数据的一种存储器。这种特性对于设备级设备很显然是重要且必要的。——译者注
- 在这个看似简单的单位上,有两个重要的,概念上的区别。一个区别是:在存储领域,习惯用“字节”(Byte)表示,所以用“B”作单位;而传输领域,习惯用“位”(bit)表示,所以用“b”作单位,这里的bps即相当于“b/s”(每秒传送“位”的数量)。另一个区别是:二者的“K”都表示“千”,“M”都表示“兆”。但是存储领域内的1K表示1024个字节,1M表示1024K;而在传输领域,1K就是1000,1M就是1000K=1000000。以上例中,120KB的数据,如果让20Kbps的速率来传,假设没有任何附加位,那么需要的时间是:120×1024×8/(20×1000)=49.125秒,而不是48(120×8/20)秒,更不是6秒(120/20)。——译者注
- 在1.1.1节中提到了ad-hoc无线自组网,而这里的mesh网,则是由ad hoc网络发展而来,习称“无线网格网”,其特点是通过“多跳”方式解决“最后一公里”问题。该技术在本书第13、14两章多处出现。——译者注
- ZigBee中的“端点”(endpoint)用于区分同一个ZigBee设备上的不同“应用对象”,这一点很像是TCP/IP中的“端口”(port)概念。这句话的意思换句话说,就是“端点”0这个号就是专为“ZigBee设备规范”这个“应用对象”所保留的,其他的“应用对象”不能使用。——译者注
本书评论