(57)【特許請求の範囲】
【請求項１】
解析に用いるパケットの記憶制御を実行させるプログラムであって、
コンピュータ間で送受信されるメッセージに係るパケットを取得するステップと、
取得したパケットを記憶部に格納するステップと、
取得したパケットのコネクション及び送信方向が、既に取得しているパケットのコネクション及び送信方向と一致するか否かを判定し、コネクション及び送信方向が一致し且つ取得間隔が所定の時間幅より短い関係を有するパケット群の少なくとも一部のパケットについて前記記憶部における記憶領域が不足する場合に、前記パケット群のうち前記記憶部に記憶されたパケットを破棄する破棄ステップと、
を、解析用コンピュータに実行させるプログラム。
【請求項２】
前記破棄ステップが実行された場合、前記コネクション及び送信方向に対応付けて、同一メッセージについてパケットの破棄が行われたことを表す削除情報を管理データ格納部に格納するステップと、
同一のコネクション及び送信方向について次に受信したパケットが前記パケット群に属する場合、前記管理データ格納部に前記同一のコネクション及び送信方向に対応付けて格納されている削除情報が、同一メッセージについてパケットの破棄が行われたことを表しているか否かを判断するステップと、
前記削除情報が前記同一メッセージについてパケットの破棄が行われたことを表している場合には、前記次に受信したパケットを破棄するステップと、
をさらに前記解析用コンピュータに実行させるための請求項１記載のプログラム。
【請求項３】
取得したパケットの取得時刻と直前のパケットの取得時刻との差が所定の閾値以上であって且つ取得したパケットを格納するためのバッファ領域が存在する場合には、新たに発行されたメッセージ番号と共に前記パケットのデータを前記バッファ内のキューの最後尾に追加するステップと、
取得したパケットの取得時刻と直前のパケットの受信時刻との差が所定の閾値未満であって且つ取得したパケットを格納するためのバッファ領域が存在する場合には、前記コネクション及び送信方向について直前に発行されたメッセージ番号と共に前記パケットのデータを前記バッファ内のキューの最後尾に追加するステップと、
をさらに前記分析用コンピュータに実行させ、
前記破棄ステップにおいて、前記キューを前記直前に発行されたメッセージ番号で検索して前記同一メッセージに係るパケットのデータを特定し、当該同一メッセージに係るパケットのデータの破棄後に当該データのためのバッファ領域を空きバッファプールに返却する
請求項１又は２記載のプログラム。
【請求項４】
解析に用いるパケットの記憶制御を実行させるバッファ管理方法であって、
コンピュータ間で送受信されるメッセージに係るパケットを取得するステップと、
取得したパケットを記憶部に格納するステップと、
取得したパケットのコネクション及び送信方向が、既に取得しているパケットのコネクション及び送信方向と一致するか否かを判定し、コネクション及び送信方向が一致し且つ取得間隔が所定の時間幅より短い関係を有するパケット群の少なくとも一部のパケットについて前記記憶部における記憶領域が不足する場合に、前記パケット群のうち前記記憶部に記憶されたパケットを破棄する破棄ステップと、
を含み、解析用コンピュータにより実行されるバッファ管理方法。
【請求項５】
解析に用いるパケットの記憶制御を実行するバッファ管理装置であって、
コンピュータ間で送受信されるメッセージに係るパケットを取得し、取得したパケットを記憶部に格納する前処理部と、
取得したパケットのコネクション及び送信方向が、既に取得しているパケットのコネクション及び送信方向と一致するか否かを判定し、コネクション及び送信方向が一致し且つ取得間隔が所定の時間幅より短い関係を有するパケット群の少なくとも一部のパケットについて前記記憶部における記憶領域が不足する場合に、前記パケット群のうち前記記憶部に記憶されたパケットを破棄するバッファ削除処理部と、
を有するバッファ管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、コンピュータ間でやりとりされるメッセージの分析技術に関する。
【背景技術】
【０００２】
例えばサーバ間でメッセージのやりとりを行って処理を進めるシステムの分析を、メッセージに含まれるパケットを取り込んで解析することによって行う場合、図１に示すような処理を行う。
【０００３】
具体的には、図１左側に示すように、例えばサーバを接続しているスイッチが当該スイッチを通過するパケットをコピーしてシステム分析装置に送信し、システム分析装置は自身が保持するＮＩＣ（Network Interface Card）を介してスイッチから送られてくるパケットの受信処理を実施する。この際パケットに対して受信時刻などの管理情報が付加される。その後、システム分析装置は、パケットバッファへのパケットの書込処理を行う。一方、図１右側に示すように、この書込処理とは非同期に、パケットをパケットバッファから読み出すパケット読み出し処理を実施し、１又は複数のパケットから１つのメッセージを組み立てるメッセージ組み立て処理を実施した後、メッセージ解析処理を実施する。
【０００４】
通常、図１左側に示した、パケットを取り込む処理よりも、図１右側に示したメッセージ解析処理の方が遅いため、パケットバッファを設けている。しかしながら、近年、ネットワークの高速化により、バースト的に流れるパケットの量が増加しているため、メッセージ解析処理を行うまでにパケットバッファが溢れてしまうという問題が発生する。
【０００５】
パケットバッファの容量はメッセージ分析装置のメモリ量で決まるため、バッファ容量を無限に確保する事はできない。従って、図１にも示しているように、パケットをパケットバッファに書き込む時には、空きバッファ容量とパケットサイズを比較して、空きバッファ容量が大きい場合は保存、パケットサイズが大きい場合は破棄するといった輻輳制御処理を行わなければならない。図１の例では、メッセージ３の３番目のパケットｃが破棄されてしまっている。しかしながら、空きバッファ容量とパケットサイズで保存や破棄を判定すると、複数のパケットを含むメッセージの場合、図１に示すように、メッセージ組み立て処理でメッセージに含まれる全てのパケットが揃わなくなる。従って、バッファリングしたにもかかわらずメッセージ解析処理を行うことができないパケット（図１ではメッセージ３のパケットａ及びｂ）を破棄することになるので、バッファ容量を無駄に使用したことになる。また、メッセージ組み立て処理も余分に行われたことになる。
【０００６】
なお、ＡＴＭ（Asynchronous Transfer Mode）において、バッファ管理については以下のような従来技術が存在している。すなわち、パケットを複数に分割してなるセルを、宛先コネクション毎に個別にバッファに格納し、各バッファでは受信順にセルを格納するとともに、格納順にセルを送出する。各バッファでは、格納を完了したパケットと、格納途中のパケットを区別し、バッファが限界容量に達した時には、この格納途中のパケットに属する格納済みのセルを廃棄するとともに、バッファに格納すべき新たなパケットに属するセルが到着するまでの間、セルの格納を行わない。しかしながら、本従来技術は、処理で判別が必要となるＥＯＰ（End Of Packet）セルを、ヘッダのＰＴＩ（ペイロードタイプ識別子）によって判断しており、ＡＴＭ技術に特化したものである。従って、ＡＴＭではないスイッチなどによってミラーリングでコピーされ且つサーバ間でやりとりされているパケットに対して、そのまま適用できるわけではない。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００１−２２３７０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
以上述べたように、コンピュータ間でメッセージのやりとりを行って処理を進める分析対象システムの分析を、メッセージに含まれるパケットを取り込んで解析するような場合に、従来技術に示されたＡＴＭ技術はそのまま適用できない。
【０００９】
従って、本技術の目的は、コンピュータ間でメッセージのやりとりを行って処理を進めるような分析対象システムの分析時に、効率的にパケットバッファを利用するための技術を提供することである。
【課題を解決するための手段】
【００１０】
本バッファ管理方法は、解析に用いるパケットの記憶制御を実行させるバッファ管理方法であって、（Ａ）コンピュータ間で送受信されるメッセージに係るパケットを取得するステップと、（Ｂ）取得したパケットを記憶部に格納するステップと、（Ｃ）取得した複数のパケットのうち、コネクション及び送信方向が一致し且つ取得間隔が所定の時間幅より短い関係を有するパケット群の少なくとも一部のパケットについて記憶部における記憶領域が不足する場合に、パケット群のうち記憶部に記憶されたパケットを破棄する破棄ステップとを含む。
【発明の効果】
【００１１】
効率的なパケットバッファの利用が可能となる。
【図面の簡単な説明】
【００１２】
【図１】図１は、従来技術の問題を説明するための図である。
【図２】図２は、本技術の実施の形態におけるシステム概要を示す図である。
【図３】図３は、パケット間隔を説明するための図である。
【図４】図４は、パケット間隔を説明するための図である。
【図５】図５は、メッセージシーケンス例を示す図である。
【図６】図６は、パケットのフォーマットを示す図である。
【図７】図７は、ＩＰヘッダのフォーマットを示す図である。
【図８】図８は、ＴＣＰヘッダのフォーマットを示す図である。
【図９】図９は、メッセージ分析装置の機能ブロック図である。
【図１０】図１０は、メッセージ分析装置の動作の概要を説明するための図である。
【図１１】図１１は、メッセージ分析装置のメインの処理フローを示す図である。
【図１２】図１２は、コネクション情報テーブルの一例を示す図である。
【図１３】図１３は、メッセージ分析装置のメインの処理フローを示す図である。
【図１４】図１４は、開始及び終了時処理を示す図である。
【図１５】図１５は、パケット処理の処理フローを示す図である。
【図１６】図１６は、受信時刻データテーブルの一例を示す図である。
【図１７】図１７は、削除フラグテーブルの一例を示す図である。
【図１８】図１８は、パケットバッファを説明するための模式図である。
【図１９】図１９は、パケット処理の処理フローを示す図である。
【図２０】図２０は、コンピュータの機能ブロック図である。
【図２１】図２１は、メッセージ分析装置の機能ブロック図である。
【発明を実施するための形態】
【００１３】
図２に本実施の形態に係るシステム概要を示す。例えば、図２に示すように複数のサーバがスイッチＳＷに接続されており、サーバ間でメッセージのやりとりを行って処理を進めるシステムが分析対象システムである。このような分析対象システムのスイッチＳＷは、本実施の形態における主要な処理を実施するメッセージ分析装置１００に接続されており、スイッチＳＷを通過する全てのパケットをミラーリングしてメッセージ分析装置１００に送信する。メッセージ分析装置１００は、スイッチＳＷから送られてくるパケットを受信し、以下で述べるような処理を実施する。
【００１４】
なお、サーバにおいて実行されている、ＴＣＰ（Transmission Control Protocol）上のアプリケーションが１パケット（１５１４バイト。ＴＣＰセグメント又はセグメントとも呼ぶ。）に収まらないメッセージの送信を指示すると、サーバのカーネルがセグメント分割し、複数パケットでメッセージを送信する。図３に示すように、パケットの送信間隔には、同一メッセージ内と異なるメッセージ間の２種類が存在し、同一メッセージ内のパケット送信間隔の方が短いという性質がある。これは、例えばサーバアプリケーションがカーネルに対して、メッセージ単位に送信要求を行うため、カーネル内で分割された同一メッセージ内のパケットの送信間隔は短くなるためである。一方、サーバアプリケーションで分割された２つの異なるメッセージ送信要求は、別々にシーケンシャルにカーネルで処理されるので、パケット送信間隔が長くなる。
【００１５】
本実施の形態では、このような特性を利用してパケットの分類を行うが、図２に示したようなシステムにおいてスイッチＳＷがミラーリングによってパケットをコピーしてメッセージ分析装置１００に送信する場合にも、コネクション毎且つ送信方向毎にパケットを分類すれば、上で述べたパケットの送信間隔は維持される。すなわち、図４に示すように、サーバＡからサーバＢへのパケット列と、サーバＢからサーバＣへのパケット列とが同時期にスイッチＳＷを通過する場合、模式的に図示されているように、スイッチＳＷから２つのパケット列がシリアルにマージされた形でメッセージ分析装置１００に出力される。しかしながら、パケットのヘッダなどによってサーバＡからサーバＢへのパケット列とサーバＢからサーバＣへのパケット列とを分離すれば、パケットの送信順番は変化することなく、さらにタイミングについてもあまり変化することはない。すなわち、同一メッセージ内におけるパケットの送信間隔は、異なるメッセージ間におけるパケット送信間隔より短いという特徴は維持される。
【００１６】
また、図５に示すように、サーバＡからサーバＢに接続する場合には、ＴＣＰレベルにおいて、ＳＹＮパケットをサーバＡからサーバＢに送信し、これに対してサーバＢからサーバＡにＳＹＮ＋ＡＣＫパケットを送信する。さらに、サーバＡからサーバＢへＡＣＫパケットを送信する。これによってコネクションが確立したことになって、通信が双方向で行われる。その後、例えばサーバＡからサーバＢへＦＩＮパケットを送信し、それに対してサーバＢからサーバＡへＡＣＫパケットが返信される。さらに、サーバＢからサーバＡへＦＩＮパケットが送信され、サーバＡからサーバＢへＡＣＫパケットが送信されると、コネクションの切断が行われたことになる。本実施の形態では、コネクションの確立を検出して、コネクション確立状態においてはパケットの送信方向毎にパケットの受信間隔によってメッセージの異同を判断する。また、コネクションの切断も検出して、管理データを更新する。
【００１７】
さらに、図６に示すように、ＩＰパケットには、ＩＰヘッダ、ＴＣＰヘッダ及びＴＣＰデータが含まれており、このＴＣＰデータの部分にアプリケーションのメッセージヘッダ及びメッセージデータが含まれる。メッセージヘッダには、メッセージ長が含まれる。なお、ＩＰパケットは、例えばイーサフレームの中に含まれることになる。
【００１８】
また、ＩＰヘッダの模式図を図７に示す。ＩＰヘッダは周知であるから詳しく述べないが、送信元ＩＰアドレスと宛先ＩＰアドレスを含むようになっている。同様に、図８にＴＣＰヘッダの模式図を示す。ＴＣＰヘッダには、ＴＣＰヘッダについても周知であるから詳しく述べないが、コネクションを識別するための送信元ポート番号及び宛先ポート番号を含むようになっている。なお、フラグにおいてＳＹＮパケット、ＦＩＮパケット、ＡＣＫパケットであるか否かなどが指定されている。なお、ＴＣＰパケットのＴＣＰデータのサイズ（データ長）は、（ＩＰパケットに含まれるパケット長−ＩＰヘッダ長−ＴＣＰヘッダ長）にて算出可能である。
【００１９】
次に、メッセージ分析装置１００の機能ブロック図を図９に示す。メッセージ分析装置１００は、スイッチＳＷに接続されるＮＩＣなどの通信ユニット１１０と、通信ユニット１１０を介してスイッチＳＷから受信したパケットに対して受信時刻等の管理データを付与するなどの処理を実施するパケット受信処理部１２０と、パケットを格納するためのパケットバッファ１４０と、受信したパケットをパケットバッファ１４０に書き込むための処理などを実施するメッセージ処理部１３０と、パケットバッファ１４０に蓄積されているパケットに対して解析処理等を実施するメッセージ解析処理部１５０とを有する。
【００２０】
通信ユニット１１０は、プロミスキャスモードで、全てのパケットをパケット受信処理部１２０に対してオペレーティングシステム（ＯＳ）を介して出力する。
【００２１】
メッセージ処理部１３０は、前処理部１３１と、メッセージ及びバッファ状況判断処理部１３２と、バッファ書込処理部１３３と、バッファ削除処理部１３４と、管理データ格納部１３５とを有する。各処理部は、管理データ格納部１３５にデータを書き込んだり、管理データ格納部１３５からデータを読み出したりしつつ以下で述べるような処理を実施する。
【００２２】
パケットバッファ１４０は、パケットのデータを保持するために確保されたメモリの領域であり、本実施の形態ではパケットのデータをキュー形式で保持するようになっている。
【００２３】
メッセージ解析処理部１５０は、図１で示したパケット読み出し処理、メッセージ組み立て処理及びメッセージ解析処理を実施する。これらの処理については従来と同じであるから詳しくは述べない。
【００２４】
図１０を用いて本実施の形態に係るメッセージ分析装置１００の動作の概要を説明する。メッセージ分析装置１００の通信ユニット１１０は、スイッチＳＷから送信されてきたパケットを受信してパケット受信処理部１２０に出力する。パケット受信処理部１２０は、通信ユニット１１０からパケットを受信すると受信時刻などのデータを添付してメッセージ処理部１３０の前処理部１３１に出力する。メッセージ処理部１３０の前処理部１３１は、パケットのデータを受け取ると、パケットのヘッダからコネクション及び送信方向を特定するための前処理を実施する。また、メッセージ及びバッファ状況判断処理部１３２は、同一コネクション及び同一送信方向についての直前パケットの受信時刻と今回受信したパケットの受信時刻との差からメッセージにおける先頭パケットであるか否かを判断すると共に、同一メッセージについてパケットバッファ１４０においてパケットの破棄を既に行ったか否かを判断するといったメッセージ及びバッファ状況判断処理を実施する。同一メッセージについてパケットの破棄を既に行っている場合には、このパケットについてバッファ書き込み処理を行わなくともよいので、このパケットについてはここで処理を終了する。
【００２５】
例えば、メッセージ３にパケットａ乃至ｃが含まれる場合、先頭のパケットａについてバッファ溢れが発生してしまうと、後続のパケットｂ及びｃについてはバッファ書き込み処理を行わず、受信パケットｂ及びｃをそのまま破棄する。
【００２６】
さらに、同一メッセージについてパケットの破棄を行っていない場合には、バッファ書込処理部１３３は、今回のパケットについてバッファ書き込み処理を実施する。但し、バッファ書き込み処理でバッファ溢れが発生したことが分かると、バッファ削除処理部１３４は、今回のパケットと同一のメッセージに含まれる他のパケットのデータをパケットバッファ１４０から削除するバッファ削除処理を実施する。例えば、メッセージ３に含まれるパケットｃをパケットバッファ１４０に書き込もうとした際にバッファ溢れが発生すると、同一のメッセージに含まれており且つ既にパケットバッファ１４０に格納されている先行パケットａ及びｂのデータを削除する。
【００２７】
このようにすれば、揃うことのないパケットについてのメッセージは無駄にパケットバッファ１４０のバッファ領域を消費することが無くなるので、パケットバッファ１４０の有効活用が図られる。また、メッセージ解析処理部１５０がメッセージ組み立て処理で、パケットの破棄を行う頻度が少なくなる。すなわち、メッセージ組み立て処理の処理効率が向上する。
【００２８】
次に、図１１乃至図１９を用いて、メッセージ分析装置１００の処理内容について詳細に説明する。なお、既に通信ユニット１１０が受信したパケットは、パケット受信処理部１２０に出力され、パケット受信処理部１２０は、受信時刻のデータなどを付加した上で、メッセージ処理部１３０に当該パケットのデータが出力される、という前提の処理について、これ以上の説明は省略する。
【００２９】
まず、メッセージ処理部１３０の前処理部１３１は、パケット受信処理部１２０からパケットを受信したか判断する（ステップＳ１）。パケットを受信していない場合には、受信するまで待機する。一方、受信した場合には、前処理部１３１は、受信パケットからコネクション情報を抽出する（ステップＳ３）。コネクション情報は、送信元ＩＰアドレス及び宛先ＩＰアドレスと送信元ポート番号及び宛先ポート番号とを含む。そして、前処理部１３１は、抽出コネクション情報で、管理データ格納部１３５に格納されているコネクション情報テーブルを検索する（ステップＳ５）。コネクション情報テーブルは、例えば図１２に示すようなテーブルである。
【００３０】
図１２の例では、接続先ＩＰアドレス（＝宛先ＩＰアドレス）と、接続先ポート番号（＝宛先ポート番号）と、接続元ＩＰアドレス（＝送信元ＩＰアドレス）と、接続元ポート番号（＝送信元ポート番号）と、コネクション番号とが登録されるようになっている。なお、送信元と宛先が入れ替わっている場合にも同じコネクションであるが、ここでは両方テーブルに登録するのではなく、一方のみを登録することにする。コネクション番号は、以下で述べるデータの識別情報として用いられ、コネクション情報テーブルにコネクション情報を登録する際に発行される。
【００３１】
そして、ステップＳ５の結果として該当レコードが存在すれば（ステップＳ７：Ｙｅｓルート）、前処理部１３１は、受信パケットが切断関連パケットであるか判断する（ステップＳ８）。切断関連パケットは、ＦＩＮパケットを含む。切断関連パケットであれば、端子Ａを介して図１３のステップＳ１５に移行する。一方、切断関連パケットでなければ、前処理部１３１は、メッセージ及びバッファ状況判断処理部１３２等に処理を依頼し、メッセージ及びバッファ状況判断処理部１３２等は、上りについてのパケット処理を実施する（ステップＳ９）。このパケット処理については後に詳しく述べる。但し、ステップＳ９では、パケットの送信方向が上りであることが特定されており、この方向を特定した上でパケット処理を実施する。その後端子Ｂを介して図１３のステップＳ１９に移行する。
【００３２】
一方、ステップＳ５の結果として該当レコードが存在しない場合には（ステップＳ７：Ｎｏルート）、前処理部１３１は、接続先と接続元のＩＰアドレス及びポート番号を入れ替えて、下りコネクション情報を生成し（ステップＳ１１）、下りコネクション情報で、管理データ格納部１３５に格納されているコネクション情報テーブルを検索する（ステップＳ１３）。処理は端子Ｃを介して図１３の処理に移行する。
【００３３】
図１３の処理の説明に移行して、ステップＳ１３の結果として該当レコードが存在する場合には（ステップＳ１４：Ｙｅｓルート）、前処理部１３１は、受信パケットが切断関連パケットであるか判断する（ステップＳ１６）。切断関連パケットであれば、ステップＳ１５に移行する。一方、切断関連パケットでなければ、前処理部１３１は、メッセージ及びバッファ状況判断処理部１３２等に処理を依頼し、メッセージ及びバッファ状況判断処理部１３２等は、下りについてのパケット処理を実施する（ステップＳ１７）。このパケット処理については後に詳しく述べる。但し、ステップＳ１７では、パケットの送信方向が下りであることが特定されており、この方向を特定した上でパケット処理を実施する。その後ステップＳ１９に移行する。
【００３４】
一方、ステップＳ１３の結果として該当レコードが存在しない場合には（ステップＳ１４：Ｎｏルート）、前処理部１３１は、開始及び終了時処理を実施する（ステップＳ１５）。この開始及び終了時処理については後に詳しく述べる。処理はステップＳ１９に移行する。
【００３５】
ステップＳ１９では、処理が終了するか判断し（ステップＳ１９）、処理終了でなければ端子Ｄを介して図１１のステップＳ１に戻る。一方、処理終了であれば、処理を終了する。
【００３６】
次に、開始及び終了時処理について図１４を用いて説明する。最初に、前処理部１３１は、受信パケットが第１の接続関連パケットであるか判断する（ステップＳ２１）。本実施の形態では、第１の接続関連パケットは、ＳＹＮ＋ＡＣＫパケットである。第１の接続関連パケットであれば、前処理部１３１は、受信パケットのコネクション情報の接続先と接続元のＩＰアドレス及びポート番号を入れ替えて接続判断情報として、例えばメインメモリなどの記憶装置に格納する（ステップＳ２３）。そして元の処理に戻る。
【００３７】
一方、第１の接続関連パケットではない場合には、前処理部１３１は、受信パケットが、接続判断情報と同じコネクション情報を含む第２の接続関連パケットであるか判断する（ステップＳ２５）。第２の接続関連パケットは、図５で示した接続シーケンスにおいてＳＹＮ＋ＡＣＫパケットの次に送信されるＡＣＫパケットである。従って、このようなＡＣＫパケットでは、ＳＹＮ＋ＡＣＫパケットとは接続先と接続元のＩＰアドレス及びポート番号が逆になっている。
【００３８】
受信パケットが、このような第２の接続関連パケットであれば、前処理部１３１は、受信パケットのコネクション情報を、管理データ格納部１３５におけるコネクション情報テーブル（図１２）に登録する（ステップＳ２７）。ここで、コネクション番号を発行して一緒に登録する。そして、元の処理に戻る。
【００３９】
なお、切断時の処理（ステップＳ４１）は、ステップＳ２５で上で述べたような第２の接続関連パケットではなく、切断関連パケット（ここではＦＩＮパケット）である場合に実行される。
【００４０】
すなわち、前処理部１３１は、受信パケットがステップＳ２５で上で述べたような第２の接続関連パケットではないと判断した場合には、受信パケットが切断関連パケットであるか判断する（ステップＳ３３）。受信パケットが切断関連パケットでもない場合には、そのまま元の処理に戻る。一方、受信パケットが切断関連パケットであれば、前処理部１３１は、管理データ格納部１３５に格納されているコネクション情報テーブル等において、該当レコードを削除する（ステップＳ４１）。管理データ格納部１３５には、まだ説明していない受信時刻データテーブル及び削除フラグテーブルが格納されており、これらはコネクション番号で管理されている。従って、コネクション情報テーブルにおける該当レコードのコネクション番号で、受信時刻データテーブル及び削除フラグテーブルを検索して、該当レコードを削除する。
【００４１】
次に、図１５乃至図１９を用いてパケット処理（ステップＳ９及びＳ１７）について説明する。パケット処理は、コネクション番号及びパケットの送信方向を特定した上で実施される。パケットの送信方向は、管理データ格納部１３５において参照すべきデータ及び記録すべきデータを区別するために用いられるが、実質的な処理内容が異なるわけではない。従って、以下では、注意すべき部分を除き、特に区別することなく説明する。
【００４２】
まず、メッセージ及びバッファ状況判断処理部１３２は、管理データ格納部１３５に格納されている受信時刻データテーブルから、今回のコネクション番号及び送信方向（上り又は下り）について登録されている、直前のパケットの受信時刻を読み出し、今回のパケットの受信時刻との差（すなわちパケット間隔）を算出する（ステップＳ５１）。
【００４３】
受信時刻データテーブルには、例えば図１６に示すようなデータが格納されている。図１６の例では、コネクション番号と、上りパケット時刻（上りのパケット受信時刻）と、上りメッセージ番号と、下りパケット時刻（下りのパケット受信時刻）と、下りメッセージ番号とが登録されるようになっている。すなわち、コネクション毎且つ送信方向毎に、直前パケットの受信時刻が登録されるようになっている。また、メッセージを区別するためにメッセージ番号も登録されるようになっている。従って、ステップＳ５１では、今回のコネクション番号及び送信方向に該当する時刻を読み出す。なお、今回のコネクション番号及び送信方向について初めてのパケットである場合には、該当レコードが登録されていないので、このような場合には十分に小さい値を直前パケットの受信時刻とする。
【００４４】
そして、メッセージ及びバッファ状況判断処理部１３２は、今回のパケットの受信時刻で、受信時刻データテーブルの該当部分（今回のコネクション番号及び送信方向に対応する受信時刻）を更新する（ステップＳ５３）。次回パケットを受信した際に参照するためである。なお、初めてのパケットの場合には、該当レコードが存在しないので、新規に登録する。
【００４５】
その後、メッセージ及びバッファ状況判断処理部１３２は、ステップＳ５１で算出したパケット間隔が所定の閾値以上であるか否かを判断することによって、今回受信したパケットがメッセージの先頭パケットであるか否かを判断する（ステップＳ５５）。所定の閾値は、例えば予め測定した結果に基づき管理データ格納部１３５に格納しておき、ステップＳ５５で読み出して用いる。
【００４６】
パケット間隔が所定の閾値以上である場合には、１つのメッセージの先頭パケットであると判定し、メッセージ及びバッファ状況判断処理部１３２は、メッセージ番号を発行し、受信時刻データテーブルの該当部分（今回のコネクション番号及び送信方向に対応するメッセージ番号）に登録する（ステップＳ５７）。さらに、メッセージ及びバッファ状況判断処理部１３２は、管理データ格納部１３５に格納されている削除フラグテーブルにおいて、今回のコネクション番号及び送信方向についての削除フラグをＯＦＦにセットする（ステップＳ５９）。そしてステップＳ６３に移行する。
【００４７】
削除フラグテーブルには、例えば図１７に示すようなデータが格納されている。図１７の例では、コネクション番号と、送信方向と、削除フラグ（ここでは「０」がＯＦＦを表し、「１」が「ＯＮ」を表す。）とが登録されるようになっている。削除フラグがＯＮであれば、既に同一メッセージのパケットの破棄が行われており、同一メッセージに含まれるパケットであればバッファ書き込みは不要である。一方、削除フラグがＯＦＦであれば、同一メッセージのパケットについては破棄が行われておらず、バッファ書き込み処理を行うことになる。
【００４８】
ステップＳ５９では、今回のコネクション番号及び送信方向についての削除フラグを更新する。但し、今回のコネクション番号及び送信方向について初めてのパケットである場合には、該当レコードが存在しないので、今回のコネクション番号及び送信方向と削除フラグ「ＯＦＦ」とを含むレコードを新たに登録する。
【００４９】
一方、パケット間隔が所定の閾値未満である場合には、１つのメッセージの２番目以降のパケットであると判定し、メッセージ及びバッファ状況判断処理部１３２は、削除フラグテーブルにおいて今回のコネクション番号及び送信方向についての削除フラグがＯＮになっているか判断する（ステップＳ６１）。削除フラグがＯＮであれば、今回受信したパケットについてはバッファ書き込み処理を実施せずに、元の処理に戻る。すなわち、メッセージ解析処理の対象から除外することによって、処理の効率化を図る。これに対して、削除フラグがＯＦＦになっている場合には、ステップＳ６３に移行する。
【００５０】
ステップＳ５９の後又はステップＳ６１で削除フラグがＯＦＦである場合には、メッセージ及びバッファ状況判断処理部１３２は、バッファ書込処理部１３３に対して、今回受信したパケットのバッファ書き込み処理を依頼する。
【００５１】
バッファ書込処理部１３３は、メッセージ及びバッファ状況判断処理部１３２からの依頼に応じて、パケットバッファ１４０の空きバッファサイズと今回受信したパケットのサイズとを比較する（ステップＳ６３）。
【００５２】
空きバッファサイズの方が今回受信したパケットのサイズよりも大きい場合には（ステップＳ６５：Ｙｅｓルート）空きがあるので、バッファ書込処理部１３３は、パケットバッファ１４０において今回受信したパケットのデータのためのバッファ領域を確保する（ステップＳ６７）。そして、バッファ書込処理部１３３は、今回受信したパケットのデータ（受信時刻などを含む）及び今回のパケットが属するメッセージのメッセージ番号（ステップＳ５７で発行されたメッセージ番号又は受信時刻データテーブルにおいて今回のコネクション番号及び送信方向に対応付けて登録されているメッセージ番号）を、確保したバッファ領域に書き込む（ステップＳ６９）。また、バッファ書込処理部１３３は、キューの最後尾のバッファ領域に、今回確保したバッファ領域のアドレスを登録することでキューイングを行う（ステップＳ７１）。そして元の処理に戻る。
【００５３】
図１８を用いてパケットバッファ１４０におけるキューについて説明する。パケットバッファ１４０では、受信した順番にメッセージ番号及びパケットのデータをキューイングするようになっている。図１８の例では、メッセージ番号１及びパケットデータ（例えば１番目のパケットのデータ）、メッセージ番号１及びパケットデータ（例えば２番目のパケットのデータ）、メッセージ番号１及びパケットデータ（例えば３番目のパケットのデータ）、メッセージ番号２及びパケットデータ（例えば１番目のパケットのデータ）、メッセージ番号３及びパケットデータ（例えば１番目のパケットのデータ）及びメッセージ番号３及びパケットデータ（例えば２番目のパケットのデータ）がポインタでつながれた形で格納されている。例えば、メッセージ番号１のパケット群と、メッセージ番号２のパケットと、メッセージ番号３のパケット群とは、それぞれ異なるコネクション又は送信方向であってもよい。このように、コネクション毎や送信方向毎にパケットバッファ１４０を分割することがないので、パケットバッファ１４０を効率的に利用することができる。なお、ステップＳ６９及びＳ７１で新たにパケットのデータを格納する場合には、空きバッファプールに登録されている領域１４２に、メッセージ番号及びパケットのデータを書き込み、メッセージ番号３及び２番目のパケットデータの領域１４１から今回の領域１４２へのポインタを設定する。
【００５４】
なお、ステップＳ６５において空きなしと判断された場合には（ステップＳ６５：Ｎｏルート）、処理は端子Ｅを介して図１９の処理に移行する。この際、バッファ書込処理部１３３は、バッファ削除処理部１３４に処理の依頼を行う。
【００５５】
図１９の処理の説明に移行して、バッファ削除処理部１３４は、受信パケットがメッセージの先頭パケットであるか確認する（ステップＳ７３）。ステップＳ５５における判断結果をメインメモリなどの記憶装置に保持しておき、ステップＳ７３で確認する。先頭パケットである場合には、バッファ削除処理部１３４は、管理データ格納部１３５に格納されている削除フラグテーブルにおいて、今回のコネクション番号及び送信方向についての削除フラグをＯＮにセットする（ステップＳ７９）。今回受信したパケットについては書き込みを行うことなく破棄した上、同一メッセージに属する後続パケットについてもパケットバッファ１４０への書き込みを行わせないようにするためである。
【００５６】
一方、受信パケットが先頭パケットではない場合、バッファ削除処理部１３４は、今回のメッセージ番号でキューを検索して、該当するパケットデータを格納しているバッファ領域を検出する（ステップＳ７５）。さらに、バッファ削除処理部１３４は、検出されたバッファ領域を空き領域として空きバッファプールに登録すると共に、キューにおけるポインタの変更を行う（ステップＳ７７）。図１８では、今回のメッセージ番号が「２」である例を示しており、メッセージ番号「２」を格納しているバッファ領域を検出し、当該バッファ領域を空きバッファプールに登録する。さらに、当該バッファ領域を指しているポインタのアドレスを、当該バッファ領域が指しているポインタのアドレスに変更する。図１８の例では、メッセージ番号１及び３番目のパケットデータを格納する領域が、メッセージ番号３及び１番目のパケットデータを格納する領域を指すように変更する。複数のバッファ領域が検出された場合でも同様に処理する。さらに、最後尾の領域を開放する際には、当該バッファ領域を指しているポインタのアドレスを削除する。
【００５７】
その後処理はステップＳ７９に移行して、上で述べたような処理を実施する。
【００５８】
以上のような処理を実施することで、パケットバッファ１４０の領域を有効活用でき、さらにメッセージ解析処理の処理効率も向上される。また、本実施の形態によれば、１つのメッセージに含まれる先頭パケットと後続パケットとを、簡単な処理で特定のプロトコルに依存することなく区別することができるようになる。
【００５９】
以上本技術の実施の形態について説明したが、本技術はこれに限定されるものではない。例えば、図２に示したメッセージ分析装置１００の機能ブロックは一例であって、必ずしも実際のプログラムモジュール構成と一致するわけではない。
【００６０】
また、処理フローについても、処理結果が変わらない限り、処理順番を入れ替えたり並列処理しても良い。例えば、図１５及び図１９に示したパケット処理において、ステップＳ５９で削除フラグをＯＦＦにセットしているが、例えばステップＳ６７以降において削除フラグをＯＦＦにするような処理でも処理結果は変わらない。また、ステップＳ７９をステップＳ７３よりも前に移動させても処理結果は変わらない。
【００６１】
また、パケットバッファ１４０におけるキューの構成についても変更することが可能である。例えば、コネクション毎又はコネクション毎且つ送信方向毎にキューを設けるようにしてもよい。但し、空きバッファプールは１つだけにして、バッファ領域の有効活用を図ることが好ましい。
【００６２】
なお、上で述べたメッセージ分析装置１００は、コンピュータ装置であって、図２０に示すように、メモリ２５０１とＣＰＵ２５０３（プロセッサ、処理部若しくは処理装置とも呼ぶ）とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７（通信ユニット１１０に相当）とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。必要に応じてＣＰＵ２５０３は、表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ２５０１に格納され、必要があればＨＤＤ２５０５に格納される。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００６３】
以上述べた本実施の形態をまとめると、以下のようになる。
【００６４】
本実施の形態の第１の態様に係るバッファ管理方法は、（Ａ）解析対象コンピュータ間で送受信されるメッセージに係るパケットを取得し、当該パケットのヘッダ情報からコネクション及び送信方向を特定するステップと、（Ｂ）取得されたパケットの受信時刻と、特定されたコネクション及び送信方向について取得された直前のパケットの受信時刻（取得時刻とも呼ぶ）との差が所定の閾値以上であるか判断する判断ステップと、（Ｃ）取得されたパケットの受信時刻と直前のパケットの受信時刻との差が所定の閾値未満であって且つ取得されたパケットを格納するためのバッファ領域が不足する場合には、取得されたパケットより前に受信されてバッファに格納されている同一メッセージに係るパケットのデータを破棄する破棄ステップとを含む。
【００６５】
これによってバッファを効率的に利用することができるようになる。なお、判断ステップのような処理によって１つのメッセージの先頭パケットであるか２番目以降のパケットであるか判別することができ、パケット自体に先頭パケット又は最終パケットであるということを表す情報が含まれないような場合においても対処可能である。また、ネットワーク内に設置されている中継装置（スイッチ等）自身のバッファであれば入力ポートと出力ポートとの関係でコネクション及び送信方向を特定できるが、本実施の形態のように中継装置が複数のポートで受信した全てのパケットがシリアルに送信されてくるような状況においてはそのようなデータは存在せず、（Ａ）で示したステップのように分類すれば正しく処理できる。
【００６６】
なお、（Ｃ）上で述べた破棄ステップが実行された場合、又は取得されたパケットの受信時刻と直前のパケットの受信時刻との差が所定の閾値以上であって且つ取得されたパケットを格納するためのバッファ領域が不足する場合、特定されたコネクション及び送信方向に対応付けて同一メッセージについてパケットの破棄が行われたことを表す削除フラグを管理データ格納部に格納するステップと、（Ｄ）同一のコネクション及び送信方向について次に受信したパケットについて判断ステップにおいて受信時刻の差が所定の閾値未満と判断された場合に、管理データ格納部に、同一のコネクション及び送信方向に対応付けて格納されている削除フラグが、同一メッセージについてパケットの破棄が行われたことを表しているか否かを判断するステップと、（Ｅ）削除フラグが同一メッセージについてパケットの破棄が行われたことを表している場合には、次に受信したパケットを破棄するステップとをさらに含むようにしても良い。
【００６７】
このような削除フラグを導入することによって、同一のメッセージにおける後続のパケットの処理が簡略化される。
【００６８】
また、（Ｆ）取得されたパケットの受信時刻と直前のパケットの受信時刻との差が所定の閾値以上であって且つ取得されたパケットを格納するためのバッファ領域が存在する場合には、新たに発行されたメッセージ番号と共にパケットのデータをバッファ内のキューの最後尾に追加するステップと、（Ｇ）取得されたパケットの受信時刻と直前のパケットの受信時刻との差が所定の閾値未満であって且つ取得されたパケットを格納するためのバッファ領域が存在する場合には、特定されたコネクション及び送信方向について直前に発行されたメッセージ番号と共にパケットのデータをバッファ内のキューの最後尾に追加するステップとをさらに含むようにしても良い。その際、上で述べた破棄ステップにおいて、キューを、特定されたコネクション及び送信方向について直前に発行されたメッセージ番号で検索して同一メッセージに係るパケットのデータを特定し、当該同一メッセージに係るパケットのデータの破棄後に当該データのためのバッファ領域を空きバッファプールに返却するようにしてもよい。
【００６９】
キュー形式でパケットデータを管理することで、管理が容易になると共に、メッセージ番号を付加することで、破棄する処理を容易に行うことができるようになる。
【００７０】
さらに、バッファ内のキューが、コネクション及び送信方向の区別無く設けられる場合もある。このように受信した順番に従ってキューの最後尾にデータを付加するような形態を導入することによって、コネクション毎やコネクション毎且つ送信方向毎などでバッファ領域を分割する場合に比して、バッファ領域の有効活用が図られる。
【００７１】
また、本実施の形態に係るバッファ管理装置（図２１：１０００）は、解析に用いるパケットの記憶制御を実行するバッファ管理装置であって、（Ａ）コンピュータ間で送受信されるメッセージに係るパケットを取得し、取得したパケットを記憶部（図２１：１３００）に格納する前処理部（図２１：１１００）と、（Ｂ）取得した複数のパケットのうち、コネクション及び送信方向が一致し且つ取得間隔が所定の時間幅より短い関係を有するパケット群の少なくとも一部のパケットについて記憶部における記憶領域が不足する場合に、パケット群のうち記憶部に記憶されたパケットを破棄するバッファ削除処理部（図２１：１２００）とを有する。
【００７２】
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ（例えばＲＯＭ）、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、ＲＡＭ等の記憶装置に一時保管される。
【００７３】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７４】
（付記１）
解析に用いるパケットの記憶制御を実行させるプログラムであって、
コンピュータ間で送受信されるメッセージに係るパケットを取得するステップと、
取得したパケットを記憶部に格納するステップと、
取得した複数のパケットのうち、コネクション及び送信方向が一致し且つ取得間隔が所定の時間幅より短い関係を有するパケット群の少なくとも一部のパケットについて前記記憶部における記憶領域が不足する場合に、前記パケット群のうち前記記憶部に記憶されたパケットを破棄する破棄ステップと、
を、解析用コンピュータに実行させるプログラム。
【００７５】
（付記２）
前記破棄ステップが実行された場合、前記コネクション及び送信方向に対応付けて、同一メッセージについてパケットの破棄が行われたことを表す削除情報を管理データ格納部に格納するステップと、
同一のコネクション及び送信方向について次に受信したパケットが前記パケット群に属する場合、前記管理データ格納部に前記同一のコネクション及び送信方向に対応付けて格納されている削除情報が、同一メッセージについてパケットの破棄が行われたことを表しているか否かを判断するステップと、
前記削除情報が前記同一メッセージについてパケットの破棄が行われたことを表している場合には、前記次に受信したパケットを破棄するステップと、
をさらに前記解析用コンピュータに実行させるための付記１記載のプログラム。
【００７６】
（付記３）
取得したパケットの取得時刻と直前のパケットの取得時刻との差が所定の閾値以上であって且つ取得したパケットを格納するためのバッファ領域が存在する場合には、新たに発行されたメッセージ番号と共に前記パケットのデータを前記バッファ内のキューの最後尾に追加するステップと、
取得したパケットの取得時刻と直前のパケットの受信時刻との差が所定の閾値未満であって且つ取得したパケットを格納するためのバッファ領域が存在する場合には、前記コネクション及び送信方向について直前に発行されたメッセージ番号と共に前記パケットのデータを前記バッファ内のキューの最後尾に追加するステップと、
をさらに前記分析用コンピュータに実行させ、
前記破棄ステップにおいて、前記キューを前記直前に発行されたメッセージ番号で検索して前記同一メッセージに係るパケットのデータを特定し、当該同一メッセージに係るパケットのデータの破棄後に当該データのためのバッファ領域を空きバッファプールに返却する
付記１又は２記載のプログラム。
【００７７】
（付記４）
前記バッファ内のキューが、前記コネクション及び送信方向の区別無く設けられる
付記３記載のバッファ管理プログラム。
【００７８】
（付記５）
解析に用いるパケットの記憶制御を実行させるバッファ管理方法であって、
コンピュータ間で送受信されるメッセージに係るパケットを取得するステップと、
取得したパケットを記憶部に格納するステップと、
取得した複数のパケットのうち、コネクション及び送信方向が一致し且つ取得間隔が所定の時間幅より短い関係を有するパケット群の少なくとも一部のパケットについて前記記憶部における記憶領域が不足する場合に、前記パケット群のうち前記記憶部に記憶されたパケットを破棄する破棄ステップと、
を含み、解析用コンピュータにより実行されるバッファ管理方法。
【００７９】
（付記６）
解析に用いるパケットの記憶制御を実行するバッファ管理装置であって、
コンピュータ間で送受信されるメッセージに係るパケットを取得し、取得したパケットを記憶部に格納する前処理部と、
取得した複数のパケットのうち、コネクション及び送信方向が一致し且つ取得間隔が所定の時間幅より短い関係を有するパケット群の少なくとも一部のパケットについて前記記憶部における記憶領域が不足する場合に、前記パケット群のうち前記記憶部に記憶されたパケットを破棄するバッファ削除処理部と、
を有するバッファ管理装置。
【符号の説明】
【００８０】
１００  メッセージ分析装置    １１０  通信ユニット
１２０  パケット受信処理部    １３０  メッセージ処理部
１４０  パケットバッファ    １５０  メッセージ解析処理部
１３１  前処理部    １３２  メッセージ及びバッファ状況判断処理部
１３３  バッファ書込処理部    １３４  バッファ削除処理部
１３５  管理データ格納部
【図１】
0005630033.tif 000002
【図２】
0005630033.tif 000003
【図３】
0005630033.tif 000004
【図４】
0005630033.tif 000005
【図５】
0005630033.tif 000006
【図６】
0005630033.tif 000007
【図７】
0005630033.tif 000008
【図８】
0005630033.tif 000009
【図９】
0005630033.tif 000010
【図１０】
0005630033.tif 000011
【図１１】
0005630033.tif 000012
【図１２】
0005630033.tif 000013
【図１３】
0005630033.tif 000014
【図１４】
0005630033.tif 000015
【図１５】
0005630033.tif 000016
【図１６】
0005630033.tif 000017
【図１７】
0005630033.tif 000018
【図１８】
0005630033.tif 000019
【図１９】
0005630033.tif 000020
【図２０】
0005630033.tif 000021
【図２１】
0005630033.tif 000022