当前位置:网站首页>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️⃣自定义。
边栏推荐
猜你喜欢
随机推荐
如何将.asd恢复为Word文档
typescript62-泛型工具类型(record)
1, Citrix XenDesktop 2203 AD domain system installation (1)
typescript63-索引签名类型
基于KECA-IGWO-KELM的间歇过程故障诊断方法
unity 将Text批量替换为TextMeshProUGUI
花花省V5淘宝客APP源码无加密社交电商自营商城系统带抖音接口
香港国际珠宝展及香港国际钻石、宝石及珍珠展揭幕
scikit-image图像处理笔记
ndk编译so库
LaTeX 图片加标题 文本分栏自动换行
PCI Pharma Services宣布斥资数百万美元扩建英国制造设施,以满足市场对支持肿瘤治疗的全球高效药制造服务日益增长的需求
Pytorch distributed parallel processing
【FAQ】What is Canon CCAPI
盒子模型小练习
【网友真实投稿】为女友放弃国企舒适圈,转行软件测试12k*13薪
开源中国活动合作说明书
vscode notes
MySQL表操作练习
【FAQ】CCAPI兼容EOS相机列表(2022年8月 更新)