浅谈通讯协议

写在开端

第一次写博客,水平有限,仅仅是根据自己的理解,就自定义通讯协议浅谈一下个人的理解,有偏差或错误的地方,欢迎指正。本人水平有限,勿喷。


摘要

本文档跳出常规理解的协议头,命令字,数据域的概念,将通讯协议由简到繁做一个理解。最简单的通讯协议,就是一个“协议标识”+“数据域”;将常规复杂协议的“协议头”+“命令字【B、C…】”+“data域”的概念,转换为【“协议A”【协议B、协议C…】】这样的嵌套与并列的概念。


协议模块化

通讯协议本质上是分模块的,包括 数据结构,通讯通道,通讯机制三个模块;

  • 数据结构

    数据结构:二进制数据以约定规则组成数据串,使二进制数据串担负实际意义。
    协议的标准数据结构是“协议头+数据域”。
    协议头用来标识协议,对应约订规则的数据域。
    数据域是约定的规则组成的数据串,多个单元数据域可以组成复杂的帧数据域。

  • 通讯通道

    我理解的通讯通道,指的不是通讯链路(蓝牙,socket,nsfc等),而是指一个通讯模块,甚至可以理解为另一个通讯协议,因为对于上层开发者来说,他们通过调用模块API,传输数据,本质上还是把自己封装好的数据,作为底层协议的数据域被包裹起来,向下层传输,层层包裹,最终传到到驱动层。

  • 通讯机制

我理解的通讯机制主要有两种“应答机制”、“广播机制”。
1. 应答机制
业务发起方发送的每一个通讯帧,接收方都必回应相应的应答报文,发起方能够确定接收方获取到通讯帧;
2. 广播机制
业务发起方发送的通讯帧,接收方不会应答报文,发起方不能够确定接收方获取到通讯帧。

一个协议采用的通讯机制可能是单一的,也可能两种都有,所以建议在开始规划设计一个通讯协议项目的时候,把两种通讯机制都兼容到,增强项目的扩展性。

协议嵌套

数据协议是可以嵌套的,不同协议嵌套起来,可以组成新的复杂协议。
不同协议的协议帧都可以作为另一个外层协议的数据域,就组成了一个复杂协议,实现一套功能。

复杂协议的嵌套策略

复杂协议通讯帧的收发处理是两个互逆的顺序。

a. 发送通讯帧

  1. 用户下发协议数据域的各字段数据;
  2. 内层协议的数据结构模块将用户数据组装为该层协议的数据域;
  3. 将外层协议作为内层协议的通讯通道;
  4. 内层协议使用通讯通道发送数据;
  5. 内层协议通讯机制模块控制数据的发送,接收,重发,超时等逻辑。

b. 接收通讯帧

  1. 外层协议从通讯通道获取到数据;
  2. 外层协议的数据结构模块解析数据,获取到内层协议的通讯帧;
  3. 外层协议的通讯机制模块结束此次业务逻辑,将数据返回给内层协议;
  4. 内层协议从通讯通道获取到数据,使用数据结构模块解析数据,并处理通讯机制模块的业务逻辑;
  5. 内层协议向用户返回数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值