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