美文网首页
netty-拆包和粘包

netty-拆包和粘包

作者: coderljx | 来源:发表于2019-01-20 15:07 被阅读0次

为什么会发生TCP粘包、拆包呢?

发生TCP粘包、拆包主要是由于下面一些原因:

应用程序写入的数据大于套接字缓冲区大小,这将会发生拆包。

应用程序写入数据小于套接字缓冲区大小,网卡将应用多次写入的数据发送到网络上,这将会发生粘包。

进行MSS(最大报文长度)大小的TCP分段,当TCP报文长度-TCP头部长度>MSS的时候将发生拆包。

接收方法不及时读取套接字缓冲区数据,这将发生粘包。

……

如何处理粘包、拆包问题?

知道了粘包、拆包问题及根源,那么如何处理粘包、拆包问题呢?TCP本身是面向流的,作为网络服务器,如何从这源源不断涌来的数据流中拆分出或者合并出有意义的信息呢?通常会有以下一些常用的方法:

使用带消息头的协议、消息头存储消息开始标识及消息长度信息,服务端获取消息头的时候解析出消息长度,然后向后读取该长度的内容。

设置定长消息,服务端每次读取既定长度的内容作为一条完整消息。

设置消息边界,服务端从网络流中按消息编辑分离出消息内容。

……

如何基于Netty处理粘包、拆包问题?

DelimiterBasedFrameDecoder是基于消息边界方式进行粘包拆包处理的。

FixedLengthFrameDecoder是基于固定长度消息进行粘包拆包处理的。

LengthFieldBasedFrameDecoder是基于消息头指定消息长度进行粘包拆包处理的。

LineBasedFrameDecoder是基于行来进行消息粘包拆包处理的。

用户可以自行选择规则然后使用Netty提供的对应的Decoder来进行具有粘包、拆包处理功能的网络应用开发。

相关文章

  • netty-拆包和粘包

    为什么会发生TCP粘包、拆包呢? 发生TCP粘包、拆包主要是由于下面一些原因: 应用程序写入的数据大于套接字缓冲区...

  • TCP协议下的粘包与拆包,如何解决

    TCP协议下的粘包与拆包,如何解决 TCP协议下的粘包与拆包,如何解决一、粘包、拆包1.1 粘包原因1.1.1 滑...

  • TCP粘包和拆包

    TCP的粘包和拆包 粘包和拆包现象 客户端给服务端发送数据可能存在的场景: 1.无拆包粘包 服务端分两次读取到了两...

  • Netty 权威指南笔记(三):TCP 粘包和拆包

    Netty 权威指南笔记(三):TCP 粘包和拆包 什么是 TCP 粘包和拆包? TCP 是一个“流”协议,所谓“...

  • Netty系列(3)TCP的粘包拆包问题及方案

    1.概述 1.1 粘包拆包问题描述 1.2 粘包拆包产生的原因 1.3 粘包拆包问题的解决思路 2.Netty中粘...

  • JAVA-每日一面 2022-01-25

    什么是 TCP 粘包/拆包以及TCP 粘包/拆包的解决办法 TCP 粘包/拆包1、要发送的数据大于 TCP 发送缓...

  • netty的编解码

    什么是拆包/粘包 TCP 粘包/拆包 半包:读取的数据不是一个数据包粘包:读取的数据超过一个数据包 粘包问题的解决...

  • Netty之七TCP粘包和拆包及解决方案

    个人专题目录 1. TCP 粘包和拆包及解决方案 1.1 TCP 粘包和拆包基本介绍 TCP是面向连接的,面向流的...

  • netty-半包&粘包

    what? 在Netty发送和读取数据时,场所实际是ByteBuf缓冲区。 每一次发送就是向通道写入一个ByteB...

  • TCP粘包和拆包

    Tcp是个“流协议”,所谓流,就是没有界限的一连串数据,没有界限。TCP底层不了解业务数据的含义,它会根据TCP缓...

网友评论

      本文标题:netty-拆包和粘包

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