tcp黏包是指發送方發送的若干包資料到達接收方時黏成了一包,從接收緩衝區來看,後一包資料的頭緊接著前一包資料的尾,出現黏包的原因是多方面的,可能是來自發送方,也可能是來自接收方。
1、什麼是TCP黏包問題?
TCP黏包就是指發送方發送的若干包資料到達接收方時黏成了一包,從接收緩衝區來看,後一包資料的頭緊接著前一包數據的尾,出現黏包的原因是多方面的,可能是來自發送方,也可能是來自接收方。
相關學習推薦:PHP 編程從入門到精通
2、造成TCP黏包的原因
(1)發送方原因
TCP預設使用Nagle演算法(主要作用:減少網路中報文段的數量),而Nagle演算法主要做兩件事:
a:只有上一個分組得到確認,才會發送下一個分組
b:收集多個小分組,在一個確認到來時一起發送
Nagle演算法造成了發送方可能會出現黏包問題
(2)接收方原因
TCP接收到封包時,並不會馬上交到應用層處理,或是應用層並不會立即處理。實際上,TCP將接收到的資料包保存在接收快取裡,然後應用程式主動從快取讀取收到的分組。這樣一來,如果TCP接收資料包到快取的速度大於應用程式從快取中讀取資料包的速度,多個包就會被緩存,應用程式就有可能讀取到多個首尾相接黏在一起的包。
3、什麼時候需要處理黏包現象?
a:如果發送方發送的多組資料本來就是同一塊資料的不同部分,比如說一個檔案被分成多個部分發送,這時當然不需要處理黏包現象
b:如果多個分組毫不相干,甚至是並列關係,那麼這個時候就一定要處理黏包現象了
以上是tcp黏包是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!