粘包指的是資料與資料之間沒有明確的分界線,導致不能正確讀取
應用程式無法直接操作硬體,應用程式想要傳送資料則必須將資料交給作業系統,而作業系統需要同時為所有應用程式提供資料傳輸服務,也就意味著,作業系統不可能立馬就能將應用程式的資料傳送出去,就需要為應用程式提供乙個緩衝區,用於臨時存放資料,具體流程如下
傳送方當應用程式呼叫send函式時,應用程式會將資料從應用程式拷貝到作業系統快取,再由作業系統從緩衝區讀取資料並傳送出去。
接收方對方計算機收到資料也是作業系統先收到,至於應用程式何時處理這些資料,作業系統並不清楚,所以同樣需要將資料先儲存到作業系統的緩衝區中,當應用程式呼叫recv時,實際上是從作業系統緩衝區中將資料拷貝到應用程式的過程。
上述過程對於tcp與udp都是相同的不同之處在於;
udp在收發資料時是基於資料報的,即乙個包乙個包的傳送,包與包之間有著明確的分界,到達對方作業系統緩衝區後也是乙個乙個獨立的資料報,接收方從作業系統緩衝區將資料拷貝到應用程式
如何解決粘包問題
解決粘包的核心思路就是 先通知接收方 要傳送資料的長度
再傳送真實資料
問題在於 資料長度也是不確定的
對方也不清楚 長度資訊到底是幾個位元組
解決方案是 把長度資訊轉換為乙個固定的位元組的二進位制資料(要用到struct模組)
tcp粘包問題
什麼是粘包問題 粘包問題的起因是socket的快取機制。簡而言之 粘包問題就是如何將連續的資料按照不同的資料幀截斷,以及如何處理殘包情況。分割資料需要按需分配。處理殘包也很簡單 等 等它發來下一包資料,不管他發來多少資料,先拿來512,接到上次那512後面。湊成完整的資料幀。當然也有可能你發現這次來...
TCP粘包問題
原因 tcp提供的是一種位元組流服務,沒有訊息保護邊界。傳送端需要等緩衝區滿才傳送出去,造成粘包 接收方不及時接收緩衝區的包,造成多個包接收 解決方法 一是對於傳送方引起的粘包現象,使用者可通過程式設計設定來避免,tcp提供了強制資料立即傳送的操作指令push,tcp軟體收到該操作指令後,就立即將本...
TCP粘包問題
tcp粘包是指傳送方傳送的若干包資料到接收方接收時粘成一包,從接收緩衝區看,後一包資料的頭緊接著前一包資料的尾。出現粘包現象的原因是多方面的,它既可能由傳送方造成,也可能由接收方造成。傳送方引起的粘包是由tcp協議本身造成的,tcp為提高傳輸效率,傳送方往往要收集到足夠多的資料後才傳送一包資料。若連...