大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
什么是TCP粘包/拆包问题
白河网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设等网站项目制作,到程序开发,运营维护。成都创新互联公司从2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司。
TCP以流方式传输,是没有界限的一串数据,并没有消息边界。 - TCP传输数据时,会根据底层的TCP缓存区实际情况进行数据包划分: - 1.业务上定义的完整数据(比方说一个完整的json串),可能会被TCP拆分成多个数据包进行发送(拆包)。 - 2.业务上特殊含义的独立数据,也有可能因为大小或者缓冲区原因,被TCP封装成一个大数据包发送(粘包)。
通过一个图来理解
通过图我们可以发现,数据包接收有很多情况:
1、没有粘包拆包,终端2收到了完整的数据包A和数据包B。
2、终端2一次性读取到数据包A和数据包B,这就是粘包。
3、终端2读取到完整的数据包A和部分数据包B1,第二次才读取到数据包B剩余部分(数据包B2),这就是拆包。
4、类似第三点,数据包A也有可能分成两部分(A1、A2), 被前后读取。
5、假设数据包很大,那么可能产生多次拆包,如数据包A分N次被读取。