当前位置:网站首页>TCP的粘包拆包问题+解决方案
TCP的粘包拆包问题+解决方案
2022-08-05 06:13:00 【知识浅谈】
为什么TCP有而UDP没有粘包
1️⃣因为udp的数据包有保护边界。
2️⃣tcp是以字节流的形式,也就是没有边界,所以应用层的数据在传输层的时候就可能会出现粘包和拆包问题。
出现这种问题的原因图解
1️⃣字节流可以理解为一个双向的通道里流淌的数据,这个数据其实就是我们常说的二进制数据,简单来说就是一大堆 01 串。这些 01 串之间没有任何边界。
2️⃣应用层传到 TCP 协议的数据,不是以消息报为单位向目的主机发送,而是以字节流的方式发送到下游,这些数据可能被切割和组装成各种数据包,接收端收到这些数据包后没有正确还原原来的消息,因此出现粘包现象。
粘包情况
要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包;
拆包情况
要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包;
拆包&粘包
解决方案
应用层措施
1️⃣封装固定包的大小。
2️⃣在包的结尾加上固定的字符,比如:FTP中的解决方法:末尾加上\r\n
3️⃣消息头+消息体。消息头中有消息体的长度。
4️⃣自定义。
边栏推荐
猜你喜欢
随机推荐
盒子模型中过度约束问题及其解决办法
MySQL: basic part
cs231n learning record
【8】Docker中部署Redis
合工大苍穹战队视觉组培训Day9——相机标定
17-VMware Horizon 2203 虚拟桌面-Win10 手动桌面池浮动(十七)
深入分析若依数据权限@datascope (注解+AOP+动态sql拼接) 【循序渐进,附分析过程】
numpy.random使用文档
盒子模型小练习
scikit-image image processing notes
MySql面试题总结
numpy.random usage documentation
不太会讲爱,其实已经偷偷幸福很久啦----我们的故事
typescript59-泛型工具类型(partial )
typescript64-映射类型
边缘盒子+时序数据库,美的数字化平台 iBUILDING 背后的技术选型
typescript67-索引查询类型
Collision, character controller, Cloth components (cloth), joints in the Unity physics engine
unity 将Text批量替换为TextMeshProUGUI
Kioxia and Aerospike Collaborate to Improve Database Application Performance