首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
TCP-IP协议与粘包
📅 2026/10/30 4:50:00
✍️ 爱科研究院
👁 阅读 3,247
一、TCP/IP协议数据封装过程TCP首部、IP首部二、TCP 粘包TCP 是面向字节流协议没有消息边界UDP 面向报文不存在粘包粘包产生原因TCP 无消息边界 缓冲区缓存 Nagle 攒包 IP 分片1.TCP 本身特性面向字节流 收发缓冲区TCP 不保留应用层消息边界数据只是一串连续字节内核有发送缓冲区、接收缓冲区数据先放缓冲区不是调用一次 send 就立刻发一个独立包。2.发送方Nagle 算法重点Nagle 会把多次小数据攒起来合并成一个大报文段一起发送减少小包数量提升网络效率 → 多条消息粘在一起(粘包)。3.接收方缓冲区读取接收端内核收到数据放接收缓冲区应用程序 recv 一次读的字节数不确定一次读可能把多条消息一起读出来。4.网络链路IP 分片数据包太大超过 MTU网络层会分片传输一条消息被拆成多片也就是拆包。粘包解决方法1.固定长度每次消息大小固定接收方每次固定读对应长度。缺点浪费流量短消息也要补齐到固定大小。2.特殊分隔符分隔符法消息末尾加特殊标记比如\n、\r\n接收方读到分隔符代表一条消息结束。缺点消息内容里面不能出现这个分隔符否则解析错乱。3.消息头 消息体头部固定字节存放消息体长度比如前 4 字节表示后面数据有多长后面跟着真实消息内容流程先读头部拿到长度 → 再根据长度读取对应字节的消息体。优点灵活、稳定项目最常用。4.关闭 Nagle 算法不推荐单独用来解决粘包setsockopt设置 TCP_NODELAY关闭 Nagle有数据立刻发。注意关闭 Nagle 不能根治粘包只是减少攒包缓冲区依然会带来粘包一般配合上面方案一起使用1.粘包是 TCP字节流特性自带的正常现象TCP 只管可靠传输字节不区分应用消息必须应用层自己做消息边界2.UDP 不会粘包UDP 面向报文一次 sendto 对应一个报文内核保留报文边界3.粘包、拆包本质是同一个问题应用层分不清消息起点终点
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/30 4:50:00
中文招牌不再写成鬼画符:Qwen-Image-2.1 正面硬刚 GPT-Image,赢在哪、输在哪
2026/10/30 4:50:00
同步时钟系统实施要点梳理:多授时方式选型、POE 组网与统一管理
2026/10/30 4:50:00
MySQL大表DELETE太慢?undo、锁与binlog的连锁反应
2026/10/30 12:06:24
CH340、CP2102、FT232实战选型对照:工业级USB转串口芯片避坑指南
2026/10/30 12:06:24
B站会员购抢票脚本拆解:接口调用、验证码预演与GUI工具开发
2026/10/30 12:06:24
开源扫地机器人:全栈机器人工程的实践课堂
2026/10/30 12:06:24
效率工具软件选型与自动化指南:从工具收集到流程自动化
2026/10/30 12:06:24
用户脚本自动填问卷:DOM事件模拟与受控组件赋值实践
2026/10/30 12:01:20
Qt QWidget自研滚动选择器:无QML实现iOS风格Picker
2026/10/30 0:03:44
OpenShell 完全定制指南:从安装到深度配置,打造高效 Windows 开始菜单
2026/10/30 0:03:44
Superpowers技能体系全解析:从Skills引入到安装的完整指南
2026/10/30 0:03:44
TensorFlow实现Weibull生存模型预测债券违约概率
2026/10/29 21:03:42
全国计算机二级C语言真题PDF高效刷题指南
2026/10/29 21:03:35
requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南
2026/10/29 21:03:28
递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现
2026/10/30 3:44:27
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/30 3:44:25
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/30 3:44:29
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)