可以参考原帖:https://blog.csdn.net/u010643777/article/details/79503343
以下是问题描述,以及自己的理解,依据的链接也会提供出来:
问题描述:
有个问题,困扰我很久,在tcp传输中,应用层的数据大于MTU,则TCP需要进行分段传输,假设一段应用层数据恰好需要两个tcp报文传输。那么,我的问题是,接收端是如何将数据提交给应用层?
我的困惑是,tcp是如何在接收到这两个数据包,获知这段发送端的数据已经传输完成,该提交给上层,而不是需要等待第三个包?为什么问这个问题,看了sctp协议,其中就有字段标志数据的开始与结束。但
是TCP协议里面没有这样的字段。若没有这样的信息,显然接收端应用程序在处理数据的时候,会出现边界模糊的现象,就是数据粘包。
个人理解:
TCP是字节流,应用层从TCP缓冲区一直读数据,其实TCP层并不知道应该读到哪里停,但是应用层知道,消息定义的结构体有消息头、消息长度等。
应用程序根据消息头,开始读,读取消息长度的数据停止,这就是完整的一个消息包读取结束。
参考资料:
https://stackoverflow.com/questions/14834602/netty-does-it-need-to-care-tcp-segments-reassembly
https://www.cnblogs.com/alifpga/p/7675850.html
https://www.cnblogs.com/workharder/p/12325908.html