温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-10-15 13:53:06 来源:亿速云 阅读:144 作者:iii 栏目:编程语言

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

以太网数据帧

什么是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传输的粘包和拆包”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

tcp
AI