1

多くのネットフロー データが(i.e src_ip, dest_ip, beg_time, end_time, data_size, etc)あり、そのうちのいくつかは定期的に発生しており、調べたいと思っています。

n 個のネットフロー (おそらく 10^6 前後) があり、そのうちのm 個定期的であると考えてください。どれが周期的であるかをどのように見つけることができますか?

私はコードを書くことができますが、それは少なくとも O(n^3 logn) になり、10^4 数のネットフローの後に永遠にかかります。

私はそれについて検索しましたが、何も見つかりませんでした。

注: データは開始時刻に従ってソートされ、開始時刻は 32 ビット符号なし int (c++ では uint32) であると考えることができます。

訂正:src_ip一意であり、一意でdest_ipはなく、time for periodicity不明です。5分かもしれないし、5日かもしれない。src_ip, dest_ip, end_time, data_sizeフローのその他の属性を忘れることができます。開始時刻が周期的であり、考慮できるイベントのみを探しています。さまざまな src_ip のように無関係なイベントを除外しました...

どんな助けでも大歓迎です、

ありがとう

4

1 に答える 1

0

あなたのデータに対応する信号でFFTを計算してみます。

たとえば、チャンクbeg_time=1、end_time=5、data_size=100 を振幅 100 の 1 ~ 5 時間単位の方形パルスに変換します。

すべてをまとめて分析したい場合は、取得したすべてのパルスを重ね合わせます。

すべてをまとめても意味がない場合は、同じまたは と の同じペアからのパルスのみを重ね合わせsrc_ipます。src_ipdst_ip

次に、重ね合わせによって得られた信号に対して FFT を実行し、周波数領域に顕著なピークがあるかどうか、またはすべてがランダムに見え、顕著なピークがないかどうかを確認します。

FFT は O(n*log(n)) 時間で実行されます。ここnで、 は信号サンプルの数です。

もっと良い方法があるに違いないと確信していますが、試してみる価値があるかもしれません。

于 2013-03-29T13:29:48.047 に答える