关于tcp分段重组的疑惑

 有个问题,困扰我很久,在tcp传输中,应用层的数据大于MTU,则TCP需要进行分段传输,假设一段应用层数据恰好需要两个tcp报文传输。那么,我的问题是,接收端是如何将数据提交给应用层?
 我的困惑是,tcp是如何在接收到这两个数据包,获知这段发送端的数据已经传输完成,该提交给上层,而不是需要等待第三个包?为什么问这个问题,看了sctp协议,其中就有字段标志数据的开始与结束[1]。但是TCP协议里面没有这样的字段。找了一些资料,这里说出了答案[2][3].
 TCP根本不进行数据的重组,它只是向上层提交有序的数据分段。这就是有些协议需要在应用层,定义数据报文的长度。若没有这样的信息,显然接收端应用程序在处理数据的时候,会出现边界模糊的现象,就是数据粘包。

[1]华为SCTP协议
[2]linux内核中,关于tcp分段和分段重组的代码?
[3]Netty : does it need to care TCP segments reassembly?

你可能感兴趣的:(计算机网络)