(57)【要約】【課題】大規模なネットワークにおいても高速にフローの統計情報を記録・更新可能な技術を提供する。【解決手段】通信データ統計装置は、フロー識別情報が記録されたパケットを受信する受信部と、異なるフロー識別情報に対して同一のアドレスが決定されることを許容しつつ、受信したパケットのフロー識別情報に基づいて、メモリ内のアドレスを一つ決定するアドレス決定部と、決定されたアドレスから連続して２以上の所定個数のフローデータを読み出すデータ読出部と、受信したパケット中のフロー識別情報に一致するフロー識別情報を有するフローデータが、読み出した複数のフローデータの中に存在する場合に、このフローデータに含まれるパケット数を加算して、メモリにこのフローデータを書き戻す更新部とを備える。【選択図】図４
2009296158.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを流れる通信データの統計をとる通信データ統計装置であって、
パケットのフローを識別可能なフロー識別情報と、該フローに属するパケットの数を示すパケット数とを少なくとも含むフローデータを複数記憶するメモリと、
フロー識別情報を含むパケットを受信する受信部と、
異なるフロー識別情報に対して同一のアドレスが決定されることを許容しつつ、前記受信したパケットのフロー識別情報に基づいて、前記メモリ内のアドレスを一つ決定するアドレス決定部と、
前記メモリの前記決定されたアドレスから連続して複数のフローデータを読み出すデータ読出部と、
前記受信したパケット中のフロー識別情報に一致するフロー識別情報を有するフローデータが前記読み出した複数のフローデータの中に存在する場合に、該フローデータに含まれるパケット数を更新して、前記メモリに該フローデータを書き戻す更新部と
を備える通信データ統計装置。
【請求項２】
請求項１に記載の通信データ統計装置であって、
前記更新部は、前記受信したパケット中のフロー識別情報に一致するフロー識別情報を有するフローデータが前記読み出した複数のフローデータの中に存在しない場合に、前記複数のフローデータの中から、上書きの対象となるフローデータを所定の基準に基づき選択し、該選択されたフローデータを、前記受信したパケット中のフロー識別情報に基づいて上書きする
通信データ統計装置。
【請求項３】
請求項２に記載の通信データ統計装置であって、
前記更新部は、前記複数のフローデータのうち、記録されたパケット数が最も少ないフローデータを、上書きの対象として選択する
通信データ統計装置。
【請求項４】
請求項１ないし請求項３のいずれかに記載の通信データ統計装置であって、
前記データ読出部は、前記２以上のフローデータをバースト転送によって前記メモリから読み出す
通信データ統計装置。
【請求項５】
請求項１ないし請求項４のいずれかに記載の通信データ統計装置であって、
前記アドレス決定部は、前記受信したパケットのフロー識別情報のハッシュ値を求め、該ハッシュ値に対応したアドレスを一つ決定する
通信データ統計装置。
【請求項６】
請求項１ないし請求項５のいずれかに記載の通信データ統計装置であって、
前記フローテーブルには、前記所定個数のフローデータを含むブロックの単位で、前記フローデータが記録されており、
前記データ読出部は、前記決定されたアドレスに対応するブロックから、前記所定個数のフローデータをまとめて読み出す
通信データ統計装置。
【請求項７】
通信データ統計装置が、ネットワークを流れる通信データの統計をとる通信データ統計方法であって、
前記通信データ統計装置は、パケットのフローを識別可能なフロー識別情報と、該フローに属するパケットの数を示すパケット数とを少なくとも含むフローデータを複数記憶するメモリを備えており、
フロー識別情報を含むパケットを受信する工程と、
異なるフロー識別情報に対して同一のアドレスが決定されることを許容しつつ、前記受信したパケットのフロー識別情報に基づいて、前記メモリ内のアドレスを一つ決定する工程と、
前記メモリの前記決定されたアドレスから連続して２個以上のフローデータを読み出す工程と、
前記受信したパケット中のフロー識別情報に一致するフロー識別情報を有するフローデータが前記読み出した複数のフローデータの中に存在する場合に、該フローデータに含まれるパケット数を更新して、前記メモリに該フローデータを書き戻す工程と
を含む通信データ統計方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを流れる通信データの統計をとる技術に関する。
【背景技術】
【０００２】
インターネットは重要な社会インフラとして定着しており、従来のベストエフォート型のデータ通信だけでなく、音声や動画、基幹業務のトランザクションデータなど、通信の品質の保証が必要なデータの通信も行われつつある。また、ＡＤＳＬ（Asymmetric Digital Subscriber Line）やＦＴＴＨ（Fiber To The Home）技術の普及によってアクセス回線はブロードバンド化され、これに伴い、通信されるデータ量も増大している。
【０００３】
このような背景から、通信事業者やＩＳＰ（インターネットサービスプロバイダ）はネットワーク内の通信の状態を把握するため、ネットワークを流れる通信データの統計をとる技術を必要としている。中でも、通信データの送信元や宛先、利用されるアプリケーション、品質レベルなどにより分類されるフロー毎に通信データの統計をとる技術に対する要求が高い。
【０００４】
大規模なネットワークでは、その中を流れるフローの数は膨大となり、フローの統計情報を収集する装置には大容量のメモリが必要となる。また、メモリが大容量になれば、記憶された統計情報を高速に検索や更新が可能なメモリ管理方式が必要となる（例えば、非特許文献１参照）。
【０００５】
【非特許文献１】Kenichi Yoshida, Satoshi Katsuno, Shigehiro Ano, Katsuyuki Yamazaki, Masato Tsuru: Stream Mining for Network Management, IEICE, vol.E89-B, no.6, pp.1774-1780 (2006)
【発明の開示】
【発明が解決しようとする課題】
【０００６】
このような問題を考慮し、本発明が解決しようとする課題は、大規模なネットワークにおいても高速にフローの統計情報を記録・更新可能な技術を提供することにある。
【課題を解決するための手段】
【０００７】
本発明は、上述の課題の少なくとも一部を解決するためになされたものであり、以下の形態又は適用例として実現することが可能である。
【０００８】
［適用例１］ネットワークを流れる通信データの統計をとる通信データ統計装置であって、パケットのフローを識別可能なフロー識別情報と、該フローに属するパケットの数を示すパケット数とを少なくとも含むフローデータを複数記憶するメモリと、フロー識別情報を含むパケットを受信する受信部と、異なるフロー識別情報に対して同一のアドレスが決定されることを許容しつつ、前記受信したパケットのフロー識別情報に基づいて、前記メモリ内のアドレスを一つ決定するアドレス決定部と、前記メモリの前記決定されたアドレスから連続して複数のフローデータを読み出すデータ読出部と、前記受信したパケット中のフロー識別情報に一致するフロー識別情報を有するフローデータが前記読み出した複数のフローデータの中に存在する場合に、該フローデータに含まれるパケット数を更新して、前記メモリに該フローデータを書き戻す更新部とを備える通信データ統計装置。
【０００９】
このような通信データ統計装置では、メモリから複数のフローデータを連続して読み出し、これらのフローデータの中から、受信したパケットと同一のフロー識別情報を有するフローデータを検索する。そして、受信したパケットと同一のフロー識別情報を有するフローデータが存在すれば、そのフローデータのパケット数を更新する。このような通信データ統計装置であれば、メモリから連続して複数のフローデータを読み出すので、異なるアドレスから複数のフローデータを読み出すよりも、効率的にフローデータを読み出すことができる。この結果、大規模なネットワークにおいても高速にフローの統計情報を記録・更新することが可能になる。
【００１０】
［適用例２］適用例１に記載の通信データ統計装置であって、前記更新部は、前記受信したパケット中のフロー識別情報に一致するフロー識別情報を有するフローデータが前記読み出した複数のフローデータの中に存在しない場合に、前記複数のフローデータの中から、上書きの対象となるフローデータを所定の基準に基づき選択し、該選択されたフローデータを、前記受信したパケット中のフロー識別情報に基づいて上書きする通信データ統計装置。
【００１１】
このような通信データ統計装置では、メモリから読み出した複数のフローデータの中に、受信したパケットのフロー識別情報に一致するフロー識別情報を有するフローデータが存在しなかった場合であっても、これらの複数のフローデータの中から、上書きの対象とするフローデータを選択する。そのため、例えば、新規のフローを受信した場合などに、アドレス決定部によって決定されたアドレスが、他のフローと重複してしまった場合であっても、新規のフローの記録先を効率的に決定することができる。
【００１２】
［適用例３］適用例２に記載の通信データ統計装置であって、前記更新部は、前記複数のフローデータのうち、記録されたパケット数が最も少ないフローデータを、上書きの対象として選択する通信データ統計装置。このような通信データ統計装置であれば、出現頻度の少ないフローのフローデータを、新規のフローのフローデータで上書きすることができる。
【００１３】
［適用例４］適用例１ないし適用例３のいずれかに記載の通信データ統計装置であって、前記データ読出部は、前記２以上の所定個数のフローデータをバースト転送によって前記メモリから読み出す通信データ統計装置。このような通信データ統計装置であれば、メモリのバースト転送機能を利用することで複数のフローデータを高速に読み出すことができる。
【００１４】
［適用例５］適用例１ないし適用例４のいずれかに記載の通信データ統計装置であって、前記アドレス決定部は、前記受信したパケットのフロー識別情報のハッシュ値を求め、該ハッシュ値に対応したアドレスを一つ決定する通信データ統計装置。このような通信データ統計装置であれば、フロー識別情報のハッシュ値からアドレスを決定するので、フローの種類が膨大であっても、有限個のアドレスのうち、一つのアドレスを決定することができる。
【００１５】
［適用例６］適用例１ないし適用例５のいずれかに記載の通信データ統計装置であって、前記フローテーブルには、前記所定個数のフローデータを含むブロックの単位で、前記フローデータが記録されており、前記データ読出部は、前記決定されたアドレスに対応するブロックから、前記所定個数のフローデータをまとめて読み出す通信データ統計装置。このような通信データ統計装置であれば、ブロックという大きな単位でフローデータの更新を行うことができるので、メモリ空間を有効に利用することが可能になる。
【００１６】
なお、本発明は、上述した通信データ統計装置としての構成のほか、通信データ統計方法や、コンピュータプログラムとしても構成することができる。かかるコンピュータプログラムは、コンピュータが読取可能な記録媒体に記録されていてもよい。記録媒体としては、例えば、フレキシブルディスクやＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、光磁気ディスク、メモリカード、ハードディスク等の種々の媒体を利用することができる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施の形態をいくつかの実施例に基づき説明する。
Ａ．第１実施例：
図１は、第１実施例としての通信データ統計装置１０４を含むネットワーク構成の一例を示す図である。図示するように、本実施例のネットワーク構成には、それぞれ相互に接続されてパケットの中継を行うルータ１０１ａ〜１０１ｃや、ルータ１０１ｂに接続されたサーバ１０２ａ、ルータ１０１ｃに接続されたサーバ１０２ｂ、ルータ１０１ａに接続された通信データ統計装置１０４、ルータ１０１ａに接続された端末装置１０３ａ〜１０３ｃ、が含まれている。ルータ１０１ａは、ミラーリング技術あるいはＲＦＣ３１７６に規定されたｓＦｌｏｗ技術を用いることで、中継を行ったパケット（トラフィック）のコピーを通信データ統計装置１０４に送信する。
【００１８】
図２は、本実施例の通信データ統計装置１０４の概略構成を示すブロック図である。通信データ統計装置１０４は、ネットワークを流れる通信データの統計をとる装置である。図示するように、本実施例の通信データ統計装置１０４は、ルータ１０１ａから送信されたパケットを受信するパケット受信部２０１と、パケット受信部２０１が受信したパケットの解析を行うパケット解析部２０２と、パケット解析部２０２によって解析されたパケットについて統計処理を行う統計処理部２０４と、統計処理の結果が記録されるフローテーブル２２１を保持するメモリ２２２と、統計処理の結果を出力する統計情報出力部２０３と、統計処理部２０４や統計情報出力部２０３に対する制御を行う制御部２１２とを備えている。本実施例では、メモリ２２２として、バースト転送機能を備えるＳＤＲＡＭを用いる。ただし、メモリの種類はＳＤＲＡＭに限らず、例えば、アクセスのレイテンシを低減させたＲＬＤＲＡＭ等を用いることができる。本実施例では、パケット受信部２０１は、ルータ１０１ａから送信されたパケットを受信するが、パケット受信部２０１は、ネットワークを流れるパケットを横取り（キャプチャ）することとしてもよい。
【００１９】
パケット受信部２０１と、パケット解析部２０２と、統計処理部２０４と、統計情報出力部２０３と、制御部２１２とは、それぞれ、ＦＰＧＡ（Field Programmable Gate Array）によって構成されている。これらは、全ての機能が１つのＦＰＧＡによって構成されていてもよいし、個別のＦＰＧＡによって構成されていてもよい。また、ＦＰＧＡではなく、ＡＳＩＣ（Application Specific Integrated Circuit）によって構成されていてもよい。
【００２０】
パケット解析部２０２は、パケット受信部２０１によって受信したパケットから、フロー識別子の値や、パケットの受信時刻、バイト数、ＴＣＰのフラグ情報等を抽出し、これらの抽出された情報を統計処理部２０４へ送信する。フロー識別子は、パケットのヘッダに記録された情報である。フロー識別子としては、例えば、ＶＬＡＮ  ＩＤ（ＶＩＤ）や、送信元ＭＡＣアドレス、宛先ＭＡＣアドレス、送信元ＩＰアドレス（ＳＩＰ）、宛先ＩＰアドレス（ＤＩＰ）、上位プロトコル（ＰＲＴ)、送信元ポート番号（ＳＰＴ）、宛先ポート番号（ＤＰＴ）が挙げられる。
【００２１】
統計処理部２０４は、パケット解析部２０２から受信したフロー識別子の値に基づいて、パケットのフローを分析し、分析されたフロー毎にパケット数の集計を行う。集計の結果は、統計処理部２０４に接続されたメモリ２２２が有するフローテーブル２２１に記録する。この統計処理部２０４の詳細な構成については後述する。
【００２２】
制御部２１２には、管理端末２１１が接続される。制御部２１２は、この管理端末２１１の指示に従って、統計処理部２０４や統計情報出力部２０３に対する種々の設定を行う。管理端末２１１と制御部２１２とは、ネットワークによって接続されてもよいし、ＲＳ−２３２ＣやＵＳＢ等のインタフェースによって接続されてもよい。
【００２３】
統計情報出力部２０３は、統計処理部２０４から受信した統計情報を外部の装置に出力する。統計情報の出力は、ネットワークインタフェースやＰＣＩバスなど、事前に設定された任意のインタフェースを介して行う。ネットワークインタフェースによって出力する際には、制御部２１２を経由して管理者により設定された、宛先ＩＰアドレス、送信元ＩＰアドレスを用いて送信パケットを生成する。なお、統計情報出力部２０３は、所定のインタフェースに対して統計情報を出力する以外にも、通信データ統計装置１０４に接続された表示装置や印刷装置に対して、統計情報を出力することとしてもよい。
【００２４】
図３は、フローテーブル２２１の構成を示す図である。フローテーブル１１６は、「フローエントリ番号」と「フロー識別情報」と「統計情報」とを含んでいる。「フローエントリ番号」は、フローテーブル１１６の各エントリを一意に識別する識別子である。「フロー識別情報」には、上述したフロー識別子の各値（ＶＩＤ，ＤＩＰ，ＤＩＰ，ＰＲＴ，ＳＰＴ，ＤＰＴ）やその他の情報が格納される。その他の情報には、必要に応じて、送信元ＭＡＣアドレス、宛先ＭＡＣアドレス等、パケットのヘッダに含まれる情報が格納される。フローテーブル１１６に格納するフロー識別子の種類は、任意に設定可能である。「統計情報」には、パケット数、バイト数、開始時刻、最終更新時刻、その他の情報からなる。バイト数は受信したパケットの積算バイト数を表し、開始時刻は、そのフローに属するパケットが最初に到着した時刻を表す。また、最終更新時刻は、そのフローに属するパケットが最後に到着した時刻を表す。その他の情報には、必要に応じて、ＴＣＰフラグのうちのＳＹＮフラグが立っているパケットの数や、あるフロー識別子の出現した種類数（異なり数）等が格納される。なお、以下では、フローテーブル２２１に記録された「フロー識別情報」と「統計情報」とをまとめて、「フローデータ」という。
【００２５】
図４は、統計処理部２０４の詳細な構成を示す図である。統計処理部２０４は、解析結果受信部５０１、格納データ抽出部５０２、アドレス決定部５０３、データ比較部５０４、統計更新部５０５、閾値判定部５０６、データ書込み部５０７、フローデータ出力部５０８から構成される。
【００２６】
解析結果受信部５０１は、パケット解析部２０２から、フロー識別子の値（ＳＩＰ、ＤＩＰ、ＰＲＴ、ＳＰＴ、ＤＰＴ等）や、パケット受信時刻、バイト数、ＴＣＰフラグ情報等を受信する。そして、このうち、フロー識別子の値を、格納データ抽出部５０２に転送し、他の情報を統計更新部５０５に転送する。
【００２７】
格納データ抽出部５０２は、解析結果受信部５０１から受信したフロー識別子の値の中から、フローテーブル２２１に格納すべきフロー識別子の値を抽出する。格納データ抽出部５０２は、フロー識別子の値を抽出すると、抽出したフロー識別子の値を、アドレス決定部５０３とデータ比較部５０４とに送信する。なお、フローテーブル２２１に格納すべきフロー識別子の種類は、送信元ＩＰアドレス毎の統計情報を収集する場合はＳＩＰのみを抽出するという様に、統計の目的に応じて管理者により制御部２１２を経由して事前に設定される。
【００２８】
アドレス決定部５０３は、格納データ抽出部５０２から受信したフロー識別子の値に基づいて、受信したパケットの統計情報を記録するフローテーブル２２１のエントリ番号を決定する。具体的には、格納データ抽出部５０２から受信したフロー識別子の値のハッシュ値をハッシュ関数によって求め、このハッシュ値をエントリ番号に対応付ける（マッピングする）ことで、エントリ番号の決定を行う。エントリ番号を決定すると、更に、アドレス決定部５０３は、このエントリ番号に対応するメモリ２２２のアドレスを求める。例えば、１エントリに格納されるフローデータの容量をＬバイト、フローテーブル２２１が記憶されているアドレスまでのオフセットアドレスをαとすれば、ここで算出されるアドレスは、（α＋エントリ番号＊Ｌ）となる。なお、ハッシュ関数とは、あるデータが与えられたときに、そのデータを代表する数値を得る関数のことをいう。このハッシュ関数では、もとのデータから、ある一定範囲の数値が生成される。そのため、本実施例では、異なるフロー識別子の値であっても、ハッシュ値を求めた結果、同一のエントリ番号（つまり、同一のアドレス）が算出される場合がある。フロー識別子の値の種類は膨大である一方、メモリ２２２の容量の関係によりアドレスやエントリの数は制限されるためである。
【００２９】
アドレス決定部５０３は、メモリ２２２のアドレスを求めると、このアドレスをデータ比較部５０４に通知するとともに、メモリ２２２に対して、このアドレスから連続した４つ分のフローデータを読み込む信号を送信する。この読み込み信号によって、連続した４つのフローデータが、メモリ２２２からデータ比較部５０４にバースト転送される。なお、このように本実施例では、１つのアドレスを決定すると、このアドレスから連続して４つ分のフローデータを読み込むため、アドレス決定部５０３によって決定されるエントリ番号は、エントリ番号の最大値をＮとすると、１から（Ｎ−３）までのいずれかの値をとることになる。
【００３０】
データ比較部５０４は、フローテーブル２２１から受信した４つのフローデータについて、それぞれ、そのフローデータに含まれるフロー識別子の値と、格納データ抽出部５０２から受信したフロー識別子の値とを比較する。この比較の結果、フローデータに含まれるフロー識別子の値と、格納データ抽出部５０２から受信したフロー識別子の値とがすべて一致するフローデータが存在する場合には（換言すれば、受信したパケットのフローが既出のフローである場合には）、データ比較部５０４は、そのフローデータを統計更新部５０５に送信し、更に、このフローデータが記録されていたエントリのアドレスをデータ書込み部５０７に送信する。例えば、１エントリに格納されるフローデータの容量をＬバイト、フローテーブル２２１が記憶されているアドレスまでのオフセットアドレスをαとすれば、Ｒ個目のエントリのアドレスは、（α＋Ｒ＊Ｌ）と算出することができる。
【００３１】
フローテーブル２２１から受信した４つのフローデータのすべてについて、そのフローデータに含まれるフロー識別子と、格納データ抽出部５０２から受信したフロー識別子とが一致しない場合には（換言すれば、受信したパケットのフローが新規のフローである場合には）、データ比較部５０４は、フローデータを読み込んだ４つのエントリの中から上書きの対象とするエントリを１つ選択する。本実施例では、統計情報に最も少ないパケット数が記録されたエントリを、上書きするエントリとして選択する。上書きするエントリを選択すると、データ比較部５０４は、選択したエントリのフローデータに新規のデータを代入する。具体的には、フロー識別情報には、格納データ抽出部５０２から受信したフロー識別子の値を代入し、統計情報のパケット数には、「０」を代入する。こうして、新規のフローデータを作成すると、データ比較部５０４は、作成したフローデータを統計更新部５０５に送信し、そのエントリのアドレスをデータ書込み部５０７に送信する。
【００３２】
統計更新部５０５は、データ比較部５０４からフローデータを受信し、解析結果受信部５０１からパケット受信時刻、バイト数、ＴＣＰフラグ情報等を受信する。統計更新部５０５は、これらのデータを受信すると、まず、フローデータのうち、統計情報中のパケット数を１つ、カウントアップする。また、統計更新部５０５は、統計情報に記録された各値（積算バイト数やフロー開始時刻、最終更新時刻、ＳＹＮフラグがセットされているパケットの数）を、解析結果受信部５０１から受信した情報に基づいて更新する。具体的には、積算バイト数に、今回受信したパケットのバイト数を加算し、最終更新時刻を現在の時刻に更新する。また、受信したパケットのヘッダに、ＳＹＮフラグがセットされていれば、ＳＹＮフラグがセットされているパケットの数を加算する。統計更新部５０５は、このようにして更新したフローデータを閾値判定部５０６へ送信する。
【００３３】
閾値判定部５０６は、統計更新部５０５から受信したフローデータ中のパケット数と、所定の閾値とを比較する。この比較の結果、パケット数が閾値を越えている場合には、閾値判定部５０６は、統計更新部５０５によって更新されたフローデータをフローデータ出力部５０８へと出力する。フローデータ出力部５０８は、閾値判定部５０６からフローデータを受信すると、そのフローデータを統計情報出力部２０３に送信する。閾値判定部５０６は、フローデータをフローデータ出力部５０８に出力すると、出力対象となったフローデータの統計情報をゼロリセットする。そして、このように更新したフローデータをデータ書込み部５０７に送信する。パケット数が閾値を越えていない場合には、閾値判定部５０６は、統計更新部５０５から受信したフローデータをそのままデータ書込み部５０７に送信する。上述した閾値は、制御部２１２を経由して管理者により適宜設定される。
【００３４】
データ書込み部５０７は、閾値判定部５０６から受信したフローデータを、フローテーブル中の、データ比較部５０４から受信したメモリアドレスに書き込む。こうすることで、受信パケットが既出のフローであれば、そのフローに対応するエントリのフローデータが更新されてメモリに書き戻され、受信パケットが新規のフローであれば、データ比較部５０４によって選択されたエントリに、新規のフローデータが上書きされることになる。このように、本実施例の通信データ統計装置１０４は、メモリ２２２からフローデータを読み込む際には、連続して複数のフローデータを読み込むが、メモリ２２２にフローデータを書き込む際には、新規あるいは更新したフローデータのみを書き込むのである。
【００３５】
続いて、上述したアドレス決定部５０３とデータ比較部５０４とで行われる処理を、参考までにフローチャートを用いて詳細に説明する。
図５は、アドレス決定部５０３とデータ比較部５０４とで行われる処理のフローチャートである。図示するように、まず、アドレス決定部５０３は、格納データ抽出部５０２から、受信パケットのフロー識別子の値を受信すると、そのフロー識別子の値とハッシュ関数とに基づいて、１つのハッシュ値を求め、このハッシュ値にマッピングされたエントリ番号を求める（ステップＳ１００）。エントリ番号を求めると、アドレス決定部５０３は、そのエントリ番号に対応するメモリアドレスを算出する（ステップＳ１１０）。例えば、１エントリに格納されるフローデータの容量がＬバイト、フローテーブル２２１が記憶されているアドレスまでのオフセットアドレスをαとすれば、ここで算出されるアドレスは、（α＋エントリ番号＊Ｌ）となる。アドレス決定部５０３は、メモリアドレスを算出すると、メモリ２２２に対して、そのメモリアドレスから４つ分のフローデータをバースト転送させる（ステップＳ１２０）。転送されたフローデータは、データ比較部５０４によって読み込まれる。
【００３６】
続いて、データ比較部５０４は、メモリ２２２から４つのフローデータを受信すると、受信したフローデータのうちの最初のフローデータに含まれるフロー識別子の各値と、格納データ抽出部５０２から受信したフロー識別子の各値（つまり、パケット受信部２０１がルータ１０１ａから受信したパケットのフロー識別子の各値）とを比較する（ステップＳ１３０）。そして、比較の結果、両者のフロー識別子の値がすべて一致するかを判断する（ステップＳ１４０）。フロー識別子の値がすべて一致する場合には、受信したパケットのフローは既出のフローであると判断できるため、データ比較部５０４は、現在参照しているフローデータを統計更新部５０５に送信し、このフローデータが格納されていたエントリのメモリアドレスをデータ書込み部５０７に送信する（ステップＳ２００）。こうすることで、データ書込み部５０７によって、既出のフローの統計情報が更新されることになる。
【００３７】
上記ステップＳ１４０において、フロー識別子の値が一つでも異なると判断された場合には、受信したパケットのフローは新規のフローであると判断できるため、データ比較部５０４は、現在参照しているフローデータが４つのフローデータのうちの１つ目のフローデータであるか、もしくは、現在参照しているフローデータに記録されたパケット数が、パケット数の最小値を表す変数Ｍ（以下、「最小値Ｍ」という）よりも少ないかを判断する（ステップＳ１５０）。かかるステップにおいて、データ比較部５０４は、現在参照しているフローデータが４つのフローデータのうちの１つ目のフローデータであるか、もしくは、現在参照しているフローデータに記録されたパケット数が、最小値Ｍよりも少ないと判断すれば、データ比較部５０４は、最小値Ｍに、現在参照しているフローデータのパケット数を代入する（ステップＳ１６０）。そして、データ比較部５０４は、現在参照しているフローデータのエントリ番号を一時的に記憶する（ステップＳ１７０）。現在参照しているフローデータが２つ目以降であるか、パケット数が最小値Ｍ以上であれば、データ比較部５０４は、上述したステップＳ１６０およびステップＳ１７０の処理をスキップする。データ比較部５０４は、続いて、現在参照しているフローデータが４つのフローデータのうちの最後のフローデータであるかを判断し（ステップＳ１８０）、最後のフローデータでなければ、処理をステップＳ１３０に戻して、次のフローデータについて、上述した処理を繰り返す。
【００３８】
上記ステップＳ１８０において、現在参照しているフローデータが最後のフローデータであると判断された場合には、データ比較部５０４は、４つのフローデータの中で、最も、パケット数の少ないフローデータのエントリ番号を記憶していることになる。そこで、データ比較部５０４は、このエントリ番号に、新規のフローデータを作成する（ステップＳ１９０）。つまり、本実施例では、受信したパケットのフローが新規である場合には、４つのフローデータのうち、記録されたパケット数が最も少ないフローのエントリを上書きするのである。新規のフローデータは、フロー識別情報に、格納データ抽出部５０２から受信した情報を格納し、統計情報に対して、「０」を代入することで作成する。こうして新規のフローデータを作成すると、データ比較部５０４は、作成したフローデータと、一時的に記憶していたエントリ番号に対応するメモリアドレスとをデータ書込み部５０７に送信する（ステップＳ２００）。こうすることで、データ書込み部５０７によって、パケット数の少ないエントリのフローデータが、新規のフローデータによって上書きされることになる。
【００３９】
以上で説明した第１実施例の通信データ統計装置１０４によれば、１つのハッシュ関数によって定まるメモリアドレスから、４つの連続したフローデータ読み出す。そして、この４つのフローデータの中から、更新あるいは上書きの対象となるフローデータを特定する。そのため、ハッシュ関数による演算によって、異なるフロー識別子の値から、同一のエントリ番号が算出されてしまう場合があっても（換言すれば、エントリ番号が衝突する場合があっても）、４つのフローデータの中から、目的のフローデータを効率的に特定することが可能になる。
【００４０】
また、本実施例では、メモリ２２２のバースト転送を利用することで、一度に４つの連続したフローデータ読み出すこととしたので、例えば、複数のハッシュ関数を用いることで離散した複数のメモリアドレスからフローデータをそれぞれ読み込むよりも、格段に高速にフローデータを読み出すことが可能になる。この結果、ネットワークの規模が大きい場合や回線速度が高速な場合であっても、メモリ２２２へのアクセス速度がボトルネックとなって、統計処理のスピードが低下してしまうことを抑制することができる。
【００４１】
また、本実施例の通信データ統計装置１０４によれば、受信したパケットのフロー毎に、パケット数や積算バイト数などが集計される。そして、集計されたパケットの数が所定の閾値以上になれば、これらの情報が、統計情報として外部の機器に出力される。キャリアやＩＳＰは、こうして出力されたフロー毎の統計情報を用いることにより、サービス提供時のデータの伝送品質の状況を確認することが可能となる。また、このような情報を用いることで、ネットワーク資源を有効に活用するためのトラフィック・エンジニアリングが可能になる。さらに、顧客の需要を予測してネットワーク資源を計画的に準備しておき、ユーザの要求（帯域、サービス）に対して迅速にネットワーク資源を提供するプロビジョニングや、アタックの検出・分析、課金などを行うことが可能となる。
【００４２】
なお、本実施例では、メモリ２２２から一度に転送されるフローデータの数を４つとしたが、一度に転送するフローデータの数は、ネットワークの規模に応じて、２以上の任意の数とすることが可能である。一度に読み込むフローデータの数を増加させると、大規模のネットワークにおいて既出のフローデータを検索する精度は高まるが、メモリ２２２からの読み込み時間が増加し、統計情報の更新速度が遅くなる。このようなトレードオフの関係を考慮して、一度に読み込むフローデータの数を設定することが可能である。
【００４３】
また、本実施例では、新規のフローが検出された場合には、４つのエントリのうち、記録されたパケット数が最も少ないエントリを上書きの対象としている。しかし、上書きの対象は、最終更新時刻が最も古いエントリや、積算バイト数が最も少ないエントリなど、種々の条件を適用することが可能である。
【００４４】
Ｂ．第２実施例：
続いて、本発明の第２実施例について説明する。上述した第１実施例では、図３に示したように、フローテーブル２２１には、１つのエントリに対して、１つのフローデータ（フロー識別情報＋統計情報）が格納されている。これに対して、第２実施例では、メモリ２２２をブロックごとに管理し、１つのブロックに対して、複数のフローデータが記録される構成とする。
【００４５】
図６は、第２実施例におけるフローテーブル２２１ｂの構成を示す図である。図示するように、本実施例では、フローテーブル２２１ｂには、１つのブロックにつき、連続読み出しの単位である４つのフローデータが格納されている。本実施例のアドレス決定部５０３は、図５に示すようにフローテーブルを管理するため、フロー識別子のハッシュ値を、ブロック番号にマッピングし、このブロック番号からメモリアドレスを生成する。例えば、１エントリに格納されるフローデータの容量がＬバイト、フローテーブル２２１が記憶されているアドレスまでのオフセットアドレスをαとすれば、ここで算出されるアドレスは、（α＋ブロック番号＊Ｌ＊４）となる。
【００４６】
このように構成された第２実施例によれば、１つのブロック番号を特定するだけで、複数のフローデータをまとめて読み出すことができる。この結果、メモリ空間を有効に利用することが可能になる。なお、本実施例では、１つのブロックは４つのフローデータを含むこととしたが、実施例１と同様に、その数に特に限定はない。
【００４７】
Ｃ．第３実施例：
続いて、本発明の第３実施例について説明する。上述した第１実施例や第２実施例では、通信データ統計装置１０４は独立した装置の形態をとっている。これに対して、第３実施例では、上述した通信データ統計装置１０４が有する機能（以下、「通信データ統計機能」という）を図１に示したルータ１０１（例えば、ルータ１０１ａ）の内部に実装させる構成とする。
【００４８】
図７は、通信データ統計機能を内蔵したルータ１０１の機能ブロック図である。ルータ１０１は、入力回線に接続された受信パケット処理部７０１と、出力回線に接続された送信パケット処理部７０２と、受信パケット処理部７０１に接続された検索処理部７０３と、トラフィック統計取得部７０５と、検索処理部７０３に付随するルーティングテーブル７０４と、ルータ制御部７１１とを備えている。ルータ制御部７１１は、管理端末２１１に接続されており、管理端末７１２の指示に従い、受信パケット処理部７０１や送信パケット処理部７０２、検索処理部７０３に対して、各種の設定を行う。管理端末２１１とルータ制御部７１１とは、ネットワークによって接続されてもよいし、ＲＳ−２３２ＣやＵＳＢ等のインタフェースによって接続されてもよい。
【００４９】
受信パケット処理部７０１は、入力回線から受信したパケットを一旦バッファに蓄積し、蓄積したパケットのヘッダ情報を、検索処理部７０３とトラフィック統計取得部７０５とに送信する。
【００５０】
検索処理部７０３は、受信パケット処理部７０１からヘッダ情報を受信すると、ルーティングテーブル７０４を参照して、そのパケットの出力先となる出力回線を検索し、その検索結果を、受信パケット処理部７０１に通知する。
【００５１】
受信パケット処理部７０１は、検索処理部７０３から検索結果を受信すると、検索結果に含まれる出力回線が含まれる送信パケット処理部７０２に、バッファに蓄積されたパケットと検索結果とを転送する。
【００５２】
送信パケット処理部は、受信パケット処理部から、パケット情報と検索処理部７０３による検索結果を受信し、この検索結果に含まれる出力回線にパケットを出力する。
【００５３】
トラフィック統計取得部７０５は、図２に示した通信データ統計装置１０４が有する機能ブロックをすべて有する。ただし、第１実施例では、図２のパケット受信部は、ルータ１０１ａからパケットを受信しているのに対して、本実施例では、図７に示した受信パケット処理部７０１からパケットのヘッダ情報を受信する。また、第１実施例では、統計情報出力部２０３は、所定のインタフェースに対して統計情報を出力するのに対して、本実施例では、図７に示した受信パケット処理部７０１に統計情報が出力される。統計情報を取得した受信パケット処理部７０１は、所定のネットワーク機器（例えば、端末１０３ａ〜１０３ｃ）に、統計情報を転送する。また、トラフィック統計取得部７０５内の制御部２１２は、ルータ制御部７１１と接続しており、ルータ制御部７１１経由でトラフィック統計取得部７０５を制御することができる。
【００５４】
Ｄ．第４実施例：
最後に、本発明の第４実施例について説明する。本実施例では、上述した第３実施例のルータ１０１が備えるトラフィック統計取得部７０５（図７参照）を、ルータ外部のネットワーク制御装置６０１に実装している。
【００５５】
図８は、ネットワーク制御装置６０１の構成を示す図である。ネットワーク制御装置６０１は、ＣＰＵ６０２、ワークメモリ６０３、プログラムメモリ６０４、統計情報データベース６０５、トラフィック統計取得装置６０６、通信インタフェース６０７、バス６０８、入出力装置６２１（キーボードやマウス等の入力装置およびディスプレイやプリンタ等の出力装置を含む）から構成される。このネットワーク制御装置６０１は、第１実施例と同様に、ルータ１０１ａから、ミラーリング技術あるいはＲＦＣ３１７６に規定されたｓＦｌｏｗ技術によって転送されたパケット（トラフィック）のコピーを通信インタフェース６０７によって受信する。
【００５６】
プログラムメモリ６０４には、トラフィック統計分析プログラム６１２と、統計情報受信プログラム６１１とが記憶されている。ＣＰＵ６０２は、ワークメモリ６０３をワークエリアとして用いつつ、これらのプログラムを実行する。統計情報受信プログラム６１１は、トラフィック統計取得装置６０６から出力された統計情報を受信し、受信した統計情報を統計情報データベース６０５に記録するためのプログラムである。トラフィック統計分析プログラム６１２は、受信した統計情報を分析して、その分析結果を入出力装置６２１に出力するためのプログラムである。
【００５７】
トラフィック統計取得装置６０６は、第３実施例のトラフィック統計取得部７０５に相当するデバイスである。第３実施例と異なるのは、本実施例のトラフィック統計取得装置６０６は、通信インタフェース６０７を有し、この通信インタフェース６０７を経由してネットワークからトラフィックを受信する点である。また、第３実施例のトラフィック統計取得部７０５と比較して、本実施例のトラフィック統計取得装置６０６には、通信インタフェース６０７から受信したパケットのヘッダからフロー識別情報を抽出する機能が追加される。また、第３実施例のトラフィック統計取得部７０５の統計情報の出力先は、受信パケット処理部１１１であったのに対して、本実施例のトラフィック統計取得装置６０６は、バス６０８に対して統計情報を出力する。
【００５８】
以上、本発明の種々の実施例について説明したが、本発明はこれら実施例に限定されず、その趣旨を逸脱しない範囲で種々の構成を採ることができることはいうまでもない。例えば、ハードウェアによって実現した機能は、ＣＰＵが所定のプログラムを実行することでソフトウェア的に実現することとしてもよい。
【図面の簡単な説明】
【００５９】
【図１】通信データ統計装置１０４を含むネットワーク構成の一例を示す図である。
【図２】通信データ統計装置１０４の概略構成を示すブロック図である。
【図３】フローテーブル２２１の構成を示す図である。
【図４】統計処理部２０４の詳細な構成を示す図である。
【図５】アドレス決定部５０３とデータ比較部５０４とで行われる処理のフローチャートである。
【図６】第２実施例におけるフローテーブル２２１ｂの構成を示す図である。
【図７】通信データ統計機能を内蔵したルータ１０１の機能ブロック図である。
【図８】ネットワーク制御装置６０１の構成を示す図である。
【符号の説明】
【００６０】
１０１，１０１ａ，１０１ｂ，１０１ｃ…ルータ
１０２ａ，１０２ｂ…サーバ
１０３ａ，１０３ｂ，１０３ｃ…端末装置
１０４…通信データ統計装置
１１１…受信パケット処理部
１１６…フローテーブル
２０１…パケット受信部
２０２…パケット解析部
２０３…統計情報出力部
２０４…統計処理部
２１１…管理端末
２１２…制御部
２２１，２２１ｂ…フローテーブル
２２２…メモリ
５０１…解析結果受信部
５０２…格納データ抽出部
５０３…アドレス決定部
５０４…データ比較部
５０５…統計更新部
５０６…閾値判定部
５０７…データ書込み部
５０８…フローデータ出力部
６０１…ネットワーク制御装置
６０５…統計情報データベース
６０６…トラフィック統計取得装置
６０７…通信インタフェース
６０８…バス
６２１…入出力装置
７０１…受信パケット処理部
７０２…送信パケット処理部
７０３…検索処理部
７０４…ルーティングテーブル
７０５…トラフィック統計取得部
７１１…ルータ制御部
【図１】
2009296158.tif 000003
【図２】
2009296158.tif 000004
【図３】
2009296158.tif 000005
【図４】
2009296158.tif 000006
【図５】
2009296158.tif 000007
【図６】
2009296158.tif 000008
【図７】
2009296158.tif 000009
【図８】
2009296158.tif 000010