- 产生的原因
-
应用程序写入数据的字节大小大于套接字发送缓冲区的大小
-
进行MSS大小的TCP分段。MSS是最大报文段长度的缩写。MSS是TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段。所以MSS并不是TCP报文段的最大长度,而是:MSS=TCP报文段长度-TCP首部长度
-
以太网的payload大于MTU进行IP分片。MTU指:一种通信协议的某一层上面所能通过的最大数据包大小。如果IP层有一个数据包要传,而且数据的长度比链路层的MTU大,那么IP层就会进行分片,把数据包分成托干片,让每一片都不超过MTU。注意,IP分片可以发生在原始发送端主机上,也可以发生在中间路由器上。
- 解决策略
-
消息定长。例如100字节。
-
在包尾部增加回车或者空格符等特殊字符进行分割,典型的如FTP协议
-
将消息分为消息头和消息尾。
-
其它复杂的协议,如RTMP协议等。