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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM