TCP粘包/拆包发生的原因

从层次上看数据的流动

TCP粘包/拆包发生的原因_第1张图片

名词与简写

MSS[RFC879]:Maximum Segment Size,最大报文段大小。运输层TCP协议的一个选项。不包含TCP首部
MTU:Maximum Transfer Unit,数据链路层规定所能传送的帧的数据部分长度上限,最大传输单元。数据链路层的协议数据单元为帧,如下图,MTU不包含首部与尾部
TCP粘包/拆包发生的原因_第2张图片
socket:套接字,根据RFC793的定义:端口号拼接到(concatenated with)IP地址即构成了套接字。

套接字 soket=(IP地址:端口号)

payload:有效荷载,可以理解为实际数据

TCP拆包发生的原因

  1. 应用程序write写入的字节大小大于套接口发送缓冲区大小
  2. 进行MSS大小的TCP分段
  3. 以太网帧的payload大于MTU进行IP分片

TCP粘包/拆包发生的原因_第3张图片

参考

  1. 《计算机网络(第7版)》-谢希仁
  2. 《Netty权威指南(第2版)》-李林锋

你可能感兴趣的:(网络基础)