1. 问题描述
TCP客户端每100ms发送一次数据,每次为16006字节的数据长度。由于TCP传输数据时,为了达到最佳传输效能,数据包的最大长度需要由MSS限定(MSS就是TCP数据包每次能够传输的最大数据分段),超过这个长度会进行自动拆包。也就是说虽然客户端一次发送16006字节数据,但是实际TCP传输时会将16006字节划分为若干小包。我使用wireshark软件抓包时可以看到,数据被拆分成长度为1440的数据包(不满1440则单独发送)。
2. TCP拆包和黏包现象
我们来看一下数据经过TCP传输时可能出现的几种情况:
接收端正常收到两个数据包,即没有发生拆包和粘包的现象。
接收端只收到一个数据包,由于TCP是不会出现丢包的,所以这一个数据包中包含了发送端发送的两个数据包的信息,这种现象即为粘包。这种情况由于接收端不知道这两个数据包的界限,所以对于接收端来说很难处理。