美文网首页
应用层协议设计

应用层协议设计

作者: besmallw | 来源:发表于2021-08-20 17:24 被阅读0次

协议

  • 什么是协议:协议是一种约定,通过约定,不同的进程可以对一段数据产生相同的理解,可相互协作。进程间的通信一定需要协议。
  • \color{rgb(255,0,0)} {为什么说进程间通信就需要协议?}
  • \color{rgb(255,0,0)} {为什么需要自己设计协议?}

协议设计目标

  • 解析效率:互联网业务具有高并发的特点,解析效率决定了使用协议的CPU成本
  • 编码长度:信息编码后的长度,编码长度决定了使用协议的网络带宽及存储成本
  • 易于实现:互联网业务需要轻量级的协议,而不是大而全
  • 可读性:编码后的数据的可读性决定了使用协议的调试及维护成本(某些情况下需要可读性)
  • 兼容性:互联网的需求具有灵活多变的特点,协议会经常升级,使用协议的双方是否可以独立升级协议、增减协议中的字段是非常重要的
  • 跨平台跨语言:互联网的业务涉及到不同的平台和语言
  • 安全可靠:防止数据被破解

协议设计最核心解决的问题

1、序列化/反序列化
2、判断包的完整性

协议设计进阶问题

3、协议升级
4、协议安全
5、数据压缩

序列化/反序列化

什么是序列化和反序列化?

  • 序列化:把对象转换为字节序列的过程称为对象的序列化
  • 反序列化:把字节序列恢复为对象的过程称为对象的反序列化
    协议.png

序列化方法

  • TLV编码及其变体(TLV是tag, length和value的缩写):比如protobuf
  • 文本流编码:比如xml json
  • 固定结构编码:协议约定了传输字段类型和字段含义,和TLV的方式类似,但是没有了tag和length,只有value,比如tcp
  • 内存dump:把内存中的数据直接输出,不做任何序列化操作。反序列化的时候,直接还原内存(不建议在互联网使用,在嵌入式方面可以使用)

主流序列化协议

主流序列化协议:xml、json、protobuf

  • xml 指可扩展标记语言(eXtensible Markup Language)。是一种通用和重量级的数据交换格式,以文本方式存储
  • json (JavaScript Object Notation,JS 对象简谱) 是一种通用和轻量级的数据交换格式,以文本结构进行存储
  • protocol buffer是Google的一种独立和轻量级的数据交换格式,以二进制结构进行存储。
类型 通用性 大小 格式
xml 通用 重量级 文本格式
json 通用 轻量级 文本格式(方便调试)
protobuf(编译器,生成对应语言的代码) 独立 轻量级 二进制格式

判断包的完整性

为了能让对端知道如何给包分解,目前一般有以下做法:
1、以固定大小字节数来分界,如每个包100字节,对端每收齐100个字节,就当成一个包来解析
2、以特定符号来分界,如每个包都以特定的字符来结尾(如\r\n),当在字节流中国读取到该字符时,则表明上一个包到此为止
3、固定包头+包体结构,这种结构中一般包头部分是一个固定字节长度的结构,并且包头中会有一个特定的字段指定包体的大小。收包时,先接收固定字节数的头部,解出这个包完整长度,按此长度接收包体。这是目前各种网络应用用的最多的一种包格式
4、在序列化后的buffer前面增加一个字符流的头部,其中有个字段存储包总长度,根据特殊字符(比如\n或者\0)判断头部的完整性。这样通常比3要麻烦一些,http和redis采用的就是这种方式。收包的时候,先判断已收到的数据中是否包含结束符,收到结束符后解析包头,解出这个包完整长度,按此长度接收包体

协议设计参考范例

字段 类型 长度(字节) 说明
STAG unsigned short 2 通信协议数据包的开始标志
version unsigned short 2 通信协议的版本号
checksum unsigned char 1 计算协议数据校验和,如果为加密数据,则计算密文校验和。校验和计算范围:协议头CheckSum字段后数据,协议体全部数据。
type unsigned char 1 0表示协议体是json格式,其它值未定义。设备心跳消息类型的值为0xA0
seqno unsigned int 4 通信数据报文的序列号,应答报文序列号必须与请求报文序列号相同
length unsigned short 2 报文内容长度,即从该字段后报文内容长度
reserve unsigned int 4 预留字节,设备心跳消息类型的值为devid

协议升级

1、通过版本号指明协议版本,即是通过版本号辨别不同类型的协议
2、支持协议头部可扩展,即是在设计协议头部的时候有一个字段用来指明头部的长度

协议安全

1、xxtea 固定 key
2、AES 固定 key
3、openssl
4、signal protocol 端到端的通讯加密协议

数据压缩

1、deflate
2、gzip
3、lzw


2021.8.20 17:28 深圳

相关文章

  • 应用层协议设计

    协议 什么是协议:协议是一种约定,通过约定,不同的进程可以对一段数据产生相同的理解,可相互协作。进程间的通信一定需...

  • 物联网传统私有 TCP 协议服务迁移 —— EMQ X 私有 T

    前言 MQTT 是 IBM 于 1998 年设计和开发的工作在 TCP/IP 协议簇上是基于 TCP 协议的应用层...

  • Linux 网络管理

    ↓发送接口 ↕ 应用层 ← 应用层协议 → 应用层 APDU接口 ↕ ...

  • 网络慢走-7

    HTTP协议 现在讲讲应用层,应用层的协议有很多,其中就用HTTP协议。HTTP协议应该是我们平时接触最直接的协议...

  • IM (二):数据通信协议的选择

    *** 序: ***IM 中的数据通信协议指的是 IM 系统中应用层所使用的通信协议,该通信协议的设计效果会对 I...

  • HTTP协议

    什么是http 超文本传输协议(HTTP)是用于传输诸如HTML的超媒体文档的应用层协议。它被设计用于Web浏览器...

  • 计网笔记-应用层

    应用层分为两部分:应用程序,应用层协议 应用层 为用户提供Web访问,电子邮件,文件传输等功能的服务 应用层协议 ...

  • Https通信过程

    Http属于超文本传输协议,也可以被翻译成超文本转移协议�,属于应用层协议,Https不是新的应用层协议,只是在原...

  • iOS即时通讯 WebSocket Socket

    WebSocket协议原理 Websocket是应用层第七层上的一个应用层协议,它必须依赖 HTTP 协议进行一次...

  • Http协议札记

    Http协议札记 Http协议简介: 属于应用层面面向对象的协议;

网友评论

      本文标题:应用层协议设计

      本文链接:https://www.haomeiwen.com/subject/pwttiltx.html