码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 思维导图:网络通信协议标准化


    网络通信协议标准化

    在这里插入图片描述

    为什么要协议标准化

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

    设计目标

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

    设计细节

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

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

    • 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

    协议升级

    • 支持协议头部可扩展:增加一个字段来指定头部长度
    • 区分版本号:增加版本号字段
  • 相关阅读:
    神经网络怎么看训练效果,神经网络结果图如何看
    VMware16虚拟机安装及配置(保姆级教程),这一篇就够了
    升级鸿蒙4.2新变化,新增 WLAN 网络自动连接开关!
    【快应用】如何通过计算属性控制组件样式
    docker 容器原理分析笔记(下)
    vs2019 c++20 规范 STL库中关于时间的模板 ratio<T,U> , duration<T,U> , time_point<T,U>等
    c++——爆肝7000字的高精度算法大合集&&实战应用
    http传输为什么是采用TCP传输
    CodeMeter软件保护及授权管理解决方案(一)
    PostgreSQL 多表连接不同维度聚合统计查询
  • 原文地址:https://blog.csdn.net/qq_39354847/article/details/126894887
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号