通讯协议制定之常见问题、注意事项总结

文章目录

  • 通讯协议制定之常见问题、注意事项总结
    • 1. 通讯协议制定介绍小结
    • 2. 常见的问题及注意事项总结
      • 2.1 3次握手
      • 2.2 心跳检测
      • 2.3 ACK回复及重发机制
      • 2.4 通信协议版本匹配
      • 2.5 校验的重要性
      • 2.6 最大数据传输长度
      • 2.7 大小端问题
      • 2.8 通信负载能力
      • 2.9 压力测试的重要性

通讯协议制定之常见问题、注意事项总结

1. 通讯协议制定介绍小结

  • 通讯协议又称通信规程,是指通信双方对数据传送控制的一种约定,约定中包括对数据格式同步方式传送速度传送步骤检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守,它也叫做链路控制规程
  • 根据项目中的实际应用,本人总结了嵌入式开发中通讯协议制定的相关考虑因素和经验技巧,已介绍如下相关内容,点击可跳转阅读:
    1. 通讯协议制定之交互方式、步骤介绍
    2. 通讯协议制定之数据包结构介绍
    3. 通讯协议制定之数据传输类型及传输规则介绍
    4. 通讯协议制定之数据消息传输方式介绍
    5. 通讯协议制定之数据包校验算法介绍

2. 常见的问题及注意事项总结

在项目开发实际应用中,遇到过诸多问题,在此对遇到过的问题进行总结,做一个经验分享

2.1 3次握手

  • 握手是通信双方建立通信连接的第一步,只有双方都认为握手成功后,才会建立通信,常会出现一方认为握手成功,开始不断的发送数据,但是另外一方,认为握手没有成功,不会响应相关数据,造成异常
  • 3次握手的过程至关重要,次数必须为3次,才能建立一个稳定的通信,缺少一次,都有可能发生问题
  • 握手需要设置超时处理机制,比如在规定的时间下,握手都没有成功,需要执行超时处理机制,通过复位重启等处理手段消除故障

2.2 心跳检测

  • 为了检测通信的另一方是否一直在线,以确保连接的有效性,心跳消息是必不可少
  • 心跳需要设置超时处理机制,比如检测到持续一定时间心跳丢失,需要执行超时处理机制,通过复位重启等处理手段消除故障
  • 心跳超时异常发生后,通过复位重启等处理手段消除了故障,一般需要重新发起握手

2.3 ACK回复及重发机制

  • 通信中存在诸多异常场景,导致数据丢失,因此设置通信交互过程时,必须通过应答确认确保消息的交互成功
  • 必须设置重发机制,检测到未完成完整的通信流程,通过重发机制避免错误

2.4 通信协议版本匹配

  • 实际开发过程中,因为需求变更、BUG修复,通信协议版本会经常发生变更
  • 经常会发生因为版本不匹配的问题,造成功能异常、失效,为了有效避免这类问题,在协议制定时,添加协议版本字段进行规避

2.5 校验的重要性

  • 数据校验是通过对发送方持有的数据进行某种运算,对接收方收到的数据也进行同样的运算,并且比较这两个结果,如果结果不一样,肯定是传输过程中发生了错误
  • 检验字段能够有效检测、规避通信中发生的异常,该字段必不可少
  • 双方使用的校验算法必须一致,制定协议时就必须阐明介绍清楚使用的校验算法

2.6 最大数据传输长度

  • 通信模块代码开发中,需要考虑到最大的数据传输长度,根据最大的长度来考虑数据缓存区的大小,确定分配内存空间的大小
  • 对数据内容解析时,需要对数据长度字段的数值进行判断,避免因为数据丢失数据纂改、数据长度值发送错误等异常造成错误发生

2.7 大小端问题

  • 对于多字节的数据类型内容,大小端问题常常发生,不容忽视
  • 大小端问题和芯片的处理方式有着关联,经常会发生由于大小端问题造成的各种异常

2.8 通信负载能力

  • 通信协议制定时,数据发送周期、数据传输长度等都需要考虑通信的负载能力
  • 通信负载能力和通信的稳定性、准确性成反比,负载越高,则稳定性、准确性越低

2.9 压力测试的重要性

  • 为了保证通信的稳定性、准确性,必须对通信链路进行压力测试
  • 压力测试不仅要测试正常的使用场景,也需要提高负载、测试最大负载下的通信能力

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


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

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

相关文章

【Java从入门到精通】Java异常处理

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;如果你用System.out.println(11/0),那么…

Java并发编程: AQS

文章目录 一、前置知识二、什么是AQS三、使用AQS框架的锁和同步器1、ReentrantLock2、ReentrantReadWriteLock3、CountDownLatch4、CyclicBarrier5、Semaphore:信号量 四、锁和同步器的关系1、锁:面向锁的使用者2、同步器:面向锁的实现者 五、…

四川易点慧电子商务有限公司抖音小店安全正规

在如今网络购物日益普及的时代,消费者对于购物平台的选择越来越挑剔。四川易点慧电子商务有限公司抖音小店以其安全正规的经营模式,赢得了广大消费者的信赖和好评。本文将为您详细介绍四川易点慧电子商务有限公司抖音小店的优势和特点,让您在…

Vue3全家桶 - Vue3 - 【2】声明响应式数据(ref + reactive + toRef + toRefs)

声明响应式数据 一、 组合式API 1.1 ref() ref() 函数,可以创建 任何数据类型 的 响应式数据;🔺注意: 当值为 对象类型 时,会用 reactive() 自动转换它的 .value; ref 函数的内部实现依赖于 reactive 函…

代码随想录训练营第六天|242. 有效的字母异位词

242. 有效的字母异位词 已解答 简单 相关标签 相关企业 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram&q…

【AI】如何创建自己的自定义ChatGPT

如何创建自己的自定义ChatGPT 目录 如何创建自己的自定义ChatGPT大型语言模型(LLM)GPT模型ChatGPTOpenAI APILlamaIndexLangChain参考推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课本文将记录如何使用OpenAI GPT-3.5模型、LlamaIndex和LangChain创建自己的…

Sqoop 学习

参考视频 大数据Sqoop教程丨从零开始讲解大数据业务及数据采集和迁移需求_哔哩哔哩_bilibili 介绍 Sqoop是Hadoop生态体系和RDBMS(关系型数据库)体系之间传送数据的一种工具 Hadop生态系统:HDFS,Hbase,Hive等 RDBMS包…

java-ssm-基于jsp商场停车服务管理信息系统

java-ssm-基于jsp商场停车服务管理信息系统

为HTTP的2024端口设置重定向

为HTTP的2024端口设置重定向 server { listen 80:2024; server_name www.test.com; # 将HTTP的2024端口请求重定向到对应的HTTPS端口 return 301 https://$host:2024$request_uri;}

Python模块和包

模块和包 为什么要有模块和包 在Python中,模块(Module)和包(Package)是组织和管理代码的重要工具,有助于将代码划分为可维护和重用的单元。 模块(Module) 概念:模块是…

Notes用户还可自助改密码

大家好,才是真的好。 很多时候企业对员工的安全使用进行了硬性规定,例如严格的就是,每三个月或六个月要至少更改一次密码。 在Domino 8.5以后,功能上多了一个新特性,叫ID保险库,其实就是把用户的id标识符…

day40 整数拆分 不同的二叉搜索树

题目1&#xff1a;343 整数拆分 题目链接&#xff1a;343 整数拆分 题意 将正整数n拆成k个正整数的和&#xff08;k>2&#xff09;使整数的乘积最大化 尽量拆成若干个数值近似相等的数&#xff0c;这使用的是数学里面的思想&#xff1a;ab<(a^2b^2)/2 (当且仅当ab时&…

开源的java 代码分析库介绍

本文将为您详细讲解开源的 Java 代码分析库&#xff0c;以及如何安装这些库、它们的特性、区别和应用场景。Java 社区提供了多种代码分析工具&#xff0c;这些工具可以帮助您在 Java 应用程序中进行代码质量评估、性能分析、安全检查等功能。 1. CheckStyle 安装 - 通过…

tsv文件在大数据技术栈里的应用场景

是的&#xff0c;\t 是指制表符&#xff08;tab&#xff09;&#xff0c;它通常用作字段分隔符在 TSV&#xff08;Tab-Separated Values&#xff09;格式的文件中。TSV是一种简单的文本格式&#xff0c;它使用制表符来分隔每一列中的值&#xff0c;而每一行则代表一个数据记录。…

http升级https需要做什么

背景&#xff1a;随着现代网络时代的高速发展&#xff0c;网络安全方面的日益更新&#xff0c;实现网站https协议的数量也在不断增多&#xff0c;完善安全方面的因素也在逐步增加。 下面从最基础的网站http协议全面升级为https协议的流程做出说明。 目录 首先带大家一起先了解…

Unity类银河恶魔城学习记录9-1 9-2 P89,90 Character stats - Stat script源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Stat.cs using System.Collections; using System.Collections.Generic; us…

javascript:void(0);用法及常见问题解析

javascript:void(0);用法及常见问题解析 1. 简介 javascript:void(0); 是一种 JavaScript 代码,常用于以下几种情况: 创建一个空链接,点击后不会发生任何跳转或动作。 在需要返回值的地方,返回 undefined 值。 避免意外的副作用,例如在箭头函数中,如果函数体不使用括号…

【C++】---string的OJ题

【C】---string的OJ题 1.字符串转整形数字&#xff08;重要&#xff09;&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;思路展示&#xff08;3&#xff09;代码实现 2.字符串相加&#xff08;重要&#xff09;&#xff08;1&#xff09;题目描述&#xff08;2&am…

cJSON C语言库解析和生成JSON数据

文章目录 概述常用的API函数介绍范例代码应用拓展总结概述 cJSON是一个轻量级的C语言库,用于解析和生成JSON数据。它提供了简洁而高效的API,使得在C语言中处理JSON数据变得简单和方便。 以下是一些cJSON库的主要特点和用法: 解析JSON数据:使用cJSON_Parse函数可以将JSON…

迁移学习 修改预训练参数的网络模型

在迁移学习中&#xff0c;要使用预训练权重。在训练好的网络权重中&#xff0c;使用的是1000类的分类任务。而我们自己的分类任务中没有1000类&#xff0c;需要修改网络。如果将MobileNetV2(num_classes5)&#xff0c;我们的网络在最后输出是5类&#xff0c;与1训练好的1000类不…