查漏补缺:socket编程:TCP粘包问题和常用解决方案(上)

  1、TCP粘包问题的产生(发送端)

  由于TCP协议是基于字节流并且无边界的传输协议,因此很容易产生粘包问题。TCP的粘包可能发生在发送端,也可能发生在接收端。发送端的粘包是TCP协议本身引起的,TCP为了提高传输效率,发送方经常要收集到足够多的数据后才发送一个TCP段;若连续多次需要send()的数据都很少,此时TCP会根据优化算法将这些数据整合成一个TCP段后在发送,但接收方并不知道要一次接收多少字节的数据,此时就产生发送端的TCP粘包,具体图示如下:

  2、粘包问题产生的原因

  (1)套接字本身有缓冲区大小的限制(发送缓冲区、接收缓冲区)

  (2)TCP传送的端MSS大小有限制

  (3)链路层也有MTU大小限制,如果数据包大小>MTU,在IP层进行分片,导致数据分割

  (4)TCP的流量控制和拥塞控制,也可导致粘包

  (5)TCP延迟确认机制

  3、解决方案

  (1)定长包

  (2)包尾加\r\n

  (3)报文长度+报文内容,自定义包结构

  (4)复杂的应用层协议

 

posted @   落雷  阅读(248)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示