粘包分包現象及解決方案、編解碼器源碼分析

在這裏插入圖片描述
在這裏插入圖片描述
粘包分包原因(瞭解)
TCP當中,只有流的概念,沒有包的概念(根本原因)
粘包:
服務端原因
收到的數據放在系統接收緩衝區,用戶進程從該緩衝區取數據
客戶端原因
TCP爲提高傳輸效率,要收集到足夠多的數據後才發送一包數據

分包:
應用程序寫入的字節大小大於套接字發送緩衝區的大小
進行mss(最大報文長度)大小的TCP分段,當TCP報文長度-TCP頭部長度>MSS
以太網幀的payload(淨荷)大於MTU(1500字節)進行ip分片

粘包分包問題解決思路
服務端和客戶端約定好穩定的數據包結構
客戶端根據約定的數據包結構發送數據
服務端根據約定的數據包結構來讀取數據

自定義FrameDecoder解決粘包分包問題
繼承FrameDecoder類

Netty自帶粘包分包解決方案 FixedLengthFrameDecoder LineBasedFrameDecoder DelimiterBasedFrameDecoder