(57)【要約】【課題】通信装置からキャプチャしたパケットのうち重複するパケットを除去するために用いるメモリの容量を削減する。【解決手段】本重複パケット除去方法は、（Ａ）１又は複数の通信装置における所定のポートから受信した第１のパケットの識別子が、パケットの識別子を格納する格納部に格納されているか否かを判断し、（Ｂ）第１のパケットの識別子が格納部に格納されていると判断された場合には、第１のパケットを破棄し、（Ｃ）第１のパケットの識別子が格納部に格納されていないと判断された場合には、第１のパケットの識別子を格納部に格納し、（Ｄ）格納部に識別子が格納されているパケットに係るセッションと同一のセッションに係り且つ通信方向が反転した第２のパケットを受信したことを検出した場合には、格納部に格納されている識別子を削除する処理を含む。【選択図】図２
2015167316.tif 000002
【特許請求の範囲】
【請求項１】
１又は複数の通信装置における所定のポートから受信した第１のパケットの識別子が、パケットの識別子を格納する格納部に格納されているか否かを判断し、
前記第１のパケットの識別子が前記格納部に格納されていると判断された場合には、前記第１のパケットを破棄し、
前記第１のパケットの識別子が前記格納部に格納されていないと判断された場合には、前記第１のパケットの識別子を前記格納部に格納し、
前記格納部に識別子が格納されているパケットに係るセッションと同一のセッションに係り且つ通信方向が反転した第２のパケットを受信したことを検出した場合には、前記格納部に格納されている識別子を削除する
処理を、コンピュータに実行させるためのプログラム。
【請求項２】
前記第２のパケットを受信した場合、請求項１記載の処理を実行する複数の処理部から１つの処理部を選択し、
選択された前記１つの処理部に、前記第２のパケットを出力する
処理を、前記コンピュータ又は他のコンピュータに実行させるためのプログラム。
【請求項３】
各セッションについて前記複数の処理部のうち当該セッションを現在担当する処理部の識別子と当該セッションにおける通信方向とを格納する第２の格納部から、前記所定のポートから受信した第３のパケットに係るセッションが既に検出されていたか判断し、
前記第３のパケットに係るセッションが既に検出されていたと判断された場合、前記第２の格納部から、前記第３のパケットから通信方向が反転したか判断し、
前記第３のパケットから通信方向が反転したと判断された場合には、前記複数の処理部から処理部を選択し、
前記第３のパケットの通信方向及び選択された処理部の識別子で前記第２の格納部を更新する
処理を、さらに前記コンピュータ又は他のコンピュータに実行させるための請求項２記載のプログラム。
【請求項４】
前記第３のパケットを含むメッセージに対してメッセージの識別子を付与し、
前記第３のパケットと前記メッセージの識別子とを、選択された前記処理部に出力する
処理をさらに前記コンピュータ又は他のコンピュータに実行させるための請求項３記載のプログラム。
【請求項５】
１又は複数の通信装置における所定のポートから受信した第１のパケットの識別子が、パケットの識別子を格納する格納部に格納されているか否かを判断し、
前記第１のパケットの識別子が前記格納部に格納されていると判断された場合には、前記第１のパケットを破棄し、
前記第１のパケットの識別子が前記格納部に格納されていないと判断された場合には、前記第１のパケットの識別子を前記格納部に格納し、
前記格納部に識別子が格納されているパケットに係るセッションと同一のセッションに係り且つ通信方向が反転した第２のパケットを前記所定のポートから受信したことを検出した場合には、前記格納部に格納されている識別子を削除する
処理を、コンピュータが実行する重複パケット除去方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置からキャプチャしたパケットのうち重複するパケットを除去するための技術に関する。
【背景技術】
【０００２】
ネットワークを流れるパケットをキャプチャして、キャプチャしたパケットを解析することが行われている。例えば、図１に示すように、３台のスイッチＳＷ１乃至ＳＷ３が接続されているネットワークにおいて、サーバＡ及びＢはスイッチＳＷ２に接続されており、サーバＣ及びＤがスイッチＳＷ３に接続されており、スイッチＳＷ２及びＳＷ３にスイッチＳＷ１が接続されているものとする。ここで、スイッチＳＷ２において、サーバＢがサーバＡ及びサーバＣと通信する際に発生するパケットをキャプチャするため、サーバＢが接続されているポートをミラーリングの対象ポートとして指定して、点線で示すように、分析装置に接続されているポートに、複製されたパケットを出力させる。同様に、スイッチＳＷ３において、サーバＣがサーバＢ及びサーバＤと通信する際に発生するパケットをキャプチャするため、サーバＣが接続されているポートをミラーリングの対象ポートとして指定して、点線で示すように、分析装置に接続されているポートに、複製されたパケットを出力させる。
【０００３】
そうすると、分析装置には、スイッチＳＷ２から、サーバＡとサーバＢとの間で送受信されるパケットと、サーバＢとサーバＣとの間で送受信されるパケットとが送出される。また、スイッチＳＷ３から、サーバＢとサーバＣとの間で送受信されるパケットと、サーバＣとサーバＤとの間で送受信されるパケットとが送出される。すなわち、サーバＢとサーバＣとの間で送受信されるパケットとが重複してしまうので、分析装置では、余分なパケットを削除することになる。
【０００４】
このような余分なパケットの破棄については従来から着目されていたが、後から受信した同一のパケットを破棄するという基本的な事項以外に特別な工夫は存在していない。特に、余分なパケットの破棄に用いるメモリの容量は、キャプチャするパケットの数が多くなればなるほど問題となるが、その削減について検討されているものは存在しない。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−２４６１９５号公報
【特許文献２】特開２００９−２０７０９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従って、本発明の目的は、一側面によれば、通信装置からキャプチャしたパケットのうち重複するパケットを除去するために用いるメモリの容量を削減する技術を提供することである。
【課題を解決するための手段】
【０００７】
本発明に係る重複パケット除去方法は、（Ａ）１又は複数の通信装置における所定のポートから受信した第１のパケットの識別子が、パケットの識別子を格納する格納部に格納されているか否かを判断し、（Ｂ）第１のパケットの識別子が格納部に格納されていると判断された場合には、第１のパケットを破棄し、（Ｃ）第１のパケットの識別子が格納部に格納されていないと判断された場合には、第１のパケットの識別子を格納部に格納し、（Ｄ）格納部に識別子が格納されているパケットに係るセッションと同一のセッションに係り且つ通信方向が反転した第２のパケットを受信したことを検出した場合には、格納部に格納されている識別子を削除する処理を含む。
【発明の効果】
【０００８】
一側面によれば、通信装置からキャプチャしたパケットのうち重複するパケットを除去するために用いるメモリの容量を削減できるようになる。
【図面の簡単な説明】
【０００９】
【図１】図１は、スイッチと分析装置との関係の一例を表す図である。
【図２】図２は、第１の実施の形態に係る分析装置とスイッチの接続例を示す図である。
【図３】図３は、メッセージの送受信を模式的に示す図である。
【図４】図４は、同一セッションにおいて送受信されるメッセージを模式的に示す図である。
【図５】図５は、第１の実施の形態に係る分析装置の機能ブロック図である。
【図６】図６は、セッションテーブルに格納されるデータの一例を示す図である。
【図７】図７は、振り分けテーブルに格納されるデータの一例を示す図である。
【図８】図８は、番号格納部に格納されるデータの一例を示す図である。
【図９】図９は、ＩＰＩＤテーブルの一例を示す図である。
【図１０】図１０は、分析装置の処理の概要を示す図である。
【図１１】図１１は、実施の形態に係る処理フローを示す図である。
【図１２】図１２は、ＩＰパケットのフォーマットを示す図である。
【図１３】図１３は、ＩＰヘッダの構成を示す図である。
【図１４】図１４は、ＴＣＰヘッダの構成を示す図である。
【図１５】図１５は、ＵＤＰヘッダの構成を示す図である。
【図１６】図１６は、実施の形態に係る処理フローを示す図である。
【図１７】図１７は、実施の形態に係る処理フローを示す図である。
【図１８】図１８は、第２の実施の形態に係る分析装置の機能ブロック図である。
【図１９】図１９は、他のシステム例を示す図である。
【図２０】図２０は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１０】
［実施の形態１］
本実施の形態に係るシステムの概要を図２乃至図４を用いて説明する。
【００１１】
例えば、本実施の形態に係る分析装置１００は、図２に示すように、スイッチＳＷ１乃至ＳＷ３に接続されており、クライアント端末２００はスイッチＳＷ１に接続されており、サーバ３００はスイッチＳＷ３に接続されている。また、スイッチＳＷ１とスイッチＳＷ２、スイッチＳＷ２とスイッチＳＷ３が、それぞれ接続されているものとする。
【００１２】
このような場合、パケット１乃至３を含むリクエストが、クライアント端末２００からサーバ３００へ送信されると、リクエストは、スイッチＳＷ１、スイッチＳＷ２及びスイッチＳＷ３を介してサーバ３００へ転送される。そうすると、分析装置１００は、図３に示すように、スイッチＳＷ１から３つのパケット１乃至３を受信し、スイッチＳＷ２から３つのパケット１乃至３を受信し、さらにスイッチＳＷ３から３つのパケット１乃至３を受信する。
【００１３】
その後、パケット４乃至６を含むレスポンスが、サーバ３００からクライアント端末２００へ送信されると、レスポンスは、スイッチＳＷ３、スイッチＳＷ２及びスイッチＳＷ１を介してユーザ端末２００へ転送される。そうすると、分析装置１００は、図３に示すように、通信方向が反転して、スイッチＳＷ３から３つのパケット４乃至６を受信し、スイッチＳＷ２から３つのパケット４乃至６を受信し、スイッチＳＷ１から３つのパケット４乃至６を受信する。
【００１４】
このように同一セッションにおけるリクエスト及びレスポンスは逆方向に送信される。また、図４に示すように、複数のメッセージのやりとりが同一セッションにおいて行われる場合もある。すなわち、リクエストメッセージＡがクライアント端末２００からサーバ３００へ送信されると、通信方向は反転して、レスポンスメッセージＢがクライアント端末２００へ送信される。さらに、リクエストメッセージＣが、通信方向が反転して、クライアント端末２００からサーバ３００へ送信される。
【００１５】
このように、同一セッション内では、メッセージが宛先に届くと、通信方向が反転して次のメッセージが送信される、という現象が繰り返される。そうすると、分析装置１００においても、通信方向が反転すれば、異なるメッセージを受信したことになるので、通信方向が反転してから次に通信方向が反転するまでの間で、重複して受信した余分なパケットであるか否かを判断すれば効率がよいことが分かる。
【００１６】
より具体的には、同一セッションについて通信方向が反転してから次に通信方向が反転するまでを１つのメッセージとしてみなして、１つのメッセージに含まれるパケットの識別子を保持しておく。そして、同一の識別子を含むパケットを受信した場合には、そのパケットを破棄するという基本的な処理を行う。さらに、次に通信方向が反転したことを検出すると、現在保持しているパケットの識別子は不要になるので破棄して、次のメッセージについてのパケットの識別子を保持するようにする。このようにすれば、パケットの識別子の保持時間は非常に短くなり、メモリ容量の消費も少なくなる。
【００１７】
次に、本実施の形態に係る分析装置１００の機能ブロック図を図５に示す。
【００１８】
本実施の形態では、分析装置１００は、複数のＣＰＵ（Central Processing Unit）０乃至２で機能分担を行っているものとする。図５で模式的に示すように、ＣＰＵ０は、ＮＩＣ（Network Interface Card）及びＯＳ（Operating System）を介して受信したパケットを、例えばプロミスキャスモードで取得して、Ｌａｙｅｒ−４（Ｌ４）解析処理の一部を実行する。すなわち、ＣＰＵ０が分析プログラムを実行することで、Ｌ４解析部１１０が実現される。Ｌ４解析部１１０は、パケット振り分け部１１１と、先頭検出部１１２と、セッション識別部１１３と、パケット受信部１１４と、セッションテーブル１１５と、振り分けテーブル１１６と、番号格納部１１７とを有する。
【００１９】
パケット受信部１１４は、ＯＳを介してパケットを受信し、セッション識別部１１３に出力する。セッション識別部１１３は、受信パケットに係るセッションを識別する。さらに、先頭検出部１１２は、受信パケットがメッセージの先頭のパケットであるか否かを判断する。さらに、パケット振り分け部１１１は、受信パケットを、その解析処理を実行するＣＰＵ１又はＣＰＵ２に振り分ける。
【００２０】
セッションテーブル１１５は、例えば図６に示すようなテーブルである。図６の例では、接続先ＩＰアドレス、接続先ポート番号、接続元ＩＰアドレス及び接続元ポート番号を含むセッションデータと、送信先ＩＰアドレスで表される最新通信方向と、最新メッセージ番号と、現在受信メッセージを処理中であるＣＰＵの番号である現ＣＰＵ番号とが、セッション毎に格納されるようになっている。
【００２１】
振り分けテーブル１１６は、例えば図７に示すようなテーブルである。図７の例では、ＣＰＵ毎に、ＣＰＵ番号及び担当するメッセージの数とが登録されるようになっている。このように、本実施の形態では、セッション単位ではなく、メッセージ単位でパケットの処理が各ＣＰＵに振り分けられる。図４の例では、振り分け先のＣＰＵは、ＣＰＵ１及びＣＰＵ２である。
【００２２】
番号格納部１１７は、図８に示すようなデータを格納する。本実施の形態では、初めて受信したメッセージに通し番号を付与するようになっており、現在受信中のメッセージの番号が、番号格納部１１７に格納されているものとする。
【００２３】
また、ＣＰＵ１が分析プログラムを実行することで、Ｌ４解析部１２０と、Ｌ７解析部１３０とが実現される。Ｌ４解析部１２０は、パケット処理部１２１と、ＩＰＩＤテーブル１２２を含む。パケット処理部１２１は、パケット振り分け部１１１から受信したパケットに対してＩＰＩＤテーブル１２２を用いたチェックを行って、重複受信した余分なパケットであれば破棄し、重複受信した余分なパケットでない場合にはそのパケットのＩＰＩＤをＩＰＩＤテーブル１２２に登録すると共に、Ｌ７解析部１３０に出力する。
【００２４】
ＩＰＩＤテーブル１２２に格納されるデータの一例を図９に示す。ＩＰＩＤテーブル１２２は、メッセージ毎に、そのメッセージに含まれるパケットの識別子（ＩＰＩＤ）を格納するようになっている。図９では、1つのテーブルが１つのメッセージのＩＰＩＤテーブルに相当する。
【００２５】
Ｌ７解析部１３０は、所定のシステム状態解析を実行する。但し、この処理については、従来と変わらないので、これ以上述べない。
【００２６】
ＣＰＵ２も分析プログラムを実行することで、Ｌ４解析部１４０及びＬ７解析部１５０が実現される。Ｌ４解析部１４０は、Ｌ４解析部１２０と同様に、パケット処理部１４１と、ＩＰＩＤテーブル１４２とを有する。
【００２７】
次に、図１０を用いて、分析装置１００の処理の概要を説明する。ＣＰＵ０においてＬ４解析部１１０のパケット受信部１１４は、パケットを受信すると（ステップＳ１）、当該パケットをセッション識別部１１３等に出力する。そうすると、セッション識別部１１３は、受信したパケットからセッションを識別し（ステップＳ３）、さらに先頭検出部１１２は、受信したパケットがその通信方向からメッセージの先頭か否かを判断する（ステップＳ５）。パケット振り分け部１１１は、メッセージの先頭のパケットであれば新たにＣＰＵを選択し、メッセージの先頭のパケットでない場合にはそのメッセージを処理しているＣＰＵを特定する（ステップＳ７）。そして、パケット振り分け部１１１は、選択したＣＰＵ又は特定したＣＰＵに、メッセージ番号と共に、受信したパケットを出力する（ステップＳ９）。図１０に示したように、セッション毎ではなく、メッセージ毎にパケットはＣＰＵに割り振られる。図１０の例では、セッション１におけるパケット１乃至３のメッセージはＣＰＵ１で処理され、セッション２におけるパケット１及び２のメッセージはＣＰＵ１で処理される。また、セッション１におけるパケット４乃至６のメッセージはＣＰＵ２で処理され、セッション３におけるパケット１乃至３のメッセージはＣＰＵ２で処理される。
【００２８】
ＣＰＵ１におけるＬ４解析部１２０のパケット処理部１２１は、受信したパケットのＩＰＩＤでメッセージ番号に対応するＩＰＩＤテーブル１２２の検索を行う。そして、受信したパケットのＩＰＩＤがＩＰＩＤテーブル１２２に既に登録されている場合には、パケット処理部１２１は、そのパケットを破棄し、未登録であればＩＰＩＤテーブル１２２にＩＰＩＤを登録すると共に、受信したパケットをＬ７解析部１３０に出力する（ステップＳ１１）。また、Ｌ７解析処理部１３０は、所定の解析処理を実行する（ステップＳ１３）。
【００２９】
同様に、ＣＰＵ２におけるＬ４解析部１４０のパケット処理部１４１は、受信したパケットのＩＰＩＤでメッセージ番号に対応するＩＰＩＤテーブル１４２の検索を行う。そして、受信したパケットのＩＰＩＤがＩＰＩＤテーブル１４２に既に登録されている場合には、パケット処理部１４１は、そのパケットを破棄し、未登録であればＩＰＩＤテーブル１４２にＩＰＩＤを登録すると共に、受信したパケットをＬ７解析部１５０に出力する（ステップＳ１５）。また、Ｌ７解析処理部１５０は、所定の解析処理を実行する（ステップＳ１７）。
【００３０】
なお、先頭検出部１１２は、メッセージの先頭を検出すると、同一セッションについての直前メッセージを担当しているＣＰＵを特定し、直前メッセージの番号と共にＩＰＩＤテーブルの削除要求を、特定したＣＰＵに出力する。削除要求を受信したＣＰＵ１のＬ４解析部１２０のパケット処理部１２１は、直前メッセージの番号のＩＰＩＤテーブル１２２をクリアする（ステップＳ２１）。同様に、削除要求を受信したＣＰＵ２のＬ４解析部１４０のパケット処理部１４１は、直前メッセージの番号のＩＰＩＤテーブル１４２をクリアする（ステップＳ２３）。
【００３１】
このようにすれば、重複受信した余分なパケットを削除でき、さらにＩＰＩＤテーブル１２２及び１４２を早期にクリアできるので、メモリ容量の消費を抑制できるようになる。また、メッセージ単位でパケットを各ＣＰＵに振り分けるので、セッション単位で振り分けを行う場合に比して振り分けの自由度が高くなり、処理負荷の分散が効率的に行えるようになる。
【００３２】
次に、図１１乃至図１７を用いて、本実施の形態に係る処理の詳細を説明する。
【００３３】
ＣＰＵ０におけるＬ４解析部１１０のパケット受信部１１４は、パケット受信まで待機する（図１１：ステップＳ１０１）。すなわち、パケット受信でない場合には、処理は端子Ｃを介してステップＳ１３９に移行する。
【００３４】
一方、パケットを受信すると、パケット受信部１１４は、セッション識別部１１３に出力し、セッション識別部１１３は、パケットを受信すると、セッションデータを当該パケットから読み出す（ステップＳ１０３）。
【００３５】
図１２に、パケットのＩＰパケットの構成を示す。図１２の例では、上段は、ＩＰヘッダとＴＣＰパケット（ＴＣＰヘッダ及びＴＣＰセグメント）とを含むＩＰパケットの構成を示し、下段は、ＩＰヘッダとＵＤＰパケット（ＵＤＰヘッダ及びＵＤＰデータグラム）とを含むＩＰパケットの構成を示す。
【００３６】
図１３に、ＩＰヘッダの構成を示す。ＩＰヘッダの構成はよく知られたものであるが、本実施の形態では、識別子（ＩＰＩＤ）と、送信元ＩＰアドレスと、送信先ＩＰアドレスとが抽出される。
【００３７】
図１４に、ＴＣＰヘッダの構成を示す。ＴＣＰヘッダの構成もよく知られたものであるが、送信元ポート（ｐｏｒｔ）番号と、送信先ポート番号とが抽出される。
【００３８】
図１５に、ＵＤＰヘッダの構成を示す。ＵＤＰヘッダの構成もよく知られたものであるが、送信元ポート番号と、送信先ポート番号とが抽出される。
【００３９】
セッションデータは、送信元ＩＰアドレスと、送信先ＩＰアドレスと、送信元ポート番号と、送信先ポート番号とを含む。
【００４０】
そして、先頭検出部１１２は、セッションテーブル１１５を、セッション識別部１１３によって読み出したセッションデータで検索する（ステップＳ１０５）。読み出したセッションデータが、セッションテーブル１１５で検出された場合には（ステップＳ１０７：Ｙｅｓルート）、既に検出済みのセッションにおけるメッセージのパケットを受信したことになり、最初に検出されたリクエストメッセージと同じセッションデータが検出されたことになる。よって、先頭検出部１１２は、通信方向を上りと設定する（ステップＳ１０９）。具体的には、送信先ＩＰアドレス（＝接続先ＩＰアドレス）を保持する。そして処理は端子Ａを介して図１６の処理に移行する。
【００４１】
一方、読み出したセッションデータが、セッションテーブル１１５で検出されなかった場合（ステップＳ１０７：Ｎｏルート）、先頭検出部１１２は、セッションデータにおける送信先と送信元とを入れ替えてから、セッションテーブル１１５を検索する（ステップＳ１１１）。
【００４２】
このように変更したセッションデータがセッションテーブル１１５において検出された場合には（ステップＳ１１３：Ｙｅｓルート）、既に検出済みのセッションにおけるメッセージのパケットを受信したことになるが、最初に検出されたリクエストメッセージとは反対の通信方向のパケットを受信したことになる。従って、先頭検出部１１２は、通信方向を下りと設定する（ステップＳ１１５）。具体的には、送信先ＩＰアドレス（＝接続元ＩＰアドレス）を保持する。そして処理は端子Ａを介して図１６の処理に移行する。
【００４３】
一方、変更したセッションデータがセッションテーブル１１５において検出されなかった場合には（ステップＳ１１３：Ｎｏルート）、新規のセッションが検出されたことになる。従って、先頭検出部１１２は、読み出したセッションデータを、セッションテーブル１１５に追加格納する（ステップＳ１１７）。さらに、先頭検出部１１２は、通信方向を上りと設定する（ステップＳ１１９）。具体的には、送信先ＩＰアドレスを保持する。そして、処理は端子Ｂを介して図１６のステップＳ１３１の処理に移行する。
【００４４】
図１６の処理の説明に移行して、端子Ａの後に、先頭検出部１１２は、セッションテーブル１１５において該当セッションデータに対応付けられている最新通信方向と、設定された通信方向とが一致するか否かを判断することで、通信方向反転の有無を判定する（ステップＳ１２１）。一致していれば通信方向の反転はないし、一致していなければ通信方向は反転している。
【００４５】
通信方向の反転がないと判定された場合には（ステップＳ１２３：Ｎｏルート）、パケット振り分け部１１１は、セッションテーブル１１５から、セッションデータに対応付けられている現ＣＰＵ及びメッセージ番号を読み出す（ステップＳ１２５）。そして処理はステップＳ１３５に移行する。なお、通信方向の反転がない場合には、現ＣＰＵに対してパケットを出力するために、本ステップを実行する。
【００４６】
一方、通信方向の反転があると判断された場合には（ステップＳ１２３：Ｙｅｓルート）、パケット振り分け部１１１は、セッションテーブル１１５から、セッションデータに対応付けられている現ＣＰＵ及びメッセージ番号を読み出す（ステップＳ１２７）。さらに、パケット振り分け部１１１は、読み出されたＣＰＵ番号のＣＰＵに対して、メッセージ番号を含む削除要求を出力する（ステップＳ１２９）。そして処理はステップＳ１３１に移行する。
【００４７】
これに対して、例えばＣＰＵ１におけるＬ４解析部１２０のパケット処理部１２１は、削除要求を受信すると、当該削除要求に含まれるメッセージ番号のＩＰＩＤテーブルを削除する（ステップＳ１４１）。すなわち、同一セッションにおいて通信方向が反転してメッセージが変わったと判断された場合には、前のメッセージについてのＩＰＩＤテーブルについてはもう使用しないので、削除する。これによってメモリの有効活用が図られる。
【００４８】
そして、パケット振り分け部１１１は、振り分けテーブル１１６及び番号格納部１１７から、新ＣＰＵ番号と新メッセージ番号を取得して、セッションテーブル１１５において該当セッションデータに対応付けて格納する（ステップＳ１３１）。振り分けテーブル１１６において、各ＣＰＵが担当するメッセージの数が登録されているので、可能な限り均等になるように、メッセージ数が最も小さい値のＣＰＵの番号を読み出し、そのＣＰＵ番号のメッセージ数を１インクリメントする。さらに、番号格納部１１７から、現在のメッセージ番号を読み出して、当該メッセージ番号に１を加えた番号を、新メッセージ番号として採用する。さらに、番号格納部１１７において、メッセージ番号を新メッセージ番号に更新する。
【００４９】
さらに、パケット振り分け部１１１は、設定された通信方向（送信先ＩＰアドレス）を、セッションテーブル１１５において該当セッションデータに対応付けて格納する（ステップＳ１３５）。
【００５０】
そして、パケット振り分け部１１１は、処理に係るパケット及びメッセージ番号（ステップＳ１２５で読み出されたメッセージ番号又はステップＳ１３１で取得された新メッセージ番号）を、ＣＰＵ番号（ステップＳ１２５で読み出されたＣＰＵ番号又はステップＳ１３１で取得された新ＣＰＵ番号）のＣＰＵに出力する（ステップＳ１３７）。
【００５１】
その後、Ｌ４解析部１１０は、処理を終了するか否かを判断する（ステップＳ１３９）。処理を終了しない場合には、処理は端子Ｄを介して図１１のステップＳ１０１に戻る。一方、終了を指示されるなどして処理を終了する場合には、処理を終了する。
【００５２】
このようにすれば、同一セッションにおける通信方向の反転に応じて異なるメッセージを受信するようになったことを検出して、ＩＰＩＤテーブルをクリアしてメモリの使用容量を削減しつつ、重複受信した余分なパケットを削除できる。
【００５３】
なお、ＣＰＵ１及びＣＰＵ２では、図１７に示すような処理が行われる。すなわち、例えばＣＰＵ１におけるＬ４解析部１２０のパケット処理部１２１は、ＣＰＵ０からパケット及びメッセージ番号を受信すると（ステップＳ３０１）、メッセージ番号に対応するＩＰＩＤテーブル１２２を特定して、当該ＩＰＩＤテーブル１２２を、パケットに含まれるＩＰＩＤで検索する（ステップＳ３０３）。
【００５４】
ＩＰＩＤがメッセージ番号に対応するＩＰＩＤテーブル１２２に検出された場合には（ステップＳ３０５：Ｙｅｓルート）、重複受信した余分なパケットであるので、パケット処理部１２１は、受信パケットを破棄する（ステップＳ３０７）。そして処理を終了する。なお、ＩＰＩＤテーブル１２２のサイズは、メッセージ毎にＩＰＩＤを有しているので小さく、検索処理の処理時間もセッション単位でＩＰＩＤを管理する場合に比して少なくて済む。
【００５５】
一方、ＩＰＩＤがメッセージ番号に対応するＩＰＩＤテーブル１２２に検出されなかった場合には（ステップＳ３０５：Ｎｏルート）、初めて受信したパケットであるので、パケット処理部１２１は、パケットのＩＰＩＤを、ＩＰＩＤテーブル１２２に登録する（ステップＳ３０９）。そして、パケット処理部１２１は、受信パケットをＬ７解析部１３０に出力する。Ｌ７解析部１３０は、受信パケットについての解析処理を実行する（ステップＳ３１１）。
【００５６】
このようにすれば、重複受信した余分なパケットは破棄され、新規なパケットはＬ７解析部１３０で処理されるようになる。
【００５７】
［実施の形態２］
第１の実施の形態では、ＮＩＣ及びＯＳを介してパケット受信部１１４がパケットを受信して、そのまま処理を行う例を示したが、例えば、図１８に示すような構成を採用するようにしても良い。すなわち、受信部１７２及び保存部１７１を有するパケット保存部１７０を導入して、受信部１７２はパケットを受信すると、保存部１７１は受信パケットをデータ格納部１６０に格納する。
【００５８】
Ｌ４解析部１１０ｂは、パケット受信部１１４の代わりにパケット読み出し部１１８を有しており、パケット読み出し部１１８は、処理開始後に、データ格納部１６０に格納されているパケットを格納順に読み出して、以降の処理を実行する。
【００５９】
このように、パケット受信時とは別のタイミングで、Ｌ４解析処理及びＬ７解析処理を実行するようにしても良い。
【００６０】
以上本発明の実施の形態について説明したが、本発明はこれらに限定されるものではない。例えば、機能ブロック構成は一例であって、プログラムモジュール構成とは一致しない場合もある。さらに、処理フローについても、処理結果が変わらない限り、処理順番を入れ替えたり、複数ステップを並列実行するようにしても良い。
【００６１】
さらに、ＣＰＵ０乃至ＣＰＵ２で機能分担を行うような例を示したが、例えばシングルプロセッサのコンピュータを複数台用いて上で述べたような処理を実行するようにしても良いし、例えばＣＰＵ２が異なるコンピュータに含まれる場合もある。
【００６２】
さらに、図２の例では、分析装置１００は、複数のスイッチの複数のポートに接続されている例を示したが、複数のスイッチではなく複数のポートでもない場合もある。例えば、図１９に示すようなケースであっても分析装置１００は有効である。具体的には、スイッチＳＷ１には、クライアント端末と、サーバＡ（例えばＷｅｂサーバ）と、サーバＢ（例えばＡＰサーバ）と、分析装置１００と、スイッチＳＷ２とが接続されている。一方、スイッチＳＷ２には、サーバＣ（例えばＤＢサーバ）が接続されているが、スイッチＳＷ２には、ミラーリングの機能が存在しないものとする。
【００６３】
そうすると、スイッチＳＷ１において、サーバＡ及びサーバＢが接続されているポートが監視対象ポートとして指定されて、分析装置１００が接続されているポートにミラリーングで複製されたパケットが出力される。そうすると、サーバＡが接続されているポートからは、クライアント端末とサーバＡとの間におけるＨＴＴＰ（Hyper Text Transfer Protocol）のパケットと、サーバＡとサーバＢとの間におけるＩＩＯＰ（Internet Inter-ORB Protocol）のパケットとがキャプチャされる。一方、サーバＢが接続されているポートからは、サーバＡとサーバＢとの間におけるＩＩＯＰのパケットと、サーバＢとサーバＣとの間におけるＤＢプロトコルのパケットとがキャプチャされる。そうすると、サーバＡとサーバＢとの間におけるＩＩＯＰのパケットが重複してしまう。
【００６４】
このような状況においても、正しく重複受信した余分なパケットを破棄でき、さらに使用メモリ量を削減でき、処理を高速化できる。
【００６５】
なお、上で述べた分析装置１００は、コンピュータ装置であって、図２０に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）群２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ群２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ群２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ群２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００６６】
以上述べた本実施の形態をまとめると、以下のようになる。
【００６７】
本実施の形態に係る重複パケット除去方法は、（Ａ）１又は複数の通信装置における所定のポートから受信した第１のパケットの識別子が、パケットの識別子を格納する格納部に格納されているか否かを判断し、（Ｂ）第１のパケットの識別子が格納部に格納されていると判断された場合には、第１のパケットを破棄し、（Ｃ）第１のパケットの識別子が格納部に格納されていないと判断された場合には、第１のパケットの識別子を格納部に格納し、（Ｄ）格納部に識別子が格納されているパケットに係るセッションと同一のセッションに係り且つ通信方向が反転した第２のパケットを受信したことを検出した場合には、格納部に格納されている識別子を削除する処理を含む。
【００６８】
このように、同一セッションにおいて異なるメッセージを受信したことを検出できるので、メッセージ単位で管理されているパケットの識別子を、異なるメッセージを受信したことを契機に破棄でき、結果として使用メモリ量を削減できる。
【００６９】
さらに、上で述べた重複パケット除去方法は、（Ｅ）上で述べた第２のパケットを受信した場合、（Ａ）乃至（Ｄ）の処理を実行する複数の処理部から１つの処理部を選択し、（Ｆ）選択された上記１つの処理部に、第２のパケットを出力する処理を含むようにしても良い。このようにすれば、メッセージ単位で負荷分散を行うことができ、フレキシブルな処理部の選択が可能となる。
【００７０】
さらに、上記重複パケット除去方法は、（Ｇ）各セッションについて複数の処理部のうち当該セッションを現在担当する処理部の識別子と当該セッションにおける通信方向とを格納する第２の格納部から、所定のポートから受信した第３のパケットに係るセッションが既に検出されていたか判断し、（Ｈ）第３のパケットに係るセッションが既に検出されていたと判断された場合、第２の格納部から、第３のパケットから通信方向が反転したか判断し、（Ｉ）第３のパケットから通信方向が反転したと判断された場合には、複数の処理部から処理部を選択し、（Ｊ）第３のパケットの通信方向及び選択された処理部の識別子で第２の格納部を更新する処理をさらに含むようにしても良い。
【００７１】
このようにすれば、確実に通信方向の反転を検出できる。また、処理部の識別子を保持しているので、現在受信中のメッセージに含まれるパケットを同じ処理部に送出するのも容易である。
【００７２】
また、上記重複パケット除去方法は、（Ｋ）第３のパケットを含むメッセージに対してメッセージの識別子を付与し、（Ｌ）第３のパケットとメッセージの識別子とを、選択された処理部に出力する処理をさらに含むようにしても良い。このようにメッセージの識別子を付与して用いることで、処理部ではメッセージ毎にパケットの識別子を管理するのが容易になる。なお、第２の格納部にメッセージの識別子をセッションに対応付けて格納するようにしても良い。
【００７３】
なお、上で述べたような処理をプロセッサ又はコンピュータに実行させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭなどの光ディスク、光磁気ディスク、半導体メモリ（例えばＲＯＭ）、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、ＲＡＭ等の記憶装置に一時保管される。
【００７４】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７５】
（付記１）
１又は複数の通信装置における所定のポートから受信した第１のパケットの識別子が、パケットの識別子を格納する格納部に格納されているか否かを判断し、
前記第１のパケットの識別子が前記格納部に格納されていると判断された場合には、前記第１のパケットを破棄し、
前記第１のパケットの識別子が前記格納部に格納されていないと判断された場合には、前記第１のパケットの識別子を前記格納部に格納し、
前記格納部に識別子が格納されているパケットに係るセッションと同一のセッションに係り且つ通信方向が反転した第２のパケットを受信したことを検出した場合には、前記格納部に格納されている識別子を削除する
処理を、コンピュータに実行させるためのプログラム。
【００７６】
（付記２）
前記第２のパケットを受信した場合、付記１記載の処理を実行する複数の処理部から１つの処理部を選択し、
選択された前記１つの処理部に、前記第２のパケットを出力する
処理を、前記コンピュータ又は他のコンピュータに実行させるためのプログラム。
【００７７】
（付記３）
各セッションについて前記複数の処理部のうち当該セッションを現在担当する処理部の識別子と当該セッションにおける通信方向とを格納する第２の格納部から、前記所定のポートから受信した第３のパケットに係るセッションが既に検出されていたか判断し、
前記第３のパケットに係るセッションが既に検出されていたと判断された場合、前記第２の格納部から、前記第３のパケットから通信方向が反転したか判断し、
前記第３のパケットから通信方向が反転したと判断された場合には、前記複数の処理部から処理部を選択し、
前記第３のパケットの通信方向及び選択された処理部の識別子で前記第２の格納部を更新する
処理を、さらに前記コンピュータ又は他のコンピュータに実行させるための付記２記載のプログラム。
【００７８】
（付記４）
前記第３のパケットを含むメッセージに対してメッセージの識別子を付与し、
前記第３のパケットと前記メッセージの識別子とを、選択された前記処理部に出力する
処理をさらに前記コンピュータ又は他のコンピュータに実行させるための付記３記載のプログラム。
【００７９】
（付記５）
１又は複数の通信装置における所定のポートから受信した第１のパケットの識別子が、パケットの識別子を格納する格納部に格納されているか否かを判断し、
前記第１のパケットの識別子が前記格納部に格納されていると判断された場合には、前記第１のパケットを破棄し、
前記第１のパケットの識別子が前記格納部に格納されていないと判断された場合には、前記第１のパケットの識別子を前記格納部に格納し、
前記格納部に識別子が格納されているパケットに係るセッションと同一のセッションに係り且つ通信方向が反転した第２のパケットを前記所定のポートから受信したことを検出した場合には、前記格納部に格納されている識別子を削除する
処理を、コンピュータが実行する重複パケット除去方法。
【符号の説明】
【００８０】
１００  分析装置
１１０，１２０，１４０  Ｌ４解析部
１１１  パケット振り分け部
１１２  先頭検出部
１１３  セッション識別部
１１４  パケット受信部
１１５  セッションテーブル
１１６  振り分けテーブル
１１７  番号格納部
１２１，１４１  パケット処理部
１２２，１４２  ＩＰＩＤテーブル
【図１】
2015167316.tif 000003
【図２】
2015167316.tif 000004
【図３】
2015167316.tif 000005
【図４】
2015167316.tif 000006
【図５】
2015167316.tif 000007
【図６】
2015167316.tif 000008
【図７】
2015167316.tif 000009
【図８】
2015167316.tif 000010
【図９】
2015167316.tif 000011
【図１０】
2015167316.tif 000012
【図１１】
2015167316.tif 000013
【図１２】
2015167316.tif 000014
【図１３】
2015167316.tif 000015
【図１４】
2015167316.tif 000016
【図１５】
2015167316.tif 000017
【図１６】
2015167316.tif 000018
【図１７】
2015167316.tif 000019
【図１８】
2015167316.tif 000020
【図１９】
2015167316.tif 000021
【図２０】
2015167316.tif 000022