基于TCP流数据的网络流量采集监测设备时间同步方法与流程

文档序号:24495369发布日期:2021-03-30 21:22阅读:117来源:国知局
基于TCP流数据的网络流量采集监测设备时间同步方法与流程

本发明属于网络流量监测技术领域,尤其涉及一种用于不同网络流量采集监测设备间时间同步的方法。



背景技术:

随着互联网技术的发展以及网络流量采集监测技术的广泛应用,网络流量采集监测设备在互联网中得到了广泛的部署和应用。为进行网络流量数据的融合和大数据分析,经常需要将不同采集监测设备采集的数据根据网络流进行整合。不同采集监测设备的数据进行整合时主要根据报文五元组信息以及监测设备在采集流量数据时打的时间标签进行。

报文五元组信息包含在监测设备采集的报文数据中,监测设备为报文打的时间标签就成为不同监测设备采集数据整合的关键。如果不同监测设备间存在较大的时差,不同监测设备打的时间标签没有统一的时间基准,则无法根据时间标签整合不同采集监测设备采集的数据,导致不同设备采集的数据无法进行融合和分析。

因此如何确定不同网络采集监测设备间的时差,保证不同网络采集监测设备之间的时间同步就成为不同采集监测设备数据融合和分析的关键技术问题。

目前在对不同网络流量采集监测设备采集的数据进行融合时,多采用报文内容比对的方法。该方法需要人工参与、比对成功率低,而且在没有预先为监测设备注入流量的情况下,无法进行报文内容比对。



技术实现要素:

本发明要解决的技术问题是提供一种基于tcp流数据的网络流量采集监测设备时间同步方法,主要解决的技术问题是:网络中部署的多台网络流量采集监测设备由于相互间时间不同步导致不同网络流量采集监测设备采集的数据在进行融合时需要预先注入流量、报文内容比对成功率低且需要人工参与的问题。

为解决上述技术问题,本发明提出一种基于tcp流数据的网络流量采集监测设备时间同步方法。该方法利用不同网络采集监测设备采集的同一tcp流的数据,通过移动一台网络流量采集监测设备的时间基准,将该网络流量采集监测设备监测数据与另一台网络流量采集监测设备监测数据进行相关运算,即计算统计两台网络流量采集监测设备间属于同一tcp流的报文数量,当属于同一tcp流的报文数量最大时,第一台网络流量采集监测设备时间基准的移动量即为两台设备之间的时差,然后根据该时差设定第一台设备的时间以实现两台设备的时间同步。

本发明包括以下步骤:

第一步,构建基于tcp流数据的网络流量采集监测设备时间同步系统。该系统根据从第一网络流量采集监测设备a和第二网络流量采集监测设备b接收的网络数据文件,计算第一网络流量采集监测设备a和第二网络流量采集监测设备b之间的时差,并基于该时差实现第一网络流量采集监测设备a和第二网络流量采集监测设备b的时间同步。基于tcp流数据的网络流量采集监测设备时间同步系统由初始化部件,相关运算数据构建部件,相关运算部件,分析输出部件和时间同步部件组成。

初始化部件与相关运算数据构建部件和相关运算部件相连,初始化系统参数,包括相关运算的步进时间t1,相关运算的相关时间t2,第一网络流量采集监测设备a和第二网络流量采集监测设备b最大可能时差的绝对值t3,第一网络流量采集监测设备a和第二网络流量采集监测设备b的网络数据文件afile和bfile;将afile和bfile输出至相关运算数据构建部件;将参数t1、t2、t3输出至相关运算部件;将参数t3输出至时间同步部件。

相关运算数据构建部件与初始化部件和相关运算部件相连,从初始化部件接收afile和bfile,从afile中读取报文数据并构建第一相关运算数据链表alist,从bfile中读取报文数据并构建第二相关运算数据链表blist,将构建的alist和blist输出至相关运算部件。

alist和blist中的元素为相关运算数据结构cor_struct。cor_struct存储1个报文的相关运算数据,包括8个域,分别为time(即监测设备采集该报文时的时间)、sip(即报文的源ip地址)、sport(即报文的源端口号)、dip(即报文的目的ip地址)、dport(即报文的目的端口号)、sern(即报文的tcp序列号)、ackn(即报文的tcp确认号)、len(即报文的长度)。

相关运算部件与初始化部件、相关运算数据构建部件和分析输出部件相连,从初始化部件接收相关运算步进时间t1、相关运算时间范围t2、第一网络流量采集监测设备a和第二网络流量采集监测设备b最大可能时差的绝对值t3,从相关运算数据构建部件接收alist和blist,根据t1、t2、t3对alist和blist进行相关运算,将相关运算结果r输出给分析输出部件。

分析输出部件与相关运算部件相连,从相关运算部件接收相关运算结果,分析相关运算结果,得到第一网络流量采集监测设备a和第二网络流量采集监测设备b间的时差,将时差输出给时间同步部件。

时间同步部件与初始化部件、分析输出部件相连,从初始化部件接收t3,从分析输出部件接收第一网络流量采集监测设备a和第二网络流量采集监测设备b间的时差t0,根据t0调整第一网络流量采集监测设备a的时间,实现第一网络流量采集监测设备a和第二网络流量采集监测设备b间的时间同步。

第二步,初始化部件对基于tcp流数据的网络流量采集监测设备时间同步系统进行初始化,即初始化该系统运行所需的参数。初始化的参数包括:从监测设备a接收监测设备a采集的网络监测数据文件afile;从监测设备b接收监测设备b采集的网络监测数据文件bfile;相关运算的步进时间t1,1毫秒≤t1≤5毫秒,t1优选值为1毫秒;相关运算的范围时间t2,1毫秒≤t2≤10毫秒,t2优选值为5毫秒;2个监测设备最大可能时差的绝对值t3,t3优选值为3600000毫秒。初始化部件将参数afile和bfile输出至相关运算数据构建部件;将参数t1、t2、t3输出至相关运算部件;将参数t3输出至时间同步部件。

第三步,相关运算数据构建部件分别读取afile和bfile,提取afile和bfile中每个报文进行tcp流连续报文相关运算的时间戳、四元组(源ip地址,目的ip地址,源端口号,目的端口号)、序列号、确认号、报文长度,构建相关运算所需的alist和blist,并将alist和blist输出至相关运算部件。具体方法是:

3.1相关运算数据构建部件读取afile,构建第一相关运算数据链表alist。步骤如下:

3.1.1相关运算数据构建部件初始化alist为空。

3.1.2令网络报文序号ia=1。

3.1.3相关运算数据构建部件从afile中读取第ia个网络报文pkt_ia。

3.1.4根据tcp/ip协议判断pkt_ia是否为tcp报文,如果是tcp报文,转步骤3.1.5,如果不是tcp报文,转步骤3.1.8。

3.1.5根据tcp/ip协议解析报文pkt_ia,获取报文的时间戳t_ia(时间单位为毫秒)、源ip地址sip_ia、目的ip地址dip_ia、源端口号sp_ia、目的端口号dp_ia、tcp序列号s_ia、tcp确认号c_ia、tcp负载长度len_ia。

3.1.6新建第一相关运算数据链表元素cor_pkt_ia,令:

cor_pkt_ia->time=t_ia;

cor_pkt_ia->sip=sip_ia;

cor_pkt_ia->dip=dip_ia;

cor_pkt_ia->sport=sp_ia;

cor_pkt_ia->dport=dp_ia;

cor_pkt_ia->sern=s_ia;

cor_pkt_ia->ackn=c_ia;

cor_pkt_ia->len=len_ia;

其中“->”表示cor_pkt_ia的某个域,如cor_pkt_ia->time表示cor_pkt_ia的time。

3.1.7将cor_pkt_ia加入到alist中。

3.1.8令ia=ia+1,若afile中还有未处理的报文,转步骤3.1.3,若afile中的所有报文均已处理完,转3.2。

3.2相关运算数据构建部件读取bfile,构建第二相关运算数据链表blist。步骤如下:

3.2.1初始化blist为空。

3.2.2令网络报文序号ib=1。

3.2.3从bfile中读取第ib个网络报文pkt_ib。

3.2.4根据tcp/ip协议判断pkt_ib是否为tcp报文,如果是tcp报文,转步骤3.2.5,如果不是tcp报文,转步骤3.2.8。

3.2.5根据tcp/ip协议解析报文pkt_ib,获取报文的时间戳t_ib(时间单位为毫秒)、源ip地址sip_ib、目的ip地址dip_ib、源端口号sp_ib、目的端口号dp_ib、tcp序列号s_ib、tcp确认号c_ib、tcp负载长度len_ib。

3.2.6新建第二相关运算数据链表元素cor_pkt_ib,令:

cor_pkt_ib->time=t_ib;

cor_pkt_ib->sip=sip_ib;

cor_pkt_ib->dip=dip_ib;

cor_pkt_ib->sport=sp_ib;

cor_pkt_ib->dport=dp_ib;

cor_pkt_ib->sern=s_ib;

cor_pkt_ib->ackn=c_ib;

cor_pkt_ib->len=len_ib;

其中“->”表示cor_pkt_ib的某个域,如cor_pkt_ib->time表示cor_pkt_ib的time。

3.2.7将cor_pkt_ib加入到blist中。

3.2.8令ib=ib+1,若监测数据文件bfile中还有未处理的报文,转步骤3.2.3,若监测数据文件bfile中的所有报文均已处理完,转3.3。

3.3相关运算数据构建部件将alist和blist输出至相关运算部件。转第四步。

第四步,相关运算部件对第三步构建的alist和blist进行tcp流连续报文的相关运算,将运算结果输出至分析输出部件。

tcp流连续报文的相关运算是指假定监测设备间时差为某一固定值时,在相关运算时间范围内,如果alist中元素所代表报文与blist中所代表报文可能为同一个tcp流的连续报文时,该时差值下的相关运算值增加1,否则不增加。本步骤进行相关运算时,选择的时差值是在两个监测设备的最大时差范围内(-t3~t3)按照t1进行逐次增加得到。如第一次相关运算时选择的时差值为t1-t3,第二次相关运算时选择的时差值为2×t1-t3,依次类推,最后一次相关运算时选择的时差值为t3。该方式下相关运算的次数为2×t3/t1。

具体方法是:

4.1相关运算部件从相关运算数据构建部件接收alist和blist,从初始化部件接收t1、t2、t3。

4.2定义相关运算结果数组r,r中元素个数nr=2×t3/t1,并初始化r中所有元素值为0。相关运算结束后,数组r中的第k个元素r[k]的值记录了在时差值k×t1下(1≤k≤nr),第一网络流量采集监测设备a的监测数据文件与第二网络流量采集监测设备b的监测数据文件之间可能成为同一个tcp流中连续报文对的个数。

4.3获取alist的元素个数ca(ca为正整数),获取blist的元素个数cb,定义循环变量i1,i2,i3,其中i1用于循环遍历alist中的所有元素,i2用于循环遍历blist中的所有元素,i3用于遍历第一网络流量采集监测设备a和第二网络流量采集监测设备b的最大时差范围内的相关运算时间点,令i3=1。

4.4将alist中所有元素时间戳正向偏移i3×t1-t3(即所有元素时间戳加i3×t1-t3),然后针对alist中每一个元素,找出blist中与其时间相关的元素(即blist中元素的时间戳在alist中某个元素时间戳正向偏移后的±t2范围内),并进行相关运算。具体方法是:

4.4.1令i1=1,i2=1。

4.4.2读取alist的第i1个元素alist_elm_i1,获取第i1个元素的时间戳ti1,即令ti1=alist_elm_i1->time。

4.4.3定义变量tc,令tc=ti1+i3×t1-t3。

4.4.4根据ti1在blist中按照从第i2个元素到链表尾元素的顺序找出第一个与alist_elm_i1时间相关的元素(即时间戳大于等于tc-t2并且小于tc+t2的元素)。详细步骤如下:

4.4.4.1读取blist的第i2个元素blist_elm_i2,获取第i2个元素的时间戳ti2,即令ti2=blist_elm_i2->time。

4.4.4.2如果ti2大于等于tc-t2,说明ti2进入与元素alist_elm_i1时间相关的时间范围,元素blist_elm_i2可能与元素alist_elm_i1时间相关,转步骤4.4.4.3继续判断,否则元素blist_elm_i2与元素alist_elm_i1不存在时间相关,转步骤4.4.4.4分析blist中下一个元素。

4.4.4.3如果ti2大于等于tc+t2,说明元素blist_elm_i2的时间戳超出与元素alist_elm_i1时间相关的时间范围,元素blist_elm_i2及blist中后续元素均不可能与元素alist_elm_i1时间相关,转步骤4.4.7,否则说明元素blist_elm_i2与元素alist_elm_i1时间相关,转步骤4.4.5进行相关运算。

4.4.4.4令i2=i2+1,如果i2小于等于cb,说明链表blist中还有可能与元素alist_elm_i1时间相关的元素,转步骤4.4.4.1分析blist中下一个元素,否则转步骤4.4.7处理alist中下一个元素。

4.4.5将元素alist_elm_i1与4.4.4.3步找出的元素blist_elm_i2进行相关运算,得到相关运算结果数组r中的元素r[i3]。详细步骤如下:

4.4.5.1判断alist_elm_i1与blist_elm_i2所代表的报文是否可能为同一个tcp流的报文,即两个元素所代表的报文四元组信息是否完全相同,即若

alist_elm_i1->sip=blist_elm_i2->sip;且

alist_elm_i1->dip=blist_elm_i2->dip;且

alist_elm_i1->sp=blist_elm_i2->sp;且

alist_elm_i1->dp=blist_elm_i2->sdp;

则说明alist_elm_i1与blist_elm_i2的四元组信息完全相同,两个元素所代表的报文可能为同一个tcp流的报文,转步骤4.4.5.2;否则,转步骤4.4.5.4分析blist中下一个元素。

4.4.5.2判断alist_elm_i1与blist_elm_i2所代表的报文是否可能为同一tcp流的连续报文,即若:

alist_elm_i1->sern+alist_elm_i1->len=blist_elm_i2->ackn;或

blist_elm_i1->sern+blist_elm_i1->len=alist_elm_i2->ackn;

则说明alist_elm_i1与blist_elm_i2所代表的报文可能为同一tcp流的连续报文,转步骤4.4.5.3;否则直接转步骤4.4.5.4。

4.4.5.3令r[i3]=r[i3]+1。转步骤4.4.5.4。

4.4.5.4转步骤4.4.6。

4.4.6令i2=i2+1,如果i2小于等于cb,说明链表blist中还有可能与元素alist_elm_i1时间相关的元素,转步骤4.4.4.1分析blist中下一个元素,否则转步骤4.4.7处理链表alist中的下一个元素。

4.4.7令i1=i1+1,如果i1小于等于ca,说明alist中尚有元素未进行相关运算,转步骤4.4.2,否则转步骤4.5。

4.5令i3=i3+1,如果i3小于nr,说明链表alist中元素时间戳偏移值在第一网络流量采集监测设备a和第二网络流量采集监测设备b的最大时差范围内,转步骤4.4,继续进行相关运算,否则说明链表alist中元素时间戳偏移值超出第一网络流量采集监测设备a和第二网络流量采集监测设备b的最大时差范围,相关运算结束,转步骤4.6。

4.6将相关运算结果数组r输出至分析输出部件,转第五步。第四步相关运算结果数组元素r[k]记录了在时差值k×t1-t3下,监测数据文件afile与监测数据文件bfile之间可能的同一个tcp流中连续报文对的个数,该连续报文对的个数越大,说明k代表的时差值k×t1-t3下两台监测设备采集报文时间同步的可能性越大,因此将k×t1-t3-作为两台监测设备的时差。

第五步,分析输出部件根据相关运算结果数组r进行分析,得到监测设备间的时差。方法是找出相关运算结果数组r中元素最大值,计算r取最大值时的时间戳偏移值t0,以t0作为第一网络流量监测设备a和第二网络流量监测设备b之间的时差,将t0输出给时间同步部件;具体方法为:

5.1从相关运算部件接收相关运算结果数组r。

5.2找出r中元素最大值的数组下标值j1。详细步骤为:

5.2.1定义循环变量j1,令j1=1,定义变量m,令m=0。

5.2.2如果r[j1]大于m,令m=r[j1],转步骤5.2.3;如果r[j1]小于等于m,直接转步骤5.2.3。

5.2.3令j1=j1+1,如果j1小于等于nr,转步骤5.2.2,否则转步骤5.3。

5.3判断m是否大于0(此时m如果大于0,说明r中存在极值,计算出了时差,如果此时m仍为0,说明r中不存在极值,没有计算出时差),如果大于0,转步骤5.4,否则转步骤5.6。

5.4计算r取最大值时的时间戳偏移值t0:

t0=j1×t1-t3;

5.5将t0输出给时间同步部件。转5.7。

5.6令t0=t3+1,将t0输出给时间同步部件。转5.7。

5.7转第六步。

第六步,时间同步部件从初始化部件接收t3,从分析输出部件接收t0。如果t0小于等于t3,调整第一网络流量监测设备a的时间,即将a在当前时间基础上增加t0,使得第一网络流量监测设备a的时间与第二网络流量监测设备b同步,转第七步。如果t0大于t3,则本次时间同步失败,向用户输出“时间同步失败”消息,转第七步。

第七步,结束。

当有多个网络流量采集监测设备时,固定监测设备a,以其他设备作为监测设备b多次应用该系统,即可计算监测设备a与其他所有设备间的时差,实现多台监测设备的时间同步。本发明可推广至多个设备间时间同步。

采用本发明可以达到如下技术效果:

采用本发明可以实现监测设备的时间同步,过程自动化,成功率高,不需要预先注入流量,可以解决多台网络流量采集监测设备由于相互间时间不同步导致不同网络流量采集监测设备采集的数据在进行融合时需要预先注入流量、报文内容比对成功率低且需要人工参与的问题。

附图说明

图1是本发明总体流程图;

图2是本发明第一步构建的基于tcp流数据的网络流量采集监测设备时间同步系统逻辑结构图。

具体实施方式

下面对照附图对本发明进行详细说明。

如图1所示,本发明包括以下步骤:

第一步,构建基于tcp流数据的网络流量采集监测设备时间同步系统。该系统逻辑结构图如图2所示,该系统根据从第一网络流量采集监测设备a和第二网络流量采集监测设备b接收的网络数据文件,计算第一网络流量采集监测设备a和第二网络流量采集监测设备b之间的时差,并基于该时差实现第一网络流量采集监测设备a和第二网络流量采集监测设备b的时间同步。基于tcp流数据的网络流量采集监测设备时间同步系统由初始化部件,相关运算数据构建部件,相关运算部件,分析输出部件和时间同步部件组成。

初始化部件与相关运算数据构建部件和相关运算部件相连,初始化系统参数,包括相关运算的步进时间t1,相关运算的相关时间t2,第一网络流量采集监测设备a和第二网络流量采集监测设备b最大可能时差的绝对值t3,第一网络流量采集监测设备a和第二网络流量采集监测设备b的网络数据文件afile和bfile;将afile和bfile输出至相关运算数据构建部件;将参数t1、t2、t3输出至相关运算部件;将参数t3输出至时间同步部件。

相关运算数据构建部件与初始化部件和相关运算部件相连,从初始化部件接收afile和bfile,从afile中读取报文数据并构建第一相关运算数据链表alist,从bfile中读取报文数据并构建第二相关运算数据链表blist,将构建的alist和blist输出至相关运算部件。

alist和blist中的元素为相关运算数据结构cor_struct。cor_struct存储1个报文的相关运算数据,包括8个域,分别为time(即监测设备采集该报文时的时间)、sip(即报文的源ip地址)、sport(即报文的源端口号)、dip(即报文的目的ip地址)、dport(即报文的目的端口号)、sern(即报文的tcp序列号)、ackn(即报文的tcp确认号)、len(即报文的长度)。

相关运算部件与初始化部件、相关运算数据构建部件和分析输出部件相连,从初始化部件接收相关运算步进时间t1、相关运算时间范围t2、第一网络流量采集监测设备a和第二网络流量采集监测设备b最大可能时差的绝对值t3,从相关运算数据构建部件接收alist和blist,根据t1、t2、t3对alist和blist进行相关运算,将相关运算结果r输出给分析输出部件。

分析输出部件与相关运算部件相连,从相关运算部件接收相关运算结果,分析相关运算结果,得到第一网络流量采集监测设备a和第二网络流量采集监测设备b间的时差,将时差输出给时间同步部件。

时间同步部件与初始化部件、分析输出部件相连,从初始化部件接收t3,从分析输出部件接收第一网络流量采集监测设备a和第二网络流量采集监测设备b间的时差t0,根据t0调整第一网络流量采集监测设备a的时间,实现第一网络流量采集监测设备a和第二网络流量采集监测设备b间的时间同步。

第二步,初始化部件对基于tcp流数据的网络流量采集监测设备时间同步系统进行初始化,即初始化该系统运行所需的参数。初始化的参数包括:从监测设备a接收监测设备a采集的网络监测数据文件afile;从监测设备b接收监测设备b采集的网络监测数据文件bfile;相关运算的步进时间t1,1毫秒≤t1≤5毫秒,t1优选值为1毫秒;相关运算的范围时间t2,1毫秒≤t2≤10毫秒,t2优选值为5毫秒;2个监测设备最大可能时差的绝对值t3,t3优选值为3600000毫秒。初始化部件将参数afile和bfile输出至相关运算数据构建部件;将参数t1、t2、t3输出至相关运算部件;将参数t3输出至时间同步部件。

第三步,相关运算数据构建部件分别读取afile和bfile,提取afile和bfile中每个报文进行tcp流连续报文相关运算的时间戳、四元组(源ip地址,目的ip地址,源端口号,目的端口号)、序列号、确认号、报文长度,构建相关运算所需的alist和blist,并将alist和blist输出至相关运算部件。具体方法是:

3.1相关运算数据构建部件读取afile,构建第一相关运算数据链表alist。步骤如下:

3.1.1相关运算数据构建部件初始化alist为空。

3.1.2令网络报文序号ia=1。

3.1.3相关运算数据构建部件从afile中读取第ia个网络报文pkt_ia。

3.1.4根据tcp/ip协议判断pkt_ia是否为tcp报文,如果是tcp报文,转步骤3.1.5,如果不是tcp报文,转步骤3.1.8。

3.1.5根据tcp/ip协议解析报文pkt_ia,获取报文的时间戳t_ia(时间单位为毫秒)、源ip地址sip_ia、目的ip地址dip_ia、源端口号sp_ia、目的端口号dp_ia、tcp序列号s_ia、tcp确认号c_ia、tcp负载长度len_ia。

3.1.6新建第一相关运算数据链表元素cor_pkt_ia,令:

cor_pkt_ia->time=t_ia;

cor_pkt_ia->sip=sip_ia;

cor_pkt_ia->dip=dip_ia;

cor_pkt_ia->sport=sp_ia;

cor_pkt_ia->dport=dp_ia;

cor_pkt_ia->sern=s_ia;

cor_pkt_ia->ackn=c_ia;

cor_pkt_ia->len=len_ia;

3.1.7将cor_pkt_ia加入到alist中。

3.1.8令ia=ia+1,若afile中还有未处理的报文,转步骤3.1.3,若afile中的所有报文均已处理完,转3.2。

3.2相关运算数据构建部件读取bfile,构建第二相关运算数据链表blist。步骤如下:

3.2.1初始化blist为空。

3.2.2令网络报文序号ib=1。

3.2.3从bfile中读取第ib个网络报文pkt_ib。

3.2.4根据tcp/ip协议判断pkt_ib是否为tcp报文,如果是tcp报文,转步骤3.2.5,如果不是tcp报文,转步骤3.2.8。

3.2.5根据tcp/ip协议解析报文pkt_ib,获取报文的时间戳t_ib(时间单位为毫秒)、源ip地址sip_ib、目的ip地址dip_ib、源端口号sp_ib、目的端口号dp_ib、tcp序列号s_ib、tcp确认号c_ib、tcp负载长度len_ib。

3.2.6新建第二相关运算数据链表元素cor_pkt_ib,令:

cor_pkt_ib->time=t_ib;

cor_pkt_ib->sip=sip_ib;

cor_pkt_ib->dip=dip_ib;

cor_pkt_ib->sport=sp_ib;

cor_pkt_ib->dport=dp_ib;

cor_pkt_ib->sern=s_ib;

cor_pkt_ib->ackn=c_ib;

cor_pkt_ib->len=len_ib;

3.2.7将cor_pkt_ib加入到blist中。

3.2.8令ib=ib+1,若监测数据文件bfile中还有未处理的报文,转步骤3.2.3,若监测数据文件bfile中的所有报文均已处理完,转3.3。

3.3相关运算数据构建部件将alist和blist输出至相关运算部件。转第四步。

第四步,相关运算部件对第三步构建的alist和blist进行tcp流连续报文的相关运算,将运算结果输出至分析输出部件。

tcp流连续报文的相关运算是指假定监测设备间时差为某一固定值时,在相关运算时间范围内,如果alist中元素所代表报文与blist中所代表报文可能为同一个tcp流的连续报文时,该时差值下的相关运算值增加1,否则不增加。本步骤进行相关运算时,选择的时差值是在两个监测设备的最大时差范围内(-t3~t3)按照t1进行逐次增加得到。如第一次相关运算时选择的时差值为t1-t3,第二次相关运算时选择的时差值为2×t1-t3,依次类推,最后一次相关运算时选择的时差值为t3。该方式下相关运算的次数为2×t3/t1。

具体方法是:

4.1相关运算部件从相关运算数据构建部件接收alist和blist,从初始化部件接收t1、t2、t3。

4.2定义相关运算结果数组r,r中元素个数nr=2×t3/t1,并初始化r中所有元素值为0。相关运算结束后,数组r中的第k个元素r[k]的值记录了在时差值k×t1下(1≤k≤nr),第一网络流量采集监测设备a的监测数据文件与第二网络流量采集监测设备b的监测数据文件之间可能成为同一个tcp流中连续报文对的个数。

4.3获取alist的元素个数ca(ca为正整数),获取blist的元素个数cb,定义循环变量i1,i2,i3,其中i1用于循环遍历alist中的所有元素,i2用于循环遍历blist中的所有元素,i3用于遍历第一网络流量采集监测设备a和第二网络流量采集监测设备b的最大时差范围内的相关运算时间点,令i3=1。

4.4将alist中所有元素时间戳正向偏移i3×t1-t3(即所有元素时间戳加i3×t1-t3),然后针对alist中每一个元素,找出blist中与其时间相关的元素(即blist中元素的时间戳在alist中某个元素时间戳正向偏移后的±t2范围内),并进行相关运算。具体方法是:

4.4.1令i1=1,i2=1。

4.4.2读取alist的第i1个元素alist_elm_i1,获取第i1个元素的时间戳ti1,即令ti1=alist_elm_i1->time。

4.4.3定义变量tc,令tc=ti1+i3×t1-t3。

4.4.4根据ti1在blist中按照从第i2个元素到链表尾元素的顺序找出第一个与alist_elm_i1时间相关的元素(即时间戳大于等于tc-t2并且小于tc+t2的元素)。详细步骤如下:

4.4.4.1读取blist的第i2个元素blist_elm_i2,获取第i2个元素的时间戳ti2,即令ti2=blist_elm_i2->time。

4.4.4.2如果ti2大于等于tc-t2,说明ti2进入与元素alist_elm_i1时间相关的时间范围,元素blist_elm_i2可能与元素alist_elm_i1时间相关,转步骤4.4.4.3继续判断,否则元素blist_elm_i2与元素alist_elm_i1不存在时间相关,转步骤4.4.4.4分析blist中下一个元素。

4.4.4.3如果ti2大于等于tc+t2,说明元素blist_elm_i2的时间戳超出与元素alist_elm_i1时间相关的时间范围,元素blist_elm_i2及blist中后续元素均不可能与元素alist_elm_i1时间相关,转步骤4.4.7,否则说明元素blist_elm_i2与元素alist_elm_i1时间相关,转步骤4.4.5进行相关运算。

4.4.4.4令i2=i2+1,如果i2小于等于cb,说明链表blist中还有可能与元素alist_elm_i1时间相关的元素,转步骤4.4.4.1分析blist中下一个元素,否则转步骤4.4.7处理alist中下一个元素。

4.4.5将元素alist_elm_i1与4.4.4.3步找出的元素blist_elm_i2进行相关运算,得到相关运算结果数组r中的元素r[i3]。详细步骤如下:

4.4.5.1判断alist_elm_i1与blist_elm_i2所代表的报文是否可能为同一个tcp流的报文,即两个元素所代表的报文四元组信息是否完全相同,即若

alist_elm_i1->sip=blist_elm_i2->sip;且

alist_elm_i1->dip=blist_elm_i2->dip;且

alist_elm_i1->sp=blist_elm_i2->sp;且

alist_elm_i1->dp=blist_elm_i2->sdp;

则说明alist_elm_i1与blist_elm_i2的四元组信息完全相同,两个元素所代表的报文可能为同一个tcp流的报文,转步骤4.4.5.2;否则,转步骤4.4.5.4分析blist中下一个元素。

4.4.5.2判断alist_elm_i1与blist_elm_i2所代表的报文是否可能为同一tcp流的连续报文,即若:

alist_elm_i1->sern+alist_elm_i1->len=blist_elm_i2->ackn;或

blist_elm_i1->sern+blist_elm_i1->len=alist_elm_i2->ackn;

则说明alist_elm_i1与blist_elm_i2所代表的报文可能为同一tcp流的连续报文,转步骤4.4.5.3;否则直接转步骤4.4.5.4。

4.4.5.3令r[i3]=r[i3]+1。转步骤4.4.5.4。

4.4.5.4转步骤4.4.6。

4.4.6令i2=i2+1,如果i2小于等于cb,说明链表blist中还有可能与元素alist_elm_i1时间相关的元素,转步骤4.4.4.1分析blist中下一个元素,否则转步骤4.4.7处理链表alist中的下一个元素。

4.4.7令i1=i1+1,如果i1小于等于ca,说明alist中尚有元素未进行相关运算,转步骤4.4.2,否则转步骤4.5。

4.5令i3=i3+1,如果i3小于nr,说明链表alist中元素时间戳偏移值在第一网络流量采集监测设备a和第二网络流量采集监测设备b的最大时差范围内,转步骤4.4,继续进行相关运算,否则说明链表alist中元素时间戳偏移值超出第一网络流量采集监测设备a和第二网络流量采集监测设备b的最大时差范围,相关运算结束,转步骤4.6。

4.6将相关运算结果数组r输出至分析输出部件,转第五步。

第五步,分析输出部件根据相关运算结果数组r进行分析,得到监测设备间的时差。方法是找出相关运算结果数组r中元素最大值,计算r取最大值时的时间戳偏移值t0,以t0作为第一网络流量监测设备a和第二网络流量监测设备b之间的时差,将t0输出给时间同步部件;具体方法为:

5.1从相关运算部件接收相关运算结果数组r。

5.2找出r中元素最大值的数组下标值j1。详细步骤为:

5.2.1定义循环变量j1,令j1=1,定义变量m,令m=0。

5.2.2如果r[j1]大于m,令m=r[j1],转步骤5.2.3;如果r[j1]小于等于m,直接转步骤5.2.3。

5.2.3令j1=j1+1,如果j1小于等于nr,转步骤5.2.2,否则转步骤5.3。

5.3判断m是否大于0,如果大于0,转步骤5.4,否则转步骤5.6。

5.4计算r取最大值时的时间戳偏移值t0:

t0=j1×t1-t3;

5.5将t0输出给时间同步部件。转5.7。

5.6令t0=t3+1,将t0输出给时间同步部件。转5.7。

5.7转第六步。

第六步,时间同步部件从初始化部件接收t3,从分析输出部件接收t0。如果t0小于等于t3,调整第一网络流量监测设备a的时间,即将a在当前时间基础上增加t0,使得第一网络流量监测设备a的时间与第二网络流量监测设备b同步,转第七步。如果t0大于t3,则本次时间同步失败,向用户输出“时间同步失败”消息,转第七步。

第七步,结束。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1