TCP分段后,如果确定最后一个包?

可以参考原帖: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

 

 

posted @ 2020-02-13 18:36  菜鸡徐思  阅读(1644)  评论(0编辑  收藏  举报