当前位置:网站首页>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️⃣自定义。
边栏推荐
猜你喜欢

Redis

Writing OpenCV in VSCode

MyCat安装

Some basic method records of commonly used languages in LeetCode
![In-depth analysis if according to data authority @datascope (annotation + AOP + dynamic sql splicing) [step by step, with analysis process]](/img/b5/03f55bb9058c08a48eae368233376c.png)
In-depth analysis if according to data authority @datascope (annotation + AOP + dynamic sql splicing) [step by step, with analysis process]

cs231n learning record

Shared memory + inotify mechanism to achieve multi-process low-latency data sharing

MySQL的主从模式搭建

After docker is deployed, mysql cannot connect

Nacos cluster construction
随机推荐
邮件管理 过滤邮件
技术分析模式(十一)如何交易头肩形态
h5页面回退到微信小程序并携带参数
typescript67-索引查询类型
八大排序之堆排序
golang-条件语句
vscode笔记
LaTeX使用frame制作PPT图片没有标号
微信小程序仿input组件、虚拟键盘
怎么样避免线上内存泄漏
无法导入torchvision.io.read_image
document.querySelector()方法
Nacos cluster construction
lingo入门——河北省第三届研究生建模竞赛B题
小程序input框不允许输入负数
docker部署完mysql无法连接
技术分析模式(八)双顶和底
Redis进阶
Using printf function in STM32
浮点数基础知识
