TCP黏包問題
阿新 • • 發佈:2018-12-11
現在需要的是找到系統的介紹該問題的資料。
曾經處理過的黏包的情況:
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