美文网首页
TCP粘包/拆包

TCP粘包/拆包

作者: 刘一一同学 | 来源:发表于2019-08-27 14:13 被阅读0次

TCP是“流”协议,所谓“流”协议,就是没有界限,没有分割的一串数据。TCP会根据缓冲区实际情况进行划分,一个完整的包可能会拆分成多个包进行发送,也有可能把多个小包封装成一个大的数据包发送,这就是TCP粘包/拆包。

发生原因

  • 应用程序写入的数据大于套接字缓冲区大小,这将会发生拆包。
  • 应用程序写入数据小于套接字缓冲区大小,网卡将应用多次写入的数据发送到网络上,这将会发生粘包。
  • 进行MSS(最大报文长度)大小的TCP分段,当TCP报文长度-TCP头部长度>MSS的时候将发生拆包。
  • 接收方法不及时读取套接字缓冲区数据,这将发生粘包。

解决办法

  1. 设置定长消息,服务端每次读取既定长度的内容作为一条完整消息。
  2. 设置消息边界,服务端从网络流中按消息编辑分离出消息内容。
  3. 使用带消息头的协议、消息头存储消息开始标识及消息长度信息,服务端获取消息头的时候解析出消息长度,然后向后去读该长度的内容。

相关文章

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

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

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

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

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

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

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

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

  • Netty-TCP拆包/粘包

    Netty-TCP拆包/粘包 TCP拆包/粘包 TCP 是一个面向字节流的协议,它是性质是流式的,所以它并没有分段...

  • netty的编解码

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

  • netty-拆包和粘包

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

  • TCP粘包和拆包

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

  • TCP粘包/拆包

    TCP是“流”协议,所谓“流”协议,就是没有界限,没有分割的一串数据。TCP会根据缓冲区实际情况进行划分,一个完整...

  • TCP粘包、拆包

    粘包、拆包发生原因 要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。 待发送数据大于MSS(最大报文长...

网友评论

      本文标题:TCP粘包/拆包

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