知识卡片

粘包半包的TCP字节流本质

专业/工作 · 1303

内容

Netty以ByteBuf为单位收发数据,但TCP层只认字节流,不保留应用层消息边界。连续写入的多个包,到接收端可能被合并成大包(粘包),也可能被截断成不完整半包,因应用层节奏和底层缓冲区、网卡传输拆分节奏不一致。必须在自定义协议里显式标记消息边界(如长度域),接收端据此重组出完整数据包,这个过程叫拆包。发散:粘包不是bug,而是TCP面向字节流本质决定的必然现象,应用层协议都得自己解决消息定界。

参考来源

《跟闪电侠学Netty:Netty即时聊天实战与底层原理》第13章《拆包/粘包理论与解决方案》