在网络传输过程中粘包和半包中经常出现的现象。
在TCP传输中,客户端发送消息时,实际上是将数据写入TCP的缓存,此时数据的大小和缓存的大小就会造成粘包和半包的原因。
例如:
客户端给服务端发送了两条消息ABC
和DEF
,服务端这边的接收会有多少种情况呢?有可能是一次性收到了所有的消息ABCDEF
,有可能是收到了三条消息AB
、CD
、EF
。
上面所说的一次性收到了所有的消息ABCDEF
,类似于粘包,收到三条消息的类似于半包
由此可见当数据超过TCP缓存容量时,这个数据会被拆分成多个包,通过socket多次发送到服务端,服务端每次从缓存中取数据 就会造成半包的问题。
当数据小于TCP容量时,TCP缓存中可以存放多个包,那个客户端和服务端一次通信就可能传递多个包,这时候服务端就可能一次读取多个包,产生粘包的问题