基于TCP协议下网络数据提取算法研究.docVIP

基于TCP协议下网络数据提取算法研究.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于TCP协议下网络数据提取算法研究

基于TCP协议下网络数据提取算法研究   摘要通过TCP协议发送的数据包都会按字节进行编号处理,其目的是当对方在接到数据,在校验无误的情况下接收方将会发出ACK(传输正确确认信息)。如果发送数据端在预先设定时间内没有接到来自来接收端的确认信息,那么发送方将认为数据报文未正确到达接收端,需要重新发送数据。数据包进行编号的优点还有一个是确保接收端在收到数据时,能够正确快速的处理数据,确保有序,有效重组报文以及丢弃无效或冗余数据。   【关键词】网络 数据 提取算法   通过TCP协议发送的数据包都会按字节进行编号处理,其目的是当对方在接到数据,在校验无误的情况下接收方将会发出ACK(传输正确确认信息)。如果发送数据端在预先设定时间内没有接到来自来接收端的确认信息,那么发送方将认为数据报文未正确到达接收端,需要重新发送数据。数据包进行编号的优点还有一个是确保接收端在收到数据时,能够正确快速的处理数据,确保有序,有效重组报文以及丢弃无效或冗余数据。   TCP协议也不是十全十美,其可靠性保障措施是以牺牲部分传输效率为代价而换来的。因而在实际网络应用中,TCP协议只用来传输关键的、靠性要求很高的网络键数据;而对于如即时视频数据、音频数据等等,因为其不惧怕掉包,所以在这类网络环境的传输则采用高效率的UDP协议。   1 TCP粘包原因研究   粘连数据包发生的原因可以两个方面来进行剖析,其原因可能是由数据发送端产生,也可能是由数据接端方造成。假如网络数据量较小,发送的网络数据包都很少,根据TCP协议自身的优化算法,通常会把这些数据整合成一个报文传输到接收端,基于这个原因接收方就收到了几个数据包合成的粘包数据。第二,由于接收方计算机性能或者其它原因,可能不能及时的从网络IO缓存区中取走数据,进而导致发生在接收端的网络数据粘包。这是TCP协议自身算法原因,在网卡从网络上收到正确无误的数据时,需要将数据暂时放入系统网络IO接收缓存区,等待上层应用程序从系统缓冲区取走网络数据,假如在新的数据报文到达时,缓存区中旧的数据报文内容还没有被上层应用程序取走,那么就会发生新到数据包紧挨着旧数据包存放,形成一个大的数据块。而且上层应层程序只能按固定定大小的缓存区来取数据,由于有多个报文存在,程序从网络接收缓存区中取出的数据,极有可能是来自多个数据报文。   粘包的方式有下面两种,一种是操作系统接收多个数据包,并缓存在缓冲区,用户出缓冲区取出的网络包为多个完整的数据包,另一种情况也是最常见是用户取出的多个包粘在一起,并且不是完整的包。粘连在一起的网络数据包也不一定都需要进一步的处理,比如在粘连的数据包(文件交换),这种数据没有具体格式,不间断地“流”式数据,不必要做包分离处理(简称“分包”),如果在实际的网络传输中,大部分的信息都需要分开,所以在这些原始数据上都加入一定的数据格式,再次封装,在接收端按照一定的算法进行分包处理。   当网络数据包的格式数固定长度时(即按固定长度发送数据),所使用的分包算法则相对简单一些;对于在网络数据没有固定格式,需要通过多步计算来确定数据结构的,它们所使用的算法就变地相对困难,其中最为关键的难度就在于如果一个完整的网络包被分成两部分,一部分先接收,后一部分后接收,在这其中如果需要重新打包,计算包长,所以处理起来难度就比较大。   为了避免在实际的网络环境使用中出现粘包,从常用的技术中归避粘包,软件设计人员常使用如下三种方式;发送者所引起的网络粘包,在发送者一端用户可以通过网络编程来配置网络参数来规避,例如强制数据立即传送:在TCP网络通信中的紧急通信标记PUSH,在底层操作系统的网络模块TCP协议收到该操作标记时,会将当前TCP缓存区的数据立即推送到网络上去,而不必等待TCP发送系统缓存区满;第二种情况是因为接收者处理不当导致地的网络粘包,可以通过在调高接收线程或者接收进程的CPU等级,使CPU优先调度,还可以精简接收线程接收代码,使其只负责接收数据,分配其它线程处理接收到的数据包,在这种优化方式下,可以迅速的接收网络中的数据,进而规避粘连包;第三种方式为接收者从网络中,只读取按之前约定大小的数据,既不多读也不少读。如果约定数据较小,那么需要多次读取网络数据,并且在最后才能合成一个完整包。   上述所的三方案都有严重的缺点。方案一用程序代码的方式设置PUSH标记,解决了粘包问题,但是新问题是TCP发送数据的优化算法在停用状态下,将导致网络利用率大幅度下降,进一步影响整个系统的整体性能,正常情况下不应使用该方法;方案二也只是降低了网络粘包的概率,没有从根本上杜绝。方案三的缺点应用程序需要多次读系统网络接口,工作效率较低,对要求快速响应网络环境不推荐使用。   2 TCP分包算法设计   在实际应用开发过程中,发现基于数据流处

文档评论(0)

fangsheke66 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档