流式套接字 首先說說TCP爲何叫流式套接字,顧名思義,是指TCP的數據傳輸跟流動的水同樣,你們能夠想象一下,水是連成一片的,它是沒有分界線的,而TCP數據傳輸也是同樣的,是沒有界限的;緩存
緩存機制 熟悉TCP協議的人都應該知道,TCP發送數據,並非應用程序send之後就發出去了,它是先存儲在發送緩衝區的,爲了性能考慮,可能會等到多個數據包彙總到一塊兒後,操做系統底層再把緩衝區總體發送出去,接收數據也是同樣。網絡
最大傳輸單元 在網絡傳輸中,有個MTU-最大傳輸單元,是1500個字節,就是說每一次發送最多隻能發送1500個字節,若是要發送超過這個長度的數據包,就須要分包發送。性能
當出現以上三點的狀況時,接收端接收到的數據和發送的數據包大小、次數可能都不一致,咱們沒辦法肯定發送端發送過來的一個完整包是怎樣的,就沒辦法正確得到咱們須要的數據, 這就是粘包現象。 其實就是說,應用進程並不知道一個完整的數據包究竟是多大,無法進行解析,客戶端和服務端須要有一個約定的規則,來確保不出現粘包。操作系統
有如下三種狀況能夠解決粘包現象:進程