Network

TCP拆包与粘包:从字节流特性到应用层协议设计

“TCP is a stream-oriented protocol, not a message-oriented protocol.”

在实现 RPC 协议或处理网络通信时,我们常听到的术语就是“拆包”(Packet Splitting)和“粘包”(Packet Aggregation)。这两个现象往往让初学者困惑:明明我发送的是两条独立的消息,为什么接收端收到的是一坨混乱的数据?或者为什么我发了一个大包,对面却分了几次才收全?

本文将探究这背后的底层机制,并演示应用层协议如何设计来屏蔽这些底层细节。

背景知识:MTU 与 MSS #

要理解拆包和粘包,首先需要理解网络传输中的两个关键限制:MTUMSS

MTU(Maximum Transmission Unit) #

The maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single network layer transaction. —— from Wiki

简单来说,MTU 是数据链路层(如以太网)对上层(通常是 IP 层)载荷的最大限制。 一般来说,以太网的 MTU = 1500 bytes

如果 (IP Header + Transport Header + Data) > MTU,那么 IP 层就必须进行分片(Fragmentation)。

...

访问量 访客数