1. 粘包是什么

粘包和TCP其实没有关系,因为TCP是基于字节流的。粘包应该说是应用层的程序没有处理好数据包的分隔。

2. 为什么会出现粘包

多次send只有一次recv

3. 怎么解决TCP粘包

TCP是基于字节流而不是消息包的协议,它自己说的清清楚楚:我会把你的数据变成字节流发到对面去,而且保证顺序不会乱,但是你要自己搞定字节流解析。因此解决TCP粘包问题就是如何设计应用层协议的问题

send与recv不是一一对应的,send和recv是有返回值的。

  • 包头 + 包体格式
  • 固定包长的数据包
  • 以指定字符(串)为包的结束标志

Nagle算法

用于自动连接许多的小缓冲器消息;这一过程(称为nagling)通过减少必须发送包的个数来增加网络软件系统的效率。