1. 程式人生 > >TCP黏包問題

TCP黏包問題

現在需要的是找到系統的介紹該問題的資料。

曾經處理過的黏包的情況:

1)server每次傳送固定長度的資料幀,不停地傳送給client。鑑tcp 通訊的可靠性,可以僅僅依靠資料幀的長度來進行分包,黏包的處理。server傳送的是狀態資訊,如果同時收到多幀資料可以僅僅cut最後一幀。

收到0.3幀時,直接放在快取裡面,等待收到新的資料幀後將新收到的與快取裡面的粘結起來進行判斷,判斷是否構成了一幀資料長度。。。。

2)server每次傳送的資料幀是變長的,但是每幀資料都有長度資訊,即TLV格式,也使用了快取ringbuffer。但是有一個問題:如果ringbuffer對應的快取不是很大,有1000個數據幀黏到一塊同時發過來,那麼就會出現資料丟失。--可能這種情況很少會發生,可以發生時報錯,就像下面文章寫的:

https://blog.csdn.net/lqhed/article/details/51946224  --- 有句話:特殊情況下,如果處理包速度太慢,或者接收太快,可能導致未處理包占用大部分緩衝區,沒有足夠的緩衝區分配給新的接收操作,如圖4。這時候直接報告錯誤即可

 

Ref:

https://www.cnblogs.com/kakawith/p/8378425.html

https://blog.csdn.net/hherima/article/details/42921149?utm_source=blogxgwz0

RingBuffer方法:

https://blog.csdn.net/yusiguyuan/article/details/18368457