IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【Netty】TCP拆包黏包问题讲解_基础概念介绍 -> 正文阅读

[网络协议]【Netty】TCP拆包黏包问题讲解_基础概念介绍

一 、基础概念介绍

????????NettyTCP拆包粘包问题的处理

1. TCP底层的粘包/拆包机制

2. 分析TCP粘包、拆包问题的产生原因:

  • 应用程序write写入的字节大小大于套接口发送缓冲区的大小
  • 进行MSS大小的TCP分段、以太网帧的payload大于MTU进行IP分片

3. 业界主流三种方案:

  • 消息定长,例如每个报文的大小固定为200个字节,如果不够,空位补空格;
  • 在包尾部增加特殊字符进行分割,例如加回车等;
  • 自定义协议栈:消息分为消息头和消息体,在消息头中包含表示消息总长度的字段,然后进行业务处理;

二、定长大小分割示例

????????Server 和?Clent 使用?new FixedLengthFrameDecoder(6) ;粘包/拆包长度=6个字节

1. ServerServerBootstrap代码(Clent 中 Bootstrap一致)

2. 总结

  • 客户端发送数据方法cf.channel().writeAndFlush(Unpooled.wrappedBuffer("abc".getBytes()))
  • 服务端发送数据方法ctx.writeAndFlush(Unpooled.copiedBuffer("abc".getBytes()));
  • 定长模式下:Buffer的数据分割成定长,分批依次发送 (客户端同服务端)
  • 如果发送中文字符,需要设置定长为偶数,且注意如果有英文字符,刚好分割了中文字符,则会显示乱码。

三、特殊字符分割示例

????????Server 和?Clent 使用?new DelimiterBasedFrameDecoder(1024, buf)

1. Clent Bootstrap代码(Server中ServerBootstrap一致)

2. 总结

  • 分隔符在服务端(客户端)接收时自动去掉

?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 02:20:34  更:2022-09-15 02:22:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:38:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码