各种协议总结 您所在的位置:网站首页 MQTTCONNACK控制报文的报文流动方向 各种协议总结

各种协议总结

2023-08-05 19:35| 来源: 网络整理| 查看: 265

目录 声明TCP/IP协议簇OSI七层协议示意图: 工业控制协议MODBUS简介Modbus RTUModbus TCP 硬件通讯协议CAN物联网协议MQTT 半导体生产协议HSMS(E37)目的术语 附录

声明

本文主要是用于自己的学习总结,作为一个善忘者,在此记录一下学习或者工作过的协议。文中会有大量网上搜索来的我认为比较好的图片和内容,由于引用的比较多很难一一列举。如有侵权请联系我,我会删除相关内容。

TCP/IP协议簇 OSI七层协议示意图:

在这里插入图片描述 tcp/ip协议簇,见过最好的就是华为的这个文档,可谓一档在手,协议不愁: https://support.huawei.com/hedex/hdx.do?docid=EDOC1000105967&lang=zh ##TCP TCP的报文头分为固定部分和可选两部分,固定部分为20字节,options最大为40字节,且TCP 头需要保证4字节对齐。如果options不足4字节应该padding(0). 在这里插入图片描述 下图为TCP 的状态机转换的基本流程图,可以对低层实现有个整体的理解。值得反复玩味直到变成本能你就可以应对那些不懂装懂的面试了。 在这里插入图片描述 MSL:maximum segment lifetime 协议推荐2mins,具体实现可根据经验修改 quite time:为了避免因各种原因造成快速重连,导致sequence number相同的报文同时在传输过程中导致接收这混乱,推荐保持沉默时间大于MSL CLOSE:TCP的CLOSE是指user不会再发送数据了,但依然可以接受数据。close之后TCP会把没有发送出去的数据继续发送完,直到对端也close才会彻底清除和socket相关的信息。

工业控制协议 MODBUS 简介

modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的modbus协议:modbusTCP。Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。

标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口

采用请求应答模式(master/slave)方式通信。 采用网络字节序(大端模式)

Modbus RTU

Modbus RTU协议通过将从站设备地址(或广播)、定义请求操作的功能码、要发送的数据和CRC校验放入主机查询中来建立查询报文;从站设备的响应消息也是使用Modbus RTU报文结构,包括从站设备地址、请求操作的功能码、要发送的数据和CRC校验;如果在接收消息时发生错误、或者从站设备无法执行请求的操作,从站设备将发送一个异常消息作为响应。Modbus RTU数据帧结构如下: 在RTU模式下,data以十六进制进行传输 S232 / RS485 ADU = 253 bytes + Server address (1 byte) + CRC (2 bytes) = 256 bytes. TCP MODBUS ADU = 253 bytes + MBAP (7 bytes) = 260 bytes 功能码:取值范围(1-255)0是无效的功能码,128-255是保留的用于异常响应消息(exception-function_code = [1 byte] MODBUS function code + 0x80);可以用户自定义的功能码有两个范围(65-72 ;100-110)

modbus数据模型: 在这里插入图片描述 设备的地址模型: 在这里插入图片描述

Modbus TCP

MBAP

ModbusTCP的数据帧可分为两部分:MBAP+PDU。

MBAP为报文头,长度为7字节,组成如下:

事务处理标识协议标识长度单元标识符2字节2字节2字节1字节报文的序列号(每次通讯+1)00 00表示ModbusTCP协议数据长度 单位为字节1设备地址

事务处理标识 :可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文。

协议标识符 :00 00表示ModbusTCP协议。

长度 :表示接下来的数据长度,单位为字节。

单元标识符 :可以理解为设备地址。

帧结构PDU PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。

功能码 modbus的操作对象有四种:线圈、离散输入、输入寄存器、保持寄存器。

线圈:PLC的输出位,开关量,在MODBUS中可读可写

离散量:PLC的输入位,开关量,在MODBUS中只读

输入寄存器:PLC中只能从模拟量输入端改变的寄存器,在MODBUS中只读

保持寄存器:PLC中用于输出模拟量信号的寄存器,在MODBUS中可读可写

根据对象的不同,modbus的功能码有:

0x01:读线圈

0x05:写单个线圈

0x0F:写多个线圈

0x02:读离散量输入

0x04:读输入寄存器

0x03:读保持寄存器

0x06:写单个保持寄存器

0x10:写多个保持寄存器

硬件通讯协议

##SPI 在这里插入图片描述 SPI是一种高速的,全双工,同步的通信总线 采用主从控制方式 SDI ------数据输入 SDO-----数据输出 SCK-----时钟 CS-------片选

CAN

数据帧以一个显性位(逻辑0)开始,以7个连续的隐性位(逻辑1)结束,在它们之间,分别有仲裁段、控制段、数据段、CRC段和ACK段。

标准帧sofIDRTRIDER0DLCDATACRCCRC界定ACK槽ACK界定帧结束长度1bit11bit1bit1bit1bit4bit0-64bit15bit1bit1bit1bit7bit说明显性(0)区分数据帧还是遥控帧扩展帧(1)数据帧(0)保留数据长度(0-8)MSB先行隐性(1)发送(1)应答(0)隐性(1)7个隐性(1) 扩展帧sofIDSRRIDE#FF493 IDRTRR1R0DLCDATACRCCRC界定ACK槽ACK界定帧结束长度1bit11bit1bit1bit18bit1bit1bit1bit4bit0-64bit15bit1bit1bit1bit7bit说明显性(0)11bit区分数据帧还是遥控帧扩展帧18bit1bit保留保留数据长度(0-8)MSB先行15bit隐性1发送(1)应答(0)隐性(1)7隐性(1) 物联网协议 MQTT

MQTT是基于TCP/IP的订阅/发布模式的应用层协议。 应用消息(Application Message)MQTT通过tcp或者udp来传输应用数据。应用消息同MQTT传输时,它们有关联的服务质量(QOS)和主题(topic)。 MQTT采用网络字节序(大端序)进行传输。 MQTT中的字符串采用UTF-8(RFC3629)进行编码。

下表总结了编码规则,字母x表示可用编码的位。

Unicode符号范围 | UTF-8编码方式 (十六进制) | (二进制) --------------------±-------------------------------------------- 0000 0000-0000 007F | 0xxxxxxx 0000 0080-0000 07FF | 110xxxxx 10xxxxxx 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

每个字符串都有两个字节的长度字段作为前缀,它给出字符串UTF-8编码的字节数,因此可以传送的UTF-8de 字符串大小有个限制,不能超过65535字节。

UTF-8编码字符串的结构 Structure of UTF-8 encoded strings

二进制7-0byte 1字符串长度的最高有效字节(MSB)byte 2字符串长度的最低有效字节(LSB)byte 3…如果长度大于0,这里是UTF-8编码的字符数据。

服务质量(QOS) QoS0,At most once,至多一次; QoS1,At least once,至少一次; QoS2,Exactly once,确保只有一次。

MQTT 控制报文的结构:

Fixed header固定报头,所有控制报文都包含Variable header可变报头,部分控制报文包含payload有效载荷,部分控制报文包含 固定报头的格式 Bit76543210byte 1MQTT控制报文的类型用于指定控制报文类型的标志位byte 2...剩余长度 剩余长度字段的大小 Size of Remaining Length field 字节数最小值最大值10 (0x00)127 (0x7F)2128 (0x80, 0x01)16 383 (0xFF, 0x7F)316 384 (0x80, 0x80, 0x01)2 097 151 (0xFF, 0xFF, 0x7F)42 097 152 (0x80, 0x80, 0x80, 0x01)268 435 455 (0xFF, 0xFF, 0xFF, 0x7F)

控制报文的类型

名字值报文流动方向描述Reserved0禁止保留CONNECT1客户端到服务端客户端请求连接服务端CONNACK2服务端到客户端连接报文确认PUBLISH3两个方向都允许发布消息PUBACK4两个方向都允许QoS 1消息发布收到确认PUBREC5两个方向都允许发布收到(保证交付第一步)PUBREL6两个方向都允许发布释放(保证交付第二步)PUBCOMP7两个方向都允许QoS 2消息发布完成(保证交互第三步)SUBSCRIBE8客户端到服务端客户端订阅请求SUBACK9服务端到客户端订阅请求报文确认UNSUBSCRIBE10客户端到服务端客户端取消订阅请求UNSUBACK11服务端到客户端取消订阅报文确认PINGREQ12客户端到服务端心跳请求PINGRESP13服务端到客户端心跳响应DISCONNECT14客户端到服务端客户端断开连接Reserved15禁止保留

标志位 Flag Bits

控制报文固定报头标志Bit 3Bit 2Bit 1Bit 0CONNECTReserved0000CONNACKReserved0000PUBLISHUsed in MQTT 3.1.1DUP1QoS2QoS2RETAIN3PUBACKReserved0000PUBRECReserved0000PUBRELReserved0010PUBCOMPReserved0000SUBSCRIBEReserved0010SUBACKReserved0000UNSUBSCRIBEReserved0010UNSUBACKReserved0000PINGREQReserved0000PINGRESPReserved0000DISCONNECTReserved0000 半导体生产协议 HSMS(E37) 目的

HSMS作为SEMI E4(SECS-I)和E13(SECS Message service)的替换协议,在半导体工厂中,提供基于TCP/IP的告诉消息交换服务。

术语

message length—无符号的整型 session ID ----16-bit 无符号的short T3—Reply消息超时时间 T5—连接分离超时时间 T6—控制事务超时时间 T7—连接空闲超时时间

附录

https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/01-Introduction.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有