检测网络流周期的有效方法

时间:2013-03-29 13:18:13

标签: algorithm period

我有很多netflow数据(i.e src_ip, dest_ip, beg_time, end_time, data_size, etc),其中一些定期发生,我想知道。

考虑我有 n netflow(可能大约10 ^ 6), m 周期性。我怎么能找到哪些是周期性的?

我可以编写一个代码,但它至少会是O(n ^ 3 logn),这将在10 ^ 4 netflow之后永远占用。

我搜索过它但找不到任何东西。

注意:您可以考虑根据开始时间对数据进行排序,并且开始时间为32位无符号整数int(cint中的uint32)

更正src_ip是唯一的,dest_ip不是唯一的,time for periodicity未知。可能是5分钟,也可能是5天。您可以忘记src_ip, dest_ip, end_time, data_size和流的其他属性。 我只是在寻找开始时间是周期性的事件,你可以考虑,我已经发现了不同的事件,就像不同的src_ip一样,等等......

任何帮助将不胜感激,

由于

1 个答案:

答案 0 :(得分:0)

我尝试对与您的数据相对应的信号计算FFT。

例如,我将块beg_time = 1,end_time = 5,data_size = 100转换为1到5个单位时间的方波脉冲振幅100。

如果你想要一起分析所有东西,你可以叠加你已经拥有的所有脉冲。

如果将所有内容放在一起没有意义,则只叠加来自同一src_ip或同一对src_ipdst_ip的脉冲。

然后对通过叠加获得的信号运行FFT,看看频域是否有明显的峰值,或者看起来都是随机的,没有突出的峰值。

FFT在O(n * log(n))时间运行,其中n是信号样本的数量。

我确信必须有更好的方法来做到这一点,但值得一试。