欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

带你读《物联网之魂:物联网协议与物联网操作系统》之一: 网络通信技术

最编程 2024-02-05 14:36:55
...

物联网工程实战丛书
点击查看第二章
物联网之魂:物联网协议与物联网操作系统
 

image.png


 
孙昊 王洋 赵帅 杜秀芳 曾凡太 编著

第1章 网络通信技术

1.1 数字通信概述

数字通信是指用数字信号作为载体来传输信息,或者用数字信号对载波进行数字调制后再传输的通信方式。它的主要技术设备包括发射器、接收器及传输介质。数字通信系统的通信模式主要包括数字频带传输通信系统、数字基带传输通信系统及模拟信号数字化传输通信系统3种。
数字信号与传统的模拟信号不同。它是一种无论在时间上还是幅度上都属于离散的负载数据信息的信号。与传统的模拟通信相比其具有以下优势:首先是数字信号有极强的抗干扰能力,由于在信号传输的过程中不可避免地会受到系统外部及系统内部的噪声干扰,而且噪声会跟随信号的传输而放大,这无疑会干扰到通信质量。但是数字通信系统传输的是离散性的数字信号,虽然在整个过程中也会受到噪声干扰,但只要噪声绝对值在一定的范围内就可以消除噪声干扰。其次是在进行远距离的信号传输时,通信质量依然能够得到有效保证。因为在数字通信系统当中利用再生中继方式,能够消除长距离传输噪音对数字信号的影响,而且再生的数字信号和原来的数字信号一样,可以继续进行传输,这样数字通信的质量就不会因为距离的增加而产生影响,所以它也比传统的模拟信号更适合进行高质量的远距离通信。此外,数字信号要比模拟信号具有更强的保密性,而且与现代技术相结合的形式非常简便,目前的终端接口都采用数字信号。同时数字通信系统还能够适应各种类型的业务要求,例如电话、电报、图像及数据传输等,它的普及应用也方便实现统一的综合业务数字网,便于采用大规模集成电路,便于实现信息传输的保密处理,便于实现计算机通信网的管理等。
要进行数字通信,就必须进行模数变换。也就是把信号发射器发出的模拟信号转换为数字信号。基本的方法包括:首先把连续性的模拟信号用相等的时间间隔抽取出模拟信号的样值,然后将这些抽取出来的模拟信号样值转变成最接近的数字值。因为这些抽取出的样值虽然在时域进行了离散化处理,但是在幅度上仍然保持着连续性。而量化过程就是将这些样值在幅度上也进行离散化处理,最后把量化过后的模拟信号样值转化为一组二进制数字代码,然后将数字信号送入通信网进行传输。在接收端则是一个还原过程,也就是把收到的数字信号变为模拟信号,通过数模变换重现声音及图像。如果信号发射器发出的信号本来就是数字信号,则不用再进行数模变换的过程,可以直接进入数字网进行传输。

1.2 数字通信关键技术

数字通信的关键性技术包括编码、调制、解调、解码及过滤等,其中,数字信号的调制及解调是整个系统的核心也是最基本、最重要的技术。现代通信的数字化技术主要表现在以下几个方面。
1.信源的编码技术
常用的编码方法有:

  • 脉冲编码调制(PCM):在光纤通信系统中,光纤中传输的是二进制光脉冲“0”码和“1”码,它由二进制数字信号对光源进行调制而产生。数字信号是对连续变化的模拟信号进行抽样、量化和编码产生的,称为PCM(Pulse Code Modulation),即脉冲编码调制。
  • 增量调制(ΔM):或称增量脉码调制方式(DM),是继PCM后出现的又一种模拟信号数字化的方法,1946年由法国工程师De Loraine提出,目的在于简化模拟信号的数字化方法。增量调制主要在军事通信和卫星通信中广泛使用,有时也作为高速大规模集成电路中的A/D转换器使用。

增量调制是一种把信号上一采样的样值作为预测值的单纯预测编码方式。增量调制是预测编码中最简单的一种。它将信号瞬时值与前一个抽样时刻的量化值之差进行量化,而且只对这个差值的符号进行编码,而不对差值的大小编码。因此量化只限于正和负两个电平,只用一比特传输一个样值。如果差值是正的,就发“1”码,若差值为负就发“0”码。因此数码“1”和“0”只是表示信号相对于前一时刻的增减,不代表信号的绝对值。同样,在接收端,每收到一个“1”码,译码器的输出相对于前一个时刻的值上升一个量阶。每收到一个“0”码就下降一个量阶。当收到连“1”码时,表示信号连续增长,当收到连“0”码时,表示信号连续下降。译码器的输出再经过低通滤波器滤去高频量化噪声,从而恢复原信号,只要抽样频率足够高,量化阶距大小适当,收端恢复的信号与原信号非常接近,量化噪声可以很小。
2.信道编码技术
从信道传输质量来看,希望在噪声干扰的情况下,编码的信息在传输过程中差错愈小愈好。为此,就要求传输码有检错和纠错的能力,欲使检错(纠错)能力愈强,就要求信道的冗余度愈大,从而使信道的利用率降低。同时,信道传输的速率与信息码速率一般是不等的,有时相差很大,这是在设计通信系统时必须注意的问题。
3.现代调制解调技术
有效利用频谱是无线通信发展到一定阶段时所必须解决的问题,况且随着大容量和远距离数字通信的发展,尤其是卫星通信和数字微波中继通信,其信道是带宽有限的和非线性的,这使传统的数字调制解调技术面临着新的挑战,这就需要进一步研究一种或多种新的调制解调方式,充分节省频谱并高效率地利用有限的频带,如现代的恒包络数字调制解调技术、扩展频谱调制解调技术。
4.信道复用技术
欲在同一信道内传输千百条话路,就需要利用信道复用技术。所谓信道复用,就是将输入的众多不同信息来源的信号,在发信端进行合并后在信道上传输,当到达收信端后又将它们分开,恢复为原多路信号的过程,也称为复接和分接,简称复用。理论上只要使多路信号分量之间相互正交,就能实现信道复用。常用的复用方式主要有频分复用(FDM)、时分复用(TDM)、码分复用(CDM)和空分复用(SDM)4种。数字通信中实现复用的关键是需要解决多种多样的同步问题。
5.多址技术
目前,现代通信是多点间的通信,即多用户之间的相互通信方式除了传统的交换方式外,人们需要在任何地点、任何时间,能够与任意对象交换信息,往往采用多址方式来予以实现。例如,卫星通信就是通过通信卫星与地球上任一个或多个地球站进行通信,而不需要专门的交换机的多址方式。多址方式有:频分多址(FDMA)、时分多址(TDMA)、码分多址(CDMA)空分多址(SDMA)等。
6.通信协议
在当今的信息社会里,现代通信不仅仅是国内范围内的通信,而且是超越国界的。因此,在国内通信中需要规定统一的多种标准,以避免在通信过程中造成相互间的干扰或因通信线路(系统)的接口不同,而无法进行通信。在国际上成立了一个专门的机构——国际电报电话咨询委员会(CCITT),现为国际电信联盟(ITU)和国际无线电咨询委员会(CCIR),这两个机构在开展工作的几十年来,分别制定了一系列各国必须遵守的国际通信标准,并制定了为世界各国通信工作者所公认的众多协议和建议。随着通信*日新月异的发展,仍然还有许多新开发的领域需要制定新的标准,例如ISDN和多种网路的协议等。在设计各种通信系统时,这是必须注意的关键问题。

1.3 数字通信OSI模型

国际标准化组织(ISO)发布了开放系统互联(OSI)参考模型,OSI参考模型是一个7层结构,如图1.1所示。

image.png

1.物理层
物理层负责实现相邻计算机节点之间比特流的透明传输,尽可能屏蔽掉具体传输介质与物理设备间的差异,使上层的数据链路层不必考虑网络的具体传输介质是什么。
2.数据链路层
数据链路层负责建立和管理节点间的链路。接受来自物理层的位流形式的数据,并封装成帧传送到上一层;同样,也将来自上一层的数据帧,拆装为位流形式的数据转发到物理层;并且还负责处理接收端发回的确认帧的信息,以便提供可靠的数据传输。
3.网络层
网络层负责通过路由算法,为报文或分组通过通信子网选择最适当的路径。该层控制数据链路层与物理层之间的信息转发,建立、维持与终止网络的连接。具体说就是,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备上传送到另一个网络设备上。
4.传输层
传输层负责提供会话层和网络层之间的传输服务,这种服务从会话层获得数据,并在必要时对数据进行分割,然后,传输层将数据传送到网络层,并确保数据能准确无误地传送到网络层。因此,传输层负责提供两节点之间数据的可靠传送,当两节点的联系确定之后,传输层负责监督工作。
5.会话层
会话层负责向两个实体的表示层提供建立和使用连接的方法,将不同实体之间的表示层的连接称为会话。因此会话层的任务就是组织和协调两个会话进程之间的通信,并对数据交换进行管理。
6.表示层
表示层负责对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层。
7.应用层
应用层负责直接向用户提供服务,完成用户希望在网络上完成的各种工作。它在其他6层工作的基础上,负责完成网络中应用程序与网络操作系统之间的联系,建立与结束使用者之间的联系,并完成网络用户提出的各种网络服务及应用所需的监督、管理和服务等各种协议。此外,该层还负责协调各个应用程序间的工作。
由于OSI是一个理想的模型,因此一般网络系统只涉及其中的几层,很少有系统能够具有完整的7层,并完全遵循它的规定。在7层模型中,每一层都提供一个特殊的网络功能。从网络功能的角度观察:下面4层(物理层、数据链路层、网络层和传输层)主要提供数据传输和交换功能,即以节点到节点之间的通信为主;第4层作为上下两部分的桥梁,是整个网络体系结构中最关键的部分;而上3层(会话层、表示层和应用层)则以提供用户与应用程序之间的信息和数据处理功能为主。简言之,下4层主要完成通信子网的功能,上3层主要完成资源子网的功能。
有一个很容易理解OSI 七层模型的例子,最初推出这个模型,是为了满足美国科学家需要在两台计算机之间进行通信的需求。
(1)需求1
科学家们要解决的第一个问题是两台计算机之间怎么通信。具体体现就是一台计算机发出比特流,另一台计算机能收到。
于是,科学家们提出了物理层的概念:主要定义物理设备标准,如网线的接口类型、光纤的接口类型,以及各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
(2)需求2
现在能通过电线发数据流了,但是还希望通过无线电波或其他介质来传输,而且还要保证传输过去的比特流是正确的,要有纠错功能。
于是,科学家们又提出了数据链路层的概念:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。
(3)需求3
现在可以在两台计算机之间发送数据了,那么如果要在多台计算机之间发送数据呢?怎么找到原始发出(源)的那台?或者,A要给F发信息,中间要经过B、C、D、E,但是中间还有好多节点如K、J、Z、Y。怎么选择最佳路径?这就是路由要做的事。
于是,科学家们又提出了网络层的概念:通过路由算法,为报文或分组通过通信子网选择最适当的路径。该层控制数据链路层与物理层之间的信息转发,建立、维持与终止网络的连接。具体地说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备上。一般,数据链路层是解决同一网络内节点之间的通信,而网络层主要解决不同子网之间的通信,例如路由选择问题。
(4)需求4
现在能正确地发送比特流数据到另一台计算机上了,但是当发送大量数据时候,可能需要很长时间,例如一个视频格式的文件,网络会中断很多次(事实上,即使有了物理层和数据链路层,网络还是会经常中断,只是中断的时间是毫秒级别),因此还需要保证传输大量文件时的准确性。因此,要对发出去的数据进行封装,就像发快递一样,一个一个地发。
于是,科学家们又提出了传输层的概念:向用户提供可靠的、端到端的差错和流量控制,保证报文的正确传输。提供建立、连接和拆除传输连接的功能。传输层在网络层基础上提供“面向连接”和“面向无连接”两种服务。例如TCP,是用于发送大量数据的,我发了1万个包出去,另一台计算机就要告诉我是否接收到了1万个包,如果缺了3个包,就告诉我第1001个包、第234个包和第8888个包丢了,那么我会再发一次,这样就能保证对方把这个视频完整接收了。
例如UDP,是用于发送少量数据的。我发20个包出去,一般不会丢包,所以,我不管你收到多少个。在多人互动游戏中也经常用UDP协议,因为一般都是简单的信息,而且有广播的需求。如果用TCP,效率就会降低,因为它会不停地告诉主机:我收到了20个包,或者我收到了18个包,再发我两个!如果同时有1万台计算机都这样做,那么用TCP反而会降低效率,不如用UDP,主机发出去就算了,如果你丢了几个包至多就卡一下,下次再发包时你再更新即可。
(5)需求5
现在我们已经保证给正确的计算机发送正确的封装过后的信息了。但是用户级别的体验好不好?难道我每次都要调用TCP去打包,然后调用IP协议去找路由,自己去发?当然不行,所以我们要建立一个自动收发包、自动寻址的功能。
于是,科学家们又提出了会话层的概念:建立和管理应用程序之间的通信。允许用户在两个实体设备之间建立、维持和终止会话,并支持它们之间的数据交换。例如提供单方向会话或双向同时会话,并管理会话中的发送顺序,以及会话所占用的时间长短。
(6)需求6
现在我能保证应用程序自动收发包和寻址了。但是要用Linux给Windows发包,两个系统的语法不一致,就像安装包一样,exe是不能在Linux系统上用的,shell在Windows系统上也是不能直接运行的。于是需要表示层,帮助解决不同系统之间通信的语法问题。
(7)需求7
现在所有必要条件都准备好了,我们可以写个Android程序,web程序去实现需求。
因为OSI模型的层数太多,顺序也不好记忆,于是有人就用All People Seem To Need Data Processing来帮助记忆,因为这7个单词的首字母和OSI模型每一层的首字母是一样的。

1.4 TCP/IP网络通信协议

通信协议对物联网来说十分常用且关键,无论是近距离无线传输技术还是移动通信技术,都影响着物联网的发展。通信协议是指双方实体完成通信或服务所必须遵循的规则和约定。
我们将物联网协议分为两大类,一类是传输协议,一类是通信协议。传输协议一般负责子网内设备间的组网及通信。通信协议则主要是运行在传统互联网TCP/IP协议之上的设备通信协议,负责设备通过互联网进行数据交换及通信。
物联网的通信环境有Ethernet、Wi-Fi、RFID、NFC(近距离无线通信)、ZigBee、6LoWPAN(IPv6低速无线版本)、Bluetooth、GSM、GPRS、GPS、3G和4G等网络,而每一种通信应用协议都有一定的适用范围。AMQP、JMS和HTTP都是工作在以太网的协议,CoAP协议是专门为资源受限设备开发的协议,MQTT的兼容性则强很多。

1.4.1 TCP/IP协议

互联网的发展很大程度上要归功于Vinton Cerf和Robert Kahn这对老搭档。他们在20世纪70年代设计的TCP/IP协议奠定了现代网络的基石,也因此获得了计算机界的最高荣誉——图灵奖。
TCP/IP的设计非常成功。几十年来,底层的带宽、延时,还有介质都发生了翻天覆地的变化,顶层也多了不少应用,但TCP/IP却安如泰山。它不但战胜了国际标准化组织的OSI七层模型,而且目前还看不到被其他方案取代的可能。第一代从事TCP/IP工作的工程师,到了退休年龄也在做着朝阳产业。OSI七层模型过于笨重,在实际应用中,市场明显更青睐TCP/IP四层模型。
TCP/IP是一个四层协议系统,如图1.2所示。

image.png

每一层负责不同的功能。

  • 链路层:也称数据链路层或网络接口层。包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
  • 网络层:也称互联网层。处理分组在网络中的活动,例如分组的选路。
  • 运输层:也称传输层。主要为两台主机上的应用程序提供端到端的通信。
  • 应用层:负责处理特定的应用程序细节。

TCP/IP协议族具体包含多个协议,如图1.3所示。
IP协议负责数据传输到哪里,而TCP协议负责数据的可靠传输。它们在数据传输过程中主要完成以下功能:
(1)由TCP协议把数据分成若干数据包,给每个数据包写上序号,以便接收端把数据还原成原来的格式。
(2)IP协议给每个数据包写上发送主机和接收主机的地址,一旦写上源地址和目的地址,数据包就可以在互联网上传送数据了。IP协议还具有利用路由算法进行路由选择的功能。
(3)这些数据包可以通过不同的传输途径(路由)进行传输,由于路径不同,加上其他的原因,可能出现顺序颠倒、数据丢失、数据失真甚至重复的现象。这些问题都由TCP协议来处理,它具有检查和处理错误的功能,必要时还可以请求发送端重发。

image.png

TCP/IP协议族跟OSI模型的对比,如图1.4所示。

image.png

互联网时代,TCP/IP协议已经一统江湖,现在的物联网的通信架构也是构建在传统互联网基础架构之上。在当前的互联网通信协议中,HTTP协议由于开发成本低,开放程度高的优势,几乎占据了大半*,所以很多厂商在构建物联网系统时也基于HTTP协议进行开发。包括Google主导的physic web项目,都是期望在传统Web技术基础上构建物联网协议标准。
HTTP协议是典型的CS通信模式,由客户端主动发起连接,向服务器请求XML或JSON数据。该协议最早是为了适用Web浏览器的上网浏览场景而设计的,目前在PC、手机、Pad等终端上都应用广泛,但并不适用于物联网场景。HTTP协议在物联网场景中应用有以下三大弊端:

  • 必须由设备主动向服务器发送数据,难以主动向设备推送数据。这对于数据采集等场景还可以勉强适用,但是对于频繁的操控场景,只能通过设备定期主动拉取的方式,实现成本和实时性都大打折扣。
  • 安全性不高。由于Web的不安全性,HTTP是明文协议,在很多要求高安全性的物联网场景,如果不做很多安全准备工作(如采用https等),后果将不堪设想。
  • 不同于用户交互终端如PC、手机,物联网场景中的设备多样化,对于运算和存储资源都十分受限的设备,HTTP协议实现、XML/JSON数据格式的解析,都是不可能的任务。

1.4.2 CoAP协议

CoAP(Constrained Application Protocol,受限应用协议),应用于无线传感网中的协议,是6LowPAN协议栈中的应用层协议,适用于资源受限的通信网络。
CoAP协议的特点如下:

  • 报头压缩:CoAP包含一个紧凑的二进制报头和扩展报头。它只有短短的4B的基本报头,基本报头后面跟扩展选项。一个典型的请求报头为10~20B。
  • 方法和URIs:为了实现客户端访问服务器上的资源,CoAP支持GET、PUT、POST和DELETE等方法。CoAP还支持URIs,这是Web架构的主要特点。
  • 传输层使用UDP协议:CoAP协议是建立在UDP协议之上,以减少开销和支持组播功能。它也支持一个简单的停止和等待的可靠性传输机制。
  • 支持异步通信:HTTP对M2M(Machine-to-Machine)通信不适用,这是由于事务总是由客户端发起。而CoAP协议支持异步通信,这对M2M通信应用来说是常见的休眠/唤醒机制。
  • 支持资源发现:为了自主地发现和使用资源,它支持内置的资源发现格式,用于发现设备上的资源列表,或者用于设备向服务目录公告自己的资源。它支持RFC5785中的格式,在CoAP中用/.well—known/core路径表示资源描述。
  • 支持缓存:CoAP协议支持资源描述的缓存,可以优化其性能。

CoAP协议主要实现:

  • libcoap(C语言实现);
  • Californium(Java语言实现)。

CoAP和6LowPan,分别是应用层协议和网络适配层协议,其目标是解决设备直接连接到IP网络,也就是IP技术应用到设备之间、互联网与设备之间的通信需求。因为IPV6技术带来了巨大的寻址空间,不光解决了未来巨量设备和资源的标识问题,也使互联网上的应用可以直接访问支持IPv6的设备,而不需要额外的网关。

1.4.3 MQTT协议(低带宽)

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输),是由IBM开发的即时通信协议,相比来说是比较适合物联网场景的通信协议。MQTT协议采用发布/订阅模式,所有的物联网终端都通过TCP连接到云端,云端通过主题的方式管理各个设备关注的通信内容,负责设备与设备之间的消息转发。
MQTT在协议设计时就考虑到不同设备的计算性能的差异,因此所有的协议都是采用二进制格式编/解码,并且编/解码格式非常易于开发和实现。其最小的数据包只有2个字节,对于低功耗、低速网络也有很好的适应性。MQTT有非常完善的QoS(Quality of Service)机制,根据业务场景可以选择最多一次、至少一次、刚好一次的3种消息送达模式。其运行在TCP协议之上,同时支持TLS(TCP+SSL)协议,并且由于所有数据通信都经过云端,安全性得到了较好的保障。
MQTT协议的适用范围:在低带宽、不可靠的网络下,提供基于云平台的远程设备的数据传输和监控。
MQTT协议的特点:

  • 使用基于代理的发布/订阅消息模式,提供一对多的消息发布模式。
  • 使用TCP/IP提供网络连接。
  • 小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
  • 支持QoS,有3种消息发布服务质量:即至多一次、至少一次、只有一次。

MQTT协议主要实现和应用:

  • 已经有PHP、Java、Python、C和C#等多个语言版本的协议框架。
  • IBM Bluemix的一个重要部分是其IoT Foundation服务,这是一项基于云的MQTT实例。
  • 移动应用程序也早就开始使用MQTT,如 Facebook Messenger 和com等。

MQTT协议一般适用于设备数据采集到端(Device→Server,Device→Gateway),属于集中星型网络架构(hub-and-spoke),不适用设备与设备之间通信,设备控制能力弱。另外,其实时性较差,一般都在秒级。

1.4.4 AMQP协议(互操作性)

AMQP(Advanced Message Queuing Protocol,先进消息队列协议),是OASIS组织提出的,该组织曾提出OSLC(Open Source Lifecyle)标准,用于业务系统,例如PLM、ERP、MES等进行数据交换。
AMQP协议适用范围:最早应用于金融系统之间的交易消息传递,在物联网应用中,主要适用于移动手持设备与后台数据中心的通信和分析。
AMQP协议特点:

  • Wire级的协议,它描述了在网络上传输数据的格式,以字节为流。(注:字节流是由字节组成的,字符流是由字符组成的)
  • 面向消息、队列、路由(包括点对点和发布/订阅),可靠、安全。

AMQP协议有广泛的用途,一些厂商使用了不同的语言编写AMQP协议实现软件,以达到消息传递的目的。不同的AMQP实现软件,可运行在不同的软件环境下。下面列出了4种AMQP协议软件实现的编程语言和运行环境。

  • OpenAMQ:AMQP的开源实现,用C语言编写,运行于Linux、AIX、Solaris、Windows、和OpenVMS系统。
  • Apache Qpid:Apache的开源项目,支持C++、Ruby、Java、JMS、Python和.NET。
  • Redhat Enterprise MRG:实现了AMQP的最新版本0~10,提供了丰富的特征集,比如完全管理、联合、Active-Active集群,有Web控制台,还有许多企业级特征,客户端支持C++、Ruby、Java、JMS、Python和.NET。
  • RabbitMQ:一个独立的开源实现,服务器端用Erlang语言编写,支持多种客户端,如Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP和STOMP等,支持AJAX。
    RabbitMQ发布在Ubuntu和FreeBSD平台。

AMQP工作流程:发布者(Publisher)发布消息(Message),经由交换机(Exchange)。交换机根据路由规则将收到的消息分发给与该交换机绑定的队列(Queue)。最后AMQP代理会将消息投递给订阅了此队列的消费者,或者消费者按照需求自行获取。具体工作流程如图1.5所示。

image.png

1.4.5 XMPP协议(即时通信)

XMPP(Extensible Messaging and Presence Protocol,可扩展通信和表示协议),其前身是Jabber,是一个开源组织产生的网络即时通信协议,后被IETF国际标准组织完成了标准化工作。
XMPP协议的适用范围:用于即时通信的应用程序中,还能用在网络管理、内容供稿、协同工具、档案共享、游戏和远端系统监控中等。
XMPP协议的特点:

  • 属于客户机/服务器通信模式。
  • 用于分布式网络。
  • 简单的客户端,将大多数工作放在服务器端进行。
  • 标准通用标记语言的子集XML的数据格式。

XMPP是基于XML的协议,由于其开放性和易用性,在互联网及时通信应用中运用广泛。相对HTTP,XMPP在通信的业务流程上是更适合物联网系统的,开发者不用花太多心思去解决设备通信时的业务通信流程,相对开发成本会更低。但是HTTP协议中的安全性及计算资源消耗的硬伤并没有得到本质的解决。

1.4.6 JMS协议

JMS(Java Message Service,Java消息服务),是Java平台中著名的消息队列协议。
Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
JMS是一种与厂商无关的API,用来收发系统消息,它类似于JDBC(Java Data Base Connectivity)。这里,JDBC是可以用来访问许多不同关系数据库的API,而JMS则提供同样与厂商无关的访问方法,以访问消息收发服务。JMS能够通过消息收发服务(有时称为消息中介程序或路由器)从一个JMS客户机向另一个JMS客户机发送消息。消息是JMS中的一种类型对象,由两部分组成:即报头和消息主体。报头由路由信息及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载的类型来划分,可以将消息分为几种类型,分别是:文本消息(TextMessage)、目标消息(ObjectMessage)、消息映射(MapMessage)、消息字节(BytesMessage)、消息流(StreamMessage)和无有效负载的消息(Message)。
MQTT、AMQP、XMPP、JMS和CoAP这几种协议都已被广泛应用,并且每种协议至少有10种以上的代码实现,都宣称支持实时的发布/订阅的物联网协议,但是在具体物联网系统架构设计时,需考虑实际场景的通信需求,选择合适的协议。MQTT、XMPP和和CoAP的比较如表1.1所示。

image.png

1.5 UDP协议

UDP为应用程序发送和接收数据报,但是与TCP不同,UDP是不可靠的,它只是把数据报发送出去,但并不能保证该数据报能安全无误地到达最终目的地。
说到UDP,经常拿它与TCP来对比。UDP是无须连接的,所以非常适合DNS查询。如图1.5和图1.6是分别在基于UDP和TCP时执行DNS查询的两个包,前者明显更加直截了当,两个包就完成了。
基于UDP的查询如表1.2所示。

image.png

基于TCP的查询如表1.3所示。

image.png
image.png

UDP为什么能如此直接呢?其实是因为它设计简单,在UDP协议头中,只有端口号、包长度和校验码等少量信息,总共就8个字节,其小巧的头部给它带来了一些优点。

  • 由于UDP协议头长度还不到TCP头的一半,所以在同样大小的包里,UDP包携带的净数据比TCP包多一些。
  • 由于UDP没有序列号(seq)和应答(ack)等概念,无法维持一个连接,所以省去了建立连接的负担。这个优势在DNS查询中体现得淋漓尽致。

UDP数据报封装成一份 I P数据报的格式,如图1.6所示。

image.png

UDP首部的各字段如图1.7所示。

image.png

端口号表示发送进程和接收进程。
UDP长度字段指的是UDP首部和UDP数据的字节长度。该字段的最小值为8字节(发送一份0字节的UDP数据报是OK)。这个UDP长度是有冗余的。IP数据报长度指的是数据报全长,因此UDP数据报长度是全长减去IP首部的长度。
当然简单的设计不一定是好事,更多的时候会带来问题。
UDP不像TCP一样在乎双方MTU(Maximum Transmission Unit,最大传输单元)的大小。它拿到应用层的数据之后,直接打上UDP头就交给下一层了。那么超过MTU的时候怎么办?
在这种情况下,发送方的网络层负责分片,接收方收到分片后再组装起来,这个过程会消耗资源,降低性能。
UDP没有重传机制,所以丢包由应用层来处理。例如,某个写操作需要6个包完成。当基于UDP的写操作中有一个包丢失时,客户端不得不重传整个写操作(6个包)。相比之下,基于TCP的写操作就好很多,只要重传丢失的那一个包即可。试想一下,在高性能环境中,一个写操作需要数十个包来完成,UDP的劣势就体现出来了。
分片机制存在弱点,会成为黑客的攻击目标。接收方之所以知道什么时候该把分片组装起来,是因为每个包里都有More fragments的flag。1表示后续还有分片,0则表示这是最后一个分片,可以组装了。如果黑客持续快速地发送flag为1的UDP包,接收方一直无法把这些包组装起来,就有可能耗尽内存。

1.6 HTTP协议

HTTP协议(Hyper Text Transfer Protocol,超文本传输协议),是用于从万维网(World Wide Web,WWW)服务器传输超文本到本地浏览器的传送协议。
HTTP是基于TCP/IP通信协议来传递数据的(如HTML文件、图片文件和查询结果等)。

1.6.1 工作原理

HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即Web服务器发送所有请求。
Web服务器有:Apache服务器和IIS服务器(Internet Information Services)等。Web服务器根据接收到的请求后,向客户端发送响应信息。HTTP默认端口号为80,但是也可以改为8080或者其他端口。
HTTP协议的三点注意事项:

  • HTTP是无连接的:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后即断开连接。采用这种方式可以节省传输时间。
  • HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端及服务器指定使用适合的MIME-type(文件后缀名)内容类型。
  • HTTP是无状态的:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要前面的信息时它的应答就较快。

如图1.8所示为HTTP协议通信流程。

image.png

1.6.2 消息结构

HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
一个HTTP“客户端”是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP请求的目的。
一个HTTP“服务器”同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。
HTTP使用统一资源标识符(Uniform Resource Identifiers,URI)来传输数据和建立连接。
一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送。
客户端请求消息:客户端发送一个HTTP请求到服务器的请求消息包括请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,如图1.9给出了请求报文的一般格式。
服务器响应消息:HTTP响应也由4部分组成,分别是状态行、消息报头、空行和响应正文,如图1.10所示。

image.pngimage.png

1.6.3 请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法,如表1.4所示。
HTTP 1.0协议中定义了3种请求方法,分别是GET、POST和HEAD方法。
HTTP 1.1协议中新增了5种请求方法,分别是OPTIONS、PUT、DELETE、TRACE和CONNECT方法。

image.png

1.6.4 响应头信息

HTTP请求头提供了关于请求、响应或者其他发送实体的信息。在本节中将具体介绍HTTP响应头信息,如表1.5所示。

image.png
image.png

1.6.5 状态码

当浏览者访问一个网页时,其浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
HTTP状态码的英文为HTTP Status Code。下面是常见的HTTP状态码:

  • 200:请求成功;
  • 301:资源(网页等)被永久转移到其他URL;
  • 404:请求的资源(网页等)不存在;
  • 500:内部服务器错误。

1.6.6 内容类型

Content-Type(内容类型),一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是为什么一些ASP网页点击下载的结果却是一个文件或一张图片的原因。

1.7 FTP协议

FTP与我们已描述的另一种应用不同,它采用两个 TCP连接来传输一个文件。
控制连接以通常的客户服务器方式建立。服务器以被动方式打开用于FTP的端口(21),等待客户的连接。客户则以主动方式打开TCP端口21,来建立连接。控制连接始终等待客户与服务器之间的通信。该连接将命令从客户传给服务器,并传回服务器的应答。
由于命令通常是由用户输入的,所以IP对控制连接的服务类型就是“最大限度地减小迟延”。
每当一个文件在客户与服务器之间传输时,就创建一个数据连接。由于该连接用于传输目的,所以IP对数据连接的服务特点就是“最大限度提高吞吐量”。如图1.11所示为客户与服务器之间的连接情况。

image.png

从图1.11中可以看出,交互式用户通常不处理在控制连接中转换的命令和应答。这些细节均由两个协议解释器来完成。标有“用户接口”的方框功能是按用户所需提供各种交互界面(全屏幕菜单选择,逐行输入命令等),并把它们转换成在控制连接上发送的 FTP命令。
类似地,从控制连接上传回的服务器应答也被转换成用户所需的交互格式。
从图1.11中还可以看出,正是这两个协议解释器根据需要激活文件传送功能。
FTP协议规范提供了控制文件传送与存储的多种选择。在以下4个部分的选择项中,每一部分都必须选择一项。
1.文件类型

  • ASCII码文件类型(默认选择):文本文件以NVT ASCII码形式在数据连接中传输。这要求发送方将本地文本文件转换成NVT ASCII码形式,而接收方则将NVT ASCII码再还原成本地文本文件。其中,用NVT ASCII码传输的每行都带有一个回车,之后是一个换行。这意味着接收方必须扫描每个字节,查找CR、LF对。
  • EBCDIC文件类型:该文本文件传输方式要求两端都是 EBCDIC系统。
  • 图像文件类型(也称为二进制文件类型):数据发送呈现为一个连续的比特流。通常用于传输二进制文件。

    • 本地文件类型:该方式在具有不同字节大小的主机间传输二进制文件。每一字节的比特数由发送方规定。对使用8bit字节的系统来说,本地文件以8bit字节传输就等同于图像文件传输。

  2.格式控制
格式控制选项只对ASCII和EBCDIC文件类型有效。

  • 非打印(默认选择):文件中不含有垂直格式信息。
  • 远程登录格式控制:文件含有向打印机解释的远程登录垂直格式控制。
  • Fortran 回车控制:每行首字符是Fortran格式控制符。

3.结构

  • 文件结构(默认选择):文件被认为是一个连续的字节流。不存在内部的文件结构。
  • 记录结构:该结构只用于文本文件(ASCII或EBCDIC)。
  • 页结构:每页都带有页号发送,以便接收方能随机地存储各页。该结构由TOPS - 20操作系统提供(主机需求RFC不提倡采用该结构)。

4.传输方式
它规定文件在数据连接中如何传输。

  • 流方式(默认选择):文件以字节流的形式传输。对于文件结构,发送方在文件尾提示关闭数据连接。对于记录结构,有专用的两字节序列码标志记录结束和文件结束。
  • 块方式:文件以一系列块来传输,每块前面都带有一个或多个首部字节。
  • 压缩方式:一个简单的全长编码压缩方法,压缩连续出现的相同字节。在文本文件中常用来压缩空白串,在二进制文件中常用来压缩 0字节(这种方式很少使用,也不受支持。现在有一些更好的文件压缩方式支持FTP)。

如果算一下以上所有选择的排列组合数,那么对传输和存储一个文件来说就有72种不同的方式。幸运的是,其中很多选择或是废弃了,或是不为多数实现环境所支持,所以可以忽略掉。
通常由UNIX实现的FTP客户和服务器限制了我们的选择:

  • 类型:ASCII或图像;
  • 格式控制:只允许非打印;
  • 结构:只允许文件结构;
  • 传输方式:只允许流方式。

这就限制我们只能取一或两种方式:ASCII或图像(二进制)。
该实现满足主机需求RFC的最小需求(该RFC也要求能支持记录结构,但只有操作系统支持它才可以,而UNIX则不支持)。
很多非UNIX的实现提供了处理它们自己的文件格式的FTP功能。主机需求RFC指出“FTP协议有很多特征,虽然其中一些通常不实现,但对FTP中的每一个特征来说,都存在着至少一种实现”

1.8 Bluetooth协议

蓝牙技术是一种尖端的开放式无线通信标准,能够在短距离范围内无线连接桌上型电脑与笔记本电脑、便携设备、PDA、移动电话、拍照手机、打印机、数码相机、耳麦、键盘甚至鼠标。
利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够简化设备与互联网之间的通信,从而数据传输变得更加迅速高效。
蓝牙采用分散式网络结构以及快跳频和短包技术,支持点对点及点对多点通信,工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段。其数据速率为1Mbps。采用时分双工传输方案实现全双工传输。
简而言之,蓝牙技术让各种数码设备之间能够无线沟通。有了蓝牙无线技术,可以轻松连接计算机和便携设备、移动电话及其他外围设备——在9米(30英尺)距离之内以无线方式彼此连接。
相比于其他无线技术:红外、无线2.4G、Wi-Fi来说,蓝牙具有加密措施完善、传输过程稳定及兼容设备丰富等诸多优点。尤其是在授权门槛逐渐降低的今天,蓝牙技术开始真正普及到所有的数码设备中。

1.8.1 Bluetooth发展史及优势

目前蓝牙技术最新的协议是蓝牙技术联盟 (Bluetooth Special Interest Group),是2016年6月16日发布的新一代蓝牙标准——蓝牙5。蓝牙5比原来拥有更快的传输速度,更远的传输距离。
蓝牙名字源于一个小故事。公元940—985年,哈洛德·布美塔特(Harald Blatand,后人称Harald Bluetooth)统一了整个丹麦。他的名字Blatand可能取自两个古老的丹麦词语,bla意思是黑皮肤的,而tan是伟人的含义。和许多君王一样 ,哈洛德四处扩张领土,为政治、经济和荣誉而征战。公元960年哈洛德到达了他权力的最高点,征服了整个丹麦和挪威。而蓝牙是这个丹麦国王Viking的“绰号”,因为他爱吃蓝梅,牙齿被染蓝,因此而得这一“绰号”。
在行业协会筹备阶段,需要一个极具有表现力的名字来命名这项高新技术。行业组织人员,在经过一夜关于欧洲历史和未来无线技术发展的讨论后,有些人认为用Blatand国王的名字命名再合适不过了。Blatand国王将挪威、瑞典和丹麦统一起来;他的口齿伶俐,善于交际,就如同这项即将面世的技术。该项技术将被定义为允许不同工业领域之间的协调工作,保持着各个系统领域之间的良好交流,例如计算机、手机和汽车行业之间的工作。
为什么要推出蓝牙?
蓝牙技术最初由爱立信创制。该技术始于爱立信公司的1994方案,它是研究在移动电话和其他配件间进行低功耗、低成本无线通信连接的方法。发明者希望为设备间的通信创造一组统一规则(标准化协议),以解决用户间互不兼容的移动电子设备。
研究的目的是要找到一种方法,能够除掉连接移动电话和PC卡、耳机、台式计算机及其他设备之间的电缆。此项研究是一个大项目中的一部分,该项目主要研究如何将各种不同的通信设备通过移动电话接入蜂窝网上。经项目人员研究得出结论,这种连接的最后一段应该是短距离的无线连接。随着项目的进展,日益明朗化的是短距离无线通信的应用范围几乎无限广阔。
1997年,爱立信公司借此概念接触了移动设备制造商,讨论其项目合作发展,结果获得支持。1998年5月,爱立信、诺基亚、东芝、IBM和英特尔5家公司,在联合开展短距离无线通信技术的标准化活动时提出了蓝牙技术。
1999年5月20日,这5家公司成立了蓝牙“特别兴趣组”(Special Interest Group,SIG),即蓝牙技术联盟的前身,以使蓝牙技术能够成为未来的无线通信标准。芯片“霸主”英特尔公司负责半导体芯片和传输软件的开发,爱立信公司负责无线射频和移动电话软件的开发,IBM和东芝公司负责笔记本电脑接口规格的开发。
1999年下半年,著名的业界“巨头”微软、摩托罗拉、三星、朗讯与蓝牙特别小组的5家公司共同发起成立了蓝牙技术推广组织,从而在全球范围内掀起了一股“蓝牙”热潮。全球业界开发出了一大批蓝牙技术的应用产品,使蓝牙技术呈现出极其广阔的市场前景,迎来了波澜壮阔的全球无线通信浪潮。
到2000年4月,SIG的成员数已超过1500家,其成长速度超过了其他的无线联盟组织。这些公司联合开发了蓝牙1.0标准,并于1999年7月公布。蓝牙的详细发展史如表1.6所示。

image.png


目前最新的蓝牙5.0相对之前的版本有更大的技术优势,表现在以下几方面:
  • 更快的传输速度:蓝牙5.0的开发人员称,新版本的蓝牙传输速度上限为24Mbps,是之前4.2LE版本的两倍。
  • 更远的有效距离:蓝牙5.0的另外一个重要改进是,它的有效距离是上一版本的4倍,理论上,蓝牙发射和接收设备之间的有效工作距离可达300米。
  • 导航功能:蓝牙5.0将添加更多的导航功能,因此该技术可以作为室内导航信标或类似定位设备使用,结合Wi-Fi可以实现精度小于1米的室内定位。举个例子,如果你和小编一样是路痴的话,你可以使用蓝牙技术,在诺大的商业中心找到路。
  • 物联网功能:物联网还在持续火爆,因此,蓝牙5.0针对物联网进行了很多底层优化,力求以更低的功耗和更高的性能为智能家居服务。
  • 升级硬件:之前的一些蓝牙版本更新只要求升级软件,但蓝牙5.0很可能要求升级到新的芯片。不过,旧的硬件仍可以兼容蓝牙5.0,但无法享用其新的性能了。搭载蓝牙5.0芯片的“旗舰”级手机已经问世,相信中低端手机也将陆陆续续内置蓝牙5.0芯片。

    • 更多的传输功能:全新的蓝牙5.0能够增加更多的数据传输功能,硬件厂商可以通过蓝牙5.0创建更复杂的连接系统,比如Beacon或位置服务。因此通过蓝牙设备发送的广告数据可以发送少量信息到目标设备中,甚至无须配对。
  • 更低的功耗:蓝牙5.0降低了蓝牙的功耗,使人们在使用蓝牙的过程中再也不必担心待机时间短的问题。

1.8.2 Bluetooth技术

目前主流的操作系统都支持蓝牙堆栈技术。蓝牙协议栈的结构如图1.12所示。

image.png

苹果公司从2012年的Mac OS X v10.2产品就开始采用蓝牙技术。关于微软平台,Windows在XP时代就对Bluetooth 1.1/2.0/2.0+EDR提供了原生支持。Linux有两个常用的蓝牙堆栈,即BlueZ和Affix。多数Linux核心程序都包括BlueZ堆栈,它最早是由高通开发的。Affix堆栈是由Nokia开发的。FreeBSD从5.0版本开始支持蓝牙。NetBSD从4.0版本开始支持蓝牙。蓝牙堆栈也被接入OpenBSD端口。
蓝牙协议体系中的协议按SIG的关注程度分为4层:

  • 核心协议:BaseBand、LMP、L2CAP、SDP;
  • 电缆替代协议:RFCOMM;
  • 电话传送控制协议:TCS-Binary、AT命令集;
  • 选用协议:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、WAE。

除上述协议层外,规范还定义了主机控制器接口(Host Controller Interface HCI),它为基带控制器、连接管理器、硬件状态和控制寄存器提供命令接口。在图1.11中,HCI位于L2CAP的下层,但HCI也可位于L2CAP上层。
蓝牙核心协议由SIG制定的蓝牙专用协议组成。绝大部分蓝牙设备都需要核心协议(加上无线部分),而其他协议则根据应用的需要而定。总之,电缆替代协议、电话控制协议和被采用的协议在核心协议基础上构成了面向应用的协议。

1.9 ZigBee协议

ZigBee是一种新兴的短距离、低复杂度、低功耗、低数据速率和低成本的无线网络技术。主要用于近距离无线连接。TI公司的ZigBee芯片样片如图1.13所示。它依据IEEE 802.15.4标准,在数千个微小的传感器之间相互协调实现通信。ZigBee无线网络主要是为工业现场自动化控制数据传输而建立。因此它具备简单、方便、稳定和低成本等特点,弥补了蓝牙技术不能满足工业自动化中对低数据量、低成本、低功耗、高可靠性的无线数据通信的需求。

image.png

1.9.1 ZigBee发展历史

ZigBee(蜜蜂协议),是基于IEEE802.15.4标准的低功耗局域网协议。根据国际标准规定,ZigBee技术是一种短距离、低功耗的无线通信技术,它来源于蜜蜂的八字舞,蜜蜂(bee)是通过飞翔和“嗡嗡”(zig)抖动翅膀的“舞蹈”与同伴传递花粉所在方位的信息,而ZigBee协议的方式特点与其类似,便更名为ZigBee。
ZigBee协议是由ZigBee联盟制定的无线通信标准,该联盟成立于2001年8月。2002年下半年,英国Invensys公司、日本三菱电气公司、美国摩托罗拉公司及荷兰飞利浦半导体公司共同宣布加入ZigBee联盟,研发名为ZigBee的下一代无线通信标准,这一事件成为该技术发展过程中的里程碑事件。ZigBee联盟现有的理事公司包括BM Group、Ember、飞思卡尔半导体、Honeywell(霍尼韦尔)、三菱电机、摩托罗拉、飞利浦、三星电子、西门子,以及德州仪器。ZigBee联盟的目的是为了在全球统一标准上实现简单可靠、价格低廉、功耗低、无线连接的监测和控制产品进行合作,并在2004年12月发布了第一个正式标准。
下面列出ZigBee的几个重要的里程碑事件。

  • 2001年8月,ZigBee Alliance成立。
  • 2004年,ZigBee V1.0诞生。它是Zigbee规范的第一个版本。由于推出时间仓促,存在一些错误。
  • 2006年,推出ZigBee 2006,功能比较完善。
  • 2007年年底,ZigBee PRO推出。
  • 2009年3月,Zigbee RF4CE推出,具备更强的灵活性和远程控制能力。
  • 2009年开始,Zigbee采用了IETF的6LoWPAN标准作为新一代智能电网Smart Energy(SEP 2.0)的标准,致力于形成全球统一的易于与互联网集成的网络,实现端到端的网络通信。

ZigBee版本升级历程如图1.14所示。

image.png

  • ZigBeeV1.0:这是第一个ZigBee标准公开版,2005年6月开放下载。
  • ZigBeeV1.1:这是第二个ZigBee标准公开版,2007年1月开放下载。
  • ZigBeeV1.2:这是第三个ZigBee标准公开版,2008年1月开放下载。又称ZigBee Pro。

ZigBee协议的诞生源于对工业物联网的需求。但为了满足不同的应用背景,ZigBee联盟先后颁布了:

  • ZigBee Home Automation(ZigBee HA);
  • ZigBee Light Link(ZigBee LL);
  • ZigBee Building Automation(ZigBee BA);
  • ZigBee Retail Services(ZigBee RS);
  • ZigBee Health Care(ZigBee HC);
  • ZigBee Telecommunication Services(ZigBee TS);

等应用层协议来满足智能家居、智能照明、智能建筑、智能零售、智能健康、智能通信服务等领域。问题是这些应用层协议是独立不互通的。以国内应用最广的智能家居领域为例,欧瑞博采用了标准的ZigBee HA协议的智能开关,和飞利浦采用标准的ZigBee LL的Hue智能灯泡是不能互相控制的。
这里强调标准ZigBee协议的原因是由于早期ZigBee版本由于标准化不完善,给了厂商太多选择,很多厂商虽然采用了ZigBee HA的协议,但是终端的智能家居厂商根据自家的需求定制化了ZigBee HA,而非标准ZigBee协议,导致不同厂家产品还是不能互联互通。
这也类似于Android,不同手机厂商都是采用Android系统,但是都进行了大量的定制化,导致最后的手机系统也是千差万别。可以说,ZigBee之前仅仅解决了智能设备的连接问题,但是没有解决智能设备互联互通的问题。
2016年5月,ZigBee联盟推出了ZigBee 3.0标准,其主要任务就是为了统一上述众多应用层协议,解决了不同应用层协议之间的互联互通问题。用户只要购买任意一个经过ZigBee 3.0的网关就可以控制不同厂家基于ZigBee 3.0的智能设备,如图1.15所示。

image.png

ZigBee 3.0统一了采用不同应用层协议的ZigBee设备的发现、加入和组网方式,使得ZigBee设备的组网更便捷、更统一。
并且ZigBee联盟推出了ZigBee 3.0认证,就是来规范各个厂商使用标准的ZigBee 3.0协议,以保证基于ZigBee 3.0设备的互通性。
距ZigBee 3.0标准发布后的第7个月,ZigBee联盟于2016年12月宣布其8家成员公司已有20个ZigBee 3.0芯片平台获得认证通过,并表示未来IoT应用开发者在开发建筑照明、能源应用、传感器、控制器、网关和其他的物联网应用时,有更多供货商可供选择,不用再担心互操作性问题。

1.9.2 ZigBee的特点及优势

ZigBee是一种无线连接,可工作在2.4GHz(全球流行)、868MHz(欧洲流行)和915 MHz(美国流行)3个频段上,分别具有最高250Kbps、20Kbps和40Kbps的传输速率,它的传输距离在10~75m的范围内,但可以继续增加。作为一种无线通信技术,ZigBee具有如下特点:

  • 数据传输速率低:10KB/s~250KB/s,专注于低传输应用。
  • 低功耗:由于ZigBee的传输速率低,发射功率仅为1mW(毫瓦),而且采用了休眠模式,功耗低,因此ZigBee设备非常省电。据估算,ZigBee设备仅靠两节5号电池就可以维持长达6个月到2年左右的使用时间,这是其他无线设备望尘莫及的。
  • 成本低:ZigBee模块的初始成本在6美元左右,也许很快就能降到1.5~2.5美元,并且ZigBee协议是免专利费的。低成本对于ZigBee也是一个关键的因素。
  • 时延短:通信时延和从休眠状态激活的时延都非常短,典型的搜索设备时延为30ms,休眠激活的时延是15ms,活动设备信道接入的时延为15ms。因此ZigBee技术适用于对时延要求苛刻的无线控制(如工业控制场合等)应用。
  • 网络容量大:一个星型结构的ZigBee网络最多可以容纳254个从设备和一个主设备,一个区域内可以同时存在最多100个ZigBee网络,而且网络组成灵活。
  • 可靠:采取了碰撞避免策略,同时为需要固定带宽的通信业务预留了专用时隙,避开了发送数据的竞争和冲突。MAC层采用了完全确认的数据传输模式,每个发送的数据包都必须等待接收方的确认信息。如果传输过程中出现问题可以进行重发。
  • 安全:ZigBee提供了基于循环冗余校验(CRC)的数据包完整性检查功能,支持鉴权和认证,采用了AES-128的加密算法,各个应用可以灵活确定其安全属性。

1.9.3 ZigBee基本概念

ZigBee可使用的频段有3个,分别是2.4GHz的ISM频段、欧洲的868MHz频段,以及美国的915MHz频段,而不同频段可使用的信道分别是16、1、10个,如图1.16所示。

image.png

ZigBee规范是由ZigBee Alliance所主导的标准,定义了网络层(Network Layer)、应用层(Application Layer)、媒体访问控制层(Media Access Control Layer;MAC Layer)、物理层(PHY Layer),如图1.17所示。

上一篇: 如何在C#中轻松获取文件或流的可读大小(以KB、MB、GB、TB为单位)

下一篇: 如何在MySQL中查找超过特定时间点的数据?- 一种实用问题解决方案