首頁 >常見問題 >tcp黏包是什麼?

tcp黏包是什麼?

coldplay.xixi
coldplay.xixi原創
2020-06-28 13:12:124707瀏覽

tcp黏包是指發送方發送的若干包資料到達接收方時黏成了一包,從接收緩衝區來看,後一包資料的頭緊接著前一包資料的尾,出現黏包的原因是多方面的,可能是來自發送方,也可能是來自接收方。

tcp黏包是什麼?

1、什麼是TCP黏包問題?

TCP黏包就是指發送方發送的若干包資料到達接收方時黏成了一包,從接收緩衝區來看,後一包資料的頭緊接著前一包數據的尾,出現黏包的原因是多方面的,可能是來自發送方,也可能是來自接收方。

相關學習推薦:PHP 編程從入門到精通

2、造成TCP黏包的原因

(1)發送方原因

TCP預設使用Nagle演算法(主要作用:減少網路中報文段的數量),而Nagle演算法主要做兩件事:

a:只有上一個分組得到確認,才會發送下一個分組

b:收集多個小分組,在一個確認到來時一起發送

Nagle演算法造成了發送方可能會出現黏包問題

(2)接收方原因

TCP接收到封包時,並不會馬上交到應用層處理,或是應用層並不會立即處理。實際上,TCP將接收到的資料包保存在接收快取裡,然後應用程式主動從快取讀取收到的分組。這樣一來,如果TCP接收資料包到快取的速度大於應用程式從快取中讀取資料包的速度,多個包就會被緩存,應用程式就有可能讀取到多個首尾相接黏在一起的包。

3、什麼時候需要處理黏包現象?

a:如果發送方發送的多組資料本來就是同一塊資料的不同部分,比如說一個檔案被分成多個部分發送,這時當然不需要處理黏包現象

b:如果多個分組毫不相干,甚至是並列關係,那麼這個時候就一定要處理黏包現象了

以上是tcp黏包是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn