什么是tcp传输的粘包和拆包

这篇文章主要介绍“什么是tcp传输的粘包和拆包”,在日常操作中,相信很多人在什么是tcp传输的粘包和拆包问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是tcp传输的粘包和拆包”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联-云计算及IDC服务提供商,涵盖公有云、IDC机房租用、西部信息中心、等保安全、私有云建设等企业级互联网基础服务,服务热线:18982081108

以太网数据帧

什么是tcp传输的粘包和拆包

所谓以太网数据帧,即链路层传输的数据包。以太网数据帧的数据长度被限制在46-1500字节,这1500字节被称为链路层MTU。

这1500字节还包括了ip头(最少20字节)和tcp头(最少20字节),应用层的数据长度则最多为1460,实际为1400字节左右。

MSS最大段报文

TCP层的一个字段,指的是通过TCP,应用层一次所能传输的最大数据包。

如果应用层数据包超过MSS,就会把应用层数据包拆分,分成两个段来发送。

如果应用层数据包比较小,远小于MSS,应用层数据包就会发生粘包,多个数据包作为一个段来发送。

粘包和拆包

什么是tcp传输的粘包和拆包

所谓粘包和拆包的包,是对应用层数据包而言的。

正常情况下一个TCP包传输一个应用数据包。粘包时,两个或多个应用数据包被粘合在一起通过一个TCP传输。

而拆包情况下,会将一个应用数据包会被拆成两段或者多段分开传输,其他的一段可能会和其他应用数据包粘合。

所谓粘包,又分为发送方粘包和接收方的粘包。

发送方的粘包,应用层一次发送多个数据包,tcp会将多个数据包打包成一个tcp报文发送出去。

接收方的粘包,接受方未能及时将tcp接收缓存中的数据读出。

所谓拆包,即如果应用层一次发送的数据超过了一次tcp报文所能传输的最大值,tcp会将一个数据包拆分成多个最大长度的tcp报文分开传输。

粘包和拆包的解决方案

如果发生了粘包,则需要将粘在一起的包,拆开。

如果发生了拆包,则需要将被拆分的包,合并回来。

通常的做法,就是加一个数据头,数据头中保存实际数据的长度。

如果粘包,按照数据头中保存的长度读取即可。

如果是拆包,则需要等待下个数据包到来继续读取,直到读到完整的数据包为止。

到此,关于“什么是tcp传输的粘包和拆包”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


文章标题:什么是tcp传输的粘包和拆包
文章URL:http://hbruida.cn/article/gcdchj.html