TCP的粘包和分包

来源:互联网 发布:mysql数据库基本语句 编辑:程序博客网 时间:2024/06/09 19:09

一、TCP协议的简介

TCP是一个面向连接的传输层协议,TCP 的目的是为了用户提供可靠的端到端的连接,保证数据传输无误。

二、粘包问题分析

在使用TCP协议的时候,在客户端一起发送若干的数据包到接收方时,当时接收给回的响应并不是对每一个数据包,而是对最新的数据包做出了响应。这个问题一直困扰我,后来问人,他说有可能是TCP粘包的问题,然后我就在上网查了TCP的粘包问题。
TCP粘包–发送方发送若干包数据到接收方接收时粘成一包从缓冲区看,后一包数据的头紧接着前一包数据的尾。
粘包的原因:它既可以由发送方造成,也可以由接收方造成。发送方引起的粘包是由TCP协议本身造成的。若连续几次发送的数据都很少,通常TCP会根据优化算法把这些数据合成一个包后一次发送出去,这样接收方就收到了粘包的数据。接收方引起的粘包是由于接收方用户进程不及时接收数据,从而造成了粘包现象。这是因为接收方先把数据放到缓冲区里,用户进程从该缓冲区取数据,若下一个数据包来到时还没有取走,下一次取数据的时就会出现一次取多个数据包的情况。

三、解决方法

接收方创建预处理线程,对接收的数据包进行预处理,将粘包分开

0 0