01
TCP协议基础
TCP协议栈模型、三次握手与四次挥手、数据流特性、粘包根源
核心理论
02
粘包现象复现
编写TCP服务器/客户端,故意制造粘包,观察不完整/合并数据
实验TCP
03
粘包原因分析
Nagle算法、滑动窗口、MSS/MTU、缓冲区、send/recv时机
原理内核
04
拆包策略总览
固定长度、特殊分隔符、长度前缀(TLV)、自定义协议设计
概览策略
05
固定长度拆包
设计固定长度数据包,实现收发,分析带宽浪费与变长局限
实现简单
06
特殊分隔符拆包
使用换行符等作为包边界,处理粘包与半包
分隔符实战
07
长度前缀法(TLV)基础
Type-Length-Value格式,先发长度再发数据
TLV设计
08
TLV实现(一)
定义消息类型与长度字段,实现打包函数
编码函数
09
TLV实现(二)
解包函数,处理缓冲区粘包/半包,完整读取消息
解码缓冲区
10
自定义协议设计
结合业务设计应用层协议:登录、心跳、消息推送
协议业务
11
缓冲区设计
环形缓冲区(Ring Buffer)概念与实现,高效管理接收数据
性能环形
12
状态机拆包
有限状态机(FSM)处理复杂拆包逻辑,状态定义与转移
FSM高级
13
libevent库入门
事件循环、事件类型、基本使用流程
libevent入门
14
libevent实现拆包
读事件回调中实现拆包,处理非阻塞IO
事件非阻塞
15
libevent TLV实战
结合libevent与TLV协议,实现完整echo服务器
实战echo
16
libevent多客户端处理
管理多个连接,每个连接独立维护拆包状态
并发状态
17
libevent与线程池
拆包后业务逻辑交给线程池,避免阻塞事件循环
线程池性能
18
性能测试
使用iperf/自定义压测,测试不同拆包策略吞吐量与延迟
压测对比
19
内存管理
避免内存泄漏,使用内存池优化malloc/free
内存池优化
20
粘包与安全
防止恶意超大包,设置最大包长限制
安全防护
21
UDP与粘包
UDP无粘包原因、边界特性与数据报丢失处理
UDP对比
22
WebSocket协议
帧格式、掩码、分片重组,对比TCP粘包
WebSocket帧
23
HTTP/2与多路复用
帧、流、多路复用,解决队头阻塞
HTTP/2多路
24
QUIC协议简介
基于UDP可靠传输、0-RTT、无粘包问题
QUIC新秀
25
实战:聊天室(一)
设计聊天室协议:登录、发送消息、退出
实战设计
26
实战:聊天室(二)
服务器实现TLV拆包,管理用户与消息广播
服务器广播
27
实战:聊天室(三)
客户端实现,处理服务器推送,界面交互
客户端UI
28
实战:文件传输
大文件分片传输,处理粘包与重传
文件分片
29
调试与排查
tcpdump、Wireshark抓包分析粘包,定位问题
抓包调试
30
总结与最佳实践
回顾拆包策略适用场景,项目选型建议与避坑指南
总结选型