网站建设 石景山,滁州seo优化,整站seo服务,ui网页设计课程总结TCP/IP的分包粘包 分包粘包介绍导致分包粘包的原因导致TCP粘包的原因#xff1a;导致TCP分包的原因#xff1a;避免分包粘包的措施 分包粘包介绍
因为TCP为了减少额外开销#xff0c;采取的是流式传输#xff0c;所以接收端在一次接收的时候有可能一次接收多个包。而TCP粘… TCP/IP的分包粘包 分包粘包介绍导致分包粘包的原因导致TCP粘包的原因导致TCP分包的原因避免分包粘包的措施 分包粘包介绍
因为TCP为了减少额外开销采取的是流式传输所以接收端在一次接收的时候有可能一次接收多个包。而TCP粘包就是发送方的若干个数据包到达接收方的时候粘成了一个包。多个包首尾相接无法区分。当然还有可能是分包情况同一个包两次才能接收到。
导致分包粘包的原因
导致TCP粘包的原因
发送端等待缓冲区满才进行发送造成粘包接收方来不及接收缓冲区内的数据造成粘包由于TCP协议在发送较小的数据包的时候会将几个包合成一个包后发送
导致TCP分包的原因
数据帧的有效载荷(payload)比以太网的最大传输单元MTU大的时候进行了IP分片TCP协议定义有一个选项叫做最大报文段长度MSSMaximum Segment Size该选项用于在TCP连接建立时收发双方协商通信时每一个报文段所能承载的最大数据长度。但是在复杂的网络环境下确定这个长度值非常困难那么在这样的情况下在传输过程中产生分包粘包就很常见了数据发送端发送的数据包太大导致发送一个完整的数据包被分几次发送给缓存buffer然而缓冲buffer等到数据满了以后会自动把数据发送的数据链路层去这样就导致分包了
避免分包粘包的措施
在消息的尾部加一些特殊字符那么在读取数据的时候只要读到这个特殊字符就认为已经可以截取一个完整的数据包了这种情况在一定的业务情况下实用。读取缓存的数据是不定长的所以我们把读取到的数据添加到我们自己的一个byte[]数组中然后根据我们的业务逻辑来找到指定的特殊协议头部协议长度协议尾部然后从我们的byte[]中获取一个完整的数据包然后再对数据包进行业务解析就可以得到正确结果。