TCP粘包是怎麼產生的

  • 發送方產生粘包

採用 TCP 協議傳輸數據的客戶端與服務器經常是保持一個長連接的狀態(一次連接發一次數據不存在粘包),雙方在連接不斷開的情況下,可以一直傳輸數據。但當發送的數據包過於的小時,那麼 TCP 協議默認的會啓用 Nagle 算法,將這些較小的數據包進行合併發送(緩衝區數據發送是一個堆壓的過程);這個合併過程就是在發送緩衝區中進行的,也就是說數據發送出來它已經是粘包的狀態了。

  • 接收方產生粘包

接收方採用 TCP 協議接收數據時的過程是這樣的:數據到接收方,從網絡模型的下方傳遞至傳輸層,傳輸層的 TCP 協議處理是將其放置接收緩衝區,然後由應用層來主動獲取(C 語言用 recv、read 等函數);這時會出現一個問題,就是我們在程序中調用的讀取數據函數不能及時的把緩衝區中的數據拿出來,而下一個數據又到來並有一部分放入的緩衝區末尾,等我們讀取數據時就是一個粘包。(放數據的速度 > 應用層拿數據速度)

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