本论文是一篇关于数据期刊论文格式,关于基于TCP协议下的网络数据提取算法相关毕业论文模板范文。免费优秀的关于数据及数据结构及操作系统方面论文范文资料,适合数据论文写作的大学硕士及本科毕业论文开题报告范文和学术职称论文参考文献下载。
摘 要 通过TCP协议发送的数据包都会按字节进行编号处理,其目的是当对方在接到数据,在校验无误的情况下接收方将会发出ACK(传输正确确认信息).如果发送数据端在预先设定时间内没有接到来自来接收端的确认信息,那么发送方将认为数据报文未正确到达接收端,需要重新发送数据.数据包进行编号的优点还有一个是确保接收端在收到数据时,能够正确快速的处理数据,确保有序,有效重组报文以及丢弃无效或冗余数据.
【关 键 词 】网络 数据 提取算法
通过TCP协议发送的数据包都会按字节进行编号处理,其目的是当对方在接到数据,在校验无误的情况下接收方将会发出ACK(传输正确确认信息).如果发送数据端在预先设定时间内没有接到来自来接收端的确认信息,那么发送方将认为数据报文未正确到达接收端,需要重新发送数据.数据包进行编号的优点还有一个是确保接收端在收到数据时,能够正确快速的处理数据,确保有序,有效重组报文以及丢弃无效或冗余数据.
TCP协议也不是十全十美,其可靠性保障措施是以牺牲部分传输效率为代价而换来的.因而在实际网络应用中,TCP协议只用来传输关键的、靠性要求很高的网络键数据;而对于如即时视频数据、音频数据等等,因为其不惧怕掉包,所以在这类网络环境的传输则采用高效率的UDP协议.
1.TCP粘包原因研究
粘连数据包发生的原因可以两个方面来进行剖析,其原因可能是由数据发送端产生,也可能是由数据接端方造成.假如网络数据量较小,发送的网络数据包都很少,根据TCP协议自身的优化算法,通常会把这些数据整合成一个报文传输到接收端,基于这个原因接收方就收到了几个数据包合成的粘包数据.第二,由于接收方计算机性能或者其它原因,可能不能及时的从网络IO缓存区中取走数据,进而导致发生在接收端的网络数据粘包.这是TCP协议自身算法原因,在网卡从网络上收到正确无误的数据时,需要将数据暂时放入系统网络IO接收缓存区,等待上层应用程序从系统缓冲区取走网络数据,假如在新的数据报文到达时,缓存区中旧的数据报文内容还没有被上层应用程序取走,那么就会发生新到数据包紧挨着旧数据包存放,形成一个大的数据块.而且上层应层程序只能按固定定大小的缓存区来取数据,由于有多个报文存在,程序从网络接收缓存区中取出的数据,极有可能是来自多个数据报文.
粘包的方式有下面两种,一种是操作系统接收多个数据包,并缓存在缓冲区,用户出缓冲区取出的网络包为多个完整的数据包,另一种情况也是最常见是用户取出的多个包粘在一起,并且不是完整的包.粘连在一起的网络数据包也不一定都需要进一步的处理,比如在粘连的数据包(文件交换),这种数据没有具体格式,不间断地“流”式数据,不必要做包分离处理(简称“分包”),如果在实际的网络传输中,大部分的信息都需要分开,所以在这些原始数据上都加入一定的数据格式,再次封装,在接收端按照一定的算法进行分包处理.
当网络数据包的格式数固定长度时(即按固定长度发送数据),所使用的分包算法则相对简单一些;对于在网络数据没有固定格式,需要通过多步计算来确定数据结构的,它们所使用的算法就变地相对困难,其中最为关键的难度就在于如果一个完整的网络包被分成两部分,一部分先接收,后一部分后接收,在这其中如果需要重新打包,计算包长,所以处理起来难度就比较大.
为了避免在实际的网络环境使用中出现粘包,从常用的技术中归避粘包,软件设计人员常使用如下三种方式;发送者所引起的网络粘包,在发送者一端用户可以通过网络编程来配置网络参数来规避,例如强制数据立即传送:在TCP网络通信中的紧急通信标记PUSH,在底层操作系统的网络模块TCP协议收到该操作标记时,会将当前TCP缓存区的数据立即推送到网络上去,而不必等待TCP发送系统缓存区满;第二种情况是因为接收者处理不当导致地的网络粘包,可以通过在调高接收线程或者接收进程的CPU等级,使CPU优先调度,还可以精简接收线程接收代码,使其只负责接收数据,分配其它线程处理接收到的数据包,在这种优化方式下,可以迅速的接收网络中的数据,进而规避粘连包;第三种方式为接收者从网络中,只读取按之前约定大小的数据,既不多读也不少读.如果约定数据较小,那么需要多次读取网络数据,并且在最后才能合成一个完整包.
有关论文范文主题研究: | 关于数据的论文范文数据库 | 大学生适用: | 学院学士论文、大学毕业论文 |
---|---|---|---|
相关参考文献下载数量: | 66 | 写作解决问题: | 如何写 |
毕业论文开题报告: | 论文模板、论文总结 | 职称论文适用: | 论文发表、职称评中级 |
所属大学生专业类别: | 如何写 | 论文题目推荐度: | 优秀选题 |
本篇论文来自 http://www.sxsky.net/geshi/420286.html
上述所的三方案都有严重的缺点.方案一用程序代码的方式设置PUSH标记,解决了粘包问题,但是新问题是TCP发送数据的优化算法在停用状态下,将导致网络利用率大幅度下降,进一步影响整个系统的整体性能,正常情况下不应使用该方法;方案二也只是降低了网络粘包的概率,没有从根本上杜绝.方案三的缺点应用程序需要多次读系统网络接口,工作效率较低,对要求快速响应网络环境不推荐使用.
2.TCP分包算法设计
在实际应用开发过程中,发现基于数据流处理传输的TCP协议,当在传输大批量的网络数据包时会出现粘包现象,即是发送方以较高传输速度发送若干包数据发送数据,当数据到达接收方时,数据从网络中取出时,不能区分数据内容是属于哪个包,完全粘连成一个整包.针对这种粘包情况对TCP协议进行了大量研究和实验,分析TCP网络通信产生粘包的原因是先决问题,并在此基础上通过实验结果数据给出了处理TCP粘包问题的方法与对策.
经过上述分析给出高效解决方案:每一个在套接字连接分配一个单缓存区,对发送方对数据进行格式化处理后在进行发送.
类型:为指出数据的类型(如文件共享,文件碎片以及各种请求命令等)
数据长度:指出后面有n个Byte数据要处理(除出类型与数据长度共长8Byte)
数据:为真实需要传输的内容
基本思路是首先将待处理的接收数据流其长度设为m,数据格式如图2-3中的n所示,然后在依靠数据长度n计算得到一个完整数据报文的长度.
(1)单缓存区获取已接收数据的大小(r).
(2)如果r >等于 8则强行转换成预定的结构数据形式,并从中网络数据格中取出数据长度字段(l),计算需要写入缓存区的数据大小(s),s 等于 l-(r-8),
(3)若m
(4)若m>等于s,则将m中s长的数据写入缓存区,并报告完整数据到达.
(5)若m-s > 0,则将多余的数据继续传入下一次递归函数中.
(6)若r<8,并且m<8-r,将m全写入缓存区中.
(7)若r<8,并且m>等于8-r,向缓存区中写入长度为8-r的数据,剩余数据进入下一次递归函数继续处理.
3.实验结果与结论
实验环境设计根本原因在于提高服务器与客户端的传输效率,尽可能的避免因实验环境而造成的实验误差;服务器与客户端均采用IOCP与线程池结合的方式最大限度的提高传输效率,提高服务器与客户端数据的吞吐量,线程池中线程数为4;服务器支持文件的分段下载,支持断点续传,文件内存映射等提高传输与存取文件效率的技术;客户端并发连接请求数为10,尽可能的降低因单连接而引的传输速度不足,不能全完测试此算法的稳定性.实验环境结构图如下所示.
客户端采用TCP分包算法,根据算法需对对客户端每一个并发连接都需要建立缓存区,保存暂未收到完整数据的包.
(1)在上述实验环境下,当服务器连续发送的若干个数据包总长度之和低于1500字节时,常会出现“粘包”现象,TCP分包递归算法能根据数据头部,递归取出相互粘连的网络包.若服务器关采取关闭“nagle优化算法”,解决小封包问题,但也导致较高的不可预测的延迟,同时降低了吞吐量.
(2)服务器发送数据包在1Kb到2Kb时,如果时间间隔低于9.8ms,会出现不定时的“粘包”现象,算法在接收到数据包时,也能对包进行正确的分解,做到数据包分段分离.
(3)为测定算法在处理变长数据包的稳定性与时间,服务器随机发送大小为1.4kb、1.8kb、1.3kb、1.7kb、1.1kb网络数据包,总计1500个.为造成大量粘包的网络数据,客户端在开始启动算法先线程睡眠10ms,而客户端单缓存区大小为2Kb,统计发现客户端接到1500个数据包,其中因粘包而被缓存的数据高达1079个,粘包率达到71.9%,经过算法的解析均能正确的分离数据包,粘包处理总时长小于1ms.
经多次实验数据表明,TCP“粘包”现象的确存在,但采用此递归算法能稳定分解大量并发数据包,接收方的预处理予以解决,而且处理时间非常短(实验中1000包数据总共处理时间不到1ms),几乎不影响应用程序的正常工作.在多线程的大文件传输过程中,能保证数据有效可靠的按照编号存储,不会因为多线程导致的数据多位,乱序的情况.
4.结束语
由于TCP自身“nagle算法”的存在,导致在小数据量时,数据包可能出现粘连的情况,提出TCP分包递归算法,通过实验得到很好的实现结果,解决“粘包”问题,算法在时间,空间上开销都较小,分