Socket TCP/IP协议数据传输过程中的粘包和分包问题

news/2024/11/1 5:38:46/

Socket TCP/IP协议数据传输过程中的粘包和分包问题

一:通过图解法来描述一下分包和粘包,这样客户更清晰直观的了解:

在这里插入图片描述
下面对上面的图进行解释:
1.正常情况:如果Socket Client 发送的数据包,在Socket Server端也是一个一个完整接收的,那个就不会出现粘包和分包情况,数据正常读取。
2.粘包情况:Socket Client发送的数据包,在客户端发送和服务器接收的情况下都有可能发送,因为客户端发送的数据都是发送的一个缓冲buffer,然后由缓冲buffer最后刷到数
据链路层的,那么就有可能把数据包2的一部分数据结合数据包1的全部被一起发送出去了,这样在服务器端就有可能出现这样的情况,导致读取的数据包包含了数据包2的一部分
数据,这就产生粘包,当然也有可能把数据包1和数据包2全部读取出来。
3.分包情况:意思就是把数据包2或者数据包1都有可能被分开一部分发送出去,接着发另外的部分,在服务器端有可能一次读取操作只读到一个完整数据包的一部分。
4.在数据包发送的情况下,有可能后面的数据包分开成2个或者多个,但是最前面的部分包,黏住在前面的一个完整或者部分包的后面,也就是粘包和分包同时产生了。

二:产生上情况的内部原因有下面几点:

1.数据发送端发送数据给缓冲buffer太大,导致发送一个完整的数据包被分几次发送给缓存buffer,然而缓冲buffer等到数据满了以后会自动把数据发送的数据链路层去,这样就
导致分包了。
2.TCP协议定义有一个选项叫做最大报文段长度(MSS,Maximum Segment Size),该选项用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长
度。在一定程度上MSS应该能尽可能多地承载用户数据,用于在传输通路上又可能避免分片,但是在复杂的网络环境下确定这个长度值非常困难,那么在这样的情况下在传输过
程中产生分包,粘包就很常见了
3.以太网,IP,TCP,UDP数据包分析
4.数据帧的有效载荷(payload)比以太网的最大传输单元(MTU)大的时候,进行了IP分片。

三:解决数据分包和粘包的基本策略如下

1.消息定长,比如定一个100,那么读取端每次读取数据就截取100个长度的数据,然后交给业务成去做解析
2.在消息的尾部加一些特殊字符,那么在读取数据的时候,只要读到这个特殊字符,就认为已经可以截取一个完整的数据包了,这种情况在一定的业务情况下实用。
3.读取缓存的数据是不定长的,所以我们把读取到的数据添加到我们自己的一个byte[]数组中,然后根据我们的业务逻辑来找到指定的特殊协议头部,协议长度,协议尾部,然后
从我们的byte[]中获取一个完整的数据包,然后再对数据包进行业务解析就可以得到正确结果。


http://www.ppmy.cn/news/361278.html

相关文章

jetpack compose —— Card

jetpack compose Card 组件提供了一种简单而强大的方式来呈现卡片式的用户界面。 一、什么是 Card 组件 二、基本用法 三、属性和修饰符 四、嵌套使用和复杂布局 一、什么是 Card 组件 Card 是 Jetpack Compose 中的一个常用组件,用于呈现卡片式的用户界面。它…

wav是什么格式?怎么转成mp3?

wav是什么格式?wav是一种常见的音频文件格式,是微软公司开发在windows系统上的一种标准数字音频文件。MP3是一种有损的音频格式,牺牲音乐文件的质量以换取较小的文件体积,而WAV是无损的格式,并能保证声音不失真。但是在…

MP3格式的音乐怎么转换成WAV格式?小编教你一招

MP3格式怎么转换成WAV格式?WAV是最接近无损音乐的一种音频格式,所以深受不少人的喜爱,我们听音乐的时候,大部分歌曲是MP3格式的,这时想把mp3格式转换成WAV格式怎么办呢?接下来,主要跟大家分享一…

MP3格式的音乐怎么转换成WAV格式

MP3格式怎么转换成WAV格式?WAV是最接近无损音乐的一种音频格式,所以深受不少人的喜爱,我们听音乐的时候,大部分歌曲是MP3格式的,这时想把mp3格式转换成WAV格式怎么办呢?接下来,主要跟大家分享一…

wav格式怎样转换成flac

FLAC和WAV各有其特性,WAV是未经压缩过的波形文件,FLAC和WAV各有其特性,WAV是未经压缩过的波形文件。那么本文小编就来跟大家讨论一下wav该如何转换成flac音频文件呢?下面是借助到一款音频转换器,一起来看看吧! 1、首先…

无损音频wav音乐格式怎么转换成mp3格式

wav是最接近无损音频的一种音乐格式,许多音乐发烧友都喜欢用这种格式来存储我们的音乐。但是对于一般的人来说,这种格式我们没有必要使用的,而且占用的电脑、手机空间是非常多的。许多人为了节省空间都会选择将wav格式转换成mp3格式&#xff…

wav格式研究

WAV文件格式研究笔记 WAV文件格式是(WAV From format)的简写。WAV是指文件格式,而数据编码格式是多样的,目前微软提供的数据格式只有一种PCM -脉派编码调变(Pulse Code Modulation也就是最常见的无压缩WAV)。其他的数据格式有G.723.1、ACELP、…

wave文件(*.wav)格式、PCM数据格式介绍

音频简介 经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等. 44100HZ 16bit stereo: 每秒钟有 44100 次采样, 采样数据用 16 位(2字节)记录, 双声道(立体声); 22050HZ 8bit mono: 每秒钟有 22050 次采样, 采样数据用 8 位(1字节)记录, 单声道; 当然也…