TCP的粘包拆包问题+解决方案

简介: TCP的粘包拆包问题+解决方案

image.gif编辑 

为什么TCP有而UDP没有粘包❓

1️⃣因为udp的数据包有保护边界。

2️⃣tcp是以字节流的形式,也就是没有边界,所以应用层的数据在传输层的时候就可能会出现粘包和拆包问题。

出现这种问题的原因图解💨

1️⃣字节流可以理解为一个双向的通道里流淌的数据,这个数据其实就是我们常说的二进制数据,简单来说就是一大堆 01 串。这些 01 串之间没有任何边界。

2️⃣应用层传到 TCP 协议的数据,不是以消息报为单位向目的主机发送,而是以字节流的方式发送到下游,这些数据可能被切割和组装成各种数据包,接收端收到这些数据包后没有正确还原原来的消息,因此出现粘包现象。

粘包情况

🥖要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包;


拆包情况

🥖要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包;


拆包&粘包

image.gif编辑

解决方案💯

应用层措施

1️⃣封装固定包的大小。

2️⃣在包的结尾加上固定的字符,比如:FTP中的解决方法:末尾加上\r\n

3️⃣消息头+消息体。消息头中有消息体的长度。

4️⃣自定义。

相关文章
|
网络协议 算法 程序员
坦白局,TCP粘包:我只是犯了每个数据包都会犯的错
李东,自称亚健康终结者,尝试使用互联网+的模式拓展自己的业务。在某款新开发的聊天软件琛琛上发布广告。 键盘说来就来。疯狂发送"李东",回车发送!,"亚健康终结者",再回车发送!
|
移动开发 网络协议 Java
TCP 粘包/拆包问题
《基础系列》
131 0
TCP 粘包/拆包问题
|
网络协议 图形学
Socket TCP协议解决粘包、半包问题的三种解决方案
Socket TCP协议解决粘包、半包问题的三种解决方案
235 1
Socket TCP协议解决粘包、半包问题的三种解决方案
|
网络协议
TCP的粘包和拆包
TCP的粘包和拆包
142 0
|
移动开发 网络协议 IDE
Netty通信遇到了TCP拆包粘包问题?看这篇文章如何解决
在上一篇文章中主要是使用Springboot开发了一个Netty通信的基本案例,这篇文章是在上一篇文章的基础之上进行讲解的,主要是考虑传输数据如果遇到粘包问题该如何解决。 这篇文章会按照一下步骤进行讲解,希望对你有所收获: 1、什么是TCP粘包拆包 2、Netty中粘包问题的问题重现 3、Netty中粘包问题的解决方案 OK,在你心中有这么一个基本的脉络之后就可以开始今天的文章了。本系列所有的文章都会给出完整的代码,且在电脑上真实运行了一遍,确保无误。
229 0
Netty通信遇到了TCP拆包粘包问题?看这篇文章如何解决
|
移动开发 网络协议 Java
牛逼!TCP 粘拆包问题及 Netty 中的解决方案
本文选自 Doocs 开源社区旗下“源码猎人”项目,作者 AmyliaY。
225 0
牛逼!TCP 粘拆包问题及 Netty 中的解决方案
|
移动开发 网络协议
【Netty】TCP粘包和拆包
前面已经基本上讲解完了Netty的主要内容,现在来学习Netty中的一些可能存在的问题,如TCP粘包和拆包。
121 0
【Netty】TCP粘包和拆包
|
13天前
|
机器学习/深度学习 人工智能 网络协议
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
27 4
|
网络协议
TCP/IP协议的介绍
TCP/IP协议是众多协议的统称,通过分层结构来管理。可分为七层模型或四层结构
|
网络协议 网络架构
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型