TCP粘包和拆包的講解

TCP粘包和拆包

TCP是個流協議,就是沒有界限的一串數據。TCP底層並不瞭解上層業務數據的具體含義,它會根據TCP緩衝區的實際情況進行包的劃分,所以在業務上認爲一個完整的包可能會被TCP拆分爲多個包進行發送,也有可能把多個小的包封裝成一個大的數據包發送,這就是TCP粘包和拆包。

由於服務端一次讀取到的字節數是不確定的分爲以下四種情況:

(1)服務端分兩次讀取到了兩個獨立的數據包,分別是D1和D2,,沒有粘包和拆包

(2)服務端一次接收到了兩個數據包D1和D2粘合在一起,被稱爲TCP粘包

(3)服務端分兩次讀取到了兩個數據包,第一次讀取到完整的D1包和D2的部分,第二次讀取到了D2的剩餘內容這被稱爲拆包

(4)服務端分兩次讀取到了兩個數據包,第一次讀取到了D1的部分內容,第二次讀取到了D1的剩餘包內容和D2包的完整包。

(5)服務端TCP接收窗口比較小,D1和D2比較大,很可能發生多次的拆包和粘包

 

 

NIO解決粘包問題的代碼具體實現以及詳細註釋URL:

https://blog.csdn.net/wildwolf_001/article/details/81136981

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章