TCP粘包与拆包之一

TCP粘包/拆包

什么是TCP粘包/拆包问题
TCP以流方式传输,是没有界限的一串数据,并无消息边界。
- TCP传输数据时,会根据底层的TCP缓存区实际状况进行数据包划分:
- 1.业务上定义的完整数据(比方说一个完整的json串),可能会被TCP拆分红多个数据包进行发送(拆包)。
- 2.业务上特殊含义的独立数据,也有可能由于大小或者缓冲区缘由,被TCP封装成一个大数据包发送(粘包)。
经过一个图来理解

image

经过图咱们能够发现,数据包接收有不少状况:
一、没有粘包拆包,终端2收到了完整的数据包A和数据包B。
二、终端2一次性读取到数据包A和数据包B,这就是粘包。
三、终端2读取到完整的数据包A和部分数据包B1,第二次才读取到数据包B剩余部分(数据包B2),这就是拆包。
四、相似第三点,数据包A也有可能分红两部分(A一、A2), 被先后读取。
五、假设数据包很大,那么可能产生屡次拆包,如数据包A分N次被读取。
相关文章
相关标签/搜索