socket中的粘包理解

2022-05-06 01:54:07 字數 772 閱讀 1199

粘包問題:

傳送端傳送資料,接收端不知道應該如何接收而造成的一種資料混亂的現象

只有tcp協議才會傳送粘包(資料鏈路層),udp(傳輸層)不會發生

udp不會發生粘包,udp協議本層對一次收發資料大小的限制是:

65535 - ip包頭(20) - udp包頭(8) = 65507針對 使用udp協議傳送資料,一次收發大小究竟多少合適?

站在資料鏈路層,因為網絡卡的mtu一般被限制在了1500,所以對於資料鏈路層來說,一次收發資料的大小被限制在 1500 - ip包頭(20) - udp包頭(8) = 1472得到結論:

如果sendto(num)

num > 65507報錯

1472 < num < 65507會在資料鏈路層拆包,而udp本身就是不可靠協議,所以一旦拆包之後,造成的多個小資料報在網路傳輸中,如果丟任何乙個,那麼此次資料傳輸失敗

num

< 1472是比較理想的狀態

(結合理解)

1.在tcp協議中,有乙個合包機制(nagle演算法),將多次連續傳送且間隔較小的資料,進行打包成一塊資料傳送.

2.還有乙個機制是拆包機制,在傳送端,因為受到網絡卡的mtu限制(資料鏈路層->網絡卡),會將大的超過mtu限制的資料,進行拆分,拆分成多個小的資料,進行傳輸.

當傳輸到目標主機的作業系統層時,會重新將多個小的資料合併成原本的資料

Socket粘包問題

這兩天看csdn有一些關於socket粘包,socket緩衝區設定的問題,發現自己不是很清楚,所以查資料了解記錄一下 一兩個簡單概念長連線與短連線 1.長連線 client方與server方先建立通訊連線,連線建立後不斷開,然後再進行報文傳送和接收。2.短連線 client方與server每進行一次...

Socket粘包問題

這兩天看csdn有一些關於socket粘包,socket緩衝區設定的問題,發現自己不是很清楚,所以查資料了解記錄一下 一兩個簡單概念長連線與短連線 1.長連線 client方與server方先建立通訊連線,連線建立後不斷開,然後再進行報文傳送和接收。2.短連線 client方與server每進行一次...

socket粘包問題

一兩個簡單概念長連線與短連線 1.長連線 client方與server方先建立通訊連線,連線建立後不斷開,然後再進行報文傳送和接收。2.短連線 client方與server每進行一次報文收發交易時才進行通訊連線,交易完畢後立即斷開連線。此種方式常用於一點對多點 通訊,比如多個client連線乙個se...