TCP協議中粘包現象

2022-09-02 14:39:10 字數 1106 閱讀 4184

在tcp協議網路傳輸中,才會出現粘包,udp協議不會出現.

tcp的協議資料不會丟,沒有收完包,會繼續上次繼續接收,總是在收到ack時才會清除緩衝區內容。資料是可靠的,但是就會粘包。

因為資料傳送和接收過程先經過緩衝區,由於資料大小以及網路原因,導致收發資訊不能嚴格同步,造成資料粘連的現象叫做粘包

粘包有兩種形式:

1.客戶端send()傳送了一段資料,服務端只recv()收取了一小部分,下次再收的時候還是從緩衝區拿上次遺留的資料,產生粘包.

2.傳送端傳送資料時間間隔很短,資料也很小,會合到一起,產生粘包.

1

import

socket

2 sk =socket.socket()

3 sk.bind(("

127.0.0.1

", 10096))

4 sk.listen(1)

5 s, k =sk.accept()

6 n = s.recv(1)

7print

(n)8 n1 = s.recv(3)

9print

(n1)

10 s.send(b'w'

)11 s.send(b'w'

)12 s.send(b'w'

)13 s.send(b'

w')

服務端

1

import

socket

2 sk =socket.socket()

3 sk.connect(("

127.0.0.1

", 10096))

4 sk.send(b"1"

)5 sk.send(b"1"

)6 sk.send(b"1"

)7 a = sk.recv(10)

8print(a)

客戶端服務端輸出結果:

b'1'

b'11'

或者b'1'

b'1'

客戶端輸出結果:

b'w'

或者b'wwww'

tcp粘包現象

二 什麼時候需要考慮粘包問題?1 如果利用tcp每次傳送資料,就與對方建立連線,然後雙方傳送完一段資料後,就關閉連線,這樣就不會出現粘包問題 因為只有一種包結構,類似於http協議 關閉連線主要要雙方都傳送close連線 參考tcp關閉協議 如 a需要傳送一段字串給b,那麼a與b建立連線,然後傳送雙...

TCP的粘包現象

1 什麼是粘包現象 tcp粘包是指傳送方傳送的若干包資料到接收方接收時粘成一包,從接收緩衝區看,後一包資料的頭緊接著前一包資料的尾。2 為什麼出現粘包現象 1 傳送方原因 我們知道,tcp缺省會使用nagle演算法。而nagle演算法主要做兩件事 1 只有上乙個分組得到確認,才會傳送下乙個分組 2 ...

TCP的粘包現象

原文 看面經時,看到有面試官問tcp的粘包問題。想起來研一做購物車處理資料更新時遇到粘包問題,就總結一下吧。1 什麼是粘包現象 tcp粘包是指傳送方傳送的若干包資料到接收方接收時粘成一包,從接收緩衝區看,後一包資料的頭緊接著前一包資料的尾。2 為什麼出現粘包現象 1 傳送方原因 所以,正是nagle...