日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TCP粘包和拆包原因

發布時間:2024/1/23 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TCP粘包和拆包原因 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近研究Netty網絡編程,以前項目中頁遇到過數據接收過程中數據質量太差問題,很可能是TCP傳輸過程中問題,特此記錄。

?

問題產生

一個完整的業務可能會被TCP拆分成多個包進行發送,也有可能把多個小的包封裝成一個大的數據包發送,這個就是TCP的拆包和封包問題。

下面可以看一張圖,是客戶端向服務端發送包:

1.第一種情況,Data1和Data2都分開發送到了Server端,沒有產生粘包和拆包的情況。

2.第二種情況,Data1和Data2數據粘在了一起,打成了一個大的包發送到Server端,這個情況就是粘包。

3.第三種情況,Data2被分離成Data2_1和Data2_2, 并且Data2_1在Data1之前到達了服務端,這種情況就產生了拆包。

由于網絡的復雜性,可能數據會被分離成N多個復雜的拆包/粘包的情況,所以在做TCP服務器的時候就需要首先解決拆包/粘包的問題。

?

TCP粘包和拆包產生的原因

1.應用程序寫入數據的字節大小大于套接字發送緩沖區的大小,啟用Nagle算法對較小的數據包進行合并。

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

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

?

TCP粘包和拆包的解決策略

1.消息定長。例如100字節。

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

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

4.其他復雜的協議,如RTMP協議等。

?

總結

以上是生活随笔為你收集整理的TCP粘包和拆包原因的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。