一种确保TCP通信数据完整及正确的方法技术

技术编号:9599137 阅读:86 留言:0更新日期:2014-01-23 03:59
本发明专利技术一种确保TCP通信数据完整及正确的方法,包括:步骤1:根据实际情况定义TCP封包传输格式,TCP数据包由包头+数据长度+包序号+数据+数据效验码+包尾的先后顺序依次组成;步骤2:客户端或服务器再将要发送的数据按照步骤1的方式封装成完整数据包;步骤3:客户端或服务器在收到数据后根据封装格式进行数据完整性及正确性验证,并将当前包序号返回给发送端。

【技术实现步骤摘要】
一种确保TCP通信数据完整及正确的方法
本专利技术涉及TCP通信领域,尤其涉及一种能确保TCP通信数据完整及正确的方法。
技术介绍
采用TCP协议传输的客户端与服务器之间,在数据频繁交互的时候,由于TCP协议本身是一种流协议的,这就意味着数据是以字节流的形式传递给接收者的,没有固有的"报文"或"报文边界"的概念。在接收中可以得知总共要读取多少,但是不知道具体某一次读取多少。因此会出现多个包连接在一起,造成包不完整,从发送缓冲区看,发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾,从而形成了粘包现象。出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据。若连续几次发送的数据都很少,通常TCP会根据优化算法把这些数据合成一包后一次发送出去,这样接收方就收到了粘包数据。接收方引起的粘包是由于接收方用户进程不及时接收数据,从而导致粘包现象。这是因为接收方先把收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据,若下一包数据到达时前一包数据尚未被用户进程取走,则下一包数据放到系统接收缓冲区时就接到前一包数据之后,而用户进程根据预先设定的缓冲区大小从系统接收缓冲区取数据,这样就一次取到了多包数据。在使用TCP协议传输数据的过程中,TCP协议本事只能保证数据的正确,而不能保证传输的内容未经过篡改,特别对于工业及重要数据的应用场合,数据一旦篡改,将可能引发重大问题,这些都是现有技术存在的缺陷。本专利技术以至少解决上诉问题。
技术实现思路
本专利技术的目的是针对上述
技术介绍
存在的缺陷,提供一种用于远程监控领域的可确保TCP通信数据完整及正确的方法。为实现上述目的,本专利技术一种确保TCP通信数据完整及正确的方法,包括:步骤1:定义TCP封包传输格式,TCP数据包由包头+数据长度+包序号+数据+数据效验码+包尾的先后顺序依次组成;;步骤2:客户端或服务器再将要发送的数据按照步骤1的方式封装成完整数据包;步骤3:客户端或服务器在收到数据后根据封装格式进行数据完整性及正确性验证,并将当前包序号返回给发送端;上述步骤2、3的客户端或服务器在收到数据后根据封装格式进行数据完整性及正确性验证,并做出相应的处理的具体步骤为:步骤11:封装数据包,根据<步骤1>所述包头与包尾均为特殊字符串组成,数据长度定义为除包头外的包的总长度,包序号定义为当前包的ID号,数据定义为待发送的数据信息,数据校验码定义为对除包头与包尾外的数据进行数据校验的结果;步骤12:声明一个BUF存储空间并初始化,将每次接收到的数据均添加到该BUF存储空间中;步骤13:首先判断BUF存储空间接收的数据是否大于包头长度,大于则进行判断是否为指定的包头标示,如是,则证明包头标示完整正确,否则,说明接收到无效或错误的包头标示,删除BUF存储空间中的数据直到下一个包头标示出现的位置;小于则继续<步骤12>;步骤14:判读BUF存储空间中的接收数据长度是否大于<步骤1>中‘包头+长度’的长度,如大于,则根据数据得到该包数据剩余的总长度;如小于,则说明数据接收不完整,继续<步骤12>;步骤15:根据长度计算出当前数据包的总长度,判读BUF存储空间中的数据长度是否大于当前计算的数据包总长度,如大于,则继续<步骤16>,如小于,说明数据接收不完整,继续<步骤12>;步骤16:根据长度获得包尾位置,判读包尾标示是否正确,如是,则进行<步骤17>,否则,说明接收到无效或错误的包尾标示,删除BUF存储空间中的数据直到下一个包头标示出现的位置,继续<步骤12>;步骤17:根据计算的数据包长度从BUF存储空间中得到完整的数据包,进行数据效验,其中校验方式至少包括CRC,MD5方式,效验成功表示数据正确,删除BUF存储空间中相应的数据,避免重复处理;否则,说明数据错误或者发生篡改,清理数据到下一个包头,继续<步骤12>;步骤18:判断当前包序号是否为上一次包序号相等,如是,则说明已经处理过,直接返回包序号给客户端,否则则判断是否等于包序号加1,是则说明是接收正常;步骤19:拿到完整的数据,返回当前包序号给客户端,提示当前数据包已经正确接收,并记录下当前数据包的包序号。进一步地,步骤1中定义TCP封包传输格式需要根据不同的应用场合,选择不同的包头和包尾为标示符,或对传输的数据进行加密解密后通过计算机的网卡进行传输进一步地,步骤3中所述的发送端为客户端或服务器的任意一种,即当客户端为接收端时,服务器为发送端;当服务器为接收端时,客户端为发送端。进一步地,在所述步骤3中要分别依次进行六次判断,即进行接收到的数据长度是否大于包头标示长度的判断、包头标示是否正确的判断、接收到的数据长度是否大于‘包头+长度’长度的判断、接收到数据长度是否大于计算所得数据包的总长度的判断、包尾标示是否正确的判断及接收数据进行校验,验证数据是否被篡改判断。进一步地,上述接收到数据的长度是否大于包头标示长度的判断、包头标示是否正确的判断、接收到的长度是否大于‘包头+长度’长度的判断、接收到数据长度是否大于计算所得数据包的总长度的判断、包尾标示是否正确的判断的五个判断步骤中均只有在获得判断结果为“是”的情况下,才可进入下一个判断步骤,否则上述五个判断步骤均会返回接收数据步骤,而后再次依次从头到尾再次进行数据包的完整性与准确性的判断。进一步地,头标示是否正确的判断与包尾标示是否正确的判断的步骤如判断结果为“否”则会进入删除数据,直到下一包头标记位置的数据删除步骤。进一步地,在步骤3中的接收数据进行校验,验证是否被篡改判断的步骤如获得判断结果为“是”,会进入删除数据,直到下一包头标记位置的数据删除步骤;如获得判断结果为“否”则进入步骤3。进一步地,在步骤3中需要进一步判断当前包序号是否为上一次包序号相等,如是,则说明已经处理过,直接返回包序号给客户端,否则判断是否等于包序号加1,是则说明是接收正常。综上所述,本专利技术一种确保TCP通信数据完整及正确的方法提供了一种封包机制,在接收方对数据进行了严格的判断,在接收方对数据进行了校验,保证数据无篡改,能够有效的解决粘包现象,保证使用TCP协议能够完整并且正确进行数据传输,增强程序的健壮性和安全性,提高了TCP协议的使用范围。附图说明图1为本专利技术一种确保TCP通信数据完整及正确的方法整体流程示意图。图2为本专利技术一种确保TCP通信数据完整及正确的方法的数据包处理流程图。图3为本专利技术一种确保TCP通信数据完整及正确的方法涉及的完整且正确的数据处理详细流程图。具体实施方式为详细说明本专利技术的
技术实现思路
、构造特征、所达成目的及效果,以下兹例举实施例并配合附图详予说明。请参阅图1、图2及图3,本专利技术一种确保TCP通信数据完整及正确的方法,包括:步骤1:根据实际情况定义TCP封包传输格式,TCP数据包由包头+数据长度+包序号+数据+数据效验码+包尾的先后顺序依次组成;步骤2:客户端或服务器再将要发送本文档来自技高网
...
一种确保TCP通信数据完整及正确的方法

【技术保护点】
一种确保TCP通信数据完整及正确的方法,包括:步骤1:根据实际情况定义TCP封包传输格式,TCP数据包由包头+数据长度+包序号+数据+数据效验码+包尾的先后顺序依次组成;;步骤2:客户端或服务器再将要发送的数据按照步骤1的方式封装成完整数据包;步骤3:客户端或服务器在收到数据后根据封装格式进行数据完整性及正确性验证,并将当前包序号返回给发送端。

【技术特征摘要】
1.一种确保TCP通信数据完整及正确的方法,该方法包括:步骤1:定义TCP封包传输格式,TCP数据包由包头+数据长度+包序号+数据+数据效验码+包尾的先后顺序依次组成;步骤2:客户端或服务器再将要发送的数据按照步骤1的方式封装成完整数据包;步骤3:客户端或服务器在收到数据后根据封装格式进行数据完整性及正确性验证,并将当前包序号返回给发送端,其特征在于:上述步骤2、3的客户端或服务器在收到数据后根据封装格式进行数据完整性及正确性验证,并做出相应的处理的具体步骤为:步骤11:封装数据包,根据<步骤1>所述包头与包尾均为特殊字符串组成,数据长度定义为除包头外的包的总长度,包序号定义为当前包的ID号,数据定义为待发送的数据信息,数据校验码定义为对除包头与包尾外的数据进行数据校验的结果;步骤12:声明一个BUF存储空间并初始化,将每次接收到的数据均添加到该BUF存储空间中;步骤13:首先判断BUF存储空间接收的数据是否大于包头长度,大于则进行判断是否为指定的包头标示,如是,则证明包头标示完整正确,否则,说明接收到无效或错误的包头标示,删除BUF存储空间中的数据直到下一个包头标示出现的位置;小于则继续<步骤12>;步骤14:判读BUF存储空间中的接收数据长度是否大于<步骤1>中‘包头+长度’的长度,如大于,则根据数据得到该包数据剩余的总长度;如小于,则说明数据接收不完整,继续<步骤12>;步骤15:根据长度计算出当前数据包的总长度,判读BUF存储空...

【专利技术属性】
技术研发人员:肖磊王小康苗强
申请(专利权)人:成都阜特科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1