(57)【要約】【課題】メッセージの判別可能性を上げる。【解決手段】メッセージ組立手段１ｂには、対象パケット抽出手段１ａより対象のパケットが順次送られてくる。メッセージ組立手段１ｂは、入力したパケット群を所定の規則で区切って仮メッセージを組み立て、仮メッセージ記憶手段１ｅに格納する。メッセージ分割手段１ｃは、仮メッセージ記憶手段１ｅから仮メッセージを読み出してリクエストメッセージとレスポンスメッセージに分類し、それぞれの出現数を算出する。そして、出現数が一致しないときは、少ない方に分類された仮メッセージを分割し、出現数が一致した時点で仮メッセージを本メッセージとし、本メッセージ記憶手段１ｆに格納する。【選択図】図１
2011134213.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して受け渡されるパケット群からメッセージを判別するメッセージ判別プログラムおいて、
コンピュータに、
前記パケット群を取得し、前記パケット群を所定の規則に基づいてメッセージ単位に区切り、前記メッセージ単位に区切ったパケット群から仮メッセージを組み立て、仮メッセージ記憶手段に記憶するメッセージ組立手順、
所定の期間に受け渡された仮メッセージ群を前記仮メッセージ記憶手段から読み出し、前記仮メッセージ群をリクエストメッセージとレスポンスメッセージに分類して前記所定の期間におけるそれぞれの出現数を算出して比較し、前記リクエストメッセージと前記レスポンスメッセージの出現数が一致しないときは、出現数が少ない方に分類した仮メッセージを分割する処理を前記出現数が一致するまで繰り返すメッセージ分割手順、
を実行させることを特徴とするメッセージ判別プログラム。
【請求項２】
前記メッセージ組立手順は、
前記パケット群の各パケットのサイズを、該パケットの通信時刻が早い順に、予め決められたパケット最大サイズと比較し、該パケットのサイズが前記パケット最大サイズより小さいときは、該パケットが前記メッセージ単位の最後のパケットと判定して前記メッセージ単位の区切りとする、
ことを特徴とする請求項１記載のメッセージ判別プログラム。
【請求項３】
前記メッセージ分割手順は、
前記リクエストメッセージと前記レスポンスメッセージの出現数が一致しないときは、出現数が少ない方に分類した仮メッセージ群の各仮メッセージのサイズを比較し、サイズが最も大きい仮メッセージを分割する、
ことを特徴とする請求項１記載のメッセージ判別プログラム。
【請求項４】
前記メッセージ分割手順は、
前記リクエストメッセージと前記レスポンスメッセージの出現数とが一致せず、前記リクエストメッセージの出現数が前記レスポンスメッセージの出現数よりも多いときは、前記所定の期間の仮メッセージ群について、前記仮メッセージの通信時刻の早い方から順に、それぞれの仮メッセージの通信時刻までの前記リクエストメッセージの出現数と前記レスポンスメッセージの出現数とを算出して比較し、前記リクエストメッセージの出現数と前記レスポンスメッセージの出現数とが最後に一致した時点よりも通信時刻の遅いレスポンスメッセージを分割対象とする、
ことを特徴とする請求項１記載のメッセージ判別プログラム。
【請求項５】
前記メッセージ分割手順は、
前記リクエストメッセージと前記レスポンスメッセージの出現数とが一致せず、前記レスポンスメッセージの出現数が前記リクエストメッセージの出現数よりも多いときは、前記所定の期間の仮メッセージ群について、前記仮メッセージの通信時刻の遅い方から順に、それぞれの仮メッセージの通信時刻までの前記リクエストメッセージの出現数と前記レスポンスメッセージの出現数とを算出して比較し、前記リクエストメッセージの出現数と前記レスポンスメッセージの出現数とが一致した最も早い通信時刻よりも通信時刻が早いリクエストメッセージを分割対象とする、
ことを特徴とする請求項１記載のメッセージ判別プログラム。
【請求項６】
ネットワークを介して受け渡されるパケット群からメッセージを判別するメッセージ判別装置おいて、
前記パケット群を取得し、前記パケット群を所定の規則に基づいてメッセージ単位に区切り、前記メッセージ単位に区切ったパケット群から仮メッセージを組み立て、仮メッセージ記憶手段に記憶するメッセージ組立手段と、
所定の期間に受け渡された仮メッセージ群を前記仮メッセージ記憶手段から読み出し、前記仮メッセージ群をリクエストメッセージとレスポンスメッセージに分類して前記所定の期間におけるそれぞれの出現数を算出して比較し、前記リクエストメッセージと前記レスポンスメッセージの出現数が一致しないときは、出現数が少ない方に分類した仮メッセージを分割する処理を前記出現数が一致するまで繰り返すメッセージ分割手段と、
を有することを特徴とするメッセージ判別装置。
【請求項７】
ネットワークを介して受け渡されるパケット群からメッセージを判別するメッセージ判別方法おいて、
コンピュータが、
前記パケット群を取得し、前記パケット群を所定の規則に基づいてメッセージ単位に区切り、前記メッセージ単位に区切ったパケット群から仮メッセージを組み立て、仮メッセージ記憶手段に記憶し、
所定の期間に受け渡された仮メッセージ群を前記仮メッセージ記憶手段から読み出し、
前記仮メッセージ群をリクエストメッセージとレスポンスメッセージに分類して前記所定の期間におけるそれぞれの出現数を算出して比較し、
前記リクエストメッセージと前記レスポンスメッセージの出現数が一致しないときは、出現数が少ない方に分類した仮メッセージを分割する処理を前記出現数が一致するまで繰り返す、
手順を有することを特徴とするメッセージ判別方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ネットワークを介して受け渡されるパケットからメッセージを判別するメッセージ判別プログラム、メッセージ判別装置及びメッセージ判別方法に関する。
【背景技術】
【０００２】
近年、ＩＴ（Information Technology）システムの複雑化が進んでおり、例えば、Ｗｅｂサーバ、アプリケーションサーバ、ＤＢ（DataBase）サーバがメッセージを交換しながら連携してクライアントからの要求を処理するＷｅｂ３階層システムがある。このように、複数のサーバが連携して処理を行うシステムでは、個々のサーバの挙動だけでなく、システム全体として稼働状況を分析する必要がある。そこで、このようなシステムの稼働状況を把握するため、送受信されるメッセージからトランザクション処理を分析するシステム分析方法がある。
【０００３】
システム分析では、複数サーバ間で送受信される通信データを傍受し、傍受した内容を適切に分割してメッセージ（リクエストとレスポンス）を再構築する。そして、再構築したメッセージからトランザクションを組み立て、組み立てたトランザクションを基にシステムの挙動を分析する。メッセージの再構築に際しては、パケット単位で入力する通信データの内容を解析してメッセージの切れ目を検出し、切れ目ごとにまとめたパケット群からメッセージを再構築する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−１１６８３号公報
【特許文献２】特開２００７−３０４６４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来のメッセージを再構築する技術は、傍受するパケットに欠損がなく、かつメッセージ再構築処理を行う処理部がメッセージを識別するためのプロトコルに対応している場合にのみ有用である。実際の運用では、パケットを欠損なく傍受することは不可能であり、すべてのメッセージのプロトコルに対応するメッセージ判別手順を予め用意しておくことも困難である。そのため、傍受したパケットに欠損がある場合や、メッセージのプロトコルに対応していない場合には、傍受したパケット群を適切なメッセージ単位に分割することができず、メッセージの判別が困難であった。言い換えると、このような場合には、判別されたメッセージが正しいメッセージである可能性（以下、これをメッセージの判別可能性とする）が低下していた。さらに、メッセージの判別可能性の低下が起きると、これを用いたシステム分析の精度も下がってしまう。
【０００６】
このような点に鑑み、傍受したパケット群を適切に分割してメッセージを組み立て、メッセージの判別可能性を向上させるメッセージ判別プログラム、メッセージ判別装置及びメッセージ判別方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、ネットワークを介して受け渡されるパケット群からメッセージを判別するメッセージ判別プログラムおいて、コンピュータに、メッセージ組立手順及びメッセージ分割手順を実行させるメッセージ判別プログラムが提供される。メッセージ組立手順では、パケット群を取得し、このパケット群を所定の規則に基づいてメッセージ単位に区切る。そして、メッセージ単位に区切ったパケット群から仮メッセージを組み立て、仮メッセージ記憶手段に記憶する。メッセージ分割手順では、所定の期間に受け渡された仮メッセージ群を仮メッセージ記憶手段から読み出し、仮メッセージ群をリクエストメッセージとレスポンスメッセージに分類して所定の期間におけるそれぞれの出現数を算出して比較する。そして、リクエストメッセージとレスポンスメッセージの出現数が一致しないときは、出現数が少ない方に分類した仮メッセージを分割する処理を出現数が一致するまで繰り返す。
【０００８】
また、上記課題を解決するために、コンピュータが上記のメッセージ判別プログラムを実行するメッセージ判別装置と、同様の処理手順を実行するメッセージ判別方法と、が提供される。
【発明の効果】
【０００９】
開示のメッセージ判別プログラム、メッセージ判別装置及びメッセージ判別方法によれば、所定の期間に受け渡されるリクエストメッセージとレスポンスメッセージの出現数が同じとなるようにパケットを区切り、メッセージを再構築することができる。これにより、パケット群から判別したメッセージが適切なメッセージである可能性が高くなり、メッセージの判別可能性を向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施の形態のメッセージ判別装置の構成例を示した図である。
【図２】第２の実施の形態のシステム構成を示す図である。
【図３】パケットに含まれる情報を示した図である。
【図４】キャプチャサーバのハードウェア構成例を示すブロック図である。
【図５】キャプチャサーバの機能ブロックを示す図である。
【図６】分割対象範囲の選択処理を説明する図である。
【図７】パケットバッファ、仮メッセージバッファ及び本メッセージバッファが記憶するデータの一例を示した図である。
【図８】キャプチャサーバへ入力するパケットの一例を示した図である。
【図９】パケットの通信方向が反転した場合の処理を示している。
【図１０】パケットの通信方向が反転し、かつ直前のレスポンスパケットのサイズがＭＳＳに満たない場合の処理を示している。
【図１１】直前のリクエストパケットのサイズがＭＳＳに満たない場合の処理を示している。
【図１２】パケットの通信方向が反転し、かつ直前のリクエストパケットのサイズがＭＳＳに満たない場合の処理を示している。
【図１３】直前のレスポンスパケットのサイズがＭＳＳに満たない場合の処理を示している。
【図１４】分割対象範囲の選択処理を示した図である。
【図１５】分割対象範囲の仮メッセージの分割処理を示した図である。
【図１６】メッセージ判別処理におけるメッセージ組立処理の手順を示したフローチャートである。
【図１７】メッセージ判別処理におけるメッセージ分離処理の手順を示したフローチャートである。
【図１８】メッセージ分割処理における分割対象選択処理の手順を示したフローチャートである。
【図１９】メッセージ分割処理における分割対象の分割処理の手順を示したフローチャートである。
【発明を実施するための形態】
【００１１】
以下、実施の形態を、図面を参照して説明する。
図１は、第１の実施の形態のメッセージ判別装置の構成例を示した図である。
メッセージ判別装置１は、ネットワーク３を介して、サーバ２ａ，２ｂ，・・・及びクライアント（装置）４ａ，４ｂ，・・・に接続されている。サーバ２ａ，２ｂ，・・・は、クライアント４ａ，４ｂ，・・・からのサービス要求に応じて、サービスを提供する。サーバ２ａ，２ｂ、・・・は、互いに連携してサービス処理を実行する。パケット５は、装置間でデータを受け渡される際のデータのまとまりで、通信の単位である。また、パケット５は、最大サイズが決められている。メッセージは、装置間で受け渡されるデータのまとまりで、データが大きい場合には、複数のパケットに分割して送受信される。また、メッセージには、最初に何らかの処理の要求元から送信されるリクエストメッセージと、リクエストメッセージに対し、要求先から送信されるレスポンスメッセージとがある。１つのリクエストメッセージに対し、１つのレスポンスメッセージが受け渡される１対１の対応関係を有するとする。
【００１２】
メッセージ判別装置１は、ネットワーク３を介してサーバ−クライアント間、あるいはサーバ−サーバ間で受け渡されるパケット５を取得し、メッセージを判別し、再構築する。そのため、メッセージ判別装置１は、対象パケット抽出手段１ａ、メッセージ組立手段１ｂ、メッセージ分割手段１ｃ、パケット記憶手段１ｄ、仮メッセージ記憶手段１ｅ及び本メッセージ記憶手段１ｆを有する。なお、対象パケット抽出手段１ａ、メッセージ組立手段１ｂ及びメッセージ分割手段１ｃの各処理手段は、コンピュータがメッセージ判別プログラムを実行することにより、その処理機能が実現される。
【００１３】
メッセージ判別装置１は、ネットワーク３を介してサーバ−サーバ間あるいはサーバ−クライアント間で受け渡されるパケット５をリアルタイムで取得する。また、観測装置が観測したパケットの到着時刻及びパケットデータなどを記録したパケット通信ログを入力するとしてもよい。
【００１４】
対象パケット抽出手段１ａは、パケット５を取得し、予め規定されているメッセージ判別の対象となるパケットを抽出してメッセージ組立手段１ｂに送る。対象パケット抽出手段１ａは、規定に基づいて入力したパケットが対象パケットであるか否かを判定する。例えば、メッセージが複数のアプリケーションに対応するような場合、特定のアプリケーションに対応するパケットを対象、あるいは対象外として規定しておく。
【００１５】
メッセージ組立手段１ｂは、対象パケット抽出手段１ａが対象であると判定したパケットを順次入力する。そして、入力したパケット群を所定の規則に基づいてメッセージ単位に区切り、仮メッセージを組み立てる。所定の規則は、メッセージ組立手段１ｂにおいて解析が可能なパケットの特徴に基づき、パケット群からメッセージ単位の区切りを検出するための規則である。例えば、パケットの最大サイズが決まっており、リクエストメッセージとレスポンスメッセージは１対１に対応付けられるという想定環境において、入力したパケットのサイズが最大サイズであれば続きが送信されると判断する。一方、最大サイズより小さければそのパケットがメッセージの最後のパケットであると判定して、メッセージ単位の区切りとする。区切りの検出は、送信元や宛先、直前のパケットの通信時刻からの経過時間などを用いることもできる。そして、直前に組み立てたメッセージの次のパケットから、今回検出したメッセージの最後のパケットまでのパケットをまとめ、仮メッセージを組み立てる。仮メッセージは、仮メッセージ記憶手段１ｅに記憶する。このとき、例えば、先頭のパケットの通信時刻を仮メッセージの通信時刻として仮メッセージとともに記憶しておく。直前のメッセージの組み立てに用いたパケットの次のパケットから今回検出した区切りまでのパケットは、仮メッセージ生成までパケット記憶手段１ｄに一時的に保存しておく。なお、仮メッセージとは、パケットサイズなどによって判断される１つのメッセージである。パケットサイズのみによる判断では、メッセージの区切りを誤認識する可能性があるため、メッセージ分割手段１ｃによる確定まで、仮のメッセージとして取り扱う。
【００１６】
メッセージ分割手段１ｃは、仮メッセージ記憶手段１ｅに格納されている所定の期間の仮メッセージを読み出し、リクエストメッセージとレスポンスメッセージに分類して、その数を一致させるように、仮メッセージを分割する。メッセージ組立手段１ｂによるメッセージ組立では、偶然に最大サイズのパケットの整数倍と同じ長さのメッセージがあり、かつ、同方向のメッセージが続いた場合に、複数のメッセージを１つのメッセージとして判定してしまうことがある。また、メッセージの最後のパケットが欠損した場合も同様である。このような誤判定を防ぐため、複数のメッセージを１つのメッセージと判定してしまった可能性がある仮メッセージを検出して分割する。所定の期間は、例えば、一連のサービス処理が実行される期間など、ひとまとまりのメッセージ群が受け渡しされる期間とする。そして、仮メッセージをリクエストメッセージとレスポンスメッセージに分類し、所定の期間にそれぞれが出現した出現数を算出する。想定環境であれば、リクエストメッセージとレスポンスメッセージとは等しくなる。そこで、所定の期間のリクエストメッセージとレスポンスメッセージの出現数を比較して一致しているときは、仮メッセージは正しいと判定し、本メッセージとして本メッセージ記憶手段１ｆに格納する。一致していないときは、少ない方のメッセージのどれかが、複数のメッセージを１つのメッセージとして誤認されていることになる。そこで、少ない方に分類されている仮メッセージのうち、サイズが最大のものを選択して分割する。分割後、再度リクエストメッセージとレスポンスメッセージの出現数を算出し、同様の手順で出現数が一致するまで分割を繰り返す。リクエストメッセージとレスポンスメッセージの出現数が一致したときは、この状態の仮メッセージを本メッセージとして本メッセージ記憶手段１ｆに格納する。
【００１７】
パケット記憶手段１ｄは、メッセージ組立手段１ｂが、入力したパケット５と、パケット５に関する情報とを、仮メッセージが組み立てられるまで一時的に記憶する。パケットに関する情報とは、例えば、パケットが送信された通信時刻や、通信方向などである。
【００１８】
仮メッセージ記憶手段１ｅは、メッセージ組立手段１ｂが仮メッセージであると判定した仮メッセージと、仮メッセージに関する情報と、を記憶する。仮メッセージに関する情報とは、例えば、仮メッセージが送信された通信時刻、仮メッセージがリクエストメッセージであるか、レスポンスメッセージであるかを示す通信方向などである。
【００１９】
本メッセージ記憶手段１ｆは、メッセージ分割手段１ｃがメッセージであると判定した本メッセージと、本メッセージに関する情報と、を格納する。本メッセージに関する情報とは、例えば、通信時刻や通信方向などである。
【００２０】
このような構成のメッセージ判別装置１の動作について説明する。メッセージ判別装置１には、ネットワーク３を介してサーバ２ａ，２ｂ，・・・、クライアント４ａ，４ｂ，・・・間で受け渡されるパケット５の情報が入力される。ここでは、スイッチなどでミラーリングされたパケット５が、リアルタイムでメッセージ判別装置１に入力されるとする。
【００２１】
対象パケット抽出手段１ａは、順次入力するパケット５から、対象パケットを抽出し、メッセージ組立手段１ｂへ送る。メッセージ組立手段１ｂは、所定の規則に基づいて対象パケットを調べ、メッセージの最後のパケットを判別する。例えば、直前のパケットの到着から一定時間経過している、送信元及び宛先が直前のパケットの送信元及び宛先と異なる、などであれば、直前のパケットが最後のパケットであると判定する。さらに、パケット最大サイズと比較して小さければ、このパケットが最後のパケットと判定する。最後でなければ、パケットをパケット記憶手段１ｄに保存する。最後が判定したときは、今回の最後のパケットの直前に最後のパケットと判定した次のパケットから、今回の最後のパケットまでを組み立て、仮メッセージとして仮メッセージ記憶手段１ｅに格納する。仮メッセージに組み込んだパケットは、パケット記憶手段１ｄから削除する。
【００２２】
こうして、仮メッセージ記憶手段１ｅに順次仮メッセージが格納される。一連のサービス処理が行われる所定の期間の仮メッセージが取得できたら、メッセージ分割手段１ｃは、所定の期間の仮メッセージをリクエストメッセージとレスポンスメッセージに分類し、それぞれの出現数を算出して比較する。リクエストメッセージとレスポンスメッセージとが対応付けられるという想定環境を満たしていれば、出現数は一致する。そこで、所定の期間におけるリクエストメッセージとレスポンスメッセージの出現数が一致していれば、仮メッセージを本メッセージとして本メッセージ記憶手段１ｆに格納する。一致していないときは、少ない方に分類された仮メッセージのうち、最大のサイズの仮メッセージを分割する。分割後、再度リクエストメッセージとレスポンスメッセージの出現数を比較し、一致するまで分割と出現数の比較を繰り返す。そして、一致した時点の仮メッセージを本メッセージとして本メッセージ記憶手段１ｆに格納する。なお、パケットの通信ログを入力した場合も、通信ログに記載された通信時刻と、パケットデータとを用いて同様の処理を行うことができる。
【００２３】
以上の処理手順が実行されることにより、所定の期間に受け渡されるリクエストメッセージとレスポンスメッセージの数が同数になるように傍受したパケットが区切られ、メッセージが再構築される。このため、再構築したメッセージが適切なメッセージである可能性を向上させることができる。また、メッセージ判別装置１では、メッセージの内容を解析することなく、メッセージの判別を行うことができる。パケットの解析に必要なレベルのプロトコルを備えていれば十分であり、メッセージを解析するために上位レベルのアプリケーションプロトコルを搭載する必要がない。したがって、パケット通信レベルのプロトコルが同じであれば、アプリケーションレベルのプロトコルが異なる複数のシステム分析において、パケット群を適切に分割してメッセージを再構築することが可能となり、メッセージの判別可能性を向上させることができる。
【００２４】
次に、第２の実施の形態として、インターネットを介してサービスを提供するＷｅｂ３階層システムにおいて、クライアントとサーバ、及びサーバ間で受け渡されるパケットからメッセージを判別する場合について説明する。
【００２５】
図２は、第２の実施の形態のシステム構成を示す図である。図２の例では、スイッチ２４を介して、外部のインターネット３０、Ｗｅｂサーバ２１、アプリケーションサーバ（以下、ＡＰサーバとする）２２、ＤＢサーバ２３及びキャプチャサーバ１０が接続されている。インターネット３０には、サービスを要求するクライアント４１，４２，４３が接続される。
【００２６】
Ｗｅｂサーバ２１、ＡＰサーバ２２及びＤＢサーバ２３は、連携してサービスを提供するサービス提供システム２０に属する。例えば、サービス提供システム２０は、インターネット３０経由でクライアント４１，４２，４３からＨＴＴＰ（HyperText Transfer Protocol）によるアクセス要求を取得すると、Ｗｅｂサーバ２１が受け付け処理を行う。Ｗｅｂサーバ２１からＡＰサーバ２２にアプリケーション処理が要求され、ＡＰサーバ２２が処理を行う。ＡＰサーバ２２のアプリケーション処理では、データを管理するＤＢサーバ２３と連携して処理を行う。処理終了後、Ｗｅｂサーバ２１からクライアント４１，４２，４３に応答を返す。このように、Ｗｅｂサーバ２１、ＡＰサーバ２２及びＤＢサーバ２３は、メッセージを交換しながら連携して処理を行う。このサーバ間で受け渡されるメッセージを分析することにより、サービス提供システム２０の挙動を可視化することができる。
【００２７】
キャプチャサーバ１０は、スイッチ２４を介してパケットを傍受し、傍受したパケットからメッセージを再構築する。そして、再構築したメッセージからトランザクションを組み立て、トランザクションを解析してシステムの挙動を分析する。
【００２８】
スイッチ２４は、自身を通過する通信データをミラーリングする機能を有している。ミラーリングとは、あるポートに出力されるデータと同じデータを、他のポートからも出力する機能である。図２の例では、Ｗｅｂサーバ２１が接続されたポート、ＡＰサーバが接続されたポート及びＤＢサーバ２３が接続されたポートのミラーリング先として、キャプチャサーバ１０が接続されたポートが指定されている。これにより、Ｗｅｂサーバ２１、ＡＰサーバ２２及びＤＢサーバ２３に受け渡されるパケットは、宛先に入力されるとともに、キャプチャサーバ１０にも入力される。
【００２９】
また、サービス提供システム２０は、次の通信環境を満たすとする。
（１）サーバ間の通信には、ＴＣＰ（Transmission Control Protocol）が使用されている。ＴＣＰの規格では、長いメッセージを送受信する際には、ある一定の長さ（ＭＳＳ： Maximum Segment Size）に区切って送信することが定められている。
【００３０】
（２）対象となるサーバから送信される１つのリクエストメッセージに対しては、１つのレスポンスが組として通信が行われる。すなわち、リクエストメッセージを１つ受け取ったサーバは、必ずレスポンスメッセージを１つ返す。ただし、リクエストメッセージと、それに対応するレスポンスメッセージが交互に発行される必要はない。
【００３１】
（３）サーバ上で通信しているアプリケーションで送受信されるメッセージは、リクエスト・レスポンス共に分割して送受信されない。
図３は、パケットに含まれる情報を示した図である。
【００３２】
パケット５は、イーサネット（登録商標）ヘッダ（Ｅｔｈｅｒヘッダ）５１、ＩＰヘッダ５２、ＴＣＰヘッダ５３及びＴＣＰデータ５４を有する。なお、ＴＣＰ層から見て、上位層のヘッダ等はすべてＴＣＰデータとして認識される。さらに、ＩＰヘッダ５２及びＴＣＰヘッダ５３に関し、メッセージ判別処理で参照する部分について説明する。
【００３３】
ＩＰヘッダ５２には、送信元ＩＰアドレス５２ａと、宛先ＩＰアドレス５２ｂとが含まれる。送信元ＩＰアドレス５２ａによって、パケット５を送信したサーバまたはクライアントを特定することができる。同様に、宛先ＩＰアドレス５２ｂによって、パケット５を受信するサーバまたはクライアントを特定することができる。ＴＣＰヘッダ５３には、送信元ポート５３ａ、宛先ポート５３ｂ及びｆｌａｇ５３ｃが含まれる。送信元ポート５３ａと、宛先ポート５３ｂとによって、どのサービスに関するものかがわかる。例えば、パケット５のＩＰヘッダ５２の宛先ＩＰアドレス５２ｂがサーバのＩＰアドレスであれば、ＴＣＰヘッダ５３の宛先ポート５３ｂを読み取る。同様に、送信元ＩＰアドレス５２ａがサーバのＩＰアドレスであれば、送信元ポート５３ａを読み取る。そして、そのポート番号を識別子とすることで、どのサービスに関するセッションであるかを調べることができる。例えば、サーバのポート番号が８０番である場合、上位のプロトコルがＨＴＴＰであると判定することができる。また、ｆｌａｇ５３ｃには、送信側で送るデータが終了したことを示す“ＦＩＮ（ｆｌａｇ）”が含まれている。これにより、送信データの通信終了を認識できる。
【００３４】
図４は、キャプチャサーバのハードウェア構成例を示すブロック図である。キャプチャサーバ１０は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ（Random Access Memory）１０２、ハードディスクドライブ（ＨＤＤ：Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、及び通信インタフェース１０６が接続されている。
【００３５】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションのプログラムが格納される。グラフィック処理装置１０４には、モニタ１０８が接続されており、ＣＰＵ１０１からの命令に従って画像をモニタ１０８の画面に表示させる。入力インタフェース１０５には、キーボード１０９ａやマウス１０９ｂが接続されており、キーボード１０９ａやマウス１０９ｂから送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。通信インタフェース１０６は、スイッチ２４に接続されており、スイッチ２４を介して他装置との間でデータの送受信を行うとともに、他装置間で受け渡されるデータを傍受する。
【００３６】
このようなハードウェア構成によって、情報装置の処理機能を実現することができる。なお、図４には、キャプチャサーバ１０のハードウェア構成を示したが、Ｗｅｂサーバ２１、ＡＰサーバ２２、ＤＢサーバ２３及びクライアント４１，４２，４２のハードウェア構成も同様である。
【００３７】
図５は、キャプチャサーバの機能ブロックを示す図である。キャプチャサーバ１０は、パケット振分部１１０、メッセージ組立部１２０、メッセージ分割部１３０及びトランザクション解析部１４０の各処理部と、パケットバッファ１５１、仮メッセージバッファ１５２及び本メッセージバッファ１５３の記憶部と、を有する。各処理部は、コンピュータがメッセージ判別プログラムを実行することにより、その処理機能を実現する。
【００３８】
パケット振分部１１０は、スイッチ２４から入力するパケット５ａ，５ｂ，５ｃを解析し、対象のパケットであるかどうかを判定する。ここでは、上位層のプロトコルがＨＴＴＰ以外のものを対象パケットとしてメッセージ組立部１２０へ送る。ＨＴＴＰパケットであれば、トランザクション解析部１４０へパケットを送る。ＨＴＴＰについては、アプリケーションレベルでメッセージの解析方法が一般的に知られており、このような手法を用いてトランザクション解析部１４０で解析する。ＨＴＴＰを除くパケットを対象パケットとし、メッセージ組立部１２０へ送る。
【００３９】
メッセージ組立部１２０は、パケット区切り部１２１と、仮メッセージ生成部１２２とを有する。パケット区切り部１２１は、到着順に入力してパケット振分部１１０で対象と判定されたパケット５ａ，５ｂ，５ｃ，・・・を入力し、メッセージの区切りを決定する。パケット区切り部１２１では、直前のパケットが到着してから一定時間以上経過しているとき、直前のパケットをメッセージの最後のパケットと判定し、直前のパケットまでをメッセージの区切りとする。また、パケットの送信先と宛先が直前のパケットと同じでないときは、直前のパケットをメッセージの最後のパケットと判定し、同様に直前のパケットまでをメッセージの区切りとする。さらに、入力したパケットのサイズと、ＭＳＳとを比較し、入力したパケットのサイズがＭＳＳよりも小さいときは、このパケットをメッセージの最後と判定し、取得したパケットまでをメッセージの区切りとする。メッセージの区切りが検出されないときは、パケットをパケットバッファ１５１に一時的に記憶し、メッセージの区切りが検出されるまで保持する。なお、パケットは、送受信しているサーバのＩＰアドレスとポート番号とによってセッションが同じ組み合わせで分類する。仮メッセージを組み立てている最中は、分類されているグループごとにパケットバッファ１５１の別領域に保管する。仮メッセージ生成部１２２は、パケット区切り部１２１が検出したメッセージの区切りに基づき、仮メッセージを組み立てる。パケットバッファ１５１に格納されている直前のメッセージ区切りの次のパケットから、今回検出したメッセージの区切りまでのパケットを仮メッセージとする。仮メッセージを仮メッセージバッファ１５２へ格納し、パケットバッファ１５１のデータを削除する。
【００４０】
メッセージ分割部１３０は、メッセージ数計数部１３１と、メッセージ分割処理部１３２とを有する。メッセージ数計数部１３１は、一連のメッセージが受け渡される期間の仮メッセージを仮メッセージバッファ１５２から読み出す。そして、リクエストメッセージとレスポンスメッセージに分類し、リクエストメッセージとレスポンスメッセージの所定の期間における。出現数を算出する。例えば、最初のメッセージが送信されてから一定時間が経過するか、“ＦＩＮ（ｆｌａｇ）”を検出したとき、一連のメッセージの終了と判断する。そして、この間に生成された仮メッセージについて、リクエストメッセージの数と、レスポンスメッセージの数を集計する。メッセージ分割処理部１３２は、メッセージ数計数部１３１が算出したリクエストメッセージとレスポンスメッセージの出現数を比較し、一致していないときは、少ない方のメッセージのうち、最大のサイズのものを分割する。そして、分割後の仮メッセージを対象として、メッセージ数計数部１３１における出現数算出からの処理を繰り返す。この繰り返しにより各メッセージの出現数が等しくなるようにする。一致したときは、その状態の仮メッセージを本メッセージとして本メッセージバッファ１５３に格納する。
【００４１】
また、分割対象として、複数のメッセージが１つのメッセージとして誤判定された仮メッセージである可能性が高いものを選択するため、分割対象範囲を限定する処理を行うとしてもよい。図６は、分割対象範囲の選択処理を説明する図である。図は、リクエストメッセージの数がレスポンスメッセージの数より多いケースを示している。
【００４２】
想定環境では、仮メッセージに誤判定がなければ、所定の期間におけるリクエストメッセージの数と、レスポンスメッセージの数は同じになる。リクエストメッセージの数がレスポンスメッセージの数よりも多いというケースには、３つのパターンが考えられる。（ａ）パターン１は、リクエスト１、リクエスト２のメッセージが送信された後に、送信されたレスポンス１とレスポンス２を１つのメッセージとして検出した場合である。（ｂ）パターン２は、リクエスト１とリクエスト２との間に送信されたレスポンス１とレスポンス２を１つのメッセージとして検出した場合である。（ｃ）パターン３は、レスポンス１とレスポンス２を１つのメッセージとして検出した後に、リクエスト１とリクエスト２とが送信される場合である。しかし、想定環境では、（ａ）以外のパターンが発生することはない。（ａ）では、リクエストメッセージとレスポンスメッセージの数を通信時刻の早い順に数えていくと、複数のレスポンスメッセージを１つのメッセージと誤認した以降は、必ずリクエストメッセージの数が多い状態になる。言い換えれば、リクエストメッセージとレスポンスメッセージが交互に発生することは規定していないため、途中で一致しない区間が生じることがある。しかし所定の期間終了前に、結果としてリクエストメッセージの数とレスポンスメッセージの数とが一致すれば、その時点までは複数のレスポンスメッセージを１つのメッセージと誤認していないということになる。そこで、所定の期間におけるリクエストメッセージとレスポンスメッセージの出現数が異なる場合、リクエストメッセージとレスポンスメッセージの数を通信時刻の早い順に数えて比較し、同数となった箇所までは誤認していないとして扱う。そして、それ以降に出現するレスポンスメッセージを分割対象とする。このように、リクエストメッセージの数が多い場合には、リクエストメッセージを基準として対応するレスポンスメッセージの有無で分割対象範囲を検索する。
【００４３】
一方、レスポンスメッセージの数が多い場合には、上記とは逆に、レスポンスメッセージを基準として対応するリクエストメッセージの有無で分割対象範囲を検索する。このため、リクエストメッセージの数が多い場合とは逆に、通信時刻の遅い順に、レスポンスメッセージの数と、リクエストメッセージの数を比較していく。
【００４４】
トランザクション解析部１４０は、本メッセージバッファ１５３に格納される本メッセージと、パケット振分部１１０が振り分けたＨＴＴＰパケットから再構築したメッセージと、に基づいてトランザクションを組み立てる。
【００４５】
パケットバッファ１５１は、メッセージ組立部１２０がパケットを一時的に保存するためのパケット記憶手段である。仮メッセージバッファ１５２は、メッセージ組立部１２０が組み立てた仮メッセージを一時的に記憶する仮メッセージ記憶手段として機能する。本メッセージバッファ１５３は、メッセージ分割部１３０が、生成した本メッセージを記憶する本メッセージ記憶手段として機能する。
【００４６】
図７は、パケットバッファ、仮メッセージバッファ及び本メッセージバッファが記憶するデータの一例を示した図である。
パケットバッファ１５１には、「ＩＤ」、「通信時刻」、「通信方向」、「パケットサイズ」、「パケット」の各項目を有するパケット情報１５１０が格納される。「ＩＤ」は、パケットを一意に識別する識別番号である。「通信時刻」は、パケットが到着した時刻である。「通信方向」は、パケットがリクエストパケット（Ｒｅｑｕｅｓｔ）であるか、レスポンスパケット（Ｒｅｓｐｏｎｓｅ）であるかを示す。「パケットサイズ」は、取得したパケットのパケットサイズである。「パケット」は、取得したパケットデータである。
【００４７】
仮メッセージバッファ１５２には、「ＩＤ」、「通信時刻」、「通信方向」、「仮メッセージサイズ」、「仮メッセージ」の各項目を有する仮メッセージ情報１５２０が格納される。「ＩＤ」は、仮メッセージを一意に識別する識別番号である。「通信時刻」は、仮メッセージが到着した時刻である。例えば、仮メッセージの先頭のパケットの通信時刻になる。「通信方向」は、仮メッセージがリクエストメッセージ（Ｒｅｑｕｅｓｔ）であるか、レスポンスメッセージ（Ｒｅｓｐｏｎｓｅ）であるかを示す。「仮メッセージサイズ」は、組み立てた仮メッセージのサイズである。「仮メッセージ」は、組み立てた仮メッセージデータである。
【００４８】
本メッセージバッファ１５３には、「ＩＤ」、「通信時刻」、「通信方向」、「メッセージサイズ」、「メッセージ」の各項目を有する本メッセージ情報１５３０が格納される。「ＩＤ」は、本メッセージを一意に識別する識別番号である。「通信時刻」は、本メッセージが到着した時刻である。例えば、本メッセージの先頭のパケットの通信時刻になる。「通信方向」は、本メッセージがリクエストメッセージ（Ｒｅｑｕｅｓｔ）であるか、レスポンスメッセージ（Ｒｅｓｐｏｎｓｅ）であるかを示す。「メッセージサイズ」は、メッセージ分割部１３０が確定した本メッセージのサイズである。「メッセージ」は、確定した本メッセージデータである。
【００４９】
このような構成のキャプチャサーバ１０の動作及びメッセージ判別方法について具体例を用いて説明する。
図８は、キャプチャサーバへ入力するパケットの一例を示した図である。パケット５０１，５０２，・・・，５１４は、あるサービス処理が行われたときにキャプチャサーバ１０へ入力する一連のパケットである。なお、このパケット群は、ＨＴＴＰによるパケットではないとする。パケットは、キャプチャサーバ１０に右側から左側に向かって順次入力する。すなわち、キャプチャサーバ１０には、最右側のパケット５０１が最初に入力し、最左側のパケット５１４が最後に入力する。パケットの「ｒｑ」は、パケットがリクエストパケットであることを示し、「ｒｓ」はレスポンスパケットであることを示している。例えば、Ｗｅｂサービスにおいて、装置間におけるリクエストとレスポンスの方向は決まっており、パケットの送信元または宛先のＩＰアドレスに基づいてリクエストパケットであるかレスポンスパケットであるか識別することができる。図８の例では、パケット５０１，５０２は、リクエストパケットである。また、パケットのうち、ＭＳＳサイズに満たないものは、鎖線でしめしたＭＳＳサイズとともに示している。例えば、パケット５０３，５０４はレスポンスパケットであり、パケット５０４のサイズはＭＳＳより小さい。矢印６０１は、届いたパケットを示している。図８では、キャプチャサーバ１０には、パケット５０１が届いている。また、メッセージ１（７１０）、メッセージ２（７２０）、メッセージ３（７３０）、メッセージ４（７４０）、メッセージ５（７５０）、メッセージ６（７６０）、・・・は、それぞれ仮メッセージを示している。
【００５０】
図９は、パケットの通信方向が反転した場合の処理を示している。キャプチャサーバ１０には、矢印６０２で示したレスポンスパケット５０３が届いている。パケット区切り部１２１は、レスポンスパケット５０３の通信方向がレスポンスであり、直前のリクエストパケット５０２のリクエストから通信方向が変わったことを検出する。そこで、直前のリクエストパケット５０２までをメッセージの区切りとする。仮メッセージ生成部１２２は、直前のリクエストパケット５０２までのリクエストパケット５０１，５０２を１つのメッセージとし、メッセージ１（７１０）として登録する。仮メッセージバッファ１５２には、ＩＤ＝１に対応付けて、通信時刻、通信方向（＝リクエスト）、仮メッセージサイズ、組み立てたメッセージを登録する。
【００５１】
図１０は、パケットの通信方向が反転し、かつ直前のレスポンスパケットのサイズがＭＳＳに満たない場合の処理を示している。キャプチャサーバ１０には、矢印６０３で示したリクエストパケット５０５が届いている。パケット区切り部１２１は、直前のレスポンスパケット５０４のサイズがＭＳＳより小さいことを検出している。さらに、リクエストパケット５０５の通信方向がリクエストであり、直前のレスポンスパケット５０４のレスポンスから通信方向が変わったことを検出する。そこで、直前のレスポンスパケット５０４までをメッセージの区切りとする。仮メッセージ生成部１２２は、直前のパケット５０４までのレスポンスパケット５０３，５０４を１つのメッセージとし、メッセージ２（７２０）として登録する。仮メッセージバッファ１５２には、ＩＤ＝２に対応付けて、通信時刻、通信方向（＝レスポンス）、仮メッセージサイズ、組み立てたメッセージを登録する。
【００５２】
図１１は、直前のリクエストパケットのサイズがＭＳＳに満たない場合の処理を示している。キャプチャサーバ１０には、矢印６０４で示したリクエストパケット５０８が届いている。パケット区切り部１２１は、直前のリクエストパケット５０７のサイズがＭＳＳより小さいことを検出している。通信方向は同じであるが、直前のリクエストパケット５０７のサイズはＭＳＳより小さいので、直前のリクエストパケット５０７までをメッセージの区切りとする。仮メッセージ生成部１２２は、直前のリクエストパケット５０７までのパケット５０５，５０６，５０７を１つのメッセージとし、メッセージ３（７３０）として登録する。仮メッセージバッファ１５２には、ＩＤ＝３に対応付けて、通信時刻、通信方向（＝リクエスト）、仮メッセージサイズ、組み立てたメッセージを登録する。
【００５３】
図１２は、パケットの通信方向が反転し、かつ直前のリクエストパケットのサイズがＭＳＳに満たない場合の処理を示している。キャプチャサーバ１０には、矢印６０５で示したレスポンスパケット５１１が届いている。パケット区切り部１２１は、直前のリクエストパケット５１０のサイズがＭＳＳより小さいことを検出している。さらに、レスポンスパケット５１１の通信方向がレスポンスであり、直前のリクエストパケット５１０のリクエストから通信方向が変わったことを検出する。そこで、直前のリクエストパケット５１０までをメッセージの区切りとする。仮メッセージ生成部１２２は、直前のリクエストパケット５１０までのリクエストパケット５０８，５０９，５１０を１つのメッセージとし、メッセージ４（７４０）として登録する。仮メッセージバッファ１５２には、ＩＤ＝４に対応付けて、通信時刻、通信方向（＝リクエスト）、仮メッセージサイズ、組み立てたメッセージを登録する。
【００５４】
図１３は、直前のレスポンスパケットのサイズがＭＳＳに満たない場合の処理を示している。キャプチャサーバ１０には、矢印６０６で示したように、最初のパケットの到着から一定時間が経過したというタイムアウトが発生する。パケット区切り部１２１は、直前のレスポンスパケット５１４のサイズがＭＳＳより小さいことを検出する。そこで、直前のレスポンスパケット５１４までをメッセージの区切りとする。仮メッセージ生成部１２２は、直前のレスポンスパケット５１４までのレスポンスパケット５１１，５１２，５１３，５１４を１つのメッセージとし、メッセージ５（７５０）として登録する。仮メッセージバッファ１５２には、ＩＤ＝５に対応付けて、通信時刻、通信方向（＝レスポンス）、仮メッセージサイズ、組み立てたメッセージを登録する。なお、最後のパケット５１４に、“ＦＩＮ（ｆｌａｇ）”を検出した場合も同様の処理が行われる。
【００５５】
こうして、キャプチャサーバ１０は、メッセージ組立部１２０によって、パケット５０１，・・・、５１４から、仮メッセージとして、メッセージ１（７１０），・・・メッセージ５（７５０）を生成する。
【００５６】
続いて、メッセージ分割部１３０が分割処理を行う。
図１４は、分割対象範囲の選択処理を示した図である。メッセージ数計数部１３１は、メッセージ組立部１２０が生成した仮メッセージのリクエストメッセージの数と、レスポンスメッセージの数を算出し、比較する。図１４では、メッセージ１（７１０）、メッセージ３（７３０）及びメッセージ４（７４０）がリクエストメッセージであり、総数は「３」になる。また、メッセージ２（７２０）及びメッセージ５（７５０）がレスポンスメッセージであり、総数は「２」である。したがって、リクエストメッセージの数が、レスポンスメッセージの数よりも多く、同じ数にするため、レスポンスメッセージの分割を行う。
【００５７】
メッセージ分割処理部１３２は、リクエストメッセージの数がレスポンスメッセージの数よりも多いので、メッセージの通信時刻の早い順に、リクエストメッセージを基準としてレスポンスメッセージを対応付けていく。図１４では、リクエストメッセージを「＋１」、レスポンスメッセージを「−１」として、出現順に合計値を算出する。最初のメッセージ１（７１０）は、リクエストメッセージであるので、合計値は「＋１」になる。次のメッセージ２（７２０）はレスポンスメッセージであるので、「−１」され、合計値は「０」になる。次のメッセージ３（７３０）はリクエストメッセージであるので、「＋１」され、合計値は「＋１」になる。次のメッセージ４（７４０）もリクエストメッセージであるので、「＋１」され、合計値は「＋２」になる。次のメッセージ５（７５０）はレスポンスメッセージであるので、「−１」され、合計値は「＋１」になる。ここで、合計値「０」は、その時点までのリクエストメッセージの数とレスポンスメッセージの数とは同じであることを示す。したがって、最後に合計値が「０」になった時点までの、メッセージ１（７１０）と、メッセージ２（７２０）とは、正しいと判定する。そして、最後に合計値が「０」となった以降を分割対象範囲として選択する。
【００５８】
図１５は、分割対象範囲の仮メッセージの分割処理を示した図である。リクエストメッセージの数が、レスポンスメッセージの数よりも多いので、複数のレスポンスメッセージを１つと誤認識した可能性が高い。そこで、図１４までの処理で確定した分割対象範囲のうち、最大サイズのレスポンスメッセージを分割対象とする。図１５の例では、レスポンスメッセージは、メッセージ５（７５０）のみであるので、メッセージ５（７５０）のレスポンスパケット５１１，５１２，５１３，５１４を分割する。ここでは、２分割し、前半のレスポンスパケット５１１，５１２をメッセージ５（７５０）とする。そして、後半のレスポンスパケット５１３，５１４をメッセージ６（７６０）とする。
【００５９】
続いて、分割後のリクエストメッセージの数と、レスポンスメッセージの数とを算出して比較する。図１５の例では、ともに「３」となるので、分割処理を終了する。一致しない場合は、同様の手順で分割対象範囲を選択し、分割対象範囲内のレスポンスメッセージを分割する。
【００６０】
こうして生成されたメッセージ１（７１０）、メッセージ２（７２０）、メッセージ３（７３０）、メッセージ４（７４０）、メッセージ５（７５０）及びメッセージ６（７６０）を本メッセージバッファ１５３に格納し、処理を終了する。
【００６１】
なお、レスポンスメッセージの数がリクエストメッセージの数よりも多い場合には、通信時刻の遅い順（図１４の例であれば、メッセージ５（７５０）からメッセージ１（７１０へ向かう順）に、合計値を算出して分割対象範囲を決定する。合計値が最後に「０」となった時点より通信時刻が前の仮メッセージを分割対象範囲とし、分割対象範囲内で最大サイズのリクエストメッセージを分割する。
【００６２】
以上のように、キャプチャサーバ１０によれば、順次入力するパケットに関する到着間隔、通信方向の反転、パケットサイズなどの情報によってメッセージを区切って仮メッセージを生成する。そして、仮メッセージのリクエストメッセージ数と、レスポンスメッセージの数とが同じになるように、少ない方のメッセージを分割する。このため、途中でパケットの欠損が生じても、メッセージを適切に区切ることができる。例えば、メッセージの途中でパケットが欠損した場合であっても、通信方向の反転やパケットサイズによって区切りを検出してメッセージに区切ることができる。最後のパケットが欠損し、かつ同方向の通信が続いた場合であっても、リクエストメッセージ数とレスポンスメッセージ数との差に基づく分割処理が行われる。また、パケットの解析はＴＣＰプロトコルレベルで行うため、上位のアプリケーションはすべてデータとして取り扱われる。このため、想定環境が満たされれば、上位のアプリケーションによらず、メッセージを適切に生成することができる。このように、メッセージの判別可能性を向上させることができる。
【００６３】
次に、メッセージ判別処理の処理手順を、フローチャートを用いて説明する。メッセージ判別処理は、任意のサービス処理の開始から終了までの所定の期間に受け渡される一連のメッセージごとに、メッセージ組立処理とメッセージ分離処理とを行う。
【００６４】
図１６は、メッセージ判別処理におけるメッセージ組立処理の手順を示したフローチャートである。
［ステップＳ０１］  メッセージ組立部１２０は、パケットの到着または、直前のパケットの到着から一定時間経過したかどうかの通知を待つ。スイッチ２４のミラーリング処理によって、キャプチャサーバ１０に傍受したパケットが入力し、このパケットが対象パケットであったとき、パケット振分部１１０からメッセージ組立部１２０にパケットの到着が通知される。また、パケットの到着とともに計時を開始するタイマが一定時間の経過を検出したときは、一定時間の経過がメッセージ組立部１２０に通知される。
【００６５】
［ステップＳ０２］  メッセージ組立部１２０は、ステップＳ０１で受けた通知が、一定時間経過の通知であるかどうか、すなわち、直前のパケットが到着してからの無通信時間が規定値より大きいかどうかを判定する。一定時間経過の通知でなく、パケット到着の通知であるときは、処理をステップＳ０３に進める。一定時間経過の通知であれば、直前のパケットでメッセージが終了したと判定し、処理をステップＳ０６に進める。
【００６６】
［ステップＳ０３］  メッセージ組立部１２０は、パケット到着の通知を受けたときは、到着したパケットの通信方向と、パケットバッファ１５１に格納されている直前のパケットの通信方向と、が同じであるかどうかを判定する。同じであれば、処理をステップＳ０４に進める。同じでなければ、直前のパケットでメッセージが終了したと判定し、処理をステップＳ０６に進める。なお、到着したパケットが仮メッセージ生成後の最初のパケットでパケットバッファ１５１に直前のパケットがないときは、処理をステップＳ０４に進める。また、パケットが到着したので、無通信時間を検出するためのタイマを初期化しておく。
【００６７】
［ステップＳ０４］  メッセージ組立部１２０は、到着したパケットの通信方向と直前のパケットの通信方向とが同じであったとき、または最初のパケットのときは、到着したパケットのサイズとＭＳＳとを比較する。到着したパケットのサイズがＭＳＳより小さくないときは、処理をステップＳ０５に進める。到着したパケットのサイズがＭＳＳより小さいときは、処理をステップＳ０６に進める。到着したパケットが仮メッセージ生成後の最初のパケットで、パケットサイズがＭＳＳ以下のときも、このパケットから１つの仮メッセージを生成することができる。
【００６８】
［ステップＳ０５］  メッセージ組立部１２０は、到着したパケットの通信方向と直前のパケットの通信方向とが同じであり、かつ、到着したパケットのサイズがＭＳＳより小さくないときは、後続するパケットがあると判定する。そして、到着したパケットをパケットバッファ１５１に格納する。その後、ステップＳ０１に戻って、次のパケットの到着または、一定時間の経過を待つ。
【００６９】
［ステップＳ０６］  メッセージ組立部１２０は、無通信時間が規定値より大きいとき、パケットの通信方向が反転したとき、または到着したパケットのパケットサイズがＭＳＳより小さいとき、パケットバッファ１５１に格納されるパケットから仮メッセージを生成する。無通信時間が規定値より大きいときは、パケットバッファ１５１に格納されるパケットから仮メッセージを組み立て、パケットバッファ１５１のパケットを削除する。パケットの通信方向が反転したときは、パケットバッファ１５１に格納される直前のパケットまでのパケットから仮メッセージを組み立て、パケットバッファ１５１のパケットを削除する。そして、到着したパケットをパケットバッファ１５１に格納する。到着したパケットのパケットサイズがＭＳＳより小さいときは、パケットバッファ１５１に格納されるパケットと到着パケットから仮メッセージを組み立て、パケットバッファ１５１のパケットを削除する。また、仮メッセージが最初のリクエストメッセージであれば、最初のリクエストからの経過時間を計時するタイマを開始させる。
【００７０】
［ステップＳ０７］  メッセージ組立部１２０は、ステップＳ０６で生成した仮メッセージがレスポンスメッセージであるかどうかを判定する。レスポンスメッセージであれば、処理をステップＳ０８に進める。レスポンスメッセージでなければ、処理をステップＳ１１に進め、次のメッセージのパケットを待つ。
【００７１】
［ステップＳ０８］  メッセージ組立部１２０は、仮メッセージがレスポンスメッセージであったときは、このメッセージに通信終了“ＦＩＮ（ｆｌａｇ）”が設定されているかどうかを判定する。通信終了が設定されて入れば、この仮メッセージが一連の処理の最後のメッセージであると判定し、処理をステップＳ０９に進める。最後のメッセージでなければ、処理をステップＳ１０に進める。
【００７２】
［ステップＳ０９］  メッセージ組立部１２０は、仮メッセージが最後のメッセージであれば、この仮メッセージを仮メッセージバッファに格納し、図１７の結合子Ｂに続くステップへ処理を進める。
【００７３】
［ステップＳ１０］  メッセージ組立部１２０は、仮メッセージが最後のメッセージでないときは、最初のリクエストメッセージが到着してからの経過時間が規定値よりも大きいかどうかを判定する。規定値より大きいときは、一連のメッセージは終了したと判定し、処理をステップＳ０９に進める。規定値より小さいときは、一連のメッセージは終了していないと判定し、処理をステップＳ１１に進める。
【００７４】
［ステップＳ１１］  メッセージ組立部１２０は、仮メッセージが最後のメッセージでないときは、この仮メッセージを仮メッセージバッファに格納し、ステップＳ０１に戻って次のパケットの到着または、一定時間の経過を待つ。
【００７５】
図１７は、メッセージ判別処理におけるメッセージ分離処理の手順を示したフローチャートである。結合子Ａ及び結合子Ｂは、図１６の同じ名称の結合子と同じものである。
メッセージ分割部１３０は、図１６の結合子Ｂまでの処理を引き継ぎ、メッセージ分割処理を開始する。結合子Ｂまでの処理で、仮メッセージバッファ１５２には、メッセージ組立部１２０が生成した一連の仮メッセージが格納されている。
【００７６】
［ステップＳ１２］  メッセージ分割部１３０は、仮メッセージバッファ１５２の仮メッセージ情報１５２０に基づき、作成した仮メッセージに対応する通信方向を取得する。
［ステップＳ１３］  メッセージ分割部１３０は、取得した仮メッセージに対応する通信方向を方向ごとカウントする。そして、所定の期間におけるリクエストメッセージの出現数（リクエスト数）と、レスポンスメッセージの出現数（レスポンス数）とを算出する。
【００７７】
［ステップＳ１４］  メッセージ分割部１３０は、ステップＳ１３で算出したリクエスト数とレスポンス数とが一致しているかどうかを判定する。一致しているときは、仮メッセージは適切であると判定し、処理をステップＳ１６に進める。一致していないときは、処理をステップＳ１５に進める。
【００７８】
［ステップＳ１５］  メッセージ分割部１３０は、リクエスト数とレスポンス数とが一致していないときは、リクエスト数とレスポンス数とを同じにする分割処理を行う。分割処理の詳細は後述する。
【００７９】
［ステップＳ１６］  メッセージ分割部１３０は、リクエスト数とレスポンス数とが一致している仮メッセージを本メッセージとして、本メッセージバッファ１５３に格納する。仮メッセージバッファ１５２をクリアし、処理を図１６のステップＳ０１に続く結合子Ａに進める。そして、次の一連のメッセージのパケットの到着を待つ。
【００８０】
以上の処理手順が実行されることにより、到着したパケットが順次解析され、適切なメッセージ単位に区切られ、リクエスト数とレスポンス数が同じになるように再編成された後、本メッセージとしてトランザクション解析部１４０に送られる。
【００８１】
次に、分割処理について説明する。なお、以下の説明では、「前」とは、通信時刻の早い方向を指し、「後」とは通信時刻の遅い方向を指す。また、仮メッセージバッファ１５２では、通信時刻の最も早い仮メッセージに最も若い番号のアドレスの領域が割り当てられ、通信時刻が遅くなるほど後の領域が割り当てられているとする。
【００８２】
図１８は、メッセージ分割処理における分割対象選択処理の手順を示したフローチャートである。
［ステップＳ１５０１］  メッセージ分割部１３０は、何番目のメッセージを処理するかを示すｎと、リクエスト数とレスポンス数とを順次比較していったとき、最後に一致したメッセージ番号を示すｉｎｄｅｘと、を０に初期化する。
【００８３】
［ステップＳ１５０２］  メッセージ分割部１３０は、レスポンス数とリクエスト数とを比較し、レスポンス数がリクエスト数よりも多いかどうかを判定する。レスポンス数がリクエスト数よりも多いときは、処理をステップＳ１５０３に進める。リクエスト数がレスポンス数よりも多いときは、処理をステップＳ１５０４に進める。
【００８４】
［ステップＳ１５０３］  メッセージ分割部１３０は、レスポンス数がリクエスト数よりも多いときは、レスポンスメッセージを基準として、対応するリクエストメッセージを探す。仮メッセージ情報１５２０の最後（通信時刻が最も遅い仮メッセージ）から検索を開始する。最後からｎ番目の仮メッセージ情報を、仮メッセージバッファ１５２より取得し、処理をステップＳ１５０５に進める。
【００８５】
［ステップＳ１５０４］  メッセージ分割部１３０は、リクエスト数がレスポンス数よりも多いときは、リクエストメッセージを基準として、対応するレスポンスメッセージを探す。仮メッセージ情報１５２０の最初（通信時刻が最も早い仮メッセージ）から検索を開始する。最初からｎ番目の仮メッセージ情報を、仮メッセージバッファ１５２より取得する。
【００８６】
［ステップＳ１５０５］  メッセージ分割部１３０は、仮メッセージバッファ１５２より読み出した仮メッセージ情報の通信方向がリクエストメッセージであるかどうかを判定する。リクエストメッセージであれば、処理をステップＳ１５０６に進める。リクエストメッセージでないときは、処理をステップＳ１５０７に進める。
【００８７】
［ステップＳ１５０６］  メッセージ分割部１３０は、対象の仮メッセージがリクエストメッセージであれば、合計値（ｔｏｔａｌ）に「＋１」を加算し、「ｔｏｔａｌ＝ｔｏｔａｌ＋１」とし、処理をステップＳ１５０８に進める。
【００８８】
［ステップＳ１５０７］  メッセージ分割部１３０は、対象の仮メッセージがリクエストメッセージでなく、レスポンスメッセージであるときは、合計値（ｔｏｔａｌ）に「―１」を加算し、「ｔｏｔａｌ＝ｔｏｔａｌ―１」とする。
【００８９】
［ステップＳ１５０８］  メッセージ分割部１３０は、ステップＳ１５０６またはステップＳ１５０７で算出された合計値「ｔｏｔａｌ」が「０」であるかどうかを判定する。「０」であれば、処理をステップＳ１５０９に進める。「０」でなければ、処理をステップＳ１５１０に進める。
【００９０】
［ステップＳ１５０９］  メッセージ分割部１３０は、合計値が「０」であるので、このときの「ｎ」の値を「ｉｎｄｅｘ」に設定する。合計値が「０」であるので、この時点までのリクエストメッセージとレスポンスメッセージの数は同じである。ｉｎｄｅｘは、合計値が「０」となるごとに更新され、最終的に最後に検出された合計値が「０」のメッセージを指す「ｎ」の値が設定される。
【００９１】
［ステップＳ１５１０］  メッセージ分割部１３０は、全仮メッセージの処理が終了したかどうかを判定する。全仮メッセージの処理が終了していれば、図１９の結合子Ｄに続くステップへ処理を進める。全仮メッセージが終了していなければ、処理をステップＳ１５１１に進める。
【００９２】
［ステップＳ１５１１］  メッセージ分割部１３０は、全仮メッセージの処理が終了していないときは、ｎ＝ｎ＋１として「ｎ」を１つ進め、ステップＳ１５０２へ処理を戻す。そして、次の仮メッセージに対する処理を行う。
【００９３】
図１９は、メッセージ分割処理における分割対象の分割処理の手順を示したフローチャートである。結合子Ｃ及び結合子Ｄは、図１８の同じ名称の結合子と同じものである。
メッセージ分割部１３０は、図１８の結合子Ｄまでの処理を引き継ぎ、メッセージ分割処理を開始する。結合子Ｄまでの処理で、ｉｎｄｅｘには、最後に合計値「ｔｏｔａｌ」が一致した仮メッセージに対応する「ｎ」の値が設定されている。
【００９４】
［ステップＳ１５１２］  メッセージ分割部１３０は、レスポンス数とリクエスト数とを比較し、レスポンス数がリクエスト数よりも多いかどうかを判定する。レスポンス数がリクエスト数よりも多いときは、処理をステップＳ１５１３に進める。リクエスト数がレスポンス数よりも多いときは、処理をステップＳ１５１４に進める。
【００９５】
［ステップＳ１５１３］  メッセージ分割部１３０は、レスポンス数がリクエスト数よりも多いときは、ｉｎｄｅｘが示す「ｎ」より前に出現するリクエストメッセージを分割対象とし、処理をステップＳ１５１５に進める。レスポンス数がリクエスト数よりも多い場合には、後から順に検索して「ｔｏｔａｌ＝０」となったときのメッセージのうち、最も通信時刻の早いメッセージを指す「ｎ」が設定されている。このとき、「ｎ」より後では、リクエストメッセージとレスポンスメッセージの数は一致している。したがって、「ｎ」より前のリクエストメッセージに誤認識があると判定する。
【００９６】
［ステップＳ１５１４］  メッセージ分割部１３０は、リクエスト数がレスポンス数よりも多いときは、ｉｎｄｅｘが示す「ｎ」より後に出現するレスポンスメッセージを分割対象とする。リクエスト数がレスポンス数よりも多い場合には、前から順に検索して「ｔｏｔａｌ＝０」となったときのメッセージのうち、最も通信時刻の遅いメッセージを指す「ｎ」が設定されている。このとき、「ｎ」より前では、リクエストメッセージとレスポンスメッセージの数は一致している。したがって、「ｎ」より後のレスポンスメッセージに誤認識があると判定する。
【００９７】
［ステップＳ１５１５］  メッセージ分割部１３０は、ステップＳ１５１３またはステップＳ１５１４で決定した分割対象メッセージのうち、最大のサイズのものを分割する。
［ステップＳ１５１６］  メッセージ分割部１３０は、ステップＳ１５１５のメッセージ分割後のレスポンス数とリクエスト数とを比較する。一致しているときは、分割処理を終了する。一致していないときは、図１８に示した結合子Ｃに戻って、再度分割対象範囲の決定からの処理を行う。
【００９８】
以上の処理手順が実行されることにより、複数のメッセージを１つのメッセージとして認識した可能性の高い分割対象範囲が決定され、分割処理が行われる。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、メッセージ判別装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。
【００９９】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ（Digital Versatile Disc）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）などの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１００】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１０１】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）  ネットワークを介して受け渡されるパケット群からメッセージを判別するメッセージ判別プログラムおいて、
コンピュータに、
前記パケット群を取得し、前記パケット群を所定の規則に基づいてメッセージ単位に区切り、前記メッセージ単位に区切ったパケット群から仮メッセージを組み立て、仮メッセージ記憶手段に記憶するメッセージ組立手順、
所定の期間に受け渡された仮メッセージ群を前記仮メッセージ記憶手段から読み出し、前記仮メッセージ群をリクエストメッセージとレスポンスメッセージに分類して前記所定の期間におけるそれぞれの出現数を算出して比較し、前記リクエストメッセージと前記レスポンスメッセージの出現数が一致しないときは、出現数が少ない方に分類した仮メッセージを分割する処理を前記出現数が一致するまで繰り返すメッセージ分割手順、
を実行させることを特徴とするメッセージ判別プログラム。
【０１０２】
（付記２）  前記メッセージ組立手順は、
前記パケット群の各パケットのサイズを、該パケットの通信時刻が早い順に、予め決められたパケット最大サイズと比較し、該パケットのサイズが前記パケット最大サイズより小さいときは、該パケットが前記メッセージ単位の最後のパケットと判定して前記メッセージ単位の区切りとする、
ことを特徴とする付記１記載のメッセージ判別プログラム。
【０１０３】
（付記３）  前記メッセージ組立手順は、
前記パケット群の各パケットが受け渡された通信時刻を、該パケットの通信時刻が早い順に順次解析し、直前のパケットの通信時刻からの経過時間が所定の閾値を超えていないときは、前記直前のパケットの送信元及び宛先と、該パケットの送信元及び宛先とを照合し、同じであるとき該パケットのサイズを前記パケット最大サイズと比較する、
ことを特徴とする付記２記載のメッセージ判別プログラム。
【０１０４】
（付記４）  前記メッセージ分割手順は、
前記リクエストメッセージと前記レスポンスメッセージの出現数が一致しないときは、出現数が少ない方に分類した仮メッセージ群の各仮メッセージのサイズを比較し、サイズが最も大きい仮メッセージを分割する、
ことを特徴とする付記１記載のメッセージ判別プログラム。
【０１０５】
（付記５）  前記メッセージ分割手順は、
前記リクエストメッセージと前記レスポンスメッセージの出現数とが一致せず、前記リクエストメッセージの出現数が前記レスポンスメッセージの出現数よりも多いときは、前記所定の期間の仮メッセージ群について、前記仮メッセージの通信時刻の早い方から順に、それぞれの仮メッセージの通信時刻までの前記リクエストメッセージの出現数と前記レスポンスメッセージの出現数とを算出して比較し、前記リクエストメッセージの出現数と前記レスポンスメッセージの出現数とが最後に一致した時点よりも通信時刻の遅いレスポンスメッセージを分割対象とする、
ことを特徴とする付記１記載のメッセージ判別プログラム。
【０１０６】
（付記６）  前記メッセージ分割手順は、
前記リクエストメッセージと前記レスポンスメッセージの出現数とが一致せず、前記レスポンスメッセージの出現数が前記リクエストメッセージの出現数よりも多いときは、前記所定の期間の仮メッセージ群について、前記仮メッセージの通信時刻の遅い方から順に、それぞれの仮メッセージの通信時刻までの前記リクエストメッセージの出現数と前記レスポンスメッセージの出現数とを算出して比較し、前記リクエストメッセージの出現数と前記レスポンスメッセージの出現数とが一致した最も早い通信時刻よりも通信時刻が早いリクエストメッセージを分割対象とする、
ことを特徴とする付記１記載のメッセージ判別プログラム。
【０１０７】
（付記７）  前記メッセージ分割手順は、
前記所定の期間を一連の処理に対応するメッセージが受け渡されている期間とし、直前の前記所定の期間の終了後に前記パケットを取得した時刻を起点とし、予め決められた一定時間が経過したとき、または入力したパケットを解析し、該パケットに一連の処理の終了を示す終了情報が設定されていたときを前記所定の期間の終了とする、
ことを特徴とする付記１記載のメッセージ判別プログラム。
【０１０８】
（付記８）  前記コンピュータに、さらに、
前記パケット群を取得し、前記パケット群の各パケットが予め決められたメッセージ判別対象のパケットであるかどうかを判定し、対象パケットと判定したパケットのみを抽出して前記メッセージ組立手順へ出力する対象パケット抽出手順を実行させる、
ことを特徴とする付記１記載のメッセージ判別プログラム。
【０１０９】
（付記９）  ネットワークを介して受け渡されるパケット群からメッセージを判別するメッセージ判別装置おいて、
前記パケット群を取得し、前記パケット群を所定の規則に基づいてメッセージ単位に区切り、前記メッセージ単位に区切ったパケット群から仮メッセージを組み立て、仮メッセージ記憶手段に記憶するメッセージ組立手段と、
所定の期間に受け渡された仮メッセージ群を前記仮メッセージ記憶手段から読み出し、前記仮メッセージ群をリクエストメッセージとレスポンスメッセージに分類して前記所定の期間におけるそれぞれの出現数を算出して比較し、前記リクエストメッセージと前記レスポンスメッセージの出現数が一致しないときは、出現数が少ない方に分類した仮メッセージを分割する処理を前記出現数が一致するまで繰り返すメッセージ分割手段と、
を有することを特徴とするメッセージ判別装置。
【０１１０】
（付記１０）  ネットワークを介して受け渡されるパケット群からメッセージを判別するメッセージ判別方法おいて、
コンピュータが、
前記パケット群を取得し、前記パケット群を所定の規則に基づいてメッセージ単位に区切り、前記メッセージ単位に区切ったパケット群から仮メッセージを組み立て、仮メッセージ記憶手段に記憶し、
所定の期間に受け渡された仮メッセージ群を前記仮メッセージ記憶手段から読み出し、
前記仮メッセージ群をリクエストメッセージとレスポンスメッセージに分類して前記所定の期間におけるそれぞれの出現数を算出して比較し、
前記リクエストメッセージと前記レスポンスメッセージの出現数が一致しないときは、出現数が少ない方に分類した仮メッセージを分割する処理を前記出現数が一致するまで繰り返す、
手順を有することを特徴とするメッセージ判別方法。
【符号の説明】
【０１１１】
１  メッセージ判別装置
１ａ  対象パケット抽出手段
１ｂ  メッセージ組立手段
１ｃ  メッセージ分割手段
１ｄ  パケット記憶手段
１ｅ  仮メッセージ記憶手段
１ｆ  本メッセージ記憶手段
２ａ，２ｂ  サーバ
３  ネットワーク
４ａ，４ｂ  クライアント
５  パケット
【図１】
2011134213.tif 000003
【図２】
2011134213.tif 000004
【図３】
2011134213.tif 000005
【図４】
2011134213.tif 000006
【図５】
2011134213.tif 000007
【図６】
2011134213.tif 000008
【図７】
2011134213.tif 000009
【図８】
2011134213.tif 000010
【図９】
2011134213.tif 000011
【図１０】
2011134213.tif 000012
【図１１】
2011134213.tif 000013
【図１２】
2011134213.tif 000014
【図１３】
2011134213.tif 000015
【図１４】
2011134213.tif 000016
【図１５】
2011134213.tif 000017
【図１６】
2011134213.tif 000018
【図１７】
2011134213.tif 000019
【図１８】
2011134213.tif 000020
【図１９】
2011134213.tif 000021