问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

通讯协议制定之交互方式、步骤介绍

创作时间:
作者:
@小白创作中心

通讯协议制定之交互方式、步骤介绍

引用
CSDN
1.
https://blog.csdn.net/weixin_44289254/article/details/135536118

通讯协议制定之交互方式、步骤介绍

1. 前言

通讯协议又称通信规程,是指通信双方对数据传送控制的一种约定,约定中包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守,它也叫做链路控制规程。

根据项目中的实际应用,总结了嵌入式开发中通讯协议制定的相关考虑因素和经验技巧,具体包含如下内容,可供参考学习了解(介绍中阐述的相关术语使用了开发交流沟通中的讲法,可能存在说法不同;因技术水平有限,分享创作的内容可能存在不合理的地方,欢迎相互交流沟通、批评指正):

  1. 通讯协议制定之前言、背景介绍
  2. 通讯协议制定之交互方式、步骤介绍
  3. 通讯协议制定之数据包结构介绍
  4. 通讯协议制定之数据传输类型及传输规则介绍
  5. 通讯协议制定之数据消息传输方式介绍
  6. 通讯协议制定之数据包校验算法介绍
  7. 通讯协议制定之常见问题、注意事项总结

通信双方在两个系统独自运行,那么通信数据什么时候开始发送?如何确保数据发送接收成功?数据交互的过程如何设定?为了解决这些疑问,本文将从通讯协议的发送数据方式,发送步骤方面,介绍通信的周期发送和事件发送的含义和过程;详细介绍握手、心跳、数据包的具体含义和交互方式步骤等内容。

2. 通讯协议发送类型

如下示例,两块MCU芯片通过某种通信链路相互发送数据,发送的具体数据内容如何规定之后来详细介绍,本文从发送数据方式,发送步骤等内容进行介绍

根据通信的同步方式可以分成周期发送和事件发送两种类型

2.1 周期发送

周期发送:按照某个固定的周期,连续不断的持续发送,即发送的数据内容按照相同的间隔发送传输

周期发送用于数据频繁变化场景或者固定时间间隔发送的场景

如下示例为MCU A按照周期20ms的时间间隔,给MCU B发送数据内容

2.2 事件发送

事件发送:当某个事件触发发生,需要将该变化数据内容通知给另一方,则在事件触发后发送数据内容

事件发生后,为了保证数据准确发送成功,常有2种处理方法:一是事件发送后,将数据内容发送N次,比如连续发送3次(这个3次也可看成是周期发送过程),确保数据成功传输;二是采用一发一应答模式,即事件发送后,发送方发送数据,接受方接受数据后,回复一个应答消息,表示发送的数据接收成功

如下示例为MCU A检测到事件M发生后,将数据内容M发送给MCU B;之后MCU B检测到事件N发生后,将数据内容N发送给MCU A

3. 通讯协议数据包类型

3.1 握手

当MCU A和MCU B启动开始工作后,为了确定什么时候可以开始相互发送数据进行交互,从而引入了握手的概念

握手:通信的双方开始建立通信联系,确认可以相互发送数据的过程

通信的双方一般会确认一个主从关系,一般由做主的那方发起握手;或者将发起握手的那方,称为主导方

3次握手:一个全双工的通信,对于发送端和接收端来说,发送的消息一定是要有回复的,达到有去有回,才能代表着建立的道路是稳定连通的,因此至少需要3次交互,才能确保握手成功

如下示例图是一个3次握手的流程:

  1. MCU B发送握手请求给MCU A
  2. MCU A接收到握手请求后,发送握手回复给MCU B,MCU B接收到该回复后,认为自己和MCU A通信建立成功
  3. MCU B还需要发送一个应答ACK,告诉MCU A,发送的握手回复也收到了,MCU A接收到ACK后,握手完成

用俗语来表示3次握手过程:

  1. B : 你好,我是B
  2. A : 你好B,我是A
  3. B : 你好A

3次握手的次数必须为3次,才能建立一个稳定的通信,缺少一次,都有可能发生问题;如果超过3次也没有必要,会浪费通信资源,造成不必要的开销

3.2 心跳

当MCU A和MCU B握手成功后,建立了通信联系,但是之后时间,如何确保双方都在线,通信一直没有断开,因此引入心跳概念

心跳: 在通信连接中,通信双方之间定期发送的一种特殊的数据包,用于通知对方自己还在线,以确保连接的有效性; 由于其发送的时间间隔往往是固定的持续的,就像是心跳一样一直存在,所以我们称之为心跳消息

和握手消息一样,一般由做主的那方发起心跳,另外一方接收到心跳后,发送心跳回复

如下示例图是一个心跳的流程,每隔500ms,MCU B发送一次心跳,MCU A接收后,发送心跳回复

3.1 数据包

数据包:通信双方相互发送的数据内容

按照通信的过程步骤,常将数据包分成如下4类:

  1. 通知包:通信的一方,主动将自己的数据发送给另一方,即通知给另一方,这个过程中发送的数据内容称为通知包
  2. 请求包:通信一方需要知道另一方数据内容,发送的查询请求指令数据
  3. 回复包:接收到查询请求指令后,回复该指令发送的内容数据
  4. 应答包:接收到了对方的数据后,需要发送一个应答,告诉发送方,自己接收到了该数据;应答又称为ACK

如果通知包是周期发送且周期较短,丢失数据不会造成影响,不需要和应答包配合;但是如果是事件发送,必须和应答包配合,达到一通知一应答

请求包和回复包必然配合出现,组成一问一答;一般都是采用事件的形式,因此需要加上应答,即组成一问一答一确认的3次交互,和3次握手原理一样

如下示例图是一通知一应答和一问一答一确认模式示例图

上述交互过程可以根据实际需求,来规定具体的交互过程,比如在某些场景下,A发送请求包后,接收方B不能立马回复信息,需要经过处理后才能回复,业务逻辑时序交互过程应该规定成如下步骤:

(1) A --> B 请求
(2) B --> A 应答(成功接收请求应答)
(3) B --> A 回复
(4) A --> B 应答(成功接收回复应答)

4. 小结

一个完整、稳定的通信过程周期步骤总结如下:

  1. 通信建立:3次握手
  2. 通信建立后:根据交互需要,发送周期通知包;事件发送采用一通知一应答模式或者一问一答一确认模式
  3. 通信期间:持续发送心跳
  4. 重复上述过程
  5. 异常断开后,重新从步骤1握手建立开始

通信中存在诸多异常场景,导致数据丢失,因此设置通信交互过程时,必须考虑到:

  1. 应答确认必不可少
  2. 必须设置重发机制,检测到未完成完整的通信流程,通过重发机制避免错误
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号