[情報処理システムの構成]
図1は,情報処理システムの全体構成を示す図である。図1に示す情報処理システム10において,サーバ1と,クライアント端末2と,パケット処理装置3(以下,重複パケット検出装置3とも呼ぶ)と,パケット解析装置5とが設置されている。サーバ1及びクライアント端末2は,互いにインターネットやイントラネット等のネットワークを介して,互いにアクセス可能である。また,パケット解析装置5は,図1の例では,重複パケット検出装置3を介して,サーバ1等に接続したスイッチ4に接続している。なお,図1に示す情報処理システム10においては,2台のサーバ1を有しているが,これ以外の台数のサーバを有する情報処理システムであってよい。また,図1に示す情報処理システム10においては,3台のクライアント端末2を有しているが,これ以外の台数のクライアント端末を有するものであってよい。
サーバ1は,例えば,クライアント端末2からの処理要求に応じて処理を実行し,その処理の結果をクライアント端末2に返す。具体的に,サーバ1において実行される処理は,例えば,ユーザがクライアント端末2から入力したユーザのスケジュール等の情報を管理するものであり,ユーザからの処理要求に応じて,必要な情報をクライアント端末2に表示させるものであってよい。また,サーバ1において実行される処理は,例えば,複数のユーザが入力した各ユーザのスケジュール等の情報を管理するものであり,ユーザからの処理要求に応じて,ユーザ全員のスケジュールをまとめてクライアント端末に表示させるものであってもよい。
クライアント端末2は,例えば,サーバ1に処理要求を送信し,その結果を受信するものである。クライアント端末2は,例えば,デスクトップPC等の据え置き型の端末や携帯電話等のリモート端末である。
スイッチ4は,図1の例においては,サーバ1とネットワークとの間に配置されているものであり,例えば,ミラーポート(図示しない)を有するものである。ミラーポートは,例えば,ネットワークを流れる通信パケットを複製してそれぞれ出力するものである。図1の例において,スイッチ4のミラーポートは,例えば,ネットワークからサーバ1に向けて送信された通信パケットを複製し,サーバ1に向けて送信された通信パケットと同じ通信パケットを重複パケット検出装置3に送信する。また,図1の例において,スイッチ4とは別にネットワークタップを設置し,これによってネットワークを流れる通信パケットを複製するものであってもよい。なお,以下,通信パケットは,IP(Internet Protocol)において送受信されるIPパケットであるものとして説明を行う。
パケット解析装置5は,例えば,サーバ1やネットワークの稼動状態を監視するために,ネットワークを流れる通信パケットを取得して解析を行うものである。具体的に,パケット解析装置5は,例えば,単位時間内にネットワークを流れる通信パケットの数やパケットロスの発生有無についての解析(レイヤー4レベルの解析)や,アプリケーションの動作を含めたレスポンスタイムについての解析(レイヤー7レベルの解析)等を行う。また,パケット解析装置5は,システム管理者等の要求に応じて,解析結果を加工して出力するものであってもよい。
重複パケット検出装置3は,パケット解析装置5において解析を行うための通信パケットをネットワークから取得し,パケット解析装置5に送信する。そして,重複パケット検出装置3は,例えば,取得した通信パケットをパケット解析装置5に送信する前に,重複チェックを行って検出した重複パケットを排除する。これにより,パケット解析装置5は,重複パケットを排除した状態で,通信パケットの解析を行うことが可能になる。
[重複パケット検出装置とキャプチャポイント]
次に,重複パケット検出装置とキャプチャポイントについて説明する。図2は,重複パケット検出装置とキャプチャポイントとの関係を説明する図である。
キャプチャポイントは,図2に示すように,重複パケット検出装置3がネットワークにおいて通信パケットを取得する場所である。この通信パケットは,通信パケットに関するサービスの種類や各ネットワークの管理者の違いに依存して,送信される通信経路が異なる場合がある。そのため,キャプチャポイントは,複数箇所に設けられるのが一般的である。これにより,解析を行うために必要な通信パケットを網羅的に取得することが可能になる。
そして,解析対象の通信パケットは,ネットワーク上の機器における経路設定等によって,複数のキャプチャポイント(図2のキャプチャポイントA及びキャプチャポイントB)を通過する場合がある。この場合,パケット解析装置5における通信パケットの解析は,同一の通信パケットが複数回発生したものとして行われることになる。そのため,重複パケット検出装置3は,一般的に,取得した通信パケットに対して重複チェックを行い,重複パケットを排除した状態の通信パケットをパケット解析装置5に送信する。
ここで,重複チェックを行うためには,過去に取得した通信パケットを記憶し,新たに通信パケットを取得したときに,記憶した通信パケットとのマッチングを行う。そのため,重複パケット検出装置3は,重複チェックを行うために,取得した通信パケットの全てを保存しておく。そして,新たに通信パケットを取得する毎に,取得した通信パケットと保存されている通信パケットのマッチングを行い,重複パケットであると判定した場合に,取得した通信パケットを破棄する処理を行う。しかし,例えば,高速通信回線(例えば,通信速度が10(Gbps)である通信回線)によって通信パケットが送受信される場合,重複パケット検出装置3が保存する必要がある通信パケットの数が大量になる。したがって,この場合,マッチングが行われる回数が増加することになり,重複パケット検出装置3のCPU等の処理負担が増大する。
この点,例えば,特開2010−72955号公報には,通信パケットの通信量の計測等を行う目的で,新たに取得した通信パケットと,定期的にサンプリングした通信パケットとのマッチングを行う点が開示されている。しかし,上記のように重複パケットの排除を行う場合においては,取得した通信パケットを全て保存する必要がある。そのため,定期的にサンプリングした通信パケットを保存する場合と比較して,マッチング時におけるCPU等の処理負担が大きく異なる。
また,重複チェックが発生する頻度がCPU等の処理能力を上回る場合には,オーバーフローが発生し,重複チェックが正しく行われない場合がある。
そこで,本実施の形態では,取得した通信パケットに含まれるIPパケット識別子(以下,IP識別子とも呼ぶ)に対応する管理情報が存在する場合には,取得したパケットを破棄し,管理情報が存在しない場合には,取得したパケットの管理情報を記憶することにより,重複パケットを排除する。
[重複パケット検出装置の構成]
初めに,重複パケット検出装置3の構成について説明する。図3は,重複パケット検出装置のハードウエア構成を示す図である。重複パケット検出装置3は,プロセッサであるCPU301と,メモリ302と,外部インターフェース(I/Oユニット)303と,記憶媒体304とを有する。各部は,バス305を介して互いに接続される。記憶媒体304は,例えば,記憶媒体304内のプログラム格納領域(図示しない)に,重複パケットを検出する処理(以下,重複パケット検出処理とも呼ぶ)を行うためのプログラム310(以下,パケット処理プログラムまたは重複パケット検出プログラムとも呼ぶ)を記憶する。CPU301は,図3に示すように,プログラム310の実行時に,プログラム310を記憶媒体304からメモリ302にロードし,プログラム310と協働して重複パケット検出処理を行う。また,記憶媒体304は,例えば,重複パケット検出処理を行う際に用いられる情報を記憶する情報格納領域330(以下,記憶部330とも呼ぶ)を有する。
図4は,図3で示した重複パケット検出装置の機能についてのブロック図である。また,図5は,図3で示した情報格納領域に記憶された情報についてのブロック図である。CPU301は,プログラム310と協働することにより,例えば,パケット取得部311と,セッション情報記憶部312と,管理情報記憶部313と,パケット判定部314と,パケット転送部315として動作する。また,CPU301は,プログラム310と協働することにより,例えば,パケット削除部316と,記憶期間記憶部317と,更新周期管理部318と,判定実行管理部319として動作する。なお,以下,各部の一部または全部を処理部とも呼ぶ。
また,情報格納領域330には,例えば,セッション情報331と,管理情報332と,記憶位置情報333と,最大識別子情報334と,記憶期間情報335とが記憶されている。また,情報格納領域330には,例えば,初期化管理情報336と,更新周期情報337と,最大取得数情報338と,更新周期閾値情報339と,判定実行情報340とが記憶されている。
パケット取得部311は,例えば,パケット解析装置5において解析を行うための通信パケットを取得する。パケット取得部311は,例えば,取得すべき通信パケットが経由するネットワーク上に設けられた1つ以上のキャプチャポイントにおいて通信パケットを取得する。
セッション情報記憶部312は,例えば,パケット取得部311が取得した通信パケットが送受信される通信セッション(以下,セッションとも呼ぶ)に関する情報(通信セッションを特定するための情報)をセッション情報331として情報格納領域330に記憶する。通信セッションは,通信パケットを送受信する端末(例えば,サーバ1やクライアント端末2)間において確立されるものであり,通信パケットを送受信する端末間における論理的な接続関係である。以下,通信パケットの送受信が行う場合に,通信パケットの送受信を行う端末間において通信セッションが確立されている必要があるものとして説明を行う。なお,セッション情報331の詳細については後述する。
管理情報記憶部313は,例えば,管理情報332を情報格納領域330に記憶する。管理情報332は,通信パケットのIPヘッダに含まれるIP識別子に対応して,通信セッション毎に記憶される情報である。IPヘッダは,通信パケット(IPパケット)の送信元端末を特定する情報である「送信元IP」や送信先端末を特定する情報である「送信先IP」等を含むものであり,各通信パケットに付加されているである。IP識別子は,例えば,通信パケットの送信元端末において,通信セッション毎に,送信順(発生順)に割り振られるものである。また,IP識別子は,ある通信セッションにおいて発生した通信パケットがIP識別子の最大値(例えば,65535)を超えた場合,最初の識別子(例えば,0)に戻って割り振られるものであってよい(以下,これをサイクリックするとも呼ぶ)。
具体的に,管理情報記憶部313は,例えば,通信パケットの取得に応じて,取得した通信パケットのIP識別子に対応する管理情報332を記憶する。この場合,管理情報記憶部313は,例えば,取得した通信パケットのIP識別子に対応する管理情報332のみを情報格納領域330に記憶するものであってよい。この場合,管理情報管理部313は,例えば,管理情報332を記憶する情報格納領域330に,予め第1の情報(例えば,1)を記憶するものであってよい。さらに,管理情報管理部313は,例えば,通信パケットを取得したときに,その通信パケットのIP識別子に対応する管理情報332を記憶する情報格納領域330を,第2の情報(例えば,0)に更新するものであってもよい。
また,各通信セッションの管理情報332の記憶位置は,記憶位置情報333に記憶されているものであってよい。そして,管理情報記憶部313や後述するパケット判定部314は,記憶位置情報333に基づいて管理情報332を参照するものであってよい。
さらに,管理情報記憶部313は,例えば,取得した通信パケットのIP識別子のうち最大値を最大識別子情報334として記憶しておくものであってもよい。そして,管理情報記憶部313は,例えば,新たに取得した通信パケットのIP識別子から最大識別子情報334を減算した値が所定の閾値(例えば,−30000)よりも下回った場合に,IP識別子がサイクリックしたと判断するものであってよい。すなわち,IP識別子は,通信パケットの送信順に割り振られるものであるため,ネットワーク遅延等が発生している場合を除けば,新たに取得した取得した通信パケットのIP識別子は,最大識別子情報334よりも大きくなる。そのため,新たに取得した通信パケットのIP識別子が最大識別子情報334よりも大幅に小さくなった場合に,管理情報記憶部313は,IP識別子のサイクリックが発生したと判断することが可能になる。
なお,この場合,管理情報記憶部313は,例えば,発生し得るIP識別子のうち最初のIP識別子から所定数(例えば,発生し得るIP識別子の前半分)のIP識別子に対応する管理情報332に第2の情報を記憶するものであってよい。さらに,取得した通信パケットのIP識別子が第1の情報が記憶されている管理情報332に対応するIP識別子(例えば,発生し得るIP識別子の真中のIP識別子)に到達した場合に,第2の情報を記憶した管理情報332に対応するIP識別子と連続する次の所定数(例えば,発生し得るIP識別子の後半分)のIP識別子に対応する管理情報332に第1の情報を記憶するものであってよい。すなわち,IP識別子がサイクリックした場合,同じIP識別子を有する通信パケットが複数回発生することになる。そのため,過去に割り振られているIP識別子を含む通信パケットを取得する前に,対応する管理情報332が記憶される情報格納領域330に第1の情報を記憶する(初期化する)。管理情報332の具体例については後述する。また,IP識別子がサイクリックする場合の詳細については後述する。
さらに,管理情報記憶部313は,例えば,管理情報332の記憶期間が記憶された記憶期間情報335と,管理情報332に第1の情報が記憶された時刻を管理する初期化管理情報336とを参照し,管理情報332に第1の情報が記憶されてから管理情報332を記憶する期間が経過した管理情報332に第2の情報を記憶するものであってもよい。具体的に,管理情報記憶部313は,例えば,連続した集計期間毎に,管理情報332に第1の情報が記憶された通信パケットのIP識別子を記憶する。そして,管理情報記憶部313は,例えば,記憶されてからの期間が記憶期間情報335を経過した集計期間に記憶されたIP識別子に対応する管理情報332に第2の情報を記憶するものであってよい。
パケット判定部314は,例えば,通信パケットを取得した際に,取得した通信パケットと同じ通信セッションの管理情報332を参照し,取得した通信パケットのIP識別子に対応する管理情報332が存在する(第1の情報が記憶されている)場合,取得した通信パケットを破棄する。また,パケット判定部314は,例えば,通信パケットを取得した際に,取得した通信パケットのIP識別子に対応する管理情報332が存在しない(第2の情報が記憶されている)場合,取得した通信パケットのIP識別子に対応する管理情報332を記憶する。
パケット転送部315は,例えば,パケット判定部314が取得した通信パケットのIP識別子に対応する管理情報332が存在すると判定した場合,取得した通信パケットを出力する。具体的に,パケット転送部315は,取得した通信パケットをパケット解析装置5に送信する。パケット転送部315は,例えば,取得したパケットをパケット解析装置5に転送を行う前に,重複パケット検出装置3(例えば,情報格納領域330等)内に記憶するものであってもよい。また,パケット転送部315は,例えば,取得した通信パケットをパケット解析装置5がアクセス可能な領域(例えば,パケット解析装置5内の記憶領域)に記憶し,パケット解析装置5がここにアクセスを行うことによって,通信パケットを取得するものであってもよい。
パケット削除部316は,例えば,パケット判定部314が取得した通信パケットのIP識別子に対応する管理情報332が存在すると判定した場合,取得した通信パケットを破棄する。
記憶期間記憶部317は,例えば,管理情報332を記憶する期間(例えば,10(ms)等)を記憶期間情報335として情報格納領域330に記憶する。
更新周期管理部318は,例えば,通信パケットの取得頻度に基づいて,集計期間の長さを更新する。具体的に,更新周期管理部318は,例えば,パケット取得部311が所定の時間(例えば,30(ms)等)毎に取得した通信パケット数を継続して計測(取得)する。そして,更新周期管理部318は,例えば,単位時間毎に取得した通信パケット数のうちの最大値を,最大取得数情報338として情報格納領域330に記憶する。また,更新周期管理部318は,例えば,最大取得数情報338と集計期間とを関連付けて記憶された更新周期閾値情報339を参照し,更新周期閾値情報339に基づいて,集計期間を更新するものであってよい。
判定実行管理部319は,例えば,パケット削除部316による通信パケットの破棄が予め定めた判定期間(例えば,20(ms))の間に発生しない場合,パケット判定部314に管理情報332の参照を中止するように指示する。また,判定実行管理部319は,例えば,パケット判定部314による管理情報332の参照を中止した後であって判定中止期間(例えば,10(ms))が経過した後に,パケット判定部314に管理情報332の参照を再開するように指示するものであってよい。さらに,判定実行管理部319は,例えば,パケット判定部314に管理情報332の参照を中止するように指示する際に,管理情報記憶部313に参照を中止する管理情報332を消去するように指示するものであってよい。なお,判定期間及び判定中止期間は,例えば,予め設定された判定実行情報340に記憶されているものであってよい。そして,判定実行管理部319は,例えば,判定実行情報340を参照して,パケット判定部314に指示を行うものであってもよい。
[第1の実施の形態]
次に第1の実施の形態について説明する。図6は,第1の実施の形態における重複パケット検出処理の概略を説明するフローチャート図である。
初めに,重複パケット検出装置3がキャプチャポイントから通信パケットを取得した場合(S1),重複パケット検出装置3は,取得した通信パケットのIPヘッダに含まれるIP識別子に対応する管理情報332が存在するか否かの確認を行う(S2)。そして,取得した通信パケットに対応する管理情報332が存在する場合(S2のYES),重複パケット検出装置3は,取得した通信パケットを破棄する(S3)。一方,取得した通信パケットに対応する管理情報332が存在しない場合(S2のNO),重複パケット検出装置3は,取得した通信パケットのIP識別子に対応する管理情報332を取得済にする。さらに,重複パケット検出装置3は,例えば,取得した通信パケットを出力する(S4)。
すなわち,重複パケット検出装置3は,取得した通信パケットに対応する管理情報332が存在する場合,取得した通信パケットと同じ通信パケットを既に取得しているもの(既にパケット解析装置5に送信しているもの)と判断する。そのため,この場合,重複パケット検出装置3は,取得した通信パケットを破棄する。また,重複パケット検出装置3は,取得した通信パケットに対応する管理情報332が存在しない場合,取得した通信パケットと同じ通信パケットをまだ取得していないものと判断する。そのため,重複パケット検出装置3は,この場合,取得した通信パケットに対応する管理情報332を記憶する。これにより,取得した通信パケットの重複パケットをその後受信した場合において,その重複パケットを破棄することが可能になる。
このように,第1の実施の形態によれば,重複パケット検出装置3は,通信パケットを取得した際に,記憶部330に記憶された,通信パケットを送受信する端末間において確立された通信セッション毎に通信パケットのIPヘッダに含まれるIP識別子に対応する管理情報332のうち,取得した通信パケットと同じ通信セッションの管理情報332を参照する。そして,重複パケット検出装置3は,取得した通信パケットのIP識別子に対応する管理情報332が存在する場合,取得した通信パケットを破棄し,取得した通信パケットのIP識別子に対応する管理情報332が存在しない場合,取得した通信パケットのIP識別子に対応する管理情報332を記憶する。これにより,重複パケット検出装置3は,通信パケットの取得した場合に,取得した通信パケットに対応する管理情報332のみを参照することにより,取得した通信パケットの重複チェックを行うことが可能になる。そのため,重複パケット検出装置3は,新たに取得した通信パケットと,過去に取得した通信パケットとのマッチングを行う際に,過去に取得した通信パケットの中から,新たに取得した通信パケットの検索を行う必要がない。したがって,重複パケット検出装置3は,マッチング時のCPU等の処理負担を軽減させることが可能になる。また,重複パケット検出装置3は,重複チェックを行うために,過去の取得した通信パケットの全てを保存しておく必要がなくなるため,使用する記憶領域の容量を削減することが可能になる。
なお,情報格納領域330は,例えば,発生し得るIP識別子に対応する管理情報332をそれぞれ記憶することができる記憶領域(例えば,1ビットの情報を記憶可能である記憶領域)を有するものであってよい。この場合,重複パケット検出装置3は,例えば,発生し得るIP識別子に対応する全ての記憶領域に0(第1の情報)を記憶しておく。そして,通信パケットを取得した際に,取得した通信パケットのIP識別子に対応する記憶領域を1(第2の情報)に更新するものであってよい。
[第1の実施の形態の詳細]
次に,第1の実施の形態の詳細について説明する。図7から図9は,第1の実施の形態における重複パケット検出処理の詳細を説明するフローチャート図である。また,図10から図12は,第1の実施の形態における重複パケット検出処理の詳細を説明する図である。図10から図12を参照しながら,図7から図9の重複パケット検出処理の詳細を説明する。
初めに,重複パケット検出装置3のパケット取得部311がキャプチャポイントにおいて通信パケットを取得した場合(S11),パケット取得部311は,例えば,取得した通信パケットが含まれる通信セッションを特定するための情報を取得する(S12,S13)。
図10は,本実施の形態における通信パケット(IPパケット)の構成を示す図である。IPパケットは,「送信元IP」や「送信先IP」等の情報を含むIPヘッダと,IPペイロードとを含む。そして,本実施の形態における通信パケットには,図10(A)に示すように,TCP(Transmission Control Protocol)ヘッダを有するIPパケットと,図10(B)に示すように,UDP(User Datagram Protocol)ヘッダを有するIPパケットとが含まれる。具体的に,図10(A)に示すIPパケットのIPペイロードは,「送信元ポート」や「送信先ポート」等の情報を含むTCPヘッダと,TCPペイロードとを含む。また,図10(B)に示すIPパケットのIPペイロードは,「送信元ポート」や「送信先ポート」等の情報を含むUDPヘッダと,UDPペイロードとを含む。
そして,パケット取得部311は,IPヘッダを参照し,取得した通信パケットの「送信元IP」,「送信先IP」及び「プロトコル番号(プロトコル情報)」を取得する(S12)。さらに,パケット取得部311は,TCPヘッダ(UDPヘッダ)を参照し,取得した通信パケットの「送信元ポート」及び「送信先ポート」を取得する(S13)。すなわち,パケット取得部311は,取得した通信パケットが送受信される通信セッションを特定するために必要な情報を,取得した通信パケットのIPヘッダ及びTCPヘッダ(UDPヘッダ)から取得する。これにより,後述するように,セッション情報記憶部312は,パケット取得部311が取得した通信パケットが通信する通信セッションを一意に特定することができる。なお,本実施の形態において,パケット取得部311は,少なくともIPヘッダ及びTCPヘッダ(UDPヘッダ)がカプセル化(暗号化)されていない状態の通信パケットを取得するものとする。
具体的に,パケット取得部311は,例えば,IPヘッダ及びTCPヘッダのフォーマットに従って,取得した通信パケットのIPヘッダまたはTCPヘッダにおいて取得したい情報が設定されている位置を特定し,各情報の取得を行うものであってよい。この場合,例えば,パケット取得部311は,IPヘッダのフォーマットを参照し,IPヘッダに含まれる「送信元IP」等を取得する。続いて,パケット取得部311は,IPヘッダのフォーマットを参照し,IPヘッダに含まれる「ヘッダ長」に基づき,取得した通信パケットのIPペイロード(TCPヘッダまたはUDPヘッダ)の先頭位置を特定する。そして,パケット取得部311は,例えば,TCPヘッダ(UDPヘッダ)のフォーマットを参照し,TCPヘッダ(UDPヘッダ)に含まれる「送信元ポート」等を取得する。
なお,重複パケット検出装置3のパケット転送部315は,例えば,パケット取得部311が取得したパケットを,IPヘッダ及びTCPヘッダが付加された状態でパケット解析装置5に送信するものであってよい。これにより,パケット解析装置5では,ネットワークを通信している状態の通信パケットについて解析を行うことが可能になる。また,TCPヘッダは,TCPペイロードの先頭位置を示す「データオフセット」を有しており,UDPヘッダは,そのデータサイズが固定長である。そのため,パケット解析装置5は,重複パケット検出装置3から送信されたTCPヘッダまたはUDPヘッダを参照することにより,TCPペイロードまたはUDPペイロードの先頭位置を特定することが可能になる。
そして,重複パケット検出装置3のセッション情報記憶部312は,例えば,S12及びS13で取得した情報に基づいて,取得した通信パケットが含まれる通信セッションを特定する(S14)。なお,プロトコル番号には,例えば,TCPのプロトコル番号と,UDPのプロトコル番号とが含まれるものであってよい。
次に,セッション情報記憶部312は,例えば,特定した通信セッションに関するセッション情報331が情報格納領域330に記憶されているか否かの確認を行う(S15)。そして,セッション情報331が記憶されていない場合(S15のNO),セッション情報記憶部312は,例えば,取得したIPヘッダに含まれる情報に基づいて,取得した通信パケットを含む通信セッションに関するセッション情報331を情報格納領域330に記憶する(S16)。また,セッション情報記憶部312は,例えば,新たな通信セッションに関する管理情報332を記憶するための記憶領域を確保し,確保した記憶領域に関する情報を記憶位置情報333に記憶するものであってもよい(S17)。
図11は,セッション情報331と記憶位置情報333の具体例を示す図である。図11(A)に示すように,セッション情報331は,例えば,通信セッション毎に割り振られた「ID」と,送信元端末のIPアドレスである「送信元IP」と,送信先端末のIPアドレスである「送信先IP」と,通信セッションのプロトコルを示す「プロトコル番号」とを項目として有している。また,セッション情報331は,例えば,さらに,送信元端末のポート番号である「送信元ポート」と,送信先端末のポート番号である「送信先ポート」とを項目として有している。情報格納領域330にセッション情報331として記憶された各通信セッションは,「送信元IP」と,「送信先IP」と,「プロトコル番号」と,「送信元ポート」と,「送信先ポート」とによって一意に定まる。具体的に,図11(A)におけるセッション情報331は,「送信元IP」として,10.20.30.40を設定し,「送信先IP」として,10.20.30.50を設定し,「プロトコル番号」として,6を設定する。さらに,図11(A)におけるセッション情報331は,「送信元ポート」として,2000を設定し,「送信先ポート」として,20を設定している。図11(A)のその他の情報については説明を省略する。
また,図11(B)に示すように,記憶位置情報333は,例えば,記憶領域(情報格納領域330)において,各通信セッションに関する管理情報332が記憶されている先頭アドレスを記憶しているものであってよい。具体的に,図11(B)の例において,記憶位置情報333は,「ID」が1,2,3である通信セッションの「先頭記憶アドレス」として,それぞれ,P1,P2,P3を記憶している。なお,例えば,各通信セッションに関する管理情報332のファイル名がそれぞれ決められている場合においては,記憶位置情報333は,各通信セッションの「ID」と,通信セッション毎の管理情報332のファイル名とを関連付けて記憶するものであってもよい。
図7に戻り,重複パケット検出装置3の管理情報記憶部313は,例えば,取得した通信パケットのIPヘッダに含まれるIP識別子を取得する(S18)。そして,管理情報記憶部313は,例えば,IP識別子周回処理を行う(S19)。IP識別子周回処理については後述する。
図12は,図11における「ID」が1である通信セッションの管理情報332の具体例を示す図である。図12に示すように,管理情報332は,例えば,ビット列である。また,管理情報332の各ビット領域は,例えば,発生し得るIP識別子(例えば,0から65535)に対応する管理情報332をそれぞれ記憶することができる記憶領域であることが好ましい。
そして,図12に示すビット列において,対応するIP識別子が含まれる通信パケットを受信しているビット領域には,1が記憶される。また,対応するIP識別子が含まれる通信パケットを受信していないビット領域には,0が記憶される。そのため,パケット取得部311が通信パケットの取得を開始する前の管理情報332は,全てのビット領域に0が記憶されているものであってよい。
具体的に,図12に示す管理情報332の例は,図11(B)に示す記憶位置情報333に対応し,それぞれ先頭アドレスがP1,P2,P3である3つのビット列を含む場合の例である。図12に示す例において,先頭アドレスがP1であるビット列は,先頭から1ビット目,3ビット目,5ビット目,15ビット目のビット領域に1が記憶されている。すなわち,図12に示す管理情報332においては,IP識別子が1,3,5,15である通信パケットが記憶済である。同様に,先頭アドレスがP2であるビット列は,先頭から3ビット目,7ビット目,16ビット目のビット領域に1が記憶されており,先頭アドレスがP3であるビット列は,先頭から12ビット目,21ビット目のビット領域に1が記憶されている。 なお,図12に示す管理情報332は,対応するIP識別子が含まれる通信パケットを受信しているビット領域には0が記憶され,対応するIP識別子が含まれる通信パケットを受信しているビット領域には1が記憶されるものであってもよい。
[IP識別子周回処理(S19)]
次に,IP識別子周回処理について説明する。図9は,IP識別子周回処理を説明するフローチャート図である。
通信パケットの送信元端末は,同一の通信セッションについて,割り振ることができるIP識別子の数(例えば,65536)を超える通信パケットを送信する場合がある。この場合,通信パケットの送信元端末は,IP識別子をサイクリックさせ,再び最初のIP識別子(例えば,0)から順番に割り振って通信パケットを送信する(以下,これを周回とも呼ぶ)。
ここで,サイクリックされたIP識別子が割り振られた通信パケットをパケット取得部311が取得した場合,管理情報記憶部313は,過去に管理情報332に第1の情報を記憶したビット領域を,新たなに受信した通信パケットに関する管理情報332の記憶に使用する必要がある。そこで,管理情報記憶部313は,IP識別子が周回したことを検知した場合に,IP識別子周回処理を実行することにより,例えば,管理情報332のビット列の先頭から所定の長さの管理情報332に第2の情報を記憶する。以下,IP識別子周回処理の詳細について説明する。
図9において,管理情報記憶部313は,例えば,パケット取得部311が取得した通信パケットにIPヘッダに含まれるIP識別子を取得し,IP識別子が周回しているか否かを確認する(S31)。具体的に,管理情報記憶部313は,例えば,最大識別子情報334を参照し,新たに取得した通信パケットのIP識別子から最大識別子情報334を減算して算出する。そして,管理情報記憶部313は,例えば,算出した値が所定の閾値(例えば,−30000)を下回った場合に,IP識別子が周回しているものと判断する。すなわち,例えば,発生し得るIP識別子の数が65536である場合,周回発生時における最大識別子情報334は65536に近い値であるのに対し,新たに取得した通信パケットのIP識別子は0に近い値になる。そして,この場合,新たに取得した通信パケットのIP識別子と最大識別子情報334との差は,−30000を下回ることになる。そのため,管理情報記憶部313は,この場合に,IP識別子の周回が発生したことを検知することが可能になる。
そして,取得したIP識別子が周回している場合(S31のYES),管理情報記憶部313は,例えば,発生し得るIP識別子の前半分に対応する管理情報332を消去する(S32)。これにより,管理情報記憶部313は,IP識別子の周回の発生直後から新たな管理情報332を記憶することが可能になる。さらに,管理情報記憶部313は,例えば,最大識別子情報334として情報格納領域330に0を記憶する(S33)。また,IP識別子が発生し得るIP識別子の後半に到達した場合(S34のYES),管理情報記憶部313は,例えば,発生し得るIP識別子の後半に対応する管理情報332を消去する(S35)。
すなわち,図9の例において,IP識別子の周回が発生したことを検知した場合,管理情報記憶部313は,管理情報332のビット列における前半分のビット領域に0を記憶する。また,管理情報記憶部313は,IP識別子が発生し得るIP識別子の後半に到達したことを検知した場合に,管理情報332のビット列における後半のビット領域に0を記憶する。これによって,管理情報記憶部313は,サイクリックされたIP識別子を取得した場合,各ビット領域の初期化を行ってから新たな管理情報332の記憶を行うことが可能になる。そのため,例えば,IP識別子の周回が発生した場合において,第1の情報が記憶されている管理情報332が今回の周回において記憶されたものなのか,以前の周回において記憶されたものなのかを,判断できなくなることを防止することができる。また,サイクリックされたIP識別子の取得後においても,管理情報332を記憶する際にはビット領域が初期化されているため,管理情報記憶部313は,ビット領域を0から1への更新のみ行うことによって,管理情報332の記憶を行うことが可能になる。
なお,図9の例においては,管理情報332のビット列を前半と後半とに分割して管理情報332を消去する場合について説明したが,ビット列を3つ以上に分割してそれぞれ管理情報332を消去するものであってもよい。また,管理情報記憶部313は,初期化されていないビット領域に対応するIP識別子を含む通信パケットを取得する毎に,例えば,所定数(例えば,1000等)のIP識別子に対応する管理情報332を初期化するものであってもよい。
図8に戻り,重複パケット検出装置3のパケット判定部314は,例えば,取得したIP識別子に対応する管理情報332に第1の情報が記憶されているか否かを確認する(S21)。記憶されていない場合(S21のNO),管理情報記憶部313は,取得したIP識別子に対応する管理情報332に第1の情報を記憶する(S22)。そして,重複パケット検出装置3のパケット転送部315は,例えば,パケット取得部311が取得した通信パケットをパケット解析装置5に送信する(S23)。すなわち,取得したIP識別子に対応する管理情報332に第1の情報が記憶されていない場合,そのIP識別子に対応する通信パケットは重複パケットではない。そのため,この場合,パケット転送部315は,取得した通信パケットをパケット解析装置5に送信する。なお,管理情報記憶部313は,例えば,パケット転送部315がパケット解析装置5に通信パケットを送信する際に,情報格納領域330等に取得した通信パケットを記憶するものであってもよい。
さらに,取得したIP識別子が情報格納領域330に記憶された最大識別子情報334より大きい場合(S24のYES),管理情報記憶部313は,例えば,取得したIP識別子を最大識別子情報334に記憶する(S25)。これにより,管理情報記憶部313は,IP識別子周回処理において,IP識別子が周回したことを検知することが可能になる。
一方,取得したIP識別子に対応する管理情報332に第1の情報が記憶されている場合(S21のYES),重複パケット検出装置3のパケット削除部316は,取得した通信パケットを削除する(S26)。これにより,重複パケット検出装置3からパケット解析装置5へ同じ通信パケットが複数回送信されることを防止することが可能になる。
[通信パケットを取得した場合の重複チェックの具体例]
次に,図11及び図12を参照して,通信パケットを取得した場合の重複チェックの具体例を説明する。以下,パケット取得部311が取得した通信パケットにおいて,「送信元IP」が30.40.50.60であり,「送信先IP」が30.40.60.70であり,「プロトコル番号」が17であり,「IP識別子」が21であるものとして説明する。また,「送信元ポート」が2000であり,「送信先ポート」が3000であるものとする。
初めに,セッション情報記憶部312は,パケット取得部311が取得した上記の情報の組み合わせが,図11(A)に示すセッション情報311に存在するか否かを判定する。図11(A)の例においては,「ID」が3であるセッション情報331が,上記の情報の組み合わせと一致する。そのため,セッション情報取得部312は,取得した通信パケットに関する上記の情報の組み合わせが,図11(A)に示すセッション情報311に含まれていると判定する(S15のYES)。
そして,パケット判定部314は,図11(B)において「ID」が3であるセッション情報311に含まれる先頭記憶アドレスであるP3を取得し,アドレスP3から記憶されている管理情報332(ビット列)にアクセスする。図12の例において,アドレスP3から記憶されている管理情報332の先頭から21ビット目には,1が記憶されている。そのため,パケット判定部314は,パケット取得部311が取得した通信パケットを重複パケットであると判定する(S21のYES)。そして,パケット削除部316は,パケット取得部311が取得した通信パケットを削除する。
なお,上記の例において,「IP識別子」が20であった場合,図12の例において,アドレスP3から記憶されている管理情報332の先頭から20ビット目には,0が記憶されている。そのため,パケット判定部314は,パケット取得部311が取得した通信パケットを重複パケットではないと判定する(S21のNO)。この場合,管理情報記憶部313は,アドレスP3から記憶されている管理情報332の先頭から20ビット目に1を記憶する(S22)。そして,パケット転送部315は,パケット取得部311が取得した通信パケットをパケット解析装置5に送信する。
[第2の実施の形態]
次に,第2の実施の形態について説明する。図13から図15は,第2の実施の形態における重複パケット検出処理を説明するフローチャート図である。また,図16から図19は,第2の実施の形態における重複パケット検出処理を説明する図である。図16から図19を参照しながら,図13から図15の重複パケット検出処理を説明する。
第1の実施の形態では,図9において説明したように,管理情報記憶部313は,IP識別子周回処理によって管理情報332を初期化する場合について説明した。すなわち,第1の実施の形態における管理情報記憶部313は,IP識別子の周回があったことを検知したときに,管理情報332におけるビット列の一部を初期化する。
ここで,管理情報332は,例えば,パケット解析装置5における解析状況等により,一定時間記憶しておく必要がある場合がある。この場合,第1の実施の形態においては,IP識別子の周回が短時間の間に発生する場合等に,管理情報332を記憶しておく必要がある期間が経過する前に管理情報332を初期化する場合がある。そこで,第2の実施の形態では,管理情報332を記憶しておく必要がある期間に基づいて管理情報332の更新を行う。以下,第2の実施の形態における重複パケット検出処理の詳細について説明する。
初めに,パケット取得部311がキャプチャポイントにおいて通信パケットを取得した場合(S41),パケット取得部311は,例えば,取得した通信パケットが含まれる通信セッションを特定するための情報を取得する。具体的に,パケット取得部311は,例えば,第1の実施の形態と同様に,取得した通信パケットのIPヘッダから「送信元IP」,「送信先IP」及び「プロトコル番号」を取得する(S42)。さらに,パケット取得部311は,例えば,図10に示すように,取得した通信パケットのTCPヘッダから「送信元ポート」及び「送信先ポート」を取得する(S43)。
次に,セッション情報記憶部312は,例えば,S42及びS43で取得した情報に基づいて,取得した通信パケットが含まれる通信セッションを特定し(S44),特定した通信セッションに関するセッション情報331が情報格納領域330に記憶されているか否かの確認を行う(S45)。そして,セッション情報331が記憶されていない場合(S45のNO),セッション情報記憶部312は,例えば,取得したIPヘッダに含まれる情報に基づいて,取得した通信パケットを含む通信セッションに関するセッション情報331を情報格納領域330に記憶する(S46)。また,セッション情報記憶部312は,例えば,新たな通信セッションに関する管理情報332を記憶するための記憶領域を確保し,確保した記憶領域に関する情報を記憶位置情報333に記憶する(S47)。
そして,管理情報記憶部313は,例えば,取得した通信パケットのIPヘッダに含まれるIP識別子を取得する(S48)。なお,第2の実施の形態においては,第1の実施の形態と異なり,IP識別子周回処理を行わない。
次に,パケット判定部314は,第1の実施の形態と同様に,例えば,取得したIP識別子に対応する管理情報332が情報格納領域330に第1の情報が記憶されているか否かを確認する(S51)。第1の情報が記憶されていない場合(S51のNO),管理情報記憶部313は,取得したIP識別子に対応する管理情報332に第1の情報を記憶する(S52)。そして,パケット転送部315は,例えば,パケット取得部311が取得した通信パケットをパケット解析装置5に送信する(S53)。さらに,取得したIP識別子が情報格納領域330に記憶された最大識別子情報334より大きい場合(S54のYES),管理情報記憶部313は,例えば,取得したIP識別子を最大識別子情報334に記憶する(S55)。そして,管理情報記憶部313は,第2の実施の形態においては,例えば,取得したIP識別子を,初期化管理情報336として情報格納領域330に記憶する(S56)。初期化管理情報336については後述する。
一方,取得したIP識別子に対応する管理情報332に第1の情報が記憶されている場合(S51のYES),パケット削除部316は,取得した通信パケットを削除する(S56)。
図16は,初期化管理情報336の具体例を示す図である。図16(A)に示すように,記憶期間情報331は,例えば,管理情報記憶部313がIP識別子を記憶する位置を示す「書き込みフラグ」と,管理情報記憶部313が取得したIP識別子を記憶する「IP識別子」と,管理情報記憶部313がIP識別子の記憶を行った時刻を示す「更新時刻」とを項目として有している。
図16の例の初期化管理情報336において,管理情報記憶部313は,「書き込みフラグ」が示す「IP識別子」の位置に,管理情報記憶部313が取得したIP識別子を記憶する。図16(A)の例は,「書き込みフラグ」が示す「IP識別子」の位置に,7018を記憶した状態を示している。そして,図16(B)の例は,図16(A)に示す状態から,「書き込みフラグ」が示す「IP識別子」の位置に,7024を記憶した状態を示している。すなわち,図16(B)に示す状態においては,図16(A)に示す状態から「書き込みフラグ」が示す「IP識別子」は更新されていない。そのため,管理情報記憶部313は,IP識別子が7024である通信パケットを受信したときに,7018が記憶された「IP識別子」の位置に7024を上書きする。以下,「書き込みフラグ」が示す「IP識別子」を更新するために行われる管理情報初期化処理について説明する。
[管理情報初期化処理]
図15は,管理情報初期化処理を説明するフローチャート図である。初めに,管理情報を初期化するタイミングになった場合(S61のYES),管理情報記憶部313は,例えば,初期化管理情報336の「書き込みフラグ」を更新する(S62)。管理情報332を初期化するタイミングは,例えば,更新周期情報337として情報格納領域330に記憶されているものである。更新周期情報337は,例えば,1(ms)等であってよい。そして,管理情報記憶部313は,例えば,更新周期情報337を参照して,管理情報を初期化するタイミングになった場合に,初期化管理情報336の「書き込みフラグ」を更新する(S61のYES,S62)。なお,更新周期情報337に記憶された周期毎に,重複パケット検出装置3に設けられたタイマーが管理情報記憶部313に管理情報332を初期化するタイミングを通知するものであってもよい。次に,「書き込みフラグ」の更新の具体例について説明する。
図17(A)は,図16(B)に示す状態から,管理情報記憶部313が,「書き込みフラグ」を更新した状態を示している。図17(A)に示す初期化管理情報336において,管理情報記憶部313は,「書き込みフラグ」である1が現在記憶されている行の一つ下の行に記憶されるように更新を行う。そして,管理情報記憶部313は,図17(B)に示すように,更新された「書き込みフラグ」が示す「IP識別子」の位置に,新たに取得したIP識別子(図17(B)の例では7026)を記憶する。また,管理情報記憶部313は,例えば,更新された「書き込みフラグ」が示す「IP識別子」の位置に新たなIP識別子を記憶したときに,IP識別子を記憶した時刻を「更新時刻」に記憶するものであってよい。
すなわち,管理情報記憶部313は,初期化管理情報336に取得したIP識別子を繰り返し記憶し,集計期間が経過する毎に「書き込みフラグ」の位置を更新することにより,更新周期情報337に記憶された集計期間(図17の例においては,1(ms))毎に,取得したIP識別子の最大値の情報を蓄積していくことができる。
図15に戻り,管理情報記憶部313は,例えば,記憶期間情報335と初期化管理情報336とに基づいて,記憶期間が経過した管理情報332を初期化する(S63)。以下,管理情報332が初期化される場合の具体例を説明する。
図18は,図15のS63において管理情報332を初期化する場合を説明する例である。図18の例においては,発生し得るIP識別子が0から65535である場合について説明する。なお,図18内の各数字は,それぞれのビット領域に記憶される管理情報332に対応するIP識別子を示すものである。また,以下,記憶期間情報335に記憶されている管理情報332の記憶期間が2(ms)の場合について説明する。
管理情報記憶部313は,例えば,図17(A)に示す状態の初期化管理情報336を参照し,管理情報332の記憶期間が経過しているIP識別子の情報を取得する。図17(A)の例において,「更新時刻」が13:25:14.006の集計期間の集計が完了している。そのため,図17(A)の例において,管理情報332に第1の情報が記憶されてから記憶期間情報335に記憶されている記憶期間が経過しているIP識別子は,「更新時刻」が13:25:14.004の集計期間よりも前に記憶されたIP識別子になる。そして,この場合,管理情報記憶部313は,管理情報332を初期化する必要があるIP識別子の最大値は,「更新時刻」が13:25:14.004の集計期間に関連付けて記憶されている4018であると判断する。さらに,図17(A)の例において,直前の集計期間である「更新時刻」が13:25:14.006の集計期間において記憶されたIP識別子の最大値は,7024である。そのため,管理情報記憶部313は,図17(A)の例においては,例えば,4019から7024以外のIP識別子を初期化する必要があると判断する。
したがって,管理情報記憶部313は,例えば,図18(B)に示す管理情報332のビット例のように,管理情報332を更新する。すなわち,図18(B)の例においては,管理情報332のビット列の先頭(識別子0)から識別子4018に対応するビット領域まで,及び識別子7025に対応するビット領域からビット列の最後までのビット領域を0に更新する(図18(B)における網掛け部分)。これによって,管理情報記憶部313は,管理情報332に第1の情報を記憶してから記憶期間を経過した管理情報332を初期化することが可能になる。
なお,図19(A)に示すように,初期化管理情報336を記憶するための領域全てに各情報が記憶された場合,初期化管理情報336内においてサイクリックを行うものであってよい。すなわち,管理情報記憶部313は,例えば,「書き込みフラグ」が示す「IP識別子」の位置が,図19(B)の例においては最初の行になるように更新を行う。そして,最初の行の「IP識別子」に記憶されたIP識別子を更新する形で,取得したIP識別子を記憶するものであってよい。
図15に戻り,管理情報記憶部313は,例えば,全ての通信セッションに関する管理情報332のビット列について,管理情報332の初期化が終わるまでS62からS63の処理を繰り返す(S64)。
このように,第2の実施の形態によれば,管理情報記憶部313は,集計期間毎に取得したIP識別子の最大値を初期化管理情報336に記憶する。そして,管理情報記憶部313は,初期化管理情報336を参照して,記憶期間情報335に記憶されている管理情報332の記憶期間が経過した管理情報332を初期化する。これにより,管理情報記憶部313は,記憶期間情報335に記憶されている管理情報332の記憶期間が経過する前に,管理情報332を初期化することを防止することができる。
また,第2の実施の形態によれば,記憶期間情報335に記憶されている管理情報332の記憶期間が経過した管理情報332を初期化するため,パケット取得部311が通信パケットを取得する毎に,初期化を行うか否かを判定する処理や初期化処理を行う必要がなくなる。そのため,CPU等の負荷増大を防止することが可能になる。
なお,図16等の例において,管理情報記憶部313が集計期間毎に取得したIP識別子の最大値を初期化管理情報336に記憶する場合について説明したが,集計期間毎に取得したIP識別子の最小値を初期化管理情報336に記憶するものであってもよい。
[第3の実施の形態]
次に,第3の実施の形態について説明する。図20は,第3の実施の形態における重複パケット検出処理を説明するフローチャート図である。また,図21及び図22は,第3の実施の形態における重複パケット検出処理を説明する図である。図21及び図22を参照しながら,図20の重複パケット検出処理を説明する。
第3の実施の形態においては,第2の実施の形態と異なり,パケット取得部311が取得する通信パケットの量の変化に応じて,更新周期情報337に記憶された集計期間を更新する。すなわち,パケット取得部311が取得する通信パケットの頻度が予め定めた閾値よりも大きい場合には,集計時間を短く設定し,パケット取得部311が取得する通信パケットの頻度が予め定めた閾値よりも小さい場合には,集計時間を長く設定する。
初めに,管理情報を初期化する可能性があるタイミングになった場合(S71のYES),管理情報記憶部313は,例えば,各通信セッションの更新周期情報337を参照する(S72)。そして,管理情報記憶部313は,例えば,初期化管理情報336における最新の更新時刻と,更新周期情報337に記憶された集計期間とを加算した時刻(以下,次回更新時刻とも呼ぶ)が,現在時刻とが一致するか否かを確認する(S73)。すなわち,第3の実施の形態においては,通信セッション毎に,更新周期情報337における集計期間が異なる場合が発生する。そのため,管理情報記憶部313は,管理情報332を初期化する可能性があるタイミングになったときに,更新周期情報337を参照する必要がある。管理情報332を初期化する可能性があるタイミングは,例えば,各通信セッションの集計期間の最大公約数であってよい。
そして,現在時刻と次回更新時刻とが一致した場合(S73のYES),管理情報記憶部313は,例えば,第2の実施の形態と同様に,一致した通信セッションの初期化管理情報336の「書き込みフラグ」を更新する(S74)。さらに,管理情報記憶部313は,例えば,記憶期間情報335と初期化管理情報336とに基づいて,記憶期間が経過した管理情報332を初期化する(S75)。
次に,管理情報記憶部313は,例えば,所定の期間におけるIP識別子の取得数を算出する(S76)。この所定の期間は,例えば,100(ms)等であり,記憶期間情報335や更新周期情報337等に記憶されている期間よりも長い期間であることが好ましい。これによって,通信パケットの取得数が短期的に大きく変動した場合等に,これらの影響を抑えることが可能になる。また,算出した所定の期間におけるIP識別子の取得数が最大取得数情報338に記憶された取得数よりも大きい場合(S77),管理情報記憶部313は,例えば,算出した所定の期間におけるIP識別子の取得数を最大取得数情報338に記憶する(S78)。さらに,更新周期管理部318は,例えば,最大取得数情報338と更新周期閾値情報339とに基づいて,更新周期情報337を更新する(S79)。そして,管理情報記憶部313は,例えば,全ての通信セッションに関する管理情報332のビット列について管理情報332の初期化が終わるまでS72からS79の処理を繰り返す(S80)。
図21及び図22は,初期化管理情報336,更新周期情報337,最大取得数情報338及び更新周期閾値情報339の具体例を示す図である。図21及び図22においては,管理情報記憶部313は,S76における所定の期間を20(ms)としてIP識別子の取得数を算出しているものとして説明を行う。
図21は,管理情報記憶部313によって初期化管理情報336の「書き込みフラグ」の更新がされた後(S74の後)の状態を示す例である。図21の例において,管理情報記憶部313は,図21(C)に示すように,最大取得数情報338の最大取得数に,8614を記憶している。そのため,更新周期管理部318は,図21(B)に示すように,図21(D)に示す更新周期閾値情報339を参照して,更新周期情報337に5を設定している状態である。
図21に示す例において,管理情報記憶部313は,図21(A)に示す初期化管理情報336を参照し,最近20(ms)の間におけるIP識別子の取得数を算出する(S76)。具体的に,図21の例において,管理情報記憶部313は,例えば,「更新時刻」が13:25:14.025の集計期間におけるIP識別子の最大値である10234と,「更新時刻」が13:25:14.005の集計期間におけるIP識別子の最大値である2029との差である8205を算出する。この場合,管理情報記憶部313は,算出した値が最大取得数情報338に記憶された最大取得数(8614)よりも小さいため(S77のNO),最大取得数情報338等の更新を行わない(S78,S79)。なお,図21の例においては,現在時刻である13:25:14.025と,更新周期情報337に記憶されている集計期間である5とに基づいて,図21(A)に示すように,初期化管理情報336に次回更新時刻である13:25:14.030を記憶している。
一方,図22は,図21に示す状態から次の集計期間におけるIP識別子の記憶が終了し,管理情報記憶部313によって,「書き込みフラグ」がさらに更新された後(S74の後)の状態を示す例である。
図22に示す例において,管理情報記憶部313は,図21の場合と同様に,図22(A)に示す初期化管理情報336を参照し,最近20(ms)の間におけるIP識別子の取得数を算出する(S76)。具体的に,図22(A)の例において,管理情報記憶部313は,「更新時刻」が13:25:14.030の集計期間におけるIP識別子の最大値である27412と,「更新時刻」が13:25:14.010の集計期間におけるIP識別子の最大値である4974との差である22438を算出する。ここで,図21の例と異なり,算出した値は,最大取得数情報338に記憶された最大取得数よりも大きい(S77のYES)。そのため,管理情報記憶部313は,図22(C)に示すように,算出した値を最大取得数情報338に記憶する(S78)。さらに,管理情報記憶部313は,図22(D)に示す更新周期閾値情報339を参照し,図22(B)に示すように,更新周期情報337として1を記憶する。なお,図22(A)の例においては,現在時刻である13:25:14.030と,更新周期情報337に記憶されている集計期間である1とに基づいて,初期化管理情報336に次回更新時刻である13:25:14.031を記憶している。
このように,第3の実施の形態によれば,管理情報記憶部313は,算出した所定期間のIP識別子の取得数が所定の閾値(例えば,情報格納領域330に記憶された更新周期閾値情報339内の閾値)よりも大きい場合に,集計期間を短く設定する。そして,管理情報記憶部313は,算出した所定期間のIP識別子の取得数が所定の閾値よりも小さい場合に,集計期間を長く設定する。これにより,パケット取得部311が取得する通信パケットの量が少ない場合に,管理情報記憶部313が管理情報332を初期化する頻度を少なくすることが可能になる。そのため,重複パケット検出装置3のCPU等の処理負担を軽減させることが可能になる。また,パケット取得部311が取得する通信パケットの量が多い場合に,管理情報記憶部313が管理情報332を初期化する頻度を多くすることが可能になる。そのため,IP識別子の周回を検知する精度を高めることが可能になる。
[第4の実施の形態]
次に,第4の実施の形態について説明する。図23から図26は,第4の実施の形態における重複パケット検出処理を説明するフローチャート図である。また,図27から図31は,第4の実施の形態における重複パケット検出処理を説明する図である。図27から図31を参照しながら,図23から図26の重複パケット検出処理を説明する。
第4の実施の形態においては,判定期間の間に重複チェック(以下,判定とも呼ぶ)を行った結果,重複パケットが検出されなかった通信セッションについては,重複チェックを中止する。また,第4の実施の形態において,重複チェックを中止した通信セッションは,判定中止期間が経過した後に,重複チェックを再開する。なお,第4の実施の形態におけるセッション情報331は,第1の実施の形態におけるセッション情報331と異なり,「判定開始時刻」の項目を有している。「判定開始時刻」の項目については後述する。
初めに,パケット取得部311がキャプチャポイントにおいて通信パケットを取得した場合(S91),パケット取得部311は,例えば,取得した通信パケットが含まれる通信セッションを特定するための情報を取得する。具体的に,パケット取得部311は,例えば,第1の実施の形態と同様に,取得した通信パケットのIPヘッダから「送信元IP」,「送信先IP」及び「プロトコル番号」を取得する(S92)。さらに,パケット取得部311は,例えば,図10に示すように,取得した通信パケットのTCPヘッダから「送信元ポート」及び「送信先ポート」を取得する(S93)。
次に,セッション情報記憶部312は,例えば,S92及びS93で取得した情報に基づいて,取得した通信パケットが含まれる通信セッションを特定し(S94),特定した通信セッションに関するセッション情報331が情報格納領域330に記憶されているか否かの確認を行う(S95)。そして,セッション情報331が記憶されていない場合(S95のNO),セッション情報記憶部312は,例えば,取得したIPヘッダに含まれる情報に基づいて,取得した通信パケットを含む通信セッションに関するセッション情報331を情報格納領域に記憶する(S96)。また,セッション情報記憶部312は,例えば,新たな通信セッションに関する管理情報332を記憶するための記憶領域を確保し,確保した記憶領域に関する情報を記憶位置情報333に記憶する(S97)。さらに,第4の実施の形態における判定実行管理部319は,第1の実施の形態と異なり,セッション情報331の判定開始時刻に現在時刻を記憶する(S98)。
そして,取得した通信パケットを含む通信セッションに関する記憶位置情報333が記憶されておらず,現在時刻が判定開始時刻を経過している場合(S101のNO,S102のYES),判定実行管理部319は,例えば,取得した通信パケットを含む通信セッションに関する記憶位置情報333を記憶する(S103)。すなわち,通信セッションのセッション情報331が存在するにもかかわらず(S95のYES,S98),記憶位置情報333が記憶されていない場合(S101のNO),判定実行管理部319は,その通信セッションが重複チェックを中止している通信セッションであると判断する。そして,さらに,現在時刻が判定開始時刻を経過している場合(S102のYES),判定実行管理部319は,重複チェックを中止している通信セッションの重複チェックを再開する。通信セッションの重複チェックを中止する場合及び再開する場合の具体例については後述する。
一方,現在時刻が判定開始時刻を経過していない場合(S102のNO),その通信セッションが重複チェックを再開する時刻がまだ到達していないことになるため,取得した通信パケットに関しての重複パケット検出処理を終了する。すなわち,この場合,判定実行管理部319は,重複チェックを中止している通信セッションの重複チェックを再開しない。
また,取得した通信パケットを含む通信セッションに関する記憶位置情報333が記憶されている場合(S101のYES),管理情報記憶部313は,例えば,取得した通信パケットのIPヘッダに含まれるIP識別子を取得し(S104),IP識別子周回処理を行う(S105)。同様に,判定実行管理部319が記憶位置情報333を記憶した場合(S103),管理情報記憶部313は,例えば,取得した通信パケットのIPヘッダに含まれるIP識別子を取得し(S104),IP識別子周回処理を行う(S105)。
次に,パケット判定部314は,第1の実施の形態と同様に,例えば,取得したIP識別子に対応する管理情報332に第1の情報が記憶されているか否かを確認する(S111)。第1の情報が記憶されていない場合(S111のNO),管理情報記憶部313は,取得したIP識別子に対応する管理情報332に第1の情報を記憶する(S112)。
そして,パケット転送部315は,パケット取得部311が取得した通信パケットをパケット解析装置5に送信する(S113)。また,取得したIP識別子が情報格納領域330に記憶された最大識別子情報334より大きい場合(S114のYES),管理情報記憶部313は,例えば,取得したIP識別子を最大識別子情報334に記憶する(S115)。さらに,判定実行管理部319は,第4の実施の形態においては,取得した通信パケットを含む通信セッションの重複チェックを中止するための判定中止処理を行う(S116)。判定中止処理については後述する。
一方,取得したIP識別子に対応する管理情報332に第1の情報が記憶されている場合(S111のYES),パケット削除部316は,取得した通信パケットを削除する(S117)。そして,判定実行管理部319は,例えば,取得した通信パケットを含む通信セッションにおけるセッション情報331の判定開始時刻に0を設定する(S118)。
[判定中止処理(S116)]
次に,取得した通信パケットを含む通信セッションについて重複チェックを中止するか否かの判断を行う判定中止処理について説明する。図26は,判定中止処理を説明するフローチャート図である。
初めに,判定実行管理部319は,例えば,取得した通信パケットを含む通信セッションのセッション情報331に記憶された判定開始時刻と判定実行情報340に記憶された判定期間とに基づいて判定終了時刻を算出する(S121)。
図27は,第4の実施の形態におけるセッション情報331,記憶位置情報333及び判定実行情報340の具体例を示す図である。図27の例において,新たな通信セッションがセッション情報331に記憶されるときに(S96),判定実行管理部319は,例えば,そのセッション情報331の「判定開始時刻」に現在時刻を記憶する(S98)。そして,判定実行管理部319は,S121において,さらに判定実行情報340の「判定期間」を参照し,「判定開始時刻」に「判定期間」を加算するとによって判定終了時刻を算出する。具体的に,図27(A)における「ID」が1のセッション情報331においては,「判定開始時刻」が13:15:12.000であり,判定実行情報340の「判定期間」が「10(s)」であるため,判定終了時刻は13:15:22.000になる。
図26に戻り,現在時刻が判定終了時刻を経過している場合(S122のYES),判定実行管理部319は,例えば,現在時刻と判定実行情報340に記憶された判定中止期間とに基づいて,判定再開時刻を算出する(S123)。そして,判定実行管理部319は,算出した判定再開時刻をセッション情報331の判定開始時刻に記憶する(S124)。すなわち,判定実行管理部319は,現在時刻が判定終了時刻を経過していることに応答して,通信セッションの重複チェックを中止する。そのために,判定実行管理部319は,判定を中止にする通信セッションが判定を再開する時刻を算出し,セッション情報331に記憶する。
さらに,判定実行管理部319は,例えば,判定を中止する記憶位置情報333を削除する。具体的に,これにより,管理情報記憶部313は,通信パケットを取得した際に,管理情報332を参照することができなくなる。そのため,管理情報記憶部313は,記憶位置情報333が削除された判定を中止する。
次に,第4の実施の形態において重複チェックを中止する場合及び重複チェックを再開する場合の具体例について説明する。
図27に示す例において,図27(B)に示すように,「ID」が1及び2である通信セッションの記憶位置情報333が記憶されている。そのため,パケット取得部311が通信セッションの「ID」が1である通信パケットを取得した場合(S91のYES),取得した通信パケットに関するセッション情報331と記憶位置情報333とが記憶されているため(S95のYES,S101のYES),パケット判定部314は,重複チェックを行う(S111)。
ここで,例えば,パケット取得部311が取得した通信パケットが重複パケットでない場合(S111のNO),判定実行管理部319は,「判定開始時刻」として記憶されている13:15:12.000と「判定期間」として記憶されている10(S)とを加算する。これにより,判定実行管理部319は,判定終了時刻として13:15:22.000を算出する(S121)。そして,現在時間である13:15:25.000は,判定終了時刻である13:15:22.000を経過している(S122のYES)。そのため,判定実行管理部319は,現在時刻と「判定中止期間」として記憶されている10(S)とを加算することにより,判定再開時刻として13:15:35.000を算出し,セッション情報331に記憶する(S123,S124)。そして,判定実行管理部319は,図28(B)に示すように,通信セッションの「ID」が1である記憶位置情報333を削除する(S125)。これにより,判定実行管理部319は,取得した通信パケットを含む通信セッションの重複チェックを中止することができる。
次に,例えば,パケット取得部311が重複チェックを中止している「ID」が1である通信セッションに含まれる通信パケットを取得した場合,判定実行管理部319は,現在時刻が判定開始時刻に経過しているか否かを確認する(S102)。そして,図29(A)に示すように,例えば,現在時刻が13:15:31.000であった場合,現在時刻が「判定開始時刻」を経過していないため,判定実行管理部319は,取得した通信パケットの重複チェックを終了する(S102のNO)。すなわち,図29の例において,判定実行管理部319は,取得した通信パケットの重複チェックを行わない。
一方,図30(A)に示すように,例えば,現在時刻が13:15:37.000であった場合,現在時刻が「判定開始時刻」を経過している。そのため,判定実行管理部319は,取得した通信パケットの重複チェックを開始する(S102のYES)。そして,判定実行管理部319は,図30(B)に示すように,判定を中止していた「ID」が1である通信セッションの記憶位置情報333を記憶する(S103)。これにより,判定実行管理部319は,判定を中止していた通信セッションの重複チェックを再開することができる。
また,パケット判定部314が重複チェックを行った結果,取得した通信パケットが重複パケットであった場合(S111のNO),判定実行管理部319は,取得した通信パケットに関するセッション情報331の判定開始時刻に0を記憶する(S118)。すなわち,判定中止処理のS121において算出する判定終了時刻が,現在時刻の前の時刻を示すようにする。そして,重複パケットが発生した通信セッションについては,重複チェックを中止する処理であるS123からS125が実行されないようにする。これにより,判定実行管理部319は,重複チェックが発生した通信セッションに含まれる通信パケットについては,重複チェックを実行することが可能になる。
このように,第4の実施の形態によれば,判定期間の間に重複チェックを行った結果,重複パケットが検出されなかった通信セッションに含まれる通信パケットついては,重複チェックを中止する。そして,第4の実施の形態において,重複チェックを中止した通信セッションに含まれる通信パケットは,判定中止期間が経過した後に,重複チェックを再開する。これにより,判定実行管理部319は,重複チェックを行う必要がないと判断できる通信セッションに含まれる通信パケットについては,中止と再開を繰り返しながら重複チェックを行うことが可能になる。そのため,重複パケット検出装置3のCPU等の処理負担を軽減させることが可能になる。
また,第4の実施の形態によれば,過去に重複パケットが発生した通信セッションに含まれる通信パケットは,重複チェックを行う。これにより,再び重複チェックが発生する可能性の高い通信セッションに含まれる通信パケットについて,重点的に重複チェックを行うことが可能になる。
以上の実施の形態をまとめると,以下の付記のとおりである。
(付記1)
IPパケットの取得に応じて,該取得したIPパケットのヘッダに含まれる通信セッションを特定する情報に基づき,前記取得したIPパケットが送受信される通信セッションを特定し,記憶部に記憶された,IPパケットのヘッダに含まれるIPパケット識別子に対応する管理情報のうち,前記特定した通信セッションに対応する管理情報を参照し,
前記取得したIPパケットのIPパケット識別子に対応する管理情報が存在する場合,前記取得したIPパケットを破棄し,前記取得したIPパケットのIPパケット識別子に対応する管理情報が存在しない場合,前記取得したIPパケットのIPパケット識別子に対応する管理情報を前記記憶部に記憶し,前記取得したIPパケットを出力する,
処理をコンピュータに実行させるパケット処理プログラム。
(付記2)
付記1において,
前記記憶部は,前記IPパケット識別子に対応する管理情報をそれぞれ記憶する複数の記憶領域を有し,
前記管理情報が存在する場合とは,前記記憶領域に第1の情報が記憶されている場合であり,
前記管理情報が存在しない場合とは,前記記憶領域に第2の情報が記憶されている場合であるパケット処理プログラム。
(付記3)
付記2において,
前記記憶領域は,それぞれ1ビットの情報を記憶可能であるパケット処理プログラム。
(付記4)
付記2において,
前記IPパケット識別子は,該IPパケット識別子を有するIPパケットが送信された順に割り振られており,
さらに,取得したIPパケットの前記IPパケット識別子がサイクリックした場合に,最初のIPパケット識別子から所定数のIPパケット識別子に対応する前記管理情報に前記第2の情報を記憶し,
取得したIPパケットの前記IPパケット識別子が前記第1の情報が記憶された管理情報に対応するIPパケット識別子に到達した場合に,前記第2の情報を記憶した管理情報に対応するIPパケット識別子と連続する次の所定数のIPパケット識別子に対応する管理情報に前記第2の情報を記憶する,
処理をコンピュータに実行させるパケット処理プログラム。
(付記5)
付記2において,
さらに,前記管理情報に前記第1の情報が記憶されてから該記憶された管理情報の記憶期間が経過したIPパケットの管理情報に前記第2の情報を記憶する,
処理をコンピュータに実行させるパケット処理プログラム。
(付記6)
付記5において,
前記記憶期間が経過したIPパケットの管理情報に第2の情報を記憶する処理は,連続した集計期間毎に,前記管理情報に前記第1の情報が記憶された前記IPパケットのIPパケット識別子を記憶し,
前記記憶されたIPパケット識別子のうち,記憶されてからの期間が前記記憶期間を超えた前記集計期間に対応するIPパケット識別子に対応する前記管理情報に前記第2の情報を記憶するパケット処理プログラム。
(付記7)
付記6において,
前記記憶期間が経過したIPパケットの管理情報に第2の情報を記憶する処理は,前記IPパケットの取得頻度が所定の閾値よりも大きい場合に,前記集計期間を短縮し,
前記IPパケットの取得頻度が所定の閾値よりも小さい場合に,前記集計期間を延長するパケット処理プログラム。
(付記8)
付記1において,
さらに,前記IPパケットの破棄が所定の期間発生しない場合に,前記管理情報の参照を中止する,
処理をコンピュータに実行させるパケット処理プログラム。
(付記9)
付記8において,
さらに,前記中止の後,所定の期間が経過した際に,前記管理情報の参照を再開する
処理をコンピュータに実行させるパケット処理プログラム。
(付記10)
付記8において,
さらに,前記中止の際に,参照を中止する前記管理情報を消去する,
処理をコンピュータに実行させるパケット処理プログラム。
(付記11)
IPパケットのヘッダに含まれるIPパケット識別子に対応する管理情報を記憶する記憶部と,
IPパケットの取得に応じて,該取得したIPパケットのヘッダに含まれる通信セッションを特定する情報に基づき,前記取得したIPパケットが送受信される通信セッションを特定し,前記管理情報のうち,前記特定した通信セッションに対応する管理情報を参照し,
前記取得したIPパケットのIPパケット識別子に対応する管理情報が存在する場合,前記取得したIPパケットを破棄し,前記取得したIPパケットのIPパケット識別子に対応する管理情報が存在しない場合,前記取得したIPパケットのIPパケット識別子に対応する管理情報を前記記憶部に記憶し,前記取得したIPパケットを出力する処理部と,を有する,
重複パケット検出装置。
(付記12)
IPパケットの取得に応じて,該取得したIPパケットのヘッダに含まれる通信セッションを特定する情報に基づき,前記取得したIPパケットが送受信される通信セッションを特定し,記憶部に記憶された,IPパケットのヘッダに含まれるIPパケット識別子に対応する管理情報のうち,前記特定した通信セッションに対応する管理情報を参照し,
前記取得したIPパケットのIPパケット識別子に対応する管理情報が存在する場合,前記取得したIPパケットを破棄し,前記取得したIPパケットのIPパケット識別子に対応する管理情報が存在しない場合,前記取得したIPパケットのIPパケット識別子に対応する管理情報を前記記憶部に記憶し,前記取得したIPパケットを出力する,
処理をコンピュータに実行させるパケット処理方法。