目前市面上的物联网模块大多支持TCP、UDP、CoAP、LwM2M、MQTT等协议,既有传输层协议也有应用层协议,并且协议有很多种,适用的场景也不同。但是在设计一个产品的时候通常只需要使用一种协议,那么如何选择一个符合自己产品应用场景的协议就显得尤为重要。本文将介绍TCP、UDP、CoAP、LwM2M、MQTT这五种常用协议的特点和区别,为产品设计时的协议选择提供参考。1、传输层协议TCP、UDPTCP(TransportControlProtocol)和UDP(UserDatagramProtocol,用户数据协议)属于传输层协议,为上层用户提供高级别的通信可靠性。1、传输控制协议(TCP):TCP(TransmissionControlProtocol)定义了两台计算机之间为了可靠传输而交换的数据和确认信息的格式,以及计算机为保证数据正确到达而采取的措施。该协议指定TCP软件如何识别给定计算机上的多个目标进程以及如何从数据包重复等错误中恢复。该协议还规定了两台计算机如何发起TCP数据流传输以及如何结束传输。TCP最大的特点是提供面向连接的、可靠的字节流服务。2、用户数据报协议(UDP):UDP(UserDatagramProtocol)是一种简单的面向数据报的传输层协议。提供非面向连接的、不可靠的数据流。UDP不提供可靠性,也不提供数据包到达确认、排序和流量控制等功能。它只是将应用程序传递的数据报发送到IP层,但不能保证它们一定会到达目的地。因此,数据包可能会丢失、重复和乱序。但是由于UDP在传输数据报之前不需要客户端与服务器端建立连接,也没有超时重传等机制,所以传输速度非常快。联系);UDP是无连接的,即发送数据前不需要建立连接,TCP提供可靠的服务。也就是说,通过TCP连接传输的数据是无差错、不丢失、不重复、有序到达的;UDP尽最大努力进行传递,即不保证可靠传递。TCP是面向字节的。实际上,TCP把数据看成是一系列非结构化的字节流;UDP是面向消息的UDP没有拥塞控制,所以网络拥塞不会降低源主机的发送速率(对实时应用很有用,比如IP电话,实时视频会议等)TCP连接只能点对点;UDP支持一对一、一对多、多对一和多对多的交互通信TCP头开销为20字节;UDP头开销很小,只有8个字节6.TCP的逻辑通信通道是全双工可靠通道,而UDP是不可靠通道。第二,传输层协议是否适合直接应用于物联网设备终端?传输层,顾名思义,只负责传输数据,就像一辆运输货物的卡车,但是如果要将货物原封不动地运到目的地,还需要做装箱、装车、检验、入库、签署收据等,这需要更多的工作。这些任务也是应用层协议要做的工作。因此,物联网设备终端要想稳定可靠地与数据进行交互,就需要使用应用层协议,而不是直接使用传输层协议。下面分别介绍MQTT、CoAP、LwM2M这三种适用于物联网设备终端的应用层协议。3、应用层协议MQTT和CoAP1。MQTT概述MQTT(MessageQueuingTelemetryTransport)是IBM公司开发的即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,可以将几乎所有的互联网连接对象与外界连接起来。它被用作传感器和执行器的通信协议(例如通过Twitter将房屋连接到Internet)。2.MQTT协议的特点MQTT协议是为计算能力有限、工作在低带宽和不可靠网络中的远程传感器和控制设备的通信而设计的协议。它有以下主要特点:采用发布/订阅消息模式,提供一对多的消息发布,解耦应用;屏蔽加载内容的消息传输;使用TCP/IP提供网络连接;消息发布服务质量有三种:“最多一次”,消息发布完全依赖于底层的TCP/IPIP网络。可能会发生消息丢失或重复。这个级别可以用在以下几种情况,环境传感器数据,一条读记录丢了也没关系,因为近期会有第二次发送。“至少一次”,确保消息到达,但可能会出现消息重复。“仅一次”,确保消息到达一次。此级别可用于重复或丢失消息可能导致计费系统产生错误结果的情况。开销很小的小传输(固定长度标头为2字节)和协议交换被最小化以减少网络流量。3.CoAP概述由于物联网中的很多设备都是资源受限的,即只有少量的内存空间和有限的计算能力,传统的HTTP协议在物联网中的应用过于庞大而不适用。IETF的CoRE工作组提出了基于REST架构的CoAP协议。CoAP适用于UDP协议族并使用二进制格式。与HTTP使用的文本格式相比,CoAP比HTTP更紧凑。4、CoAP协议的消息模型以消息作为数据通信的载体,通过交换网络消息实现设备间的数据通信。云设备资源的操作是通过请求和响应机制完成的,类似于HTTP,设备端可以传递4个请求。方法(GET、PUT、POST、DELETE)对服务器端资源进行操作。协议包轻量级,最小长度仅为4B。支持可靠传输、数据重传、分块传输,保证数据可靠到达。支持IP组播,即可以同时向多个设备发送请求,无需长连接通信,适用于低功耗物联网场景。5.MQTT和CoAP的区别4.那么哪个更适合IoT设备呢?MQTT和CoAP其实更适合IoT设备,但是还是需要根据实际场景来选择。比如设备运行在不需要考虑功耗但需要实时控制的场景,比如充电桩、快递柜等,使用MQTT协议就比较合适。如果设备平时只上报数据,对功耗比较敏感,比如水表、煤气表,使用CoAP协议比较合适。随着物联网的兴起,万物互联的时代将会到来。但是出于成本和性能的考虑,设备资源往往是有限的,因此需要一种专门为资源受限的物联网设备设计的协议来满足万物互联的需求,这就是LwM2M协议。一、LwM2M概述:OMA是一个国际组织,最初定义了一套OMA-DM协议,用于远程管理移动终端设备,如手机开户、版本升级等。OMA-DM的应用范围非常广泛。VerizonWireless和Sprint等许多运营商都有自己的OMA-DM服务,并要求手机/模块在连接到网络时通过自定义OMA-DM网络访问测试。由于物联网的兴起,OMA在传统的OMA-DM协议的基础上提出了LwM2M协议。2013年底,OMA发布了LwM2M规范。OMA轻量级M2M的主要动机是定义一套适用于各种物联网设备的轻量级协议,因为M2M设备通常是嵌入式终端,资源非常有限,没有UI,计算能力和网络通信能力也有限。同时,由于物联网终端数量庞大,节约网络资源变得非常重要。2.LwM2M协议逻辑实体和逻辑接口LwM2M定义了三个逻辑实体:LwM2MServer服务器LwM2Mclient客户端负责执行服务器命令并上报执行结果LwM2MbootstrapserverBootstrapserver负责配置LwM2Mclient。在这三个逻辑实体中,它们之间有4个逻辑接口:DeviceDiscoveryandRegistration:该接口允许客户端向服务端注册,并通知服务端客户端支持的能力(简单来说就是哪些资源Resource和Object对象是supportedBootstrap:Bootstrapserver:通过这个接口ConfigureClinet-比如LwM2Mserver的URL地址DeviceManagementandServiceEnablement:这个是最重要的业务接口,LwM2MServer向Client发送命令,接收响应信息上报:这个接口用于LwM2MClient上报其资源信息,如传感器温度等,上报方式可以是事件触发,也可以是周期性的。这三个逻辑实体和四个逻辑接口之间的关系如下图所示:3.LwM2M协议栈LwM2M协议栈结构如下图所示:LwM2M对象:每个对象对应客户端的一个具体功能实体。LwM2M规范定义看一下标准Object,比如urn:oma:lwm2m:oma:2;(LwM2MServerObject)urn:oma:lwm2m:oma:3;(LwM2MAccessControlObject)每个object可以有很多资源。例如,一个Firmware对象可以有一个Firmware版本号、大小等资源。Vendor可以自己定义这个对象:LwM2MProtocol:定义一些逻辑操作,如Read、Write、Execute、Create或Delete。CoAP:是IETF定义的ConstrainedApplicationProtocol,作为LwM2M的传输层,下层可以是UDP或者SMS。UDP是必须的,SMS是可选的。CoAP有自己的消息头、重传机制等。DTLS:用于保证客户端和服务端之间的安全。4、LwM2M与CoAP的关系LwM2M消息没有对称的反馈消息。由于LwM2M承载在CoAP协议之上,使用了CoAP的get、post、put、delete方法,所以对应消息的成功或失败的反馈是通过CoAP协议本身。交互来实现。LwM2M负载支持四种格式:纯文本、不透明、TLV和JSON。这四种协议必须是服务端支持的,TLV格式必须是客户端支持的。
