Netty通信过程中编解码技术

news2024/11/26 22:28:23

Netty通信过程中编解码技术

  • 粘包/拆包问题
    • 为什么有拆包/粘包
      • MTU最大传输单元和MSS最大分段大小
      • 滑动窗口
      • TCP报文如何确保数据包按次序到达且不丢数据
      • Nagle算法
    • 拆包/粘包解决方案
  • Netty实现自定义通信协议
    • 通信协议设计
    • Netty如何实现自定义通信协议

粘包/拆包问题

如何获取一个完整的网络包?
了解TCP最基本的拆包/粘包问题以及常用的解决方案

为什么有拆包/粘包

在网络通信过程中,每次可以发送的数据包大小是受限制的
如MTU传输单元大小、MSS最大分段大小、滑动窗口等

  • 如果一次传输的网络包数据大小超过传输单元大小,数据会拆为多个数据包发送
  • 如果每次请求的网络包数据都很小,TCP采用的Nagle算法会对此作出优化。

MTU最大传输单元和MSS最大分段大小

MTU(Maxitum Transmission Unit)是链路层一次最大传输数据的大小,一般来大小为1500byte
MSS(Maximum Segement Size)指TCP最大报文段长度,是传输层一次发送最大数据的大小

在这里插入图片描述

滑动窗口

也被称为通告窗口
是数据接收方设置的窗口大小
接收方会把窗口大小告诉发送方
以此限制发送方每次发送数据的大小

TCP报文如何确保数据包按次序到达且不丢数据

所有的数据帧都是有编号的,TCP会对多个报文段回复一个ACK
假设有三个报文段A、B、C,发送方先发送了B、C,接收方必须等待A报文段到达
在这里插入图片描述

Nagle算法

定义为TCP/IP拥塞控制方法
主要解决频繁发送小数据包而带来的网络拥塞问题
在这里插入图片描述

拆包/粘包解决方案

在这里插入图片描述
唯一方法:定义应用层的通信协议

消息长度固定
每个数据报文都需要一个固定的长度,当发送方的数据小于固定长度时,则需要空位补齐
在这里插入图片描述
如上五条数据,一共需要发送4个报文
在这里插入图片描述
特定分隔符
在每次发送报文的尾部加上特定分隔符,接收方就可以根据特殊分隔符进行消息拆分
在这里插入图片描述

消息长度+消息内容(最常用的方法
在这里插入图片描述

Netty实现自定义通信协议

通信协议时通信双方商量好的借口暗语
在TCP网络编程中,发送方和接收方的数据包格式都是二进制,发送方将对象转化成二进制流发送给接收方,接收方获得二进制数据后需要知道如何解析成对象,所以协议时双方能够正常通信的基础

自定义协议优点:
在这里插入图片描述

通信协议设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
较为通用的协议示例:
在这里插入图片描述

Netty如何实现自定义通信协议

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Discuz | 全站多国语言翻译和繁体本地转换插件 特色与介绍

Discuz全站多国语言翻译和繁体本地转换插件 特色与介绍 特殊:集成了2个开源库1.多国语言翻译 来自:github.com/xnx3/translate特色:无限使用接口 免费使用2个翻译端 带有一级和二级缓存 实现秒翻译 2.简体 繁体(台湾&#xff09…

全新子比主题7.9.2开心版 子比主题最新版源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 wordpress zibll子比主题7.9.2开心版 修复评论弹授权 可做付费下载站 含wordpress搭建视频教程zibll子比主题安装视频教程支付配置视频教程,视频都是语音讲解,…

计算机通信与网络实验笔记

1.LINUX通过版本号判断是否为稳定版本 2.计网基础 (CD),默认二层以太网交换机。 (10)物理层是均分(除以),数据链路层及以上是不除的。 3.传输介质: (1&…

ssm医院交互系统+vue

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目 录 摘要 I Abstract II 1绪论 1 1.1研究背景与意义 1 1.1.1研究背景 1 1.1.2研究意义 1 1.2国内外研究…

网络参考模型总结

物理层: 电信号,有中继器、集线器等设备。 数据链路层:帧,有网桥、交换机等设备,通过mac地址。 网络层:包,有路由器等设备,通过IP地址。 传输层:段,有网…

windows安装cuda与cudnn

目录 cuda安装 前期准备 查看电脑支持的cuda版 方式一 方式二 安装与配置 官网下载安装包 安装 安装检验 环境变量检查(可选) 卸载 cudnn安装 安装包下载 配置 环境变量配置 安装检验 ​编辑 cuda安装 前期准备 查看电脑支持的cuda版 方…

AtCoder ABC375 A-D题解

省流&#xff1a;史上最难 C 且 C>D。 比赛链接:ABC375 Problem A: Code #include <bits/stdc.h> using namespace std; int main(){int N,ans;string S;cin>>N>>S;for(int i0;i<(N-2);i){if(S[i]# && S[i2]# && S[i1].)ans;}cout…

探索光耦:一文读懂光耦的结构与原理

光耦&#xff0c;全称为光电耦合器&#xff0c;是一种将电信号转换为光信号&#xff0c;再由光信号转换回电信号的器件。它巧妙地穿梭于电信号与光信号之间&#xff0c;实现信号的无缝转换与电气隔离。 光耦的结构与原理 光耦通常由发光二极管&#xff08;LED&#xff09;和光…

Chrome谷歌浏览器加载ActiveX控件之JT2Go控件

背景 JT2Go是一款西门子公司出品的三维图形轻量化预览解决工具&#xff0c;包含精确3D测量、基本3D剖面、PMI显示和改进的选项过滤器等强大的功能。JT2Go控件是一个标准的ActiveX控件&#xff0c;曾经主要在IE浏览器使用&#xff0c;由于微软禁用IE浏览器&#xff0c;导致JT2Go…

springboot项目多个数据源配置 dblink

当项目中涉及到多个数据库连接的时候该如何处理&#xff1f; 在对应的配置文件&#xff0c;配置对应的数据库情况&#xff0c;不过我确实没咋测试对于事务的处理我可以后续在多做测试 配置文件中配置对应的数据源 然后再使用的时候使用这个 DS(“pd_ob”)注解。 然后又长知识…

day4:用户-用户组

一&#xff0c;用户和用户组的概述 用户与用户组的概述与作用 用户&#xff08;User&#xff09;&#xff1a; 用户是操作系统中的基本单位&#xff0c;每个用户都有自己的唯一标识&#xff08;UID&#xff09;。用户可以登录系统并执行各种操作&#xff0c;但受到权限的限制。…

mysql主从复制及故障修复

一、主MySQL数据库的配置 分别在三台主机&#xff08;chen2/10.110、chen3/10.120、chen4/10.130)中安装mysql数据&#xff0c;其中chen2/10.110作为主MySQL服务器&#xff0c;其余两台作为从MySQL服务器。 1、在主机上部署mysql数据库 详细的请看上一篇&#xff1a;mysql数据…

Linux笔记之文件查找和搜索命令which,find,locate,whereis总结

Linux笔记之文件查找和搜索命令which,find,locate,whereis总结 code review! 文章目录 Linux笔记之文件查找和搜索命令which,find,locate,whereis总结1.对比2.whereis 和 which 命令区别3.locate 和 find 命令区别 1.对比 命令功能说明备注which常用于查找可直接执行的命令。…

大模型涌现判定

什么是大模型&#xff1f; 大模型&#xff1a;是“规模足够大&#xff0c;训练足够充分&#xff0c;出现了涌现”的深度学习系统&#xff1b; 大模型技术的革命性&#xff1a;延申了人的器官的功能&#xff0c;带来了生产效率量级提升&#xff0c;展现了AGI的可行路径&#x…

C语言 | 第十七章 | 家庭收支软件-2 读写文件

P 161 项目-CRM(3)-主菜单 2023/3/23 一、显示主菜单 功能说明&#xff1a;用户打开软件&#xff0c;可以看到主菜单&#xff0c;输入5退出软件 思路分析&#xff1a;在customerManage.c中&#xff0c;编写一个函数mainMenu,显示菜单&#xff0c; 在main函数中调&#xff0c…

计算机组成原理(笔记7高速缓冲存储器Cache,计算机组成原理的重难点全、直接、组相连)

为什么要设立高速缓冲存储器 &#xff08;Cache&#xff09;&#xff1f; Cache是介于CPU和主存之间的小容量存储器&#xff0c;存取速度比主存快。它能高速地向CPU提供指令和数据&#xff0c;加快程序的执行速度。它是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。…

unity静态批处理

unity静态批处理 静态批处理要求和兼容性渲染管线兼容性 使用静态批处理在构建时进行静态批处理在构建时执行静态批处理的步骤&#xff1a; 在运行时进行静态批处理性能影响 静态批处理 静态批处理是一种绘制调用批处理方法&#xff0c;它将不移动的网格组合在一起&#xff0c…

【HarmonyOS NEXT】权限申请及应用设置页跳转

关键词&#xff1a;鸿蒙、程序访问控制、定位、应用详情页、startability、want 在app开发过程中&#xff0c;常进行系统权限的申请以提供设备访问或个性化功能&#xff08;如扫一扫、城市定位、剪贴板等&#xff09;&#xff0c;从而保障应用功能的完整性&#xff0c;那么本期…

mov 转 mp4

1. 下载 ffmpeg 下载链接 Tags GyanD/codexffmpeg GitHub 下载 windos 精简版 解压 &#xff08;里面的mov文件和mp4文件是我后面自己加的&#xff09; 2. 转换 转换命令 ffmpeg -i 5.mov -c:v libx264 -c:a aac 5.mp4 其中 5.mov 是源文件路径 5.mp4是目标路径 使用lib…

计算机毕业设计 零食批发商仓库管理系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…