精华内容
下载资源
问答
  • IOT设备通讯协议MQTT

    千次阅读 2018-04-08 15:07:51
    笔者的公司最近在做IOT设备相关的业务,基于这个契机寻找学习了一下关于IOT通讯协议相关的内容,最终在技术选型上选择了使用MQTT协议并且结合EMQ上层MQTT中间件实现提供链接服务,那么本轮博文就和大家来一起探讨学习...

    在这里插入图片描述

    哈喽大家好呀!笔者的公司最近在做IOT设备相关的业务,基于这个契机寻找学习了一下关于IOT通讯协议相关的内容,最终在技术选型上选择了使用MQTT协议并且结合EMQ上层MQTT中间件实现提供链接服务,那么本轮博文就和大家来一起探讨学习有关IOT设备的相关特性和MQTT协议的本质.

    附上:

    喵了个咪的博客:w-blog.cn

    MQTT官方 : https://github.com/mqtt/mqtt.github.io

    服务中间件列表: https://github.com/mqtt/mqtt.github.io/wiki/servers

    客户端列表: https://github.com/mqtt/mqtt.github.io/wiki/libraries

    1.IOT设备的特性

    在讨论标题的这个问题的时候我们需要先弄清楚IOT设备是什么,IOT设备和传统的智能设备有什么区别,笔者总结下的IOT设备有如下特点:

    • 硬件能力差(存储能力基本只有几MB,CPU频率低连使用HTTP请求都很奢侈)
    • 系统千差万别(Brillo,mbedOS,RIOT等)
    • 如使用电池供电,电量消耗敏感
    • 如果是小设备设备基数大需要维持大量在线链接
    • 网络情况不稳定,移动网络网络资费贵,需要尽量减少开销和稳定

    在以上这样苛刻的场景下很多技术上常用在智能设备方案都望而却步,总结一下我们主要面对下面三个问题:

    • socket.io,websocket? 不同的系统可能无法使用HTTP,设备资源可能使用HTTP都奢侈
    • TCP/IP自定协议? 虽然不用在意系统,自定义报文怎么解决网络开销问题?
    • 自主研发成本高,使用第三方IOT平台容易被技术或硬件绑定

    2. MQTT为什么适合IOT场景

    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,使用方式比较类似于队列软件比如RabbitMQ,使用发布/订阅的方式提供互相之间的通讯,MQTT是为在计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:

    • 该协议支持所有平台,几乎可以把所有联网物品和外部连接起来
    • 有三种消息发布服务质量
      - “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
      - “至少一次”,确保消息到达,但消息重复可能会发生。
      - “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
    • 小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
    • 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制;

    除了MQTT的协议特性外还有一些客观原因:

    • 对语言友好主流语言的客户端都有
    • 大部分硬件方案天生支持
    • 数十个MQTT服务器端程序可供选择
    • 社区成熟解决方案被广泛运用遇到问题方便寻求帮助

    以上基本是我们为什么也会选择MQTT作为IOT协议的原因,需要更多的了解或者查看客户端支不支持和服务端实现可以参考官方github:

    MQTT官方 : https://github.com/mqtt/mqtt.github.io
    服务中间件列表: https://github.com/mqtt/mqtt.github.io/wiki/servers
    客户端列表: https://github.com/mqtt/mqtt.github.io/wiki/libraries

    3 总结

    关于MQTT的解释只是一个开篇,下一章节将说到我们的主角EMQ百万级MQTT消息服务,那么多谢大家的关注我们下节见……

    注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

    展开全文
  • PC机与嵌入式设备通信协议设计原则

    千次阅读 2015-12-13 09:21:21
    PC机与嵌入式设备通信协议设计原则:简单,可扩展,低耦合,稳定,高效,易实现,软件开发和考虑硬件。

    PC机与嵌入式设备通信协议设计原则

    嵌入式设备在运行中需要设置参数,这个工作经常由PC机来实现,需要为双方通信设计协议,有代表性协议是如下三种:

    表1 三种常见通信协议

    名称

    固定二进制

    变长二进制

    纯文本协议

    代表

    DL645

    ASN.1

    XML

    实例

    Vog:4Bytes

    Cur:4Bytes

    01 04 Vol

    02 04 Cur

    Vol=100V,

    Cur=5A

    适合场合

    长度内容固定

    单帧数据较短

    提供数据模型

    长度灵活可变

    数据内容、长度、

    交换格式不受限

    优点

    编解码简单,效率高,占用内存少

    长度灵活,可以实现嵌套

    可读性极佳,十分灵活,跨平台

    缺点

    可读性差,长度

    受限,不易扩展

    可读性较差,

    编解码较复杂

    占用内存多,编解码耗时

    从上表可以看到,一般嵌入式设备内存和运算性能都有限,因此固定二进制是首选通信协议。

    一.  简单性

    保证协议是一个简单的方案,晦涩难懂往往意味着实现困难和容易出错。协议的结构宜采用平面方式,每个域作用明确,数据域尽可能设计得长度和位置固定,注释详尽,文档清晰,实例丰富,让人尽快上手和理解。

    协议一般都需要以下域:帧头,长度,帧类型,目标地址,源地址,数据,校验,帧尾。

    二.  可扩展

    必须保证将来增加功能和更改硬件后协议仍能胜任工作,这往往是通过预留空间来实现,协议的变更应该只是量的增加,不至于引起协议结构的变化。

    三.  低耦合

    理想情况下每个协议包是原子信息,即本协议包不与其他协议包牵连,以防止通讯丢帧和设置牵连带来的错误。

    四.  稳定性

    协议包长度适宜:太小包含的信息过少,协议包的种类繁多,容易引起通讯混乱和牵连错误;太大包含的信息过多,可读性较差,组帧和解帧的工作困难,还会带来通讯易受干扰的缺陷,一般协议长度以最小原子性信息为标尺。

    协议必须包括校验机制,以便于接收方判别协议包正确完整接收,如果出错需要较好的机制来确保通讯成功(如重传)。

    五.  高效率

    按信息类型区分协议包类别,如:设置网络信息参数,设置当前运行参数,可以区分开来,方便程序处理。

    将同种操作编码为一个子集是一种高效手段,如Read操作,编码为0x0010,Write操作,编码为0x0020。

    数据尽可能设计成同构模式,如果实在有差异,至少将同类型数据放置在一起,这样程序可以充分利用指针和线性寻址加速处理。

    六.  易实现

    尽量减少复杂算法的使用,如,通讯链路稳定,数据帧的校验码可以由CheckSum代替CRC。除非资源非常紧张,否则不要将过多的信息挤压在一个数据里,因为它会带来可读性差和实现困难。

    七.软件开发

    尽可能地让硬件ISR完成驱动工作,不要让“进程”参与复杂的时序逻辑,否则处理器将步履蹒跚且逻辑复杂!如:

    接收固定长度的数据帧,可以使用DMA,每接收完一帧DMA_ISR向进程发消息。小心处理DMA断层异常(接收的数据帧长度正常但数据错误,数据为上帧的后半部分+本帧的前半部分)。

    接收不定长的数据帧,可以使用状态机,当接收到“帧尾数据”时向进程发消息。小心数据紊乱和超时异常(数据紊乱时需要将状态机及时复位,超时一般使用定时器监控)。

    八. 考虑硬件

    如果通信链路是高速总线(如SPORT可达100Mbps),一般设计成一帧产生一次中断,它通过长度触发的DMA来实现,需要将协议设计成固定长度,如附录A。它具备高效率,但灵活性较差。

    如果通信链路是低速总线(如UART一般100kbps),一般接收一字节产生一次中断,可以将协议设计成变长帧,如附录B。它具备高灵活性,但效率较低。

     

    附录A 一个基于DMA传输固定长度的协议实例。

    图1显示了PC发送数据帧的格式,总长为64字节,是4字节的整倍数,符合绝大部分32位处理器结构体对齐的特性。

    0x3C:INT8U,帧头,可见字符’<’

    Len:INT8U,本帧的总数据长度,在图4即为64

    Dst:INT8U,标识目标设备的ID号

    Src:INT8U,标识源设备的ID号

    Data:56字节的存储区,内容依赖于具体的通信帧(实例见表2)

    Cmd:INT16U,数据帧的类别

    CS:INT8U, 对它前面所有数据(62字节)进行8位累加和校验

    0x7D:INT8U, 帧尾,可见字符’}’


    图1 PC发送数据帧

    表2  Data域数据结构实例

    目的

    给M&M08配置IEC61850协议通用部分

    命令字

    0x0010/0x0020/0x0030(1/2/3MU)

    名称

    字节

    单位

    说明

    目标MAC

    6

    /

    发送数据包的目标MAC地址

    源MAC

    6

    /

    发送数据包的源MAC地址

    VLAN

    4

    /

    0表示不添加,其他为VLAN值

    通道映射

    32

    /

    源数据映射到ASDU的数据集

    APPID

    2

    /

    应用标识符

    ASDU数

    1

    /

    应用服务数据单元个数

    数据域总长度

    51

    /

    不能超过图1数据帧的Data总长

     

    附录B 一个基于变长格式的UART通信协议实例。

    PC与iWL880A(一种无线通信产品,详见www.rimelink.com)通信帧采用变长格式,如下图所示。大部分设备(常见为PC机)对于接收以“回车符”的机制很好处理,协议中的Tail就等于0x0D(换行符)。


    展开全文
  • 1 “通信”与“通讯”傻傻分得清 传统意义上的“通讯”主要指电话、电报、电传。通讯的“讯”指消息(Message),媒体讯息通过通讯网络从一端传递到另外一端。媒体讯息的内容主要是话音、文字、图片和视频图像。其...

    1  “通信”与“通讯”傻傻分得清

    传统意义上的“通讯”主要指电话、电报、电传。通讯的“讯”指消息(Message),媒体讯息通过通讯网络从一端传递到另外一端。媒体讯息的内容主要是话音、文字、图片和视频图像。其网络的构成主要由电子设备系统和无线电系统构成,传输和处理的信号是模拟的。所以,“通讯”一词应特指采用电报、电话、网络等媒体传输系统实现上述媒体信息传输的过程。“通讯”重在内容形式,因此通讯协议主要集中在ISO七层协议中的应用层。

    “通信”仅指数据通信,即通过计算机网络系统和数据通信系统实现数据的端到端传输。通信的“信”指的是信息(Information),信息的载体是二进制的数据,数据则是可以用来表达传统媒体形式的信息,如声音、图像、动画等。“通信”重在传输手段或使用方式,从这个角度,“通信”的概念包括了信息“传输”。因此通信协议主要集中在ISO七层协议中的物理层、数据链路层、网络层和传输层。

    在物联网应用中,通信技术包括Wi-Fi、RFID、NFC、ZigBee、Bluetooth、LoRa、NB-IoT、GSM、GPRS、3/4/5G网络、Ethernet、RS232、RS485、USB等。

    相关的通信协议(协议栈、技术标准)包括Wi-Fi(IEEE 802.11b)、RFID、NFC、ZigBee、Bluetooth、LoRa、NB-IoT、CDMA/TDMA、TCP/IP、WCDMA、TD-SCDMA、TD-LTE、FDD-LTE、TCP/IP、HTTP等。注:3GPP将5G技术标准制定分为两个阶段,原计划中第一阶段的标准将在2018年底作为R15的一部分公布,将仅针对NR。第二阶段的标准将在2019年底作为R16的一部分,包括整个5G架构(包括核心网络)。

    物联网技术框架体系中所使用到的通讯协议主要有:AMQP、JMS、REST、HTTP/HTTPS、COAP、DDS 、MQTT等。

    2 通讯协议

    2.1  HTTP/HTTPS

    一、HTTP

    HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。

    HTTP协议的主要特点可概括如下:

    (1)支持客户/服务器模式。

    (2)简单快速。客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

    (3)灵活。HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

    (4)无连接。无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

    (5)无状态。HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    二、HTTPS

    HTTPS(Hypertext TransferProtocol over Secure Socket Layer,基于SSL的HTTP协议)使用了HTTP协议,但HTTPS使用不同于HTTP协议的默认端口及一个加密、身份验证层(HTTP与TCP之间)。这个协议的最初研发由网景公司进行,提供了身份验证与加密通信方法,现在它被广泛用于互联网上安全敏感的通信。

    客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。

    (1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。

    (2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

    (3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。

    (4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

    (5)Web服务器利用自己的私钥解密出会话密钥。

    (6)Web服务器利用会话密钥加密与客户端之间的通信。

    2.2  WebService/REST

    首先说明下,WebService和REST都不是一种协议,他们是基于HTTP/HTTPS的一种技术方式或风格,之所以放在这里,是因为在物联网应用服务对外接口方式常采用WebService和RESTful API。

     

    一、WebService

    WebService是一种跨编程语言和跨操作系统平台的远程调用技术。

    XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术。

    (1)XML+XSD

    WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。XML是WebService平台中表示数据的格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。

    XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,64位?这些细节对实现互操作性很重要。XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。WebService平台就是用XSD来作为其数据类型系统的。当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合WebService标准,所有你使用的数据类型都必须被转换为XSD类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换过程。

    (2)SOAP

    WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service。

    SOAP协议 = HTTP协议 + XML数据格式

    SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。打个比喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。

    (3)WSDL

    好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。 WebService也一样,WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。

    WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。

    WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。

    二、REST

    REST (Representational State Transfer),表征状态转换,是基于HTTP 协议开发的一种通信风格,目前还不是标准。

    适用范围:REST/HTTP 主要为了简化互联网中的系统架构,快速实现客户端和服务器之间交互的松耦合,降低了客户端和服务器之间的交互延迟。因此适合在物联网的应用层面,通过REST 开放物联网中资源,实现服务被其他应用所调用。它有以下特点:

    (1)REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful;

    (2)客户端和服务器之间的交互在请求之间是无状态的;

    (3)在服务器端,应用程序状态和功能可以分为各种资源,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用URI (Universal Resource Identifier) 得到一个惟一的地址。所有资源都共享统一的界面,以便在客户端和服务器之间传输状态;

    (4)使用的是标准的HTTP方法,比如GET、PUT、POST 和DELETE。

    REST是互联网中服务调用API 封装风格,物联网中数据采集到物联网应用系统中,在物联网应用系统中,可以通过开放RESTAPI的方式,把数据服务开放出去,被互联网中其他应用所调用。

    2.3  CoAP 协议

    CoAP (Constrained Application Protocol),受限应用协议,应用于无线传感网中协议。

    适用范围:CoAP 是简化了HTTP 协议的RESTfulAPI,CoAP 是6LowPAN 协议栈中的应用层协议,它适用于在资源受限的通信的IP 网络。它有以下特点:

    (1)报头压缩。CoAP 包含一个紧凑的二进制报头和扩展报头。它只有短短的4B 的基本报头,基本报头后面跟扩展选项。一个典型的请求报头为10~20B。

    (2)方法和URIs。为了实现客户端访问服务器上的资源,CoAP 支持GET、PUT、POST 和DELETE 等方法。CoAP 还支持URIs,这是Web 架构的主要特点。

    (3)传输层使用UDP 协议。CoAP 协议是建立在UDP 协议之上,以减少开销和支持组播功能。它也支持一个简单的停止和等待的可靠性传输机制。

    (4)支持异步通信。HTTP 对M2M(Machine-to-Machine)通信不适用,这是由于事务总是由客户端发起。而CoAP 协议支持异步通信,这对M2M 通信应用来说是常见的休眠/唤醒机制。

    (5)支持资源发现。为了自主的发现和使用资源,它支持内置的资源发现格式,用于发现设备上的资源列表,或者用于设备向服务目录公告自己的资源。它支持RFC5785 中的格式,在CoRE 中用/.well—known/core 的路径表示资源描述。

    (6)支持缓存。CoAP 协议支持资源描述的缓存以优化其性能。

     

    CoAP协议主要实现:

    (1)libcoap(C 语言实现)

    (2)Californium(java 语言实现)

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

    2.4  MQTT 协议(低带宽)

    MQTT (Message Queuing Telemetry Transport ),消息队列遥测传输,由IBM 开发的即时通讯协议,相比来说比较适合物联网场景的通讯协议。MQTT 协议采用发布/订阅模式,所有的物联网终端都通过TCP 连接到云端,云端通过主题的方式管理各个设备关注的通讯内容,负责将设备与设备之间消息的转发。

    MQTT 在协议设计时就考虑到不同设备的计算性能的差异,所以所有的协议都是采用二进制格式编解码,并且编解码格式都非常易于开发和实现。最小的数据包只有2个字节,对于低功耗低速网络也有很好的适应性。有非常完善的QOS 机制,根据业务场景可以选择最多一次、至少一次、刚好一次三种消息送达模式。运行在TCP 协议之上,同时支持TLS(TCP+SSL)协议,并且由于所有数据通信都经过云端,安全性得到了较好地保障。

    适用范围:在低带宽、不可靠的网络下提供基于云平台的远程设备的数据传输和监控。

    它具有以下特点:

    (1)使用基于代理的发布/订阅消息模式,提供一对多的消息发布;

    (2)使用TCP/IP 提供网络连接;

    (3)小型传输,开销很小(固定长度的头部是2 字节),协议交换最小化,以降低网络流量;

    (4)支持QoS,有三种消息发布服务质量:“至多一次”, “至少一次”, “只有一次”。

    协议主要实现和应用:

    (1)已经有PHP,JAVA,Python,C,C#等多个语言版本的协议框架;

    (2)IBM Bluemix 的一个重要部分是其IoTFoundation 服务,这是一项基于云的MQTT实例;

    (3)移动应用程序也早就开始使用MQTT,如Facebook Messenger 和com 等。

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

    2.5  DDS 协议(高可靠性、实时)

    DDS(Data Distribution Service for Real-Time Systems),面向实时系统的数据分布服务,这是大名鼎鼎的OMG 组织提出的协议,其权威性应该能证明该协议的未来应用前景。

    适用范围:分布式高可靠性、实时传输设备数据通信。目前DDS 已经广泛应用于国防、民航、工业控制等领域。

    它具有以下特点:

    (1)以数据为中心;

    (2)使用无代理的发布/订阅消息模式,点对点、点对多、多对多;

    (3)提供多大21 种QoS服务质量策略。

    协议主要实现:

    (1)OpenDDS 是一个开源的C++ 实现;

    (2)OpenSplice DDS;

    另外,DDS很好地支持设备之间的数据分发和设备控制,设备和云端的数据传输,同时DDS的数据分发的实时效率非常高,能做到秒级内同时分发百万条消息到众多设备。DDS在服务质量(QoS)上提供非常多的保障途径,这也是它适用于国防军事、工业控制这些高可靠性、可安全性应用领域的原因。但这些应用都工作在有线网络下,在无线网络,特别是资源受限的情况下,没有见到过实施案例。

    2.6  AMQP 协议(互操作性)

    AMQP(Advanced Message Queuing Protocol),先进消息队列协议,这是OASIS 组织提出的,该组织曾提出OSLC(Open Source Lifecyle)标准,用于业务系统例如PLM,ERP,MES等进行数据交换。

    适用范围:最早应用于金融系统之间的交易消息传递,在物联网应用中,主要适用于移动手持设备与后台数据中心的通信和分析。

    它有以下特点:

    (1)Wire 级的协议,它描述了在网络上传输的数据的格式,以字节为流;

    (2)面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全;

    协议实现:

    (1)Erlang 中的实现有RabbitMQ

    (2)AMQP 的开源实现,用C 语言编写OpenAMQ

    (3)Apache Qpid

    (4)stormMQ

    2.7  XMPP 协议(即时通信)

    XMPP(Extensible Messaging and Presence Protocol)可扩展通讯和表示协议,XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF 国际标准组织完成了标准化工作。

    适用范围:即时通信的应用程序,还能用在网络管理、内容供稿、协同工具、档案共享、游戏、远端系统监控等。

    它有以下特点:

    (1)客户机/服务器通信模式;

    (2)分布式网络;

    (3)简单的客户端,将大多数工作放在服务器端进行;

    (4)标准通用标记语言的子集XML的数据格式。

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

    2.8  JMS (JavaMessage Service)

    JMS (Java Message Service),JAVA 消息服务,这是JAVA 平台中著名的消息队列协议。

    Java 消息服务(Java Message Service)应用程序接口,是一个Java 平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java 消息服务是一个与具体平台无关的API,绝大多数MOM 提供商都对JMS 提供支持。

    JMS 是一种与厂商无关的API,用来访问消息收发系统消息,它类似于JDBC(Java DatabaseConnectivity)。这里,JDBC 是可以用来访问许多不同关系数据库的API,而JMS则提供同样与厂商无关的访问方法,以访问消息收发服务。许多厂商都支持JMS,包括IBM的MQSeries、BEA 的Weblogic JMS service 和Progress 的SonicMQ。JMS能够通过消息收发服务(有时称为消息中介程序或路由器)从一个JMS 客户机向另一个JMS 客户机发送消息。消息是JMS 中的一种类型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载的类型来划分,可以将消息分为几种类型,它们分别携带:简单文本(TextMessage)、可序列化的对象(ObjectMessage)、属性集合(MapMessage)、字节流(BytesMessage)、原始值流(StreamMessage),还有无有效负载的消息(Message)。

    2.9 通讯协议比较

     

    展开全文
  • C++ 设备通信协议

    千次阅读 2019-06-12 15:26:44
    主要谈对数据交互层,传输协议的理解。包含了对传输层协议、应用层协议的逐步理解过程,包含网络通信协议也包含串口通信协议...

    谈脑壳里的问题

    先前写过一套串口通信协议(一直叫他传输层协议),后来糊里糊涂的把他套在了UDP通信过程上。其实脑袋一团浆糊,根本搞不明白我写的协议到底是传输层还是应用层协议,也搞不明白UDP/TCP代表的所谓传输层到底干了啥,哪些它干了不要应用层再处理?
    看到一篇文章,博主该是写C#的,其内容加剧了我对TCP的认知的乱,我原本还想着,我协议里做的事情(关于接收-提取完整数据的过程),TCP会替我干呢,现在晕了?

    • TCP通信中,数据以"流"的形式传输,每次发送的数据间没有明显的界限,也即:当你收到一部分数据后,你无法判断收到的数据的完整性或从哪里拆开数据?TCP协议作为传输层协议,不仅不负责“TCP沾包”问题的处理,反而就是问题本身!解决问题需要从其上层来制定一些“规则”(应用层协议)?
    • 也知道传输层、应用层的概念是网络模型的,串口通信可能并不适用,但是强迫症,无奈,总想给他们搞个对应关系,哈,也许这个想法的大有人在?

    应用层协议与传输层协议

    终于遇见你-传输层协议和应用层协议的关系!默默感谢博主songly_终于让我从原先“传输层协议-应用层协议-多帧数据传输”的坑中爬了出来(是因为写了个“串口通信传输层协议”掉进去的)!(另一篇不错的文章:TCP/UDP及其上层应用简析)!

    • 传输层主要功能端到端的通信,一段是服务器上的具体服务,另一端是客户端。TCP/UDP皆如此,只不过TCP对传输可靠性、顺序性提供了支持。
    • TCP协议头中的32位序号,是基于TCP字节流之字节号的,序号+确认号,其保证的是一次TCP通信过程

    个人理解,网络通信较串口通信的复杂度主要来自“网状”,而串口通信就是“点对点直连”嘛。网络模型中的传输层,其提供端到端的连接(即-用以主机的进程与进程之间的互通),而串口通信过程中没有服务器、客户端的概念,顾,其没有网络层与传输层?

    • 串口通信包含:物理层(TTL串口、RS232串口、RS485…),数据链路层(起始位、数据位、停止位)、应用层(应用数据的打包、拆包)

    应用层协议简析

    偶然的机会对FTP产生了些不知道对不对的认识,站在一个更高层去组装或拆分数据?我的消息队列+数据区不正是要干这个吗!FTP下数据在客户端与服务端的传递,本人很喜欢博主绘制的这些图,这是用例图吗?

    之所以跑到现有应用层协议的学习上来,是想从这两种应用层协议的实现原理上汲取点思路,好继续完成我的工作“同时适用串口/网络的自定义-应用层协议”。截止现在,我的问题是:怎么是一个合理的应用层协议-应答机制?

    查阅了基于UDP的简单文件传输协议FTP文件传输协议TFTP参考2,没有get到我想要的,还有个疑问:FTP是如何与TCP协同工作的,是存在两层ACK机制吗?
    为了解决上述疑问,继续查阅了 FTP主动模式与被动模式FTP 通信抓包,到这,我的PC上也是有Wireshark工具的,完全可以通过调试手段自己去验证!

    • FTP传输和控制采用独立的连接方式,于当前我的场景不太对应。
    • TPTP中,当发现某个数据包小于512个字节,说明传输终止。这点还是有参考价值的。

    查阅了HTTP请求/响应报文结构 ,但是没有发现我想要的信息,http请求与应答过程碰上较大的数据量,怎么处理呢会?

    • 比如我们登录一些大图片的网址,会发现有时候图片是一块一块加载的。这就是因为设置了http请求的长度,这样就可以分块的加载资源文件。在请求报文中使用Range属性,在响应报文中使用Content-Type属性都可以指定一定字节范围的http请求。

    自定义应用层协议

    看到了两篇文章,先记下来,慢慢学习

    协议中ACK机制的影响,博主认为,及时是基于TCP的应用层协议,也该有自己的ACK机制,可在发送端设置是否需要ACK确认,只对需要的数据进行ACK确认。

    如何自定义一个通信协议,博主写了很多也没写完,但是前边的知识点总结很多(发现有部分描述错误,如TCP序号),值得参考,博主不是要写自定义应用层协议,而是符合七层模型的完整的一套协议…

    实现自定义的应用层协议-1,这篇还没有细看,感觉上不错的样子!

    掉牙的网络七层模型

    开放式系统是在计算机体系结构、计算机系统、计算机软件和通信系统等领域广泛使用的一种术语。开放式(是指非垄断的)系统鼓励开发兼容的厂商产品。顾客可以从开放式系统中获益,这是因为他们可以在/很广范围的、可与系统一起工作的/产品中进行选择,更为重要的是,易于和其它厂商的产品互联。一个开放环境提供标准通信设施和协议,或提供一条使用不同协议的途径。计算机社会给要开放的厂商施加了更多的压力,这是因为他们在销售产品时必须公开承诺这些设备将能和现有的系统一起工作。如果理解不透彻,可以继续向下看看参考2中的OSI设计起因和目的…

    OSI-开放系统互联(Open System Interconnection)。国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。这是一种事实上被TCP/IP 4层模型淘汰的协议。在当今世界上没有大规模使用。 七层结构的各层含义可参考1-网络七层协议-百科参考2-OSI-百科

    • 必须Get的概念,协议数据单元PDU,传输层及以下PDU特定的名称(数据段、数据包、数据帧、比特)、最大传输单元MTU,

    OSI七层模型与TCP/IP五层模型,图不错哦!

    QA:
    在参考1中,网络层功能描述中提到:为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。也就是说网络层、传输层、应用层均有“拆包”的概念 ? 那问题来了,都是为了啥?

    另外,包的概念、帧的概念,都是隶属不同层的,不可以随便用?

    掉牙的UDP/TCP比较

    TCP与UDP的通信特点及比较?
    主要分为三点:是否可靠、是否保证顺序、高低损耗。

    网络通信资料

    TCP-IP详解卷一、卷二、卷三基本介绍

    IP头,TCP头,UDP头,MAC帧头定义

    TCP报文段的头部结构详解

    TCP通信原理及封包问题,这是TCP-IP详解卷一的内容,那我是不是该买一本啊!

    TCP的ACK,并不是每包发送都会收到ACK–

    串口通信

    野火讲的串口通信 ,其中将串口通讯协议,分为物理层和协议层。而这篇文章中,其将协议分为底层通信协议和用户层协议。self理解中,底层通信协议指的就是链路层协议,用户层协议就是我们为了打包/拆包应用数据而制定的规则。

    其他疑问

    • 为什么网络通信比串口通信快这么多 ?是应该从硬件设备的分析起始吗 ?

    • 采用多线程实现,数据交互过程,是真的比单线程效率高吗 ?还是有什么特殊成立条件 ?
      先分析一点就是,当前项目用RS422串口通信,是全双工的,理论上,是能同时收发,同时操作接收缓冲与发送缓冲的。

    未整理资料

    基于DPI的应用层协议解析 https://wenku.baidu.com/view/eb71329fc281e53a5802ffa6.html

    CAN总线应用层协议
    https://wenku.baidu.com/view/5a143ec9f705cc17552709fe.html
    主要关注其中CAN-BUS通信的参考模型

    原本的基于对101等规约的一知半解,武断的去理解“业务约定”,将其对应到电表层,完全是胡乱猜测,这有必要研究下,不要让自己跑偏了-
    现在想“业务预定”-类型类别,如果属于应用协议层,而不是应用数据,那么电表也可能被理解为纯数据,在协议上层,电表只不过是确认了一个纯数据格式或对应关系。数据{点号+值}(int,double)而已,再回想下当年解析过的那些476报文(总召的时候,上来的就是一堆连续的(号+值)),终于有些feel啦。

    应用层协议详解:
    https://wenku.baidu.com/view/963cfa61783e0912a2162a1f.html

    关于通信和数据传输

    数据总线-百科总线(Bus)是指计算机组件间规范化的交换数据(data)的方式,即以一种通用的方式为各组件提供数据传送和控制逻辑。规范了一个大的集成应用系统中同构系统、异构系统等方面进行数据共享和交换实现方法,系统间数据交换标准。

    UART,是一种异步收发传输器,是电脑硬件的一部分。它是把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。具体实物表现为独立的模块化芯片,或集成于微处理器。想搞明白UART是硬件还是软件协议,看看UART芯片资料可以。
    https://blog.csdn.net/zjy900507/article/details/79789671

    展开全文
  • 设备通信协议制定的一些误区避免

    千次阅读 2016-07-16 11:20:29
    因项目和编写框架需求,前段时间,写了一套IO板卡的设备通信协议,一套RMI远程过程调用的自封装协议,一套与PLC的自动化通信协议,在制定协议的过程中,遇到了很多问题,尤其是协议编写完成之后,后期实现过程,在...
  • 计算机网络协议——通信协议综述

    万次阅读 多人点赞 2019-09-03 23:20:58
    通信协议综述概述一、为什么学习网络协议1.1 常见的网络协议二、网络分层的真正含义2.1 为什么网络要分层?2.2 浏览点击请求过程2.3 揭秘层与层之间的关系三、ifconfig 命令行的由来3.1 ip地址3.2 无类型域间选路...
  • 微信公众号“智物客”和您免费分享物联网、智慧城市相关技术和项目解决方案。本文从物联网体系各层协议入手,重点分析了物联网体系常用的通讯协议,在下半部分,笔者将分享物联网体系的通信协议
  • 网关设备通信协议

    2017-04-01 23:25:17
    1.交换机:二层协议设备。内部构建交换表(MAC地址) 2.路由器:三层协议设备。内部构建路由表(ip地址)  路由表过大会导致网络效率降低,所以需要协议内部实现AS自治域划分。最终相同AS内部使用IGP协议,AS外部...
  • 1 “通信”与“通讯”傻傻分得清 传统意义上的“通讯”主要指电话、电报、电传。通讯的“讯”指消息(Message),媒体讯息通过通讯网络从一端传递到另外一端。媒体讯息的内容主要是话音、文字、图片和视频图像。其...
  • 联网常见通信协议通讯协议梳理【上】- 通讯协议1 “通信”与“通讯”傻傻分得清传统意义上的“通讯”主要指电话、电报、电传。通讯的“讯”指消息(Message),媒体讯息通过通讯网络从一端传递到另外一端。媒体...
  • 微信公众号“智物客”和您免费分享物联网、智慧...在上文分析物联网常用通讯协议的基础上,本文按近距离通信、远距离蜂窝通信、远距离非蜂窝通信、有线通信4个方面分享了物联网常用通信协议。后续将分享三表远抄系统。
  • 半导体领域主机与设备通讯协议SECS/GEMSECS/GEM(Semiconductor Equipment Communication Standard/Generic Equipment Model)是半导体设备和主机进行通信协议。更确切地说,SECS/GEM是一组协议的统称。下图为...
  • 物联网通信协议

    千次阅读 2017-05-16 13:26:02
    物联网通信协议 ...通讯协议主要是运行在传统互联网TCP/IP协议之上的设备通讯协议,负责设备通过互联网进行数据交换及通信。本文介绍以通讯协议为主。 先说接入协议 市场上常见的有zig
  • 本文主要介绍一个简单的单一设备PCIE驱动程序和设备通信协议,从上到下大致分为三层:应用层、驱动层和设备层。其中,应用层和驱动层通过系统总线(win32 API调用)实现通信,驱动层和设备层通过PCI总线(地址空间...
  • 文章目录通讯协议TCP/IP协议TCP/IP模型osi版基本版应用层传输层网络层数据链层 ...通讯协议又称通信规程,是指通信双方对数据传送控制的一种约定。约定中包括对数据格式,同步方式,传送速度,传送步骤,检纠错方式以及
  • 串口通讯通信协议

    万次阅读 2015-10-15 09:04:21
    所谓通信协议是指通信双方的一种约定。约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程,或称传输控制规程,它...
  • RTU通信协议

    千次阅读 2018-12-27 10:09:11
    RTU通信协议 一、通讯模式 1.通讯接口电气标准: 通讯接口符合RS-232 RS–485国际标准。 2. 通讯协议: 采用MODBUS通讯协议RTU模式。 3.通讯格式约定: (1)通信速率: 300 600 1200 2400 4800 9600可选 (2)...
  • LabVIEW串口通讯通信协议

    千次阅读 2017-11-16 11:32:35
    所谓通信协议是指通信双方的一种约定。约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程,或称传输控制规程,它...
  • 串口通信协议

    千次阅读 2020-11-29 05:37:46
    1.串口通信协议简介 串口通信(serial communication)是一种设备间非常常用的串行通信方式,大部分电子设备都支持,电子工程师再调试设备时也经常使用该通信方式输出调试信息。 2.讲到某一种通信协议,离不开的就是...
  • @[工业通讯之上位机通讯 — 三菱MELSEC通信协议与C#、三菱PLC] MELSEC通信协议与C#、三菱PLC 概述
  • 物联网通信协议介绍

    2019-02-27 15:17:25
    通讯协议主要是运行在传统互联网TCP/IP协议之上的设备通讯协议,负责设备通过互联网进行数据交换及通信。本文介绍以通讯协议为主。 先说接入协议 市场上常见的有zigbee、蓝牙以及wifi协议等。 一、zigbee zigbee...
  • 通信协议制定

    万次阅读 2015-10-29 23:24:00
    通信协议定义    用于实现计算机与网络连接之间的标准,网络如果没有统一的通信协议,电脑 之间的信息传递就无法识别。 通信协议是指通信各方事前约定的用心规则,我们可以简单地理解为各计算机之间进行相互会话...
  • UART串口通讯协议解析

    万次阅读 2021-02-26 11:44:04
    UART串口通讯协议解析概述接口通信协议 概述 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行...
  • RS-485通讯协议

    万次阅读 多人点赞 2017-05-10 11:26:43
    1. 硬件层协议通讯协议主要是实现两个设备之间的数据交换功能,通讯协议分硬件层协议和软件层协议。硬件层协议决定数据如何传输问题,比如要在设备1向设备2发送0x63,0x63的二进制数为0110 0011,这8个二进制数从...
  • 通讯接口与通讯协议

    千次阅读 多人点赞 2019-06-16 17:15:42
    本人是搞自动化的,以前老是将接口与协议的概念傻傻分不清楚,十分懵逼,最近豁然开朗,土地平旷啊,今天就与大家分享一下,希望能帮到大家。 两台设备想要通讯,首先要具有相同的设备接口,或者可以转成相同的接口...
  • ModBus通信协议

    万次阅读 2017-05-10 14:04:54
    主从模式是指在半双工通讯方式上,2个或者2个以上的设备组成的通讯系统中: (1) 至少且只有一个主机,其他的都是从机 (2) 不管任何时候,从机都不能主动向主机发送数据 (3) 主机具有访问从机的权限,从机不可以...
  • 物联网通讯协议介绍

    千次阅读 2015-10-16 18:07:15
    为了方便,将物联网通信协议分为两大类,一类是接入协议,一类是通讯协议。接入协议一般负责子网内设备间的组网及通信;通讯协议主要是运行在传统互联网TCP/IP协议之上的设备通讯协议,负责设备通过互联网进行数据...
  • 串口通讯协议

    千次阅读 2016-07-25 16:34:27
    串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用...串口是计算机上一种非常通用的设备通信协议(不要与通用串行总线Universal SerialBus或者USB混淆)
  • 局域网设备发现之Bonjour协议

    万次阅读 多人点赞 2016-09-28 23:37:43
    通常我们需要对设备进行绑定,需要通过某种方法先对设备进行发现,比如微信硬件采用广播的方式,定时向外发送上线消息或者采用一问一答的方式进行发现,Bonjour是由苹果公司实现的一种零配置网络(Zeroconf)协议,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 326,115
精华内容 130,446
关键字:

如何知道设备的通讯协议