(57)【特許請求の範囲】
【請求項１】
ネットワークを介して接続されたコンピュータ間で送受されるパケットを受信する受信部と、
複数の処理部と、
を備え、
前記複数の処理部のうち所定の処理部は、
前記受信部で受信したパケットの受信間隔を計測し、
前記計測した受信間隔に応じて、１組の、メッセージの先頭に対応するセグメントを含むパケットと、該メッセージの２番目以降に対応するセグメントを含むパケットとを検出し、
当該所定の処理部を除いた前記複数の処理部のそれぞれが受信したパケットのメッセージの解析処理を行うまでのパケットの待機時間に応じて処理部を選択し、前記検出したパケットを含むメッセージに対応するプロトコルに応じて、前記検出したパケットを含むメッセージの処理時間に重み付けをした時間を前記選択した処理部の前記待機時間に加算し、前記検出したパケットを、組単位で前記選択した処理部に振り分け、
前記複数の処理部のうち、前記パケットを振り分けられた処理部は、該パケットに基づいて、メッセージの解析を行う
ことを特徴とする解析処理装置。
【請求項２】
前記所定の処理部は、前記計測した受信間隔の値が閾値以上である場合、今回受信したパケットは、前記メッセージの先頭に対応するセグメントを含むパケットであると判定し、前記計測した受信間隔の値が閾値より小さい場合、今回受信したパケットは、該メッセージの２番目以降に対応するセグメントを含むパケットであると判定する
ことを特徴とする請求項１に記載の解析処理装置。
【請求項３】
今回受信したパケットが前記メッセージの先頭に対応するセグメントを含むパケットであると判定した場合、前記所定の処理部は、前記複数の処理部から、前記待機時間が最も短い処理部を選択し、組単位で前記パケットを識別する識別情報を付加し、該識別情報が付加されたパケットを前記選択した処理部に振り分ける
ことを特徴とする請求項１に記載の解析処理装置。
【請求項４】
前記所定の処理部は、
前記受信した各パケットのヘッダから、接続先の前記コンピュータ側のポート番号を取得し、該取得したポート番号に対応するプロトコルに応じて、前記選択した処理部の前記待機時間に重み付けを行う
ことを特徴とする請求項３に記載の解析処理装置。
【請求項５】
複数の処理部を含むコンピュータに、メッセージの解析を行う処理を実行させる解析処理プログラムであって、
前記複数の処理部のうち所定の処理部に、
ネットワークを介して接続されたコンピュータ間で送受されるパケットを受信し、
前記受信したパケットの受信間隔を計測し、
前記計測した受信間隔に応じて、１組の、メッセージの先頭に対応するセグメントを含むパケットと、該メッセージの２番目以降に対応するセグメントを含むパケットとを検出し、
当該所定の処理部を除いた前記複数の処理部のそれぞれが受信したパケットのメッセージの解析処理を行うまでのパケットの待機時間に応じて処理部を選択し、前記検出したパケットを含むメッセージに対応するプロトコルに応じて、前記検出したパケットを含むメッセージの処理時間に重み付けをした時間を前記選択した処理部の前記待機時間に加算し、前記検出したパケットを、組単位で前記選択した処理部に振り分ける処理を実行させ、
前記複数の処理部のうち、前記パケットを振り分けられた処理部に、該パケットに基づいて、メッセージの解析を行う処理を実行させる解析処理プログラム。
【請求項６】
複数の処理部を含むコンピュータに、メッセージの解析処理を実行させる解析処理方法であって、
前記複数の処理部のうち所定の処理部に、
ネットワークを介して接続されたコンピュータ間で送受されるパケットを受信し、
前記受信したパケットの受信間隔を計測し、
前記計測した受信間隔に応じて、１組の、メッセージの先頭に対応するセグメントを含むパケットと、該メッセージの２番目以降に対応するセグメントを含むパケットとを検出し、
当該所定の処理部を除いた前記複数の処理部のそれぞれが受信したパケットのメッセージの解析処理を行うまでのパケットの待機時間に応じて処理部を選択し、前記検出したパケットを含むメッセージに対応するプロトコルに応じて、前記検出したパケットを含むメッセージの処理時間に重み付けをした時間を前記選択した処理部の前記待機時間に加算し、前記検出したパケットを、組単位で前記選択した処理部に振り分ける処理を実行させ、
前記複数の処理部のうち、前記パケットを振り分けられた処理部に、該パケットに基づいて、前記メッセージの解析処理を実行させることを特徴とする解析処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、ネットワーク上で伝達されるパケットについての解析処理技術に関する。
【背景技術】
【０００２】
ネットワークから取得した情報を計算機により処理する場合に、計算機のリソースを有効に活用する技術として、例えば次に示すものが知られている。
後段処理装置における総フレーム処理量を予測し、その総フレーム処理量がその後段処理装置の基準処理量より大きくなるまでフレームを受信してから、割り込みを生成する技術が知られている。
【０００３】
また、処理量あるいは処理速度が異なる複数の処理を複数の計算機に分散して効率良く並列に実行できる計算機資源分散方法が知られている。この場合、少なくとも１つの計算機に処理分散用のスケジューラを設け、分散すべき処理の処理量が既知の場合、スケジューラは処理量の大きいものから順に処理を積算処理量が少ない計算機に割り当てる。それと共に、割り当てた処理の処理量を積算処理量に加算することによりその計算機の積算処理量を更新する。以後、順次同様の方法で処理を計算機に割り当てる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−６７１４０号公報
【特許文献２】特開平６−１２３９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本明細書は、複数の処理部のリソースを効率よく利用して、ネットワーク上で伝達されるパケットの解析処理を行う技術を提供する。
【課題を解決するための手段】
【０００６】
解析処理装置は、受信部と、複数の処理部とを含む。受信部は、ネットワークを介して接続されたコンピュータ間で送受されるパケットを受信する。複数の処理部のうち所定の処理部は、受信部で受信したパケットの受信間隔を計測する。所定の処理部は、計測した受信間隔に応じて、１組の、メッセージの先頭に対応するセグメントを含むパケットと、そのメッセージの２番目以降に対応するセグメントを含むパケットとを検出する。所定の処理部は、当該所定の処理部を除いた複数の処理部のそれぞれが受信したパケットのメッセージの解析処理を行うまでのパケットの待機時間に応じて処理部を選択し、前記検出したパケットを含むメッセージに対応するプロトコルに応じて、前記検出したパケットを含むメッセージの処理時間に重み付けをした時間を前記選択した処理部の前記待機時間に加算し、検出したパケットを、組単位で選択した処理部に振り分ける。前記複数の処理部のうち、前記パケットを振り分けられた処理部は、そのパケットに基づいて、メッセージの解析を行う。
【発明の効果】
【０００７】
本明細書に記載の技術によれば、複数の処理部のリソースを効率よく利用して、ネットワーク上で伝達されるパケットの解析処理を行うことができる。
【図面の簡単な説明】
【０００８】
【図１】マルチプロセッサによる、コネクション単位でのパケットの分散処理シーケンスを示す。
【図２】情報システムと分析装置とを示す。
【図３】分析装置のハードウェア構成図を示す。
【図４】コネクション情報テーブルの一例を示す。
【図５】振り分け用テーブルの一例を示す。
【図６】処理時間重み付け値テーブルの一例を示す。
【図７】ＣＰＵ番号テーブルの一例を示す。
【図８】メッセージ番号テーブルの一例を示す。
【図９】パケットのデータ構造を示す。
【図１０】ＩＰヘッダの構造を示す。
【図１１】ＴＰＣヘッダの構造を示す。
【図１２】ＴＰＣコネクションのシーケンスの一例を示す。
【図１３】通信パケットの送信間隔について説明するための図である。
【図１４】パケットの送信間隔とその頻度との相関分布を示す。
【図１５】マルチプロセッサによる、メッセージ単位でのパケットの分散処理シーケンスを示す。
【図１６】ＣＰＵ０により行われる、メッセージ単位でのパケットの分散処理シーケンスの詳細（その１）を示す。
【図１７】ＣＰＵ０により行われる、メッセージ単位でのパケットの分散処理シーケンスの詳細（その２）を示す。
【図１８】ＣＰＵｎにより行われる、メッセージ単位でのパケットの分散処理シーケンスの詳細を示す。
【発明を実施するための形態】
【０００９】
以下に、本発明を実施するための実施例について詳細に説明する。
１つの実施例では、複数の情報処理装置を含む情報システムの状態監視を分析装置を用いて行う。分析装置は、受信したパケットからメッセージを再構成し、再構成したメッセージの内容（例えば、リクエスト、レスポンス、命令等）を解析することができる。
【００１０】
複数の情報処理装置は、例えば、スイッチを介して、相互に接続され、情報システムを構築している。ここで、スイッチは、情報処理装置間のネットワークを接続するネットワークデバイスの１つであり、パケットのヘッダに含まれる宛先情報に応じて、情報処理装置間の通信経路をスイッチングし、パケットを中継することができる。パケットは、例えば、通信モデルの１つであるＴＣＰ／ＩＰ［Transmission Control Protocol/InternetProtocol］モデルの中のインターネットレイヤでの送信単位である。パケットは、他のレイヤのパケットとすることもできる。
【００１１】
ここで、コンピュータＡがメッセージをコンピュータＢに送信する場合を例に、ＴＣＰ／ＩＰを用いたパケット通信によってメッセージを送信する方法について説明する。メッセージのデータ量が、ＴＣＰ／ＩＰモデルにおけるインターネットレイヤでの１回の送信容量を超えるときには、コンピュータＡはメッセージを幾つかの部分に分割する。そして、コンピュータＡは、メッセージの全部又は一部を、それぞれセグメントとしてパケットに収納して順次、コンピュータＢへと送信する。コンピュータＢはパケットを受信すると、受信した複数のパケットから分割されたメッセージの全部又は一部を取り出す。そして、コンピュータＢは、その分割されたメッセージを組み立て、メッセージを再構成する。
【００１２】
分析装置は、スイッチを介して、情報処理装置間で送受信されるパケットを受信する。分析装置は、受信したパケットに基づいてメッセージを解析し、リクエストメッセージとレスポンスメッセージを監視する。これにより、分析装置は、情報システムの稼動状態を判断することができる。分析装置には、オペレーティングシステム（以下、ＯＳという）と分析アプリケーションソフトフェア（以下、分析アプリケーションという）が実装してもよい。スイッチより送られた通信パケットは、分析装置の有するネットワークインターフェースカード（ＮＩＣ）のプロミスキャスモードを用いて、オペレーティングシステムを経由して分析アプリケーションに引き渡される。
【００１３】
分析アプリケーションは、パケットを取得すると、取得したパケットについて受信処理を行い、また、複数のパケットからメッセージを組み立て、その組み立てたメッセージから、そのメッセージの内容を解析する解析処理を行う。メッセージの内容としては、例えば、リクエスト、レスポンス、命令等がある。
【００１４】
すなわち、分析アプリケーションは、パケット受信処理、メッセージ解析処理を順に実行する。パケット受信処理では、パケットを受信して、ヘッダ情報からその受信パケットのコネクションを識別し、対応するバッファへ書き込む。メッセージ解析処理では、バッファからその書き込まれたパケットを読み出してメッセージを組み立て、その組み立てたメッセージを解析する。パケット受信処理とメッセージ解析処理の処理速度を比較すると、パケット受信処理が速く、メッセージ解析処理は遅い。
【００１５】
従って、大量にパケットを受信した場合、パケット受信処理とメッセージ解析処理の速度差により、メッセージ解析処理におけるバッファからのパケットの読み込みが間に合わなくなる。その結果、バッファに蓄積されたパケットが新たに受信したパケットにより上書きされ、キャプチャロスが発生してしまう。
【００１６】
そこで、この実施例では、複数の処理部を用いてＴＣＰコネクション単位でパケットを各処理部に振り分けて、メッセージ解析処理の負荷分散を行うことにより、メッセージ解析処理を並列して実行し、キャプチャロスをなるべく発生させないようにする。これについて、図１を用いて説明する。
【００１７】
図１は、複数の処理部としてマルチプロセッサを用いる場合の、コネクション単位でのパケットの分散処理シーケンスを示す。図１では、３つの中央処理装置（ＣＰＵ）を有するマルチプロセッサを例に用いて、コネクション単位でのパケットの分散処理シーケンスを説明する。なお、プロセッサの数は３に限定されず、２以上の任意の数を採用することもできる。
【００１８】
ＣＰＵ０は、パケットを受信し（Ｓ１）、分析アプリケーションに従った処理を実行する。すなわち、まず、ＣＰＵ０は、受信パケットのヘッダ情報から、その受信パケットに対応するコネクションを識別する（Ｓ２）。
【００１９】
ＣＰＵ０は、コネクション単位で受信パケットを各ＣＰＵへ分散させる。そのために、ＣＰＵ０は、識別したコネクションにおいて伝送されるパケットについてメッセージ解析処理を行っているＣＰＵを選択する（Ｓ３）。ＣＰＵ０は、その選択したＣＰＵが使用しているバッファに、その受信したパケットを書き込む（Ｓ４）。例えば、ＣＰＵ１は、バッファ１を用いて、コネクションＡ，Ｃについての受信パケットのメッセージ解析処理を行っている。例えば、ＣＰＵ２は、バッファ２を用いて、コネクションＢについての受信パケットのメッセージ解析処理を行っている。
【００２０】
ＣＰＵ１は、バッファ１に書き込まれたパケットを読み出し（Ｓ５ａ）、読み出したパケットからメッセージを組み立て、メッセージ解析を行う（Ｓ６ａ）。ＣＰＵ２は、バッファ２に書き込まれたパケットを読み出し（Ｓ５ｂ）、読み出したパケットからメッセージを組み立て、メッセージ解析を行う（Ｓ６ｂ）。
【００２１】
これにより、受信したパケットをコネクション単位で各ＣＰＵへ分散させることができる。コネクション単位でのパケットの分散によれば、メッセージ解析処理内のメッセージの組み立て処理に影響を与えないで、各ＣＰＵに負荷を分散できる。なお、ＣＰＵ０も所定のコネクションについての解析処理を担当してもよく、その場合には、ＣＰＵ０に対応するバッファに対応するコネクションについてのパケットを格納すればよい。
【００２２】
ここで、コネクション単位でパケットを分散するアルゴリズムとしては、例えば、ラウンドロビン方式、最小接続方式、状態監視方式等が考えられる。ラウンドロビン方式は、受信したパケットを、順番に各プロセッサへ割り振るアルゴリズムである。最小接続方式は、最もコネクション数が少ないプロセッサを選択し、その選択したプロセッサにパケットを割り振るアルゴリズムである。状態監視方式は、コネクション数と応答速度を計測して、各プロセッサのパフォーマンスを予測し、その予測の結果に応じてプロセッサを選択し、その選択したプロセッサにパケットを割り振るアルゴリズムである。
【００２３】
しかしながら、上記アルゴリズムのいずれもコネクションの接続時に、受信パケットがプロセッサへ振り分けられるので、次のことが発生する可能性がある。例えば、アプリケーション（ＡＰ）−データベース（ＤＢ）間のコネクションの様に、コネクションの接続を継続する通信では、コネクション単位でバッファが固定化される。その結果、メッセージ解析処理が特定のプロセッサに偏り、パケット量に比例してパケット量を分散することが出来ない可能性がある。
【００２４】
そこで、以下の実施形態では、メッセージ解析処理を行うＣＰＵまたはバッファがコネクション単位で固定されないようにして、マルチプロセッサのリソースを効率よく利用することができるメッセージ解析処理装置を提供する。すなわち、実施形態では、マルチプロセッサ環境において、受信したパケットをメッセージ単位でいずれかのＣＰＵへ振り分けることができるメッセージ解析装置を提供する。また、更に、マルチプロセッサ環境において、各プロセッサのメッセージ解析処理の負荷を均等化するように、パケットを各プロセッサへ振り分けるメッセージ解析装置を提供する。
【００２５】
図２は、情報システムと分析装置とを示す。情報システム２は、複数の情報処理装置（コンピュータ)３（３ａ，３ｂ，３ｃ，・・・）、スイッチ（ＳＷ）４を含む。
分析装置１は、コンピュータ３（３ａ，３ｂ，３ｃ，・・・）が互いにやり取りするパケットをＳＷ４のミラーリング機能を用いて受信し、受信したパケットに基づいてそのコンピュータの稼動状況を監視及び分析を行う。すなわち、分析装置１は、受信したパケットからメッセージを再構成し、リクエストを示すメッセージとレスポンスを示すメッセージとを監視する。これにより、分析装置１は、通信しているコンピュータ同士の稼動状態、通信状態等を監視・分析することができる。
【００２６】
ＳＷ４は、例えば、Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＬＡＮ）  Ｓｗｉｔｃｈ（ＳＷ）等のパケット伝送路のスイッチングを行う中継機器である。ＳＷ４には、コンピュータ３ａ，３ｂ，３ｃ，・・・等が接続されている。
【００２７】
ＳＷ４は、コンピュータ３又は不図示の中継機器とパケットの送受信を行うことができる。ＳＷ４は、複数の通信ポートを備えている。ＳＷ４は、１つの通信ポートからパケットが進入してくると、そのパケットの送り出し先として適切な通信ポートを選択し、選択した通信ポートからそのパケットを送出する。本実施形態では、これらの通信ポートには、それぞれ、コンピュータ３（３ａ，３ｂ，３ｃ，・・・）が接続されている。ＳＷ４は、ポートミラーリング機能を実現するための回路を内蔵している。ポートミラーリング機能は、特定の通信ポートを通過するパケットを複製し、複製したパケットをミラーポートから送出するための機能である。本実施形態では、ＳＷ４は、１個のミラーポートを備える。ポートミラーリング機能は、２個以上の通信ポートから進入してくる全てのパケットを複製し、複製したパケットをミラーポートから出力する。本実施形態では、ＳＷ４のミラーポートには、分析装置１が接続されている。なお、複製元のパケット（オリジナルのパケット）は、適切な通信ポートから送出される。
【００２８】
図３は、分析装置１のハードウェア構成図を示す。分析装置１は、例えば、マルチプロセッサ１０、メモリ１１、記憶装置１２、ＮＩＣ１３、ＲＡＭ３１、ＲＯＭ３２、リーダ／ライタ３３、出力Ｉ／Ｆ３１、入力Ｉ／Ｆ３５等を含む。ＲＯＭは、リードオンリメモリを示す。ＲＡＭは、ランダムアクセスメモリを示す。Ｉ／Ｆは、インターフェースを示す。マルチプロセッサ１０、メモリ１１、記憶装置１２、ＮＩＣ１３、ＲＡＭ３１、ＲＯＭ３２、リーダ／ライタ３３、出力Ｉ／Ｆ３１、入力Ｉ／Ｆ３５等は、バス３８で接続されている。
【００２９】
マルチプロセッサ１０は、ＣＰＵ０（１０ａ），ＣＰＵ１（１０ｂ），ＣＰＵ２（１０ｃ）を含む。なお、本実施形態のマルチプロセッサは、３つのＣＰＵを含むが、これに限定されず、２以上のＣＰＵを含んでいればよい。ＣＰＵ０（１０ａ），ＣＰＵ１（１０ｂ），ＣＰＵ２（１０ｃ）は、時刻を計測するタイマー機能または時間を計測するカウンタ機能を含んでもよい。また、分析装置１は、ＣＰＵ０（１０ａ），ＣＰＵ１（１０ｂ），ＣＰＵ２（１０ｃ）とは別に、時計回路を有していてもよい。この場合、各ＣＰＵは、時計回路より得られた時刻情報またはカウント情報を取得するようにしてもよい。
【００３０】
メモリ１１は、バッファ１１ａ，１１ｂを含む。バッファ１１ａは、例えば、ＣＰＵ１（１０ｂ）が使用するバッファである。バッファ１１ｂは、例えば、ＣＰＵ２（１０ｃ）が使用するバッファである。
【００３１】
記憶装置１２には、オペレーティングシステム（ＯＳ）１７、分析アプリケーション１４、コネクション情報テーブル１８、振り分け用テーブル１９、処理時間重み付け値テーブル２０、ＣＰＵ番号テーブル２１、メッセージ番号テーブル２２等が格納されている。分析アプリケーション１４は、パケット受信プログラム１５とメッセージ解析プログラム１６を含む。分析装置１の起動時に、マルチプロセッサ１０は、記憶装置１２からＯＳ１７と分析アプリケーション１４を読み出して、メモリ１１に展開し、パケット受信プログラム１５とメッセージ解析プログラム１６を実行する。パケット受信プログラム１５は、例えば、ＣＰＵ０で実行されるものであり、パケットを受信して、そのパケットについてメッセージ解析を行うＣＰＵに割り当てる処理を行う。メッセージ解析プログラム１６は、上記でパケットを割り当てられた各ＣＰＵ（例えば、ＣＰＵ１，２）で実行される。なお、記憶装置１２としては、ハードディスク、フラッシュメモリ装置など様々な形式の記憶装置を使用することができる。
【００３２】
ＮＩＣ１３は、ＳＷ４のミラーポートと接続されている。ＳＷ４のミラーリング機能により、監視対象のコンピュータ３間の通信によるパケットがＳＷ４からＮＩＣ１３へ送信される。ＮＩＣ１３に到達したパケットは、ＮＩＣ１３のプロミスキャスモードを用いて、オペレーティングシステム１７を経由して分析アプリケーション１４に到達し、分析アプリケーション１４に取り込まれる。ここで、プロミスキャスモードとは、宛先が自分宛でないパケットも受信するモードをいう。
【００３３】
リーダ／ライタ３３は、可搬型記録媒体から情報を読み出したり、可搬型記録媒体に情報を書き込む装置である。出力機器３６は、出力Ｉ／Ｆ３４に接続されている。入力機器３７は、入力Ｉ／Ｆ３５に接続にされている。
【００３４】
分析アプリケーション１４は、プログラム提供者側から、通信ネットワーク、およびＮＩＣ１３を介して、例えば記憶装置１２に格納してもよい。また、分析アプリケーション１４は、市販され、流通している可搬型記憶媒体に格納されていてもよい。この場合、この可搬型記憶媒体はリーダ／ライタ３３にセットされて、マルチプロセッサ１０によってそのプログラムが読み出されて、実行されてもよい。可搬型記憶媒体としてはＣＤ−ＲＯＭ、フレキシブルディスク、光ディスク、光磁気ディスク、ＩＣカード、ＵＳＢメモリ装置、ＤＶＤなど様々な形式の記憶媒体を使用することができる。
【００３５】
また、入力機器３７には、キーボード、マウス、電子カメラ、ウェブカメラ、マイク、スキャナ、センサ、タブレットなどを用いることが可能である。また、出力機器３６には、ディスプレイ、プリンタ、スピーカなどを用いることが可能である。また、ネットワークは、インターネット、ＬＡＮ、ＷＡＮ、専用線、有線、無線等の通信網であってよい。
【００３６】
図４は、コネクション情報テーブル１８の一例を示す。コネクション情報テーブル１８は、「接続先ＩＰアドレス」１８ａ、「接続先ポート番号」１８ｂ、「接続元ＩＰアドレス」１８ｃ、「接続元ポート番号」１８ｄのデータ項目を含む。
【００３７】
「接続先ＩＰアドレス」１８ａには、接続先のＩＰアドレスが格納される。「接続先ポート番号」１８ｂには、接続先のポート番号が格納される。「接続元ＩＰアドレス」１８ｃには、接続元のＩＰアドレスが格納される。「接続元ポート番号」１８ｄには、接続元のポート番号が格納される。ここで、「接続元」とは、コネクションを確立する際に、接続を要求した側をいう。「接続先」とは、コネクションを確立する際に、接続を要求された側をいう。なお、「接続元」、「接続先」については後述する。
【００３８】
以下では、「接続先ＩＰアドレス」、「接続先ポート番号」、「接続元ＩＰアドレス」、「接続元ポート番号」を含む1組の情報をコネクション情報という。
図５は、振り分け用テーブル１９の一例を示す。振り分け用テーブル１９は、「ＣＰＵ番号」１９ａ、「待機時間」１９ｂのデータ項目を含む。「ＣＰＵ番号」１９ａには、マルチプロセッサ１０に含まれる各ＣＰＵ（振り分け先のＣＰＵ）を識別する情報が格納される。「待機時間」１９ｂには、振り分け先の各ＣＰＵによって使用されるバッファ１１内のパケットの待機時間（合計値）が格納される。
【００３９】
図６は、処理時間重み付け値テーブル２０の一例を示す。処理時間重み付け値テーブル２０は、「プロトコル名」２０ａ、「１バイト当たりの処理時間（ｓｅｃ／ｂｙｔｅ）」２０ｂ、「解析したメッセージの長さ（ｂｙｔｅ）」２０ｃ、「解析したメッセージの処理時間（ｓｅｃ）」２０ｄのデータ項目を含む。各項目に格納される情報については、後述する。
【００４０】
図７は、ＣＰＵ番号テーブル２１の一例を示す。ＣＰＵ番号テーブル２１は、「接続先ＩＰアドレス」２１ａ、「接続先ポート番号」２１ｂ、「接続元ＩＰアドレス」２１ｃ、「接続元ポート番号」２１ｄ、「上りＣＰＵ番号」２１ｅ、「下りＣＰＵ番号」２１ｆのデータ項目を含む。各項目に格納される情報については、後述する。
【００４１】
図８は、メッセージ番号テーブル２２の一例を示す。メッセージ番号テーブル２２は、「接続先ＩＰアドレス」２２ａ、「接続先ポート番号」２２ｂ、「接続元ＩＰアドレス」２２ｃ、「接続元ポート番号」２２ｄ、「上りメッセージ番号」２２ｅ、「下りメッセージ番号」２１ｆのデータ項目を含む。各項目に格納される情報については、後述する。
【００４２】
図９は、パケットのデータ構造を示す。パケットは、ＩＰヘッダ、ＴＰＣヘッダ、ＴＰＣデータを含む。
図１０は、ＩＰヘッダの構造を示す。ＩＰヘッダは、バージョン、ヘッダ長、サービスタイプ、パケット長、識別子、フラグ、フラグメントオフセット、生存時間、プロトコル、ヘッダチェックサム、送信元ＩＰアドレス、送信先ＩＰアドレス、オプション、パディングの項目を有する。「パケット長」には、パケット全体のサイズ（ｂｙｔｅ）がセットされる。「送信元ＩＰアドレス」には、送信元のＩＰアドレスがセットされる。「送信先ＩＰアドレス」には、送信先のＩＰアドレスがセットされる。これ以外の項目については、本実施形態で言及しないので、省略する。
【００４３】
図１１は、ＴＰＣヘッダの構造を示す。ＴＰＣヘッダは、送信元ポート番号、送信先ポート番号、シーケンス番号、確認応答番号、ヘッダ長、予約ビット、フラグ、ウィンドウサイズ、チェックサム、緊急ポインタ、オプション、パディングの項目を有する。「送信元ポート番号」には、送信元のポート番号がセットされる。「送信先ポート番号」には、送信先のポート番号がセットされる。
【００４４】
図１２は、ＴＰＣコネクションのシーケンスの一例を示す。まずは、スリーウェイハンドシェイクによるＴＣＰコネクションの確立について説明する。接続を要求する側（以下、クライアントという）から接続を要求される側（以下、サーバという）へＳＹＮパケット（ＴＣＰヘッダ内のＳＹＮを示すフラグが立ったパケット）を送る。サーバは、ＳＹＮ−ＡＣＫパケット（ＴＣＰヘッダ内の項目「フラグ」において、ＳＹＮフラグとＡＣＫフラグが立ったパケット）をクライアントに送る。クライアントは、ＡＣＫパケット（ＡＣＫフラグが立ったパケット）をサーバに送る。これにより、接続を要求する側（クライアント）と接続を要求される側（サーバ）の間のコネクションが確立する。
【００４５】
ここで、接続を要求する側（クライアント）を「接続元」という。接続を要求される側（サーバ）を「接続先」という。接続を要求する側（クライアント）から接続を要求される側（サーバ）への接続方向を「上り」といい、その反対の方向を「下り」という。
【００４６】
次に、ＴＰＣコネクションの切断について説明する。ＴＣＰコネクションを切断しようとするコンピュータから、他方のコンピュータへコネクションの切断を要求するＦＩＮパケット（ＴＣＰヘッダ内の項目「フラグ」において、ＦＩＮフラグが立ったパケット）を送信する。これに対して、該他方のコンピュータは、ＴＣＰコネクションを切断しようとするコンピュータへＡＣＫパケットを送り、片方向のコネクションが開放される。さらに、該他方のコンピュータがＴＣＰコネクションを切断しようとするコンピュータへＦＩＮパケットを送る。これに対して、ＴＣＰコネクションを切断しようとするコンピュータは、ＡＣＫパケットを他のコンピュータへ送り、もう片方向のコネクションも開放される。
【００４７】
図１３は、通信パケットの送信間隔について説明するための図である。同一メッセージを構成するセグメントを含むパケット間の送信間隔と、相互に異なるメッセージを構成するセグメントを含むパケット間の送信間隔とでは、その送信間隔が異なる。具体的には、相互に異なるメッセージを構成するセグメントを含むパケット間の送信間隔よりも、同一メッセージを構成するセグメントを含むパケット間の送信間隔の方が短い。このように、同一メッセージを構成するセグメントを含むパケット間の送信間隔と、相互に異なるメッセージを構成するセグメントを含むパケット間の送信間隔とが異なるのは、例えば、次の原因による。コンピュータのメッセージ送信処理に関連し、コンピュータのアプリケーションがカーネルに対して、メッセージ単位に送信要求を行う。そのため、カーネル内でパケットに分割された同一メッセージを構成するセグメントを含むパケット間の送信間隔は、比較的短くなる。一方、コンピュータのアプリケーションで分割された、例えば２つの異なるメッセージ送信要求は、別々にシーケンシャルにカーネルに対して送信要求を行う。そのため、アプリケーションで分割された相互に異なるメッセージを構成するセグメントを含むパケット間の送信間隔は、カーネル内でパケットに分割された同一メッセージを構成するセグメントを含むパケット間の送信間隔と比べて比較的長くなる。
【００４８】
図１４は、パケットの送信間隔とその頻度との相関分布を示す。横軸は、パケットの送信間隔を示す。縦軸は、パケットの送信頻度を示す。同一メッセージを構成するセグメントを含むパケット間の送信間隔の分布曲線を符号４１で示す。相互に異なるメッセージを構成するセグメントを含むパケット間の送信間隔の分布曲線を符号４２で示す。
【００４９】
２つの分布曲線は、図１４に示すように分布が異なる。この例では、２つの分布曲線は、送信時間０．００００７［ｍｓｅｃ］で交差している。そこで、送信時間０．００００７［ｍｓｅｃ］を閾値とする。すなわち、送信間隔が０．００００７［ｍｓｅｃ］以下の場合、同一メッセージを構成するセグメントを含むパケット間の送信間隔と判定することができる。また、送信間隔が０．００００７［ｍｓｅｃ］より長い場合、相互に異なるメッセージを構成するセグメントを含むパケット間の送信間隔と判定することができる。もちろん、閾値は０．００００７に限定されず、適宜調整してよい。
【００５０】
これより、相互に異なるメッセージを構成するセグメントを含むパケット間の送信間隔よりも、同一メッセージを構成するセグメントを含むパケット間の送信間隔の方が短いという特性を用いて、次の判定をすることができる。すなわち、その特性を用いて、連続して受信したパケットが同一のメッセージを構成するパケットか否かを判定することができる。したがって、メッセージ単位でパケットを検出できるので、メッセージ単位でパケットを各メッセージ解析処理（ＣＰＵ）に振り分けることができる。この場合、パケットの組み立て処理に影響を与えない。よって、コネクション単位でパケットを各ＣＰＵに振り分ける場合に比べ、メッセージ単位で振り分けることができるので、コネクション確立時に選択されたＣＰＵ以外のＣＰＵに、パケットを振り分けることができる。したがって、同一コネクション内においても、コネクション確立時に選択されたＣＰＵ以外のＣＰＵにメッセージ処理の負荷を分散させる事ができる。
【００５１】
負荷分散方法としては、次のように行う。同一プロトコル内のパケットについての送信の場合、メッセージ長とメッセージ解析の処理時間は比例する。このことから、バッファリングされているメッセージ長の総和が均等になる様に、パケットを各メッセージ解析処理（ＣＰＵ）に分散させて、処理量を均等にし、各ＣＰＵにより処理されるパケットの待機時間を平準化させる。
【００５２】
一方、プロトコルが異なる場合、プロトコルに応じてメッセージ解析における処理量、すなわちメッセージ毎（すなわち、パケット毎）の処理時間が異なる。そのため、プロトコルに応じてパケット毎の処理時間に重み付けを行い、各ＣＰＵにより処理されるパケットの待機時間を平準化させる。
【００５３】
重み付けの方法は、ＨＴＴＰ，ＩＩＯＰ等の各プロトコルを解析するモジュールを用いて１メッセージ（メッセージ長）を処理する時間を測定し、例えば、１バイト当たりの処理時間を求める。ここで、ＨＴＴＰは、HyperText Transfer Protocolである。ＩＩＯＰは、Internet Inter-ORB Protocolである。そして、メッセージ長（バイト）に、プロトコルに応じた重み付け値（１バイト当たりの処理時間）を乗算して、プロトコルに応じた１メッセージ当たりの処理時間を算出することができる。この算出した処理時間を待機時間に加算していく。これにより、プロトコル種別に応じた処理時間の相違を吸収し、パケットの振り分け処理を行うことができる。これについて、図１５を用いて説明する。
【００５４】
図１５は、マルチプロセッサによる、メッセージ単位でのパケットの分散処理シーケンスを示す。例えば、ＣＰＵ０は、記憶装置１２からパケット受信プログラム１５を読み出し、パケット受信処理を実行するものとする。また、例えば、ＣＰＵ１，２はそれぞれ、記憶装置１２からメッセージ解析プログラム１６を読み出し、メッセージ解析処理を実行するものとする。
【００５５】
ＣＰＵ０は、ＮＩＣ１３から送られたパケットを連続して受信する（Ｓ１１）。ＣＰＵ０は、パケットのヘッダ情報（ＩＰヘッダ及びＴＣＰヘッダ）に基づいて、そのパケットに対応するコネクションを識別し、コネクションの接続方向を識別し、パケットの送信方向を識別する（Ｓ１２）。
【００５６】
ＣＰＵ０は、パケットの受信間隔に基づいて、メッセージの先頭となるパケットを検出する（Ｓ１３）。なお、本実施形態では、パケットの送信間隔を、分析装置１における受信間隔として検出することとする。
【００５７】
ＣＰＵ０は、メッセージ解析処理の待機時間に応じて、ＣＰＵを選択する（Ｓ１４）。ＣＰＵ０は、メッセージを各ＣＰＵへ振り分けるために用いられる情報を更新する（Ｓ１５）。メッセージを各ＣＰＵへ振り分けるために用いられる情報については後述する。
【００５８】
ＣＰＵ０は、同一のメッセージを構築するパケットに、同一のメッセージ番号と、送信方向を特定する情報とを付加する。そして、ＣＰＵ０は、Ｓ１４で選択したＣＰＵが使用するバッファに、メッセージ番号及び送信方向が付加されたパケットを書き込む（Ｓ１６）。
【００５９】
ＣＰＵｎ（ｎ＝１，２）は、バッファｎに書き込まれたパケットを、パケットに付与されたメッセージ番号に基づいて、メッセージ単位で読み出す（Ｓ１７−１、Ｓ１７−２）。なお、本実施形態では、選択可能なＣＰＵが２つなのでｎ＝１，２であるが、選択可能なＣＰＵが３つ以上あればｎ＝１〜ｍ（ｍ≧３）となる。ＣＰＵｎは、読み出した各パケットのＩＰヘッダからパケット長を取得し、取得したパケット長の総和をメッセージ長として算出する（Ｓ１８−１、Ｓ１８−２）。
【００６０】
ＣＰＵｎは、読み出した各パケットから分割されたメッセージを取り出し、メッセージを組み立てる。ＣＰＵｎは、その組み立てたメッセージの解析を行う（Ｓ１９−１，Ｓ１９−２）。ＣＰＵｎは、そのメッセージの解析処理に費やした時間を計測する（Ｓ１９−１、Ｓ１９−２）。ＣＰＵｎは、重み付けに関する情報の更新を行う（Ｓ２０−１、Ｓ２０−２）。
【００６１】
なお、本実施形態では、ＣＰＵ０は、Ｓ１７〜Ｓ２１の処理を行わないが、これに限定されず、Ｓ１７〜Ｓ２１の処理を行うようにしてもよい。図１５について、さらに、図１６−図１８を用いて、詳述する。
【００６２】
図１６及び図１７は、ＣＰＵ０により行われる、メッセージ単位でのパケットの分散処理シーケンスの詳細を示す。図１６，図１７のフローは、図１５のＳ１１−Ｓ１６の詳細を示す。
【００６３】
ＣＰＵ０は、分析アプリケーション１４により取り込まれたパケットを連続して受信する（Ｓ３１）。ＣＰＵ０は、受信したパケットのＩＰヘッダから「送信元ＩＰアドレス」、「送信先ＩＰアドレス」を取得する。さらに、ＣＰＵ０は、ＴＣＰヘッダから「送信元ポート番号」、「送信先ポート番号」を取得する（Ｓ３２）。以下では、「送信元ＩＰアドレス」、「送信先ＩＰアドレス」、「送信元ポート番号」、「送信先ポート番号」を「送信関係情報」という。
【００６４】
ＣＰＵ０は、Ｓ３２で取得した送信関係情報を用いて、図４に示すコネクション情報テーブル１８を検索する。これにより、コネクションが確立しているかを検出し、さらにパケットの送信方向を検出する（Ｓ３３）。具体的には、ＣＰＵ０は、Ｓ３２で取得した送信関係情報と一致するコネクション情報（「接続先ＩＰアドレス」、「接続先ポート番号」、「接続元ＩＰアドレス」、「接続元ポート番号」）がコネクション情報テーブル１８に登録されているか否かを判断する。
【００６５】
ここで、スリーウェイハンドシェイクによるコネクション確立前には、そのコネクションについてのコネクション情報は、コネクション情報テーブル１８に登録されていないから、Ｓ３４で「Ｎｏ」へ進む。それから、Ｓ３６〜Ｓ３８（Ｓ３８で「Ｎｏ」）へ進み、ＣＰＵ０は、受信パケットがコネクション確立メッセージであるかを判断する（Ｓ４０）。受信パケットがコネクション確立メッセージでない場合（Ｓ４０で「Ｎｏ」）、本フローは終了する。
【００６６】
したがって、スリーウェイハンドシェイクによるコネクション確立準備段階において、ＳＹＮパケット、ＳＹＮ−ＡＣＫパケットを受信した場合には（Ｓ４０で「Ｎｏ」）、本フローは終了する。
【００６７】
ＳＹＮパケット、ＳＹＮ−ＡＣＫパケットを受信後、さらにＡＣＫパケットを受信した場合、すなわち、コネクション確立メッセージを検出した場合（Ｓ４０で「Ｙｅｓ」）、ＣＰＵ０は、コネクションの確立を確認する（Ｓ４１）。この場合、ＣＰＵ０は、Ｓ３２で取得した送信関係情報をコネクション情報（「接続先ＩＰアドレス」、「接続先ポート番号」、「接続元ＩＰアドレス」、「接続元ポート番号」）としてコネクション情報テーブル１８へ登録する（Ｓ４２）。これにより、本フローを終了する。
【００６８】
このように、スリーウェイハンドシェイクによるコネクション確立準備段階の間は、Ｓ３１〜Ｓ３３、Ｓ３４で「Ｎｏ」、Ｓ３６〜Ｓ３７、Ｓ３８で「Ｎｏ」、Ｓ４０の処理を繰り返す。
【００６９】
コネクション確立後に受信したパケットの場合、Ｓ３１，Ｓ３２の処理後、ＣＰＵ０は、Ｓ３２で取得した送信関係情報を用いてコネクション情報テーブル１８を検索する。これにより、ＣＰＵ０は、コネクションが確立しているかを検出し、さらにパケットの送信方向を検出する（Ｓ３３）。
【００７０】
Ｓ３２で取得した送信関係情報と一致するコネクション情報がコネクション情報テーブル１８に登録されている場合（Ｓ３４で「Ｙｅｓ」）、ＣＰＵ０は、コネクションの接続方向に対して、受信パケットの送信方向を「上り」と特定する（Ｓ３５）。それから、ＣＰＵ０は、Ｓ４３の処理を行う。
【００７１】
Ｓ３２で取得した送信関係情報と一致するコネクション情報がコネクション情報テーブル１８に登録されていない場合（Ｓ３４で「Ｎｏ」）、ＣＰＵ０は以下の処理を実行する。すなわち、ＣＰＵ０は、送信関係情報の「送信先ＩＰアドレス」と「送信元ＩＰアドレス」の内容を入れ替え、「送信先ポート番号」と「送信元ポート番号」の内容と入れ替える（Ｓ３６）。以下では、Ｓ３６で入れ替えた送信関係情報を「入れ替え送信関係情報」という。
【００７２】
ＣＰＵ０は、入れ替え送信関係情報を用いてコネクション情報テーブル１８を検索する。これにより、ＣＰＵ０は、コネクションが確立しているかを検出し、さらにパケットの送信方向を検出する（Ｓ３７）。具体的には、ＣＰＵ０は、入れ替え送信関係情報と一致するコネクション情報がコネクション情報テーブル１８に登録されているか否かを判断する。
【００７３】
入れ替え送信関係情報と一致するコネクション情報がコネクション情報テーブル１８に登録されている場合（Ｓ３８で「Ｙｅｓ」）、ＣＰＵ０は、コネクションの接続方向に対して、受信パケットの送信方向を「下り」と特定する（Ｓ３９）。それから、ＣＰＵ０は、Ｓ４３の処理を行う。
【００７４】
入れ替え送信関係情報と一致するコネクション情報がコネクション情報テーブル１８に登録されていない場合（Ｓ３８で「Ｎｏ」）、上述したように、Ｓ４０〜Ｓ４２の処理を行う。
【００７５】
なお、以下では、パケットの送信方向が「上り」と特定された送信関係情報、及びパケットの送信方向が「下り」と特定された入れ替え送信関係情報を、「対象コネクション情報」という。
【００７６】
Ｓ３５またはＳ３９の処理後、ＣＰＵ０は、送信方向（上り／下り）単位に、連続して受信したパケットの受信間隔を測定する（Ｓ４３）。パケットの受信間隔を測定するため、例えば、ＣＰＵ０は次の処理を行う。上述したように、本実施形態では、パケットの送信間隔を、分析装置１における受信間隔として検出することとする。
【００７７】
パケットの受信間隔を計測する第１の例として、ＣＰＵ０は、自身の有するタイマー機能または時計回路を用いて、パケットを受信したときの時刻を取得する。ＣＰＵ０は、前回、パケットを受信した時の時刻をメモリ１１から読み出す。そして、ＣＰＵ０は、その読み出した前回のパケットの受信時刻と、今回パケットを受信したときの受信時刻との差を受信間隔として算出する。それから、ＣＰＵ０は、今回パケットを受信したときの受信時刻によって、メモリ１１上に格納された前回の受信時刻を更新する。
【００７８】
パケットの受信間隔を計測する第２の例として、ＣＰＵ０は、ＣＰＵ０の有するカウント機能または時計回路の有するカウント機能を用いて、パケットの受信間隔をカウントするようにしてもよい。例えば、パケットを受信した場合、カウンタを０で初期化して、次のパケットを受信するまでの間隔をカウントする。そのカウントした値を受信間隔としてもよい。
【００７９】
ＣＰＵ０は、Ｓ４３で算出した受信間隔と、閾値とを比較する（Ｓ４４）。ここで、閾値は、図１４で説明した送信間隔についての閾値である。Ｓ４３で算出した受信間隔が閾値以下である場合は、ＣＰＵ０は、受信パケットがメッセージ内で２番目以降のパケットであると判定する。また、Ｓ４３で算出した受信間隔が閾値より長い場合は、ＣＰＵ０は、受信パケットがメッセージの先頭パケットであると判定する。
【００８０】
Ｓ４４において、先頭パケットであると判定した場合、ＣＰＵ０は、図５に示す振り分け用テーブル１９から各ＣＰＵに対応する「待機時間」１９ｂを読み出し、最も短い待機時間のＣＰＵ番号を取得する（Ｓ４５）。なお、「待機時間」１９ｂには、各ＣＰＵの使用する現在のバッファ内に格納されたパケットの待機時間の合計が格納されている。
【００８１】
ＣＰＵ０は、Ｓ３５またはＳ３９で特定された受信パケットの送信方向と、対象コネクション情報と、Ｓ４５で取得したＣＰＵ番号とを関係付けて、図７に示すＣＰＵ番号テーブル２１に格納する（Ｓ４６）。具体的には、ＣＰＵ０は、ＣＰＵ番号テーブル２１から、対象コネクション情報に一致するコネクション情報を検索する。
【００８２】
ＣＰＵ番号テーブル２１に、対象コネクション情報に一致するコネクション情報が存在しない場合、ＣＰＵ０は、対象コネクション情報と、Ｓ４５で取得したＣＰＵ番号とを関係付けてＣＰＵ番号テーブル２１に格納する。このとき、ＣＰＵ０は、受信パケットの送信方向が「上り」の場合、「上りＣＰＵ番号」２１ｅに、Ｓ４５で取得したＣＰＵ番号を格納する。また、ＣＰＵ０は、受信パケットの送信方向が「下り」の場合、「下りＣＰＵ番号」２１ｆに、Ｓ４５で取得したＣＰＵ番号を格納する。
【００８３】
ＣＰＵ番号テーブル２１に、対象コネクション情報に一致するコネクション情報が存在する場合、ＣＰＵ０は、次を行う。すなわち、ＣＰＵ０は、受信パケットの送信方向が「上り」の場合、検索されたコネクション情報に対応する「上りＣＰＵ番号」２１ｅに、Ｓ４５で取得したＣＰＵ番号を格納する。また、ＣＰＵ０は、受信パケットの送信方向が「下り」の場合、検索されたコネクション情報に対応する「下りＣＰＵ番号」２１ｆに、Ｓ４５で取得したＣＰＵ番号を格納する。
【００８４】
次に、ＣＰＵ０は、メッセージ番号Ｍをインクリメントし、そのインクリメントしたメッセージ番号Ｍを、図８に示すメッセージ番号テーブル２２に格納する（Ｓ４７）。具体的には、ＣＰＵ０は、メッセージ番号テーブル２２から、対象コネクション情報に一致するコネクション情報を検索する。
【００８５】
メッセージ番号テーブル２２に、対象コネクション情報に一致するコネクション情報が存在しない場合、ＣＰＵ０は、対象コネクション情報と、メッセージ番号Ｎ＝１とを関係付けてメッセージ番号テーブル２２に格納する。このとき、ＣＰＵ０は、受信パケットの送信方向が「上り」の場合、「上りメッセージ」番号２２ｅに「１」を格納する。また、ＣＰＵ０は、受信パケットの送信方向が「下り」の場合、「下りメッセージ」番号２２ｆに「１」を格納する。
【００８６】
メッセージ番号テーブル２２に、対象コネクション情報に一致するコネクション情報が存在する場合、ＣＰＵ０は、次を行う。すなわち、ＣＰＵ０は、受信パケットの送信方向が「上り」の場合、検索されたコネクション情報に対応する「上りメッセージ番号」２２ｅの値をインクリメントする。また、ＣＰＵ０は、受信パケットの送信方向が「下り」の場合、検索されたコネクション情報に対応する「下りメッセージ番号」２２ｆの値をインクリメントする。
【００８７】
ＣＰＵ０は、Ｓ３１で取得したパケットのＩＰヘッダから、「パケット長」を取得する。それから、ＣＰＵ０は、図６に示す処理時間重み付け値テーブル２０から、対象コネクション情報の「接続先ポート番号」に対応するプロトコル名に一致するプロトコル名を検索し、そのプロトコル名に対応する「１バイト当たりの処理時間」を取得する。ＣＰＵ０は、取得したパケット長に、取得した「１バイト当たりの処理時間」を乗算して、そのプロトコルについての１パケット当たりの処理時間を算出する（Ｓ４９）。
【００８８】
ＣＰＵ０は、振り分け用テーブル１９において、Ｓ４６で保存したＣＰＵ番号に対応する「待機時間」に、Ｓ４９で算出した処理時間を加算する（Ｓ５０）。
ＣＰＵ０は、メモリ１１において、Ｓ４６で保存したＣＰＵ番号により特定されるＣＰＵの使用するバッファを探索する（Ｓ５１）。
【００８９】
ＣＰＵ０は、Ｓ３１で取得したパケットに、Ｓ４７で保存したメッセージ番号Ｍを付加し、さらにＳ３５またはＳ３９で特定したパケットの送信方向を「上り／下りフラグ」として付加する。ＣＰＵ０は、Ｓ５１で探索したバッファに、そのメッセージ番号と上り／下りフラグとを付加したパケットを書き込み（Ｓ５２）、本フローは終了する。
【００９０】
Ｓ４４において、２番目以降のパケットであると判定した場合、ＣＰＵ０は、先頭パケットの処理（Ｓ４５−Ｓ４７）のときに保存したＣＰＵ番号及びメッセージ番号を取得する（Ｓ４８）。
【００９１】
すなわち、受信パケットの送信方向が「上り」の場合、ＣＰＵ０は、ＣＰＵ番号テーブル２１から、対象コネクション情報と一致するコネクション情報を検索し、その検索したコネクション情報に対応する「上りＣＰＵ番号」を取得する。このとき、ＣＰＵ０は、メッセージ番号テーブル２２から、対象コネクション情報と一致するコネクション情報を検索し、その検索したコネクション情報に対応する「上りメッセージ番号」を取得する。
【００９２】
また、受信パケットの送信方向が「下り」の場合、ＣＰＵ０は、ＣＰＵ番号テーブル２１から、対象コネクション情報と一致するコネクション情報を検索し、その検索したコネクション情報に対応する「下りＣＰＵ番号」を取得する。このとき、ＣＰＵ０は、メッセージ番号テーブル２２から、対象コネクション情報と一致するコネクション情報を検索し、その検索したコネクション情報に対応する「下りメッセージ番号」を取得する。
【００９３】
ＣＰＵ０は、Ｓ３１で取得したパケットのＩＰヘッダから、「パケット長」を取得する。それから、ＣＰＵ０は、処理時間重み付け値テーブル２０から、対象コネクション情報の「接続先ポート番号」に対応するプロトコル名に一致するプロトコル名を検索し、そのプロトコル名に対応する「１バイト当たりの処理時間」を取得する。ＣＰＵ０は、取得したパケット長に、取得した「１バイト当たりの処理時間」を乗算して、そのプロトコルについての１パケット当たりの処理時間を算出する（Ｓ４９）。
【００９４】
ＣＰＵ０は、振り分け用テーブル１９において、Ｓ４８で取得したＣＰＵ番号に対応する「待機時間」に、Ｓ４９で算出した処理時間を加算する（Ｓ５０）。なお、振り分け用テーブル１９は、分析アプリケーション１４の起動時に作成されるようにしてもよい。この場合、各ＣＰＵ番号の「待機時間」１９ｂには、初期値０が格納されている。
【００９５】
ＣＰＵ０は、メモリ１１において、Ｓ４８で取得したＣＰＵ番号により特定されるＣＰＵの使用するバッファを探索する（Ｓ５１）。
ＣＰＵ０は、Ｓ３１で取得したパケットに、Ｓ４８で取得したメッセージ番号を付加し、さらにＳ３５またはＳ３９で特定したパケットの送信方向を「上り／下りフラグ」として付加する。ＣＰＵ０は、Ｓ５１で探索したバッファに、そのメッセージ番号と上り／下りフラグを付加したパケットを書き込み（Ｓ５２）、本フローは終了する。
【００９６】
図１８は、ＣＰＵｎにより行われる、メッセージ単位でのパケットの分散処理シーケンスの詳細を示す。図１８のフローは、図１５のＳ１７−Ｓ２１の詳細を示す。
ＣＰＵｎは、メモリ１１において、自身の使用するバッファ１１ｎから、メッセージ単位でパケットを読み出す（Ｓ６１）。
【００９７】
ＣＰＵｎは、Ｓ６１で読み出した各パケットのＩＰヘッダから「パケット長」を取得し、その「パケット長」の総和を「メッセージ長」として算出する（Ｓ６２）。
次に、ＣＰＵｎは、いずれかのパケット（例えば、先頭パケット）に付された上り／下りフラグを読み込む。読み込んだ上り／下りフラグが「上り」を示す場合、ＣＰＵｎは、先頭パケットのＴＣＰヘッダの「送信先ポート番号」を取得する。読み込んだ上り／下りフラグが「下り」を示す場合、ＣＰＵｎは、先頭パケットのＴＣＰヘッダの「送信元ポート番号」を取得する。ＣＰＵｎは、この取得した「送信先ポート番号」（上り／下りフラグが「上り」を示す場合）または「送信元ポート番号」（上り／下りフラグが「下り」を示す場合）に基づいて、プロトコルを識別する（Ｓ６３）。
【００９８】
ＣＰＵｎは、読み出した各パケットから分割されたメッセージを取り出し、メッセージを組み立てる。ＣＰＵｎは、その組み立てたメッセージの内容（例えば、リクエスト、レスポンス、命令等）の解析を行う。このとき、ＣＰＵｎは、その解析処理に費やした時間を計測する（Ｓ６４）。
【００９９】
ＣＰＵｎは、処理時間重み付け値テーブル２０から、Ｓ６３で識別したプロトコル名に一致するプロトコル名を検索する。ＣＰＵｎは、その検索したプロトコル名に対応する「解析したメッセージの長さ」、「解析したメッセージの処理時間」それぞれに、Ｓ６２で測定したメッセージ長、Ｓ６４で計測した解析処理時間を加算し更新する（Ｓ６５）。
【０１００】
さらに、ＣＰＵｎは、Ｓ６５で更新した「解析したメッセージの処理時間」を、Ｓ６５で更新した「解析したメッセージの長さ」で除算し、１バイト当たりの処理時間を算出する。ＣＰＵは、処理時間重み付け値テーブル２０において、Ｓ６５で更新した「解析したメッセージの処理時間」及び「解析したメッセージの長さ」に対応する「１バイト当たりの処理時間」を、算出した１バイト当たりの処理時間で更新する（Ｓ６６）。
【０１０１】
ＣＰＵｎは、振り分け用テーブル１９において、ＣＰＵｎ自身のＣＰＵ番号に対応する「待機時間」１９ｂの値から、Ｓ６４で測定した処理時間を差し引き、更新する（Ｓ６７）。
【０１０２】
なお、上述の実施形態では、振り分け先の各ＣＰＵによって使用されるバッファ１１内のパケットの待機時間に応じて、パケットを各ＣＰＵへ振り分けたが、これに限定されない。例えば、バッファの使用量、バッファの使用率、ＣＰＵの使用率等の、各プロセッサにかかる処理負荷を示す情報を取得し、その処理負荷に基づいてパケットを各ＣＰＵへ振り分けるようにしてもよい。
【０１０３】
例えば、処理負荷を示す情報がバッファの使用量である場合、振り分け用テーブル１９において、「待機時間」１９ｂの代わりに、「バッファの使用量」をデータ項目として保持するようにする。この場合、データ項目「バッファの使用量」には、各ＣＰＵの使用する現在のバッファ内に格納されたパケットのデータ容量の合計が格納されている。この場合、Ｓ４５においてＣＰＵ０は振り分け用テーブルから各ＣＰＵに対応する「バッファの使用量」を読み出し、最も使用量の少ないＣＰＵ番号を取得する。そして、Ｓ５０において、ＣＰＵ０は、振り分け用テーブルにおいて、Ｓ４６で保存したＣＰＵ番号に対応する「バッファの使用量」に、Ｓ４９で取得したパケット長を加算する。そして、Ｓ６７において、ＣＰＵｎは、振り分け用テーブルにおいて、ＣＰＵｎ自身のＣＰＵ番号に対応する「バッファの使用量」の値から、Ｓ６４で解析処理を行ったメッセージのメッセージ長を差し引き、更新する。
【０１０４】
また、例えば、処理負荷を示す情報がＣＰＵの使用率である場合、各ＣＰＵの使用率をＯＳ等から取得し、最も使用率の小さいＣＰＵのバッファへパケットを振り分けるようにしてもよい。
【０１０５】
以上より、本実施形態に係る解析処理装置は、受信部、複数の処理部を含む。受信部は、ネットワークを介して接続されたコンピュータ間で送受されるパケットを受信する。ＮＩＣ１３は、受信部の一例である。
【０１０６】
前記複数の処理部のうち所定の処理部は、前記受信部で受信したパケットの受信間隔を計測する。ＣＰＵ０は、所定の処理部の一例である。それから、所定の処理部は、前記計測した受信間隔に応じて、１組のメッセージの先頭に対応するセグメントを含むパケットと、該メッセージの２番目以降に対応するセグメントを含むパケットとを検出する。それから、所定の処理部は、前記検出したパケットを、組単位で前記複数の処理部のいずれかに振り分ける。
【０１０７】
前記複数の処理部のうち、前記パケットを振り分けられた処理部は、組単位で前記振り分けられた前記パケットに基づいて、前記メッセージの解析を行う。ＣＰＵ１、ＣＰＵ２は、前記複数の処理部のうち、前記パケットを振り分けられた処理部の一例である。なお、複数の処理部の一例にＣＰＵ０が含まれていてもよい。
【０１０８】
これにより、ネットワーク上を流れるパケットについてのマルチプロセッサによる解析処理において、マルチプロセッサのリソースを効率よく利用することができる。すなわち、ネットワーク上を流れるパケットについてのマルチプロセッサによる解析処理において、メッセージ単位で振り分けることができる。したがって、メッセージ解析処理をするＣＰＵがコネクション単位で固定されることがない。その結果、コネクション単位で振り分ける場合と比較して、コネクション確立後に処理量が変化しても、他のＣＰＵへパケットを振り分けることができる。
【０１０９】
また、前記所定の処理部は、前記計測した受信間隔の値が閾値以上である場合、今回受信したパケットは、前記メッセージの先頭に対応するセグメントを含むパケットであると判定する。また、前記所定の処理部は、前記計測した受信間隔の値が閾値より小さい場合、今回受信したパケットは、該メッセージの２番目以降に対応するセグメントを含むパケットであると判定する。
【０１１０】
これにより、受信間隔（送信間隔）に応じて、同一メッセージに属するパケットか否かを判定することができる。
また、前記所定の処理部は、前記複数の処理部のそれぞれにかかる処理負荷に応じて、前記検出したパケットを、組単位で前記複数の処理部のいずれかに振り分ける。すなわち、今回受信したパケットが前記メッセージの先頭に対応するセグメントを含むパケットであると判定した場合、前記所定の処理部は、前記複数の処理部から、前記処理負荷の最も少ない処理部を選択する。それから、所定の処理部は、組単位で前記パケットを識別するための識別情報を付加する。そして、所定の処理部は、該メッセージ識別情報が付加されたパケットを前記選択した処理部に振り分ける。
【０１１１】
これにより、処理負荷の少ないＣＰＵにパケットを振り分けることができる。したがってよって、各ＣＰＵにより処理されるパケットの待機時間を平準化することができる。したがって、ＣＰＵにかかる負荷が特定のＣＰＵに偏ることがなく、各ＣＰＵにかかる負荷を平準化することができる。
【０１１２】
また、前記今回受信したパケットが前記メッセージの２番目以降に対応するセグメントを含むパケットであると判定した場合、所定の処理部は、次を実行する。すなわち、所定の処理部は、直近に、前記受信したパケットが前記メッセージの先頭に対応するセグメントを含むパケットであると判定した場合に付加したメッセージ識別情報と同一の識別情報を前記今回受信したパケットに付加する。そして、所定の処理部は、該識別情報が付加されたパケットを前記選択した処理部に振り分ける。
【０１１３】
これにより、受信したパケットをメッセージ単位で各ＣＰＵに割り振ることができる。
前記所定の処理部は、前記処理負荷の最も少ない処理部として、前記制御部のそれぞれが前記受信したパケットのメッセージの解析処理を行うまでのパケットの待機時間の最も少ない処理部を選択する。そして、前記所定の処理部は、前記受信した各パケットのヘッダから、接続先の前記コンピュータ側のポート番号を取得し、該取得したポート番号に対応するプロトコルに応じて、前記選択した処理部の前記待機時間に重み付けを行う。
【０１１４】
これにより、プロトコルに応じてパケット毎の処理時間に重み付けを行い、待機時間を平準化することができる。
本実施形態によれば、受信したパケットを、メッセージ単位でメッセージ解析処理に振り分けることができる。また、プロトコルに応じてパケット毎の処理時間に重み付けを行い、各ＣＰＵにより処理されるパケットの待機時間を平準化することができる。これにより、マルチプロセッサシステムのリソースを効率よく利用することができる。
【０１１５】
なお、本発明は、以上に述べた実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
【０１１６】
上記実施形態に関し、更に以下の付記を開示する。
（付記１）
ネットワークを介して接続されたコンピュータ間で送受されるパケットを受信する受信部と、
複数の処理部と、
を備え、
前記複数の処理部のうち所定の処理部は、
前記受信部で受信したパケットの受信間隔を計測し、
前記計測した受信間隔に応じて、１組の、メッセージの先頭に対応するセグメントを含むパケットと、該メッセージの２番目以降に対応するセグメントを含むパケットとを検出し、
前記検出したパケットを、組単位で前記複数の処理部のいずれかに振り分け、
前記複数の処理部のうち、前記パケットを振り分けられた処理部は、該パケットに基づいて、メッセージの解析を行う
ことを特徴とする解析処理装置。（１、図３、図１７）
（付記２）
前記所定の処理部は、前記計測した受信間隔の値が閾値以上である場合、今回受信したパケットは、前記メッセージの先頭に対応するセグメントを含むパケットであると判定し、前記計測した受信間隔の値が閾値より小さい場合、今回受信したパケットは、該メッセージの２番目以降に対応するセグメントを含むパケットであると判定する
ことを特徴とする付記１に記載の解析処理装置。（２、図１７）
（付記３）
前記所定の処理部は、前記複数の処理部のそれぞれにかかる処理負荷に応じて、前記検出したパケットを、組単位で前記複数の処理部のいずれかに振り分ける
ことを特徴とする付記１または２に記載の解析処理装置。（３、図１７）
（付記４）
今回受信したパケットが前記メッセージの先頭に対応するセグメントを含むパケットであると判定した場合、前記所定の処理部は、前記複数の処理部から、前記処理負荷の最も少ない処理部を選択し、組単位で前記パケットを識別する識別情報を付加し、該識別情報が付加されたパケットを前記選択した処理部に振り分ける
ことを特徴とする付記３に記載の解析処理装置。（４、図１７）
（付記５）
前記今回受信したパケットが前記メッセージの２番目以降に対応するセグメントを含むパケットであると判定した場合、直近に、前記受信したパケットが前記メッセージの先頭に対応するセグメントを含むパケットであると判定した場合に付加した識別情報と同一の識別情報を前記今回受信したパケットに付加し、該識別情報が付加されたパケットを前記選択した処理部に振り分ける
ことを特徴とする付記４に記載の解析処理装置。
（付記６）
前記所定の処理部は、
前記処理負荷の最も少ない処理部として、前記制御部のそれぞれが前記受信したパケットのメッセージの解析処理を行うまでのパケットの待機時間の最も少ない処理部を選択し、
前記受信した各パケットのヘッダから、接続先の前記コンピュータ側のポート番号を取得し、該取得したポート番号に対応するプロトコルに応じて、前記選択した処理部の前記待機時間に重み付けを行う
ことを特徴とする付記４または５に記載の解析処理装置。（５、図１７）
（付記７）
複数の処理部を含むコンピュータに、メッセージの解析を行う処理を実行させる解析処理プログラムであって、
前記複数の処理部のうち所定の処理部に、
ネットワークを介して接続されたコンピュータ間で送受されるパケットを受信し、
前記受信したパケットの受信間隔を計測し、
前記計測した受信間隔に応じて、１組の、メッセージの先頭に対応するセグメントを含むパケットと、該メッセージの２番目以降に対応するセグメントを含むパケットとを検出し、
前記検出したパケットを、組単位で前記複数の処理部のいずれかに振り分ける処理を実行させ、
前記複数の処理部のうち、前記パケットを振り分けられた処理部に、該パケットに基づいて、メッセージの解析を行う処理を実行させる解析処理プログラム。（６、図１７）
（付記８）
前記計測した受信間隔の値が閾値以上である場合、今回受信したパケットは、前記メッセージの先頭に対応するセグメントを含むパケットであると判定し、前記計測した受信間隔の値が閾値より小さい場合、今回受信したパケットは、該メッセージの２番目以降に対応するセグメントを含むパケットであると判定する処理を前記所定の処理部に実行させる
ことを特徴とする付記７に記載の解析処理プログラム。
（付記９）
前記複数の処理部のそれぞれにかかる処理負荷に応じて、前記検出したパケットを、組単位で前記複数の処理部のいずれかに振り分ける処理を前記所定の処理部に実行させる
ことを特徴とする付記７または８に記載の解析処理プログラム。
（付記１０）
今回受信したパケットが前記メッセージの先頭に対応するセグメントを含むパケットであると判定した場合、前記所定の処理部は、前記複数の処理部から、前記処理負荷の最も少ない処理部を選択し、組単位で前記パケットを識別するための識別情報を付加し、該識別情報が付加されたパケットを前記選択した処理部に振り分ける処理を前記所定の処理部に実行させる
ことを特徴とする付記９に記載の解析処理プログラム。
（付記１１）
前記今回受信したパケットが前記メッセージの２番目以降に対応するセグメントを含むパケットであると判定した場合、直近に、前記受信したパケットが前記メッセージの先頭に対応するセグメントを含むパケットであると判定した場合に付加した識別情報と同一の識別情報を前記今回受信したパケットに付加し、該識別情報が付加されたパケットを前記選択した処理部に振り分ける処理を前記所定の処理部に実行させる
ことを特徴とする付記１０に記載の解析処理プログラム。
（付記１２）
前記所定の処理部に、
前記処理負荷の最も少ない処理部として、前記制御部のそれぞれが前記受信したパケットのメッセージの解析処理を行うまでのパケットの待機時間の最も少ない処理部を選択し、
前記受信した各パケットのヘッダから、接続先の前記コンピュータ側のポート番号を取得し、該取得したポート番号に対応するプロトコルに応じて、前記選択した処理部の前記待機時間に重み付けを行う
処理を実行させることを特徴とする付記１０または１１に記載の解析処理プログラム。
（付記１３）
複数の処理部を含むコンピュータに、メッセージの解析処理を実行させる解析処理方法であって、
前記複数の処理部のうち所定の処理部に、
ネットワークを介して接続されたコンピュータ間で送受されるパケットを受信し、
前記受信したパケットの受信間隔を計測し、
前記計測した受信間隔に応じて、１組の、メッセージの先頭に対応するセグメントを含むパケットと、該メッセージの２番目以降に対応するセグメントを含むパケットとを検出し、
前記検出したパケットを、組単位で前記複数の処理部のいずれかに振り分ける処理を実行させ、
前記複数の処理部のうち、前記パケットを振り分けられた処理部に、該パケットに基づいて、メッセージの解析処理を実行させることを特徴とする解析処理方法。（７、図１７）
（付記１４）
前記計測した受信間隔の値が閾値以上である場合、今回受信したパケットは、前記メッセージの先頭に対応するセグメントを含むパケットであると判定し、前記計測した受信間隔の値が閾値より小さい場合、今回受信したパケットは、該メッセージの２番目以降に対応するセグメントを含むパケットであると判定する処理を前記所定の処理部に実行させる
ことを特徴とする付記１３に記載の解析処理方法。
（付記１５）
前記所定の処理部は、前記複数の処理部のそれぞれにかかる処理負荷に応じて、前記検出したパケットを、組単位で前記複数の処理部のいずれかに振り分ける処理を前記所定の処理部に実行させる
ことを特徴とする付記１３または１４に記載の解析処理方法。
（付記１６）
今回受信したパケットが前記メッセージの先頭に対応するセグメントを含むパケットであると判定した場合、前記所定の処理部は、前記複数の処理部から、前記処理負荷の最も少ない処理部を選択し、組単位で前記パケットを識別するための識別情報を付加し、該識別情報が付加されたパケットを前記選択した処理部に振り分ける処理を前記所定の処理部に実行させる
ことを特徴とする付記１５に記載の解析処理方法。
（付記１７）
前記今回受信したパケットが前記メッセージの２番目以降に対応するセグメントを含むパケットであると判定した場合、直近に、前記受信したパケットが前記メッセージの先頭に対応するセグメントを含むパケットであると判定した場合に付加した識別情報と同一の識別情報を前記今回受信したパケットに付加し、該識別情報が付加されたパケットを前記選択した処理部に振り分ける処理を前記所定の処理部に実行させる
ことを特徴とする付記１６に記載の解析処理方法。
（付記１８）
前記所定の処理部に、
前記処理負荷の最も少ない処理部として、前記制御部のそれぞれが前記受信したパケットのメッセージの解析処理を行うまでのパケットの待機時間の最も少ない処理部を選択し、
前記受信した各パケットのヘッダから、接続先の前記コンピュータ側のポート番号を取得し、該取得したポート番号に対応するプロトコルに応じて、前記選択した処理部の前記待機時間に重み付けを行う処理を実行させる
ことを特徴とする付記１６または１７に記載の解析処理方法。
【符号の説明】
【０１１７】
１      分析装置
２      情報システム
３      コンピュータ
４      ＳＷ
１０      マルチプロセッサ
１０ａ      ＣＰＵ０
１０ｂ      ＣＰＵ１
１０ｃ      ＣＰＵ２
１１      メモリ
１１ａ，１１ｂ      バッファ
１２      記憶装置
１３      ＮＩＣ
１４      分析アプリケーション
１５      パケット受信プログラム
１６      メッセージ解析プログラム
１７      ＯＳ
１８      コネクション情報テーブル
１９      振り分け用テーブル
２０      処理時間重み付け値テーブル
２１      ＣＰＵ番号テーブル
２２      メッセージ番号テーブル
【図２】
0005682233.tif 000002
【図３】
0005682233.tif 000003
【図４】
0005682233.tif 000004
【図５】
0005682233.tif 000005
【図６】
0005682233.tif 000006
【図７】
0005682233.tif 000007
【図８】
0005682233.tif 000008
【図９】
0005682233.tif 000009
【図１０】
0005682233.tif 000010
【図１１】
0005682233.tif 000011
【図１２】
0005682233.tif 000012
【図１３】
0005682233.tif 000013
【図１４】
0005682233.tif 000014
【図１６】
0005682233.tif 000015
【図１７】
0005682233.tif 000016
【図１８】
0005682233.tif 000017
【図１】
0005682233.tif 000018
【図１５】
0005682233.tif 000019