当前位置:网站首页>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️⃣自定义。
边栏推荐
猜你喜欢
随机推荐
【FAQ】CCAPI Compatible EOS Camera List (Updated in August 2022)
Japan Sanitary Equipment Industry Association: Japan's warm water shower toilet seat shipments reached 100 million sets
在STM32中使用printf函数
文件内音频的时长统计并生成csv文件
Email management Filter emails
利用将网页项目部署到阿里云上(ngnix)
typescript59-泛型工具类型(partial )
技术分析模式(十一)如何交易头肩形态
#Sealos#使用工具部署kubernetesV1.24.0
【2022 DSCTF决赛wp】
LaTeX image captioning text column automatic line wrapping
Rapid Medical超小体积且唯一可调的取栓器获得FDA核准
typescript64-映射类型
In-depth analysis if according to data authority @datascope (annotation + AOP + dynamic sql splicing) [step by step, with analysis process]
(2022杭电多校六)1010-Planar graph(最小生成树)
技术分析模式(九)三重顶部和底部
获取预训练模型的网络输入尺寸
Matplotlib plotting notes
2022杭电多校六 1006-Maex (树形DP)
D41_buffer pool









