Chunked 数据块的重组

来源:互联网 发布:java统计页面浏览次数 编辑:程序博客网 时间:2024/06/10 06:36

Chunked数据块的重组

本文主要针对网页数据由Nchunked数据块组成的情况进行分析。

一、chunked块的组成结构

每一个Chunked数据块包含两部分,两部分用字符串”/r/n”区分开,主要内容是:

1.  数据块的长度(16进制)

2.  数据部分

所以单独的chunked块结构如:A0/r/ndata…./r/n

A016进制的数据长度;data…为数据部分,长度是A0;

 

多个chunked的组成形式如:

A0/r/n[dataof(chunked)]/r/nB0/r/n[dataof(chunked)]/r/nA1/r/n[dataof(chunked)]/r/n0/r/n/r/n

  
在整个chunked的结束部分由字符“0/r/n/r/n”来表示。

 


二、chunked的解码代码

Chunked的解析工做主要是将chunked块中的数据部分根据给出的长度提取出来。

代码如下:

 

二、chunked网络包数据信息的提取方式

chunked块中关键字的获取,总的来说可以用两种方法:

1.  每来一个数据包,都提取出gzip压缩包,然后解压

2.  等所有数据包重组完成,一次性提取gzip压缩包解压

 

当然两种方式都有存在优点与缺点:

 

使用第一种方法:

优点:如果包中包含关键字,可以很快检测,后面的包就不需要接收了。

缺点:如果检测的网页中不包含关键字,那么这个工作将一直持续下去,知道整个网页都发送结束。因为解压的时候需要依赖前面所有的包,

                   假设有100个数据包,那么第一个包就要解压100次,第二个99次,依次递减。

                   总共要解压的次数是:100+1*100/2

 

使用第二种方法:

优点:不用每次数据包过来都重组、解析chunked、解压。操作次数减少很多

缺点:每次都要等数据全部收集完成重组才能解包。如果包中包含关键字信息,可能在前10个包中就有,这时候依然要等待所有的包都发送过来才能提取chunked和解压。

 

用统计方法决定:

根据被检测关键字与库中的比例