思维导图:网络通信协议标准化

本文探讨了网络通信协议标准化的重要性,包括解析效率、易实现性、可读性、兼容性和安全性等设计目标。举例介绍了HTTP、Redis等协议的特点及适用场景,并详细阐述了帧完整性判断、序列化方法如TLV结构编码和protobuf,以及安全措施如XXTEA和AES加密。同时,讨论了数据压缩技术和协议升级策略,为网络协议设计提供了全面的参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络通信协议标准化

在这里插入图片描述

为什么要协议标准化

不约定好协议彼此就不知道对方发送数据的意义

设计目标

  • 解析效率:编码长度
  • 易于实现
  • 可读性
  • 兼容性
  • 跨平台跨语言
  • 安全可靠

设计细节

  • 帧完整性判断
  • 序列化和反序列化
  • 协议升级
  • 协议安全
  • 数据压缩

协议设计范例(可以学习参考的)

  • nginx
  • http
    • 不适合后台
      • 只是个协议框架没指定包体序列化方式要配合其他序列化方式才能传递业务逻辑数据
      • 解析效率比较低而且复杂
    • 适合的情况
      • 对公网用户 api HTPTP 协议的穿透效果最好
      • 效率要求没那么高的场景
      • 希望提供更多人熟悉的接口
    • redis
      • 先发送一个字符串表示参数个数
      • 然后逐个发送参数
        • 先发送一个字符串表示参数的数据长度
        • 在发送参数的内容

判断包完整性

  • 固定大小字节数目来分界
  • 特定符号分界,例如\r\n
  • 固定包头+包体结构(header + body)
    • 先接收固定字节数的头部,解出这个包完整长度,按次长度接收包体
  • 序列化后的 buffer 前加一个字符流的头部,有个字段存储包总长度,根据特殊符号判断头部完整性
    • HTTP、REDIS
    • 先判断已收到数据是否包含结束符
    • 收到结束符后解析包头,解出这个包完整长度,按此长度接收包体

序列化方法

  • TLV 结构编码
    • protobuf
      • 独立、轻量级
      • 二进制结构存储
      • varint + zigzag 负数编码优化
    • 文本流编码
      • XML
        • 通用、重量级
        • 文本存储
      • JSON
        • 通用、轻量级的数据交换结构
        • 以文本存储
        • 方便调试
  • 固定结构编码(协议约定字段类型和含义,TCP/IP)
  • 内存 dump:内存直接输出不序列化,反序列化也直接还原内存

协议安全

  • xxtea 固定 key
  • AES 固定key
  • openssl
  • Signal protocol:端到端通讯加密协议

数据压缩

可以对文本进行压缩,缓解带宽问题

  • deflate ngix
  • gzip
  • lzw

协议升级

  • 支持协议头部可扩展:增加一个字段来指定头部长度
  • 区分版本号:增加版本号字段
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值