TCP粘包和拆包

  • 產生的原因
  1. 應用程序寫入數據的字節大小大於套接字發送緩衝區的大小

  2. 進行MSS大小的TCP分段。MSS是最大報文段長度的縮寫。MSS是TCP報文段中的數據字段的最大長度。數據字段加上TCP首部纔等於整個的TCP報文段。所以MSS並不是TCP報文段的最大長度,而是:MSS=TCP報文段長度-TCP首部長度

  3. 以太網的payload大於MTU進行IP分片。MTU指:一種通信協議的某一層上面所能通過的最大數據包大小。如果IP層有一個數據包要傳,而且數據的長度比鏈路層的MTU大,那麼IP層就會進行分片,把數據包分成託乾片,讓每一片都不超過MTU。注意,IP分片可以發生在原始發送端主機上,也可以發生在中間路由器上。

  • 解決策略
  1. 消息定長。例如100字節。

  2. 在包尾部增加回車或者空格符等特殊字符進行分割,典型的如FTP協議

  3. 將消息分爲消息頭和消息尾。

  4. 其它複雜的協議,如RTMP協議等。

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