1、什么是 tcp 粘包?
发送方发送的多个数据包,到接收方缓冲区首尾相连,粘成一包,被接收 。
2、原因
【tcp粘包问题】
发送端需要等缓冲区满才发送 。如 TCP 协议默认使用 Nagle 算法可能会把多个数据包一次发送到接收方 。
接收方不及时接收缓冲区的包,造成多个包接收 。如应用程读取缓存中的数据包的速度小于接收数据包的速度,缓存中的多个数据包会被应用程序当成一个包一次读取 。
3、处理方法
发送方使用 TCP_NODELAY 选项来关闭 Nagle 算法 。
数据包增加开始符和结束,应用程序读取、区分数据包 。
在数据包的头部定义整个数据包的长度,应用程序先读取数据包的长度,然后读取整个长度的包字节数据,保证读取的是单个包且完整 。
推荐阅读
- 图解TCP、UDP,流量控制,拥塞控制,一次看懂
- 好学什么什么成语大全四个字,好学啥啥成语-
- 微软|管住手!微软确认Windows 10最新更新有问题:Wi-Fi没法用
- 东京到大阪夜行巴士会很累吗,东京到大阪夜行巴士行李问题-
- 北宋最惨的公主,宋朝死的最惨的公主-
- 有什么套路男朋友的问题,撩男朋友坏坏的话-
- 婚姻需要门当户对问题,强调门当户对其实是强调婚姻的选择中的什么-
- 上班第一天要注意什么问题,第一天上班要注意啥-
- 汉为何分为东汉和西汉,汉朝为何分为西汉和东汉-
- 任天堂|任天堂被要求展开独立调查!Switch的这问题已经持续了5年依然存在
