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

文章目录

  • 通讯协议制定之交互方式、步骤介绍
    • 1. 前言
    • 2. 通讯协议发送类型
      • 2.1 周期发送
      • 2.2 事件发送
    • 3. 通讯协议数据包类型
      • 3.1 握手
      • 3.2 心跳
      • 3.1 数据包
    • 4. 小结

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

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次握手原理一样
  • 如下示例图是一通知一应答一问一答一确认的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. 必须设置重发机制,检测到未完成完整的通信流程,通过重发机制避免错误

感谢阅读 若有错误 欢迎指正 !!!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何部署Python Flask并实现远程访问本地搭建web站点【内网穿透】

文章目录 前言1. 安装部署Flask并制作SayHello问答界面2. 安装Cpolar内网穿透3. 配置Flask的问答界面公网访问地址4. 公网远程访问Flask的问答界面 前言 Flask是一个Python编写的Web微框架,让我们可以使用Python语言快速实现一个网站或Web服务,本期教程…

导出微软浏览器收藏的网页,并查看网页保存的登录密码

导出微软Edge浏览器收藏夹(书签)的步骤如下: 打开Microsoft Edge浏览器。右键点击浏览器收藏栏上的任意位置或使用快捷键Ctrl Shift O打开收藏夹管理页面。在收藏夹管理页面中,通常你会看到右上角或菜单区域有一个“…”或者三…

Axios中每次发送post请求前都会发送options请求

今天写前端的时候,发现每次post请求都会失败, 反复调试过后发现axios在每次发送post请求前都发送了options请求, 在网络搜罗了一大圈, 发现了原因是因为web页面发送了请求给vue后, vue再请求后端过程中发生了跨域&…

【算法】一维前缀和以及二维前缀和

目录 一维前缀和适用场景示例 二维前缀和适用场景一种情况另一种情况示例 一维前缀和 适用场景 求一段区间的和。 比如有一个数列 : 如果我们要求 [l,r]即某个区间内的数组和的时候,思路就是每遍历一个元素就进行求和,记录下加到al时的和…

Skywalking

1、简介 Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的开源项目, 2017年12月SkyWalking成为Apache国内首个个人孵化项目, 2019年4月17日SkyWalking从Apache基金会的孵化器毕业成为顶级项目, 目前SkyWalking支持Java、 .Net、 …

广告主投放系统从设计到实践

在当今数字广告行业中,广告主投放系统扮演着至关重要的角色。它是连接广告主和广告媒体之间的桥梁,帮助广告主实现广告投放目标并获得可观的回报。本篇博客文章将深入探讨广告主投放系统的设计和实践过程,并分享一些关键的经验和最佳实践。 …

flink的分组聚合、over聚合、窗口聚合对比

【背景】 flink有几种聚合,使用上是有一些不同,需要加以区分: 分组聚合:group agg over聚合:over agg 窗口聚合:window agg 省流版: 触发计算时机 结果流类型 状态大小 分组聚合group ag…

使用OpenCV实现两张图像融合在一起

简单介绍 图像融合技术是一种结合多个不同来源或不同传感器捕获的同一场景的图像数据,以生成一幅更全面、更高质量的单一图像的过程。这种技术广泛应用于遥感、医学影像分析、计算机视觉等多个领域。常见的图像融合技术包括基于像素级、特征级和决策级的融合方法&a…

基与HTML5的塔防游戏设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 项目背景与相关技术 3 1.1 背景与发展简介 3 1.2 HTML5技术及其优势 4 1.3 JavaScript开发的优势与劣势 4 1.4 CSS样式表在开发中的用处 5 1.5 本章小结 6 2 系统分析 7 2.1 需求分析 7 2.2 问题分析 7 2.3 流程设计 7 2.3 功能分析 8 2.…

Linux---多线程(上)

一、线程概念 线程是比进程更加轻量化的一种执行流 / 线程是在进程内部执行的一种执行流线程是CPU调度的基本单位,进程是承担系统资源的基本实体 在说线程之前我们来回顾一下进程的创建过程,如下图 那么以进程为参考,我们该如何去设计创建一个…

paddle的版面分析的环境搭建及使用

一、什么是版面分析 版面分析技术,主要是对图片形式的文档进行版面分析,将文档划分为文字、标题、表格、图片以及列表5类区域,如下图所示: 二、应用场景 2.1 合同比对 2.2 文本类型划分 2.3 通用文档的还原 版面分析技术可将以…

论文阅读FCN-Transformer Feature Fusion for PolypSegmentation

本文提出了一种名为Fully Convolutional Branch-TransFormer (FCBFormer)的图像分割框架。该架构旨在结合Transformer和全卷积网络(FCN)的优势,以提高结肠镜图像中息肉的检测和分类准确性。 1,框架结构: 模型采用双分…

【Python】牛客网—软件开发-Python专项练习

专栏文章索引:Python 1.(单选)下面哪个是Python中不可变的数据结构? A.set B.list C.tuple D.dict 可变数据类型:列表list[ ]、字典dict{ }、集合set{ }(能查询,也可更改)数据发生改…

Golang 开发实战day03 - Arrays Slices

Golang 教程03 - Arrays,Slices Go语言中的数组和切片都是用于存储数据的类型,但它们之间存在一些重要的区别。了解这些区别对于有效地使用它们至关重要。 1. Arrays 数组 1.1 定义 数组是一种固定大小的数据结构,用于存储相同类型的值。…

广西省行政村边界shp数据/广西省乡镇边界/广西省土地利用分类数据/径流分布

广西壮族自治区,地处中国南部,北回归线横贯中部。南北以贺州——东兰一线为界,此界以北属中亚热带季风,以南属南亚热带季风。 数据范围:全国行政区划-行政村界 数据类型:面状数据,全国各省市县…

1月笔记本电脑行业分析:多品牌下滑但ThinkPad逆势增长!

2024年1月,笔记本行业市场格局出现较大的变化。长期在京东平台保持头部联想和惠普,被ThinkPad挤下(虽然是联想旗下品牌),排名掉至第二和第三。ThinkPad以超2.7亿的月销售额成绩拿下第一,市占比16%。 与去年…

java SSM农产品订购网站系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM农产品订购网站系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采…

算法-贪心-112. 雷达设备

题目 假设海岸是一条无限长的直线,陆地位于海岸的一侧,海洋位于另外一侧。 每个小岛都位于海洋一侧的某个点上。 雷达装置均位于海岸线上,且雷达的监测范围为 d,当小岛与某雷达的距离不超过 d 时,该小岛可以被雷达覆…

大语言模型:Large Language Models Are Human-Level Prompt Engineers概述

研究内容 如何通过prompt,在不进行微调大语言模型的前提下,增加大语言模型的表现 研究动机 prompt非常有用,但是人工设置的非常不自然;因此提出了要自动使用大语言模型自己选择prompt;取得了很好的效果。 作者主要…

python实现生成树

生成树 生成树(Spanning Tree)是一个连通图的生成树是图的极小连通子图,它包含图中的所有顶点,并且只含尽可能少的边。这意味着对于生成树来说,若砍去它的一条边,则会使生成树变成非连通图;若给…