在網絡傳輸過程中粘包和半包中經常出現的現象。
在TCP傳輸中,客戶端發送消息時,實際上是將數據寫入TCP的緩存,此時數據的大小和緩存的大小就會造成粘包和半包的原因。
例如:
客戶端給服務端發送了兩條消息ABC
和DEF
,服務端這邊的接收會有多少種情況呢?有可能是一次性收到了所有的消息ABCDEF
,有可能是收到了三條消息AB
、CD
、EF
。
上面所說的一次性收到了所有的消息ABCDEF
,類似於粘包,收到三條消息的類似於半包
由此可見當數據超過TCP緩存容量時,這個數據會被拆分成多個包,通過socket多次發送到服務端,服務端每次從緩存中取數據 就會造成半包的問題。
當數據小於TCP容量時,TCP緩存中可以存放多個包,那個客戶端和服務端一次通信就可能傳遞多個包,這時候服務端就可能一次讀取多個包,產生粘包的問題