1. 粘包是什么
粘包和TCP其实没有关系,因为TCP是基于字节流的。粘包应该说是应用层的程序没有处理好数据包的分隔。
2. 为什么会出现粘包
多次send只有一次recv
3. 怎么解决TCP粘包
TCP是基于字节流而不是消息包的协议,它自己说的清清楚楚:我会把你的数据变成字节流发到对面去,而且保证顺序不会乱,但是你要自己搞定字节流解析。因此解决TCP粘包问题就是如何设计应用层协议的问题
send与recv不是一一对应的,send和recv是有返回值的。
- 包头 + 包体格式
- 固定包长的数据包
- 以指定字符(串)为包的结束标志
Nagle算法
用于自动连接许多的小缓冲器消息;这一过程(称为nagling)通过减少必须发送包的个数来增加网络软件系统的效率。