1、什么是 tcp 粘包?
發送方發送的多個數據包,到接收方緩沖區首尾相連,粘成一包,被接收。
2、原因
TCP 協議默認使用 Nagle 算法可能會把多個數據包一次發送到接收方。
應用程讀取緩存中的數據包的速度小於接收數據包的速度,緩存中的多個數據包會被應用程序當成一個包一次讀取。
3、處理方法
發送方使用 TCP_NODELAY 選項來關閉 Nagle 算法
數據包增加開始符和結束,應用程序讀取、區分數據包。
在數據包的頭部定義整個數據包的長度,應用程序先讀取數據包的長度,然后讀取整個長度的包字節數據,保證讀取的是單個包且完整。
參考