Nagle算法
定义:任意时刻,最多只能有一个未被确认的小段(小于MSS尺寸的数据块)
作用:用于自动连接许多的小缓冲器消息,通过减少必须发送包的个数来增加网络软件系统的效率
优点:减少拥塞控制
可通过TCP_NODELAY选项禁止Nagle算法
粘包
什么是粘包
tcp粘包是指发送方发送的若干包数据到接收方接受时粘成一包,从接收缓冲去看,后一包数据的头紧接着前一包数据的尾。
产生粘包的原因
- 发送方原因:Nagle算法导致了发送方有可能出现粘包现象
- 接收方原因:当tcp接收分组的速度大于应用程序读分组的速度,多个包就会被存至缓存,应用程序读时,就会读到多个首尾相接粘到一起的包
什么时候需要处理粘包
多个分组毫不相干,甚至是并列的关系,这个时候需要处理粘包问题。
如何处理
- 发送方
通过TCP_NODELAY选项关闭Nagle算法 - 接收方
在应用层进行粘包处理 - 应用层处理
- 格式化数据:将每条数据带上固定的格式
- 发送长度:发送数据的时候,将数据的长度一并发送