(57)【特許請求の範囲】
【請求項１】
他の複数の通信装置間の通信の履歴を記録する通信記録装置であり、
特定のデータを示すアプリケーションデータが複数のパケットに分割されて通信される通信ネットワークに接続し、前記複数の通信装置の少なくともいずれかを送信先とする前記複数のパケットのうち前記通信ネットワークに送出されたパケットを受信し、受信したパケットを主記憶装置に記憶する受信制御部と、
前記受信制御部により前記複数のパケットのうち一部のパケットが前記主記憶装置に記憶されたときに、前記主記憶装置から前記一部のパケットを読み出し、読み出した前記一部のパケットに含まれる前記アプリケーションデータの一部を補助記憶装置に前記通信ネットワークの通信履歴の一部として記録する通信記録部とを備え、
前記受信制御部は、前記パケットとして前記アプリケーションデータの一部を示すＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）データと前記アプリケーションデータを通信する特定の通信端末装置間で通信の完了したＴＣＰデータを示す確認応答番号が含まれるＴＣＰヘッダとを含むＴＣＰパケットを受信して前記主記憶装置に記憶し、
前記通信記録装置は、さらに、
前記受信制御部により前記主記憶装置に記憶されたＴＣＰパケットに含まれるＴＣＰヘッダを参照し、参照した前記ＴＣＰヘッダに含まれる前記確認応答番号に基づいて前記受信制御部により受信されていないＴＣＰデータであり、特定の通信端末装置間で通信の完了したＴＣＰデータを抜けデータとしてＣＰＵを用いて特定する抜けデータ特定部を備え、
前記通信記録部は、前記抜けデータ特定部により特定された前記抜けデータのサイズ分所定の値が設定されたデータを前記抜けデータとして生成し、生成した前記抜けデータを前記補助記憶装置に記録する
ことを特徴とする通信記録装置。
【請求項２】
前記受信制御部は、前記アプリケーションデータ内での前記ＴＣＰデータの並び位置を示すシーケンス番号が含まれるＴＣＰヘッダを含むＴＣＰパケットを受信して前記主記憶装置に記憶し、
前記通信記録部は、前記受信制御部により前記主記憶装置に記憶された前記ＴＣＰパケットに含まれる前記ＴＣＰヘッダを参照し、参照した前記ＴＣＰヘッダに含まれる前記シーケンス番号に基づいて前記ＴＣＰパケットに含まれる前記ＴＣＰデータを前記アプリケーションデータ内での並び位置に対応させて前記補助記憶装置に記録する
ことを特徴とする請求項１記載の通信記録装置。
【請求項３】
前記通信記録装置は、さらに、
前記受信制御部により第１のＴＣＰデータと第１のＴＣＰデータのシーケンス番号の含まれる第１のＴＣＰヘッダとを含んだ第１のＴＣＰパケットが受信されて前記主記憶装置に記憶されると共に前記通信記録部により前記第１のＴＣＰパケットに含まれる前記第１のＴＣＰデータが前記補助記憶装置に記録された後、前記受信制御部により第２のＴＣＰデータと前記第２のＴＣＰデータのシーケンス番号の含まれる第２のＴＣＰヘッダとを含んだ第２のＴＣＰパケットが受信されて前記主記憶装置に記憶された場合、前記第１のＴＣＰヘッダに含まれる前記第１のＴＣＰデータのシーケンス番号と前記第２のＴＣＰヘッダに含まれる前記第２のＴＣＰデータのシーケンス番号とに基づいて第２のＴＣＰデータが前記第１のＴＣＰデータに続くデータであるか否かをＣＰＵを用いて判定する順序判定部を備え、
前記通信記録部は、前記順序判定部により前記第２のＴＣＰデータが前記第１のＴＣＰデータに続くデータであると判定された場合、前記第２のＴＣＰデータを前記主記憶装置から読み出し、読み出した前記第２のＴＣＰデータを前記第１のＴＣＰデータに続かせて前記補助記憶装置に記録する
ことを特徴とする請求項２記載の通信記録装置。
【請求項４】
前記順序判定部は、前記第２のＴＣＰデータを前記第１のＴＣＰデータに続くデータであると判定した場合、前記主記憶装置に記憶されている第３のＴＣＰパケットに含まれるＴＣＰヘッダを参照し、参照した前記ＴＣＰヘッダに含まれるシーケンス番号に基づいて前記第３のＴＣＰパケットに含まれる第３のＴＣＰデータが前記第２のＴＣＰデータに続くデータであるか否かを判定し、
前記通信記録部は、前記順序判定部により前記第２のＴＣＰデータが前記第１のＴＣＰデータに続くデータであると判定されると共に前記第３のＴＣＰデータが前記第２のＴＣＰデータに続くデータであると判定された場合、前記第２のＴＣＰデータと前記第３のＴＣＰデータとを前記主記憶装置から読み出し、前記第２のＴＣＰデータを前記第１のＴＣＰデータに続かせて前記補助記憶装置に記録すると共に前記第３のＴＣＰデータを前記第２のＴＣＰデータに続かせて前記補助記憶装置に記録する
ことを特徴とする請求項３記載の通信記録装置。
【請求項５】
前記受信制御部は、複数のアプリケーションデータを少なくともいずれかのアプリケーションデータの少なくとも一部を部分データとして含む複数のパケットで受信し、受信した複数のパケットを前記主記憶装置に記憶し、
前記通信記録装置は、さらに、
前記受信制御部により前記主記憶装置に記憶された複数のパケットそれぞれのサイズと前記複数のパケットに含まれる複数のアプリケーションデータそれぞれのサイズとに基づいて前記複数のパケットのうち各アプリケーションデータの終端が含まれるパケットを終端パケットとしてＣＰＵを用いて特定する終端特定部を備え、
前記通信記録部は、前記受信制御部により前記主記憶装置に記憶された複数のパケットを前記終端特定部により特定された各アプリケーションデータの終端パケットに基づいてアプリケーションデータ毎に区別し、複数のパケットに含まれる複数のアプリケーションデータをアプリケーションデータ毎に区別して前記補助記憶装置に記録する
ことを特徴とする請求項１〜請求項４いずれかに記載の通信記録装置。
【請求項６】
前記終端特定部は、前記終端パケットに第１のアプリケーションデータの終端と第２のアプリケーションデータの先頭とが含まれているか否かを判定し、
前記通信記録部は、前記終端特定部により前記終端パケットに第１のアプリケーションデータの終端と第２のアプリケーションデータの先頭とが含まれていると判定された場合、前記終端パケットから第１のアプリケーションデータと第２のアプリケーションデータとを抽出し、第１のアプリケーションデータと第２のアプリケーションデータとを区別して前記補助記憶装置に記録する
ことを特徴とする請求項５記載の通信記録装置。
【請求項７】
他の複数の通信装置間の通信の履歴を記録する通信記録装置であり、
特定のデータを示すアプリケーションデータが複数のパケットに分割されて通信される通信ネットワークに接続し、前記複数の通信装置の少なくともいずれかを送信先とする前記複数のパケットのうち前記通信ネットワークに送出されたパケットを受信し、受信したパケットを主記憶装置に記憶する受信制御部と、
前記受信制御部により前記複数のパケットのうち一部のパケットが前記主記憶装置に記憶されたときに、前記主記憶装置から前記一部のパケットを読み出し、読み出した前記一部のパケットに含まれる前記アプリケーションデータの一部を補助記憶装置に前記通信ネットワークの通信履歴の一部として記録する通信記録部とを備え、 前記受信制御部は、前記通信ネットワークに複数の経路で接続し、前記パケットとして前記通信ネットワークに送出されたＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）パケットであって、前記アプリケーションデータの一部を示すＴＣＰデータと前記アプリケーションデータ内での前記ＴＣＰデータの並び位置を示すシーケンス番号が含まれるＴＣＰヘッダとを含むＴＣＰパケットを複数の経路それぞれから受信し、複数の経路それぞれから受信したＴＣＰパケットを前記主記憶装置に記憶し、 前記通信記録装置は、さらに、
前記受信制御部によりＴＣＰパケットが受信され前記主記憶装置に第１のＴＣＰパケットとして記憶された後、前記受信制御部により新たにＴＣＰパケットが受信され前記主記憶装置に第２のＴＣＰパケットとして記憶された場合、前記第１のＴＣＰパケットの前記シーケンス番号と前記第２のＴＣＰパケットの前記シーケンス番号とに基づいて前記第１のＴＣＰパケットと前記第２のＴＣＰパケットとが前記受信制御部により異なる経路から受信された同一のＴＣＰパケットであるか否かを判定し、前記第１のＴＣＰパケットと前記第２のＴＣＰパケットとが同一のＴＣＰパケットであると判定した場合、後から受信された前記第２のＴＣＰパケットを前記主記憶装置から削除するＴＣＰ解析部
を備えたことを特徴とする通信記録装置。
【請求項８】
受信制御部が、特定のデータを示すアプリケーションデータが複数のパケットに分割されて通信される通信ネットワークに接続し、前記複数のパケットのうち前記通信ネットワークに送出されたパケットを受信し、受信したパケットを主記憶装置に記憶する受信制御処理を行い、
通信記録部が、前記受信制御部により前記複数のパケットのうち一部のパケットが前記主記憶装置に記憶されたときに、前記主記憶装置から前記一部のパケットを読み出し、読み出した前記一部のパケットに含まれる前記アプリケーションデータの一部を補助記憶装置に記憶する記憶処理を行う通信データ処理方法であって、
前記受信制御部は、前記受信制御処理で、前記パケットとして前記アプリケーションデータの一部を示すＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）データと前記アプリケーションデータを通信する特定の通信端末装置間で通信の完了したＴＣＰデータを示す確認応答番号が含まれるＴＣＰヘッダとを含むＴＣＰパケットを受信して前記主記憶装置に記憶し、 抜けデータ特定部が、前記受信制御部により前記主記憶装置に記憶されたＴＣＰパケットに含まれるＴＣＰヘッダを参照し、参照した前記ＴＣＰヘッダに含まれる前記確認応答番号に基づいて前記受信制御部により受信されていないＴＣＰデータであり、特定の通信端末装置間で通信の完了したＴＣＰデータを抜けデータとしてＣＰＵを用いて特定する抜けデータ特定処理を行い、
前記通信記録部は、前記記憶処理で、前記抜けデータ特定部により特定された前記抜けデータのサイズ分所定の値が設定されたデータを前記抜けデータとして生成し、生成した前記抜けデータを前記補助記憶装置に記録する
ことを特徴とする通信データ処理方法。
【請求項９】
受信制御部が、特定のデータを示すアプリケーションデータが複数のパケットに分割されて通信される通信ネットワークに接続し、前記複数のパケットのうち前記通信ネットワークに送出されたパケットを受信し、受信したパケットを主記憶装置に記憶する受信制御処理を行い、
通信記録部が、前記受信制御部により前記複数のパケットのうち一部のパケットが前記主記憶装置に記憶されたときに、前記主記憶装置から前記一部のパケットを読み出し、読み出した前記一部のパケットに含まれる前記アプリケーションデータの一部を補助記憶装置に記憶する記憶処理を行う通信データ処理方法であって、 前記受信制御部は、前記受信制御処理で、前記通信ネットワークに複数の経路で接続し、前記パケットとして前記通信ネットワークに送出されたＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）パケットであって、前記アプリケーションデータの一部を示すＴＣＰデータと前記アプリケーションデータ内での前記ＴＣＰデータの並び位置を示すシーケンス番号が含まれるＴＣＰヘッダとを含むＴＣＰパケットを複数の経路それぞれから受信し、複数の経路それぞれから受信したパケットを前記主記憶装置に記憶し、 ＴＣＰ解析部が、前記受信制御部によりＴＣＰパケットが受信され前記主記憶装置に第１のＴＣＰパケットとして記憶された後、前記受信制御部により新たにＴＣＰパケットが受信され前記主記憶装置に第２のＴＣＰパケットとして記憶された場合、前記第１のＴＣＰパケットの前記シーケンス番号と前記第２のＴＣＰパケットの前記シーケンス番号とに基づいて前記第１のＴＣＰパケットと前記第２のＴＣＰパケットとが前記受信制御部により異なる経路から受信された同一のＴＣＰパケットであるか否かを判定し、前記第１のＴＣＰパケットと前記第２のＴＣＰパケットとが同一のＴＣＰパケットであると判定した場合、後から受信された前記第２のＴＣＰパケットを前記主記憶装置から削除するＴＣＰ解析処理を行う
ことを特徴とする通信データ処理方法。
【請求項１０】
請求項８または請求項９記載の通信データ処理方法をコンピュータに実行させることを特徴とする通信データ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、社内ネットワークとインターネットとの間で送受信されるパケットを受信し、受信したデータを解析して記録し、ネットワーク上でやり取りされたデータを証拠として保存する通信記録装置、通信データ処理方法および通信データ処理プログラムに関するものである。
【背景技術】
【０００２】
不正アクセスの兆候の解析や情報漏えいの際の証拠として使用するために、ネットワーク上で送受信されるパケットを記録する通信記録装置（フォレンジックサーバ）がある。
【０００３】
通信記録装置は、内部ネットワークに接続されているスイッチングハブのミラーリングポートに接続され、内部ネットワークとインターネットとの間で送受信されるパケットを記録する。
【０００４】
ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）を用いた通信において、送信アプリケーションと受信アプリケーションとの間では、データがバイトストリームとして処理される。
通信記録装置はＴＣＰパケットを受信すると、受信したパケットのシーケンス番号に従ってパケットを組み立てた後、アプリケーションデータを解析する。例えば、通信記録装置は、データがＷｅｂアクセスのＨＴＴＰ（ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）  ＧＥＴである場合には、アクセス先の情報（ｗｗｗ．＊＊＊．ｃｏ．ｊｐのようなＵＲＬ［Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ］）とこれに対する応答（画像データ、音声データ）を復元して記録する。
【特許文献１】特開２００６−２９５９２１号公報
【特許文献２】特開２００６−３４０３２２号公報
【特許文献３】特開２００３−１６３７１４号公報
【特許文献４】特開２０００−２４４５６４号公報
【特許文献５】特開２００１−２５１３４２号公報
【特許文献６】特開２００３−１６３６８２号公報
【非特許文献１】村山公保、西田佳史、尾家祐二著、「岩波講座  インターネット  第三巻  トランスポートプロトコル」、岩波書店、２００１年４月６日発行、Ｐ４７
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、通信記録装置が記録するデータは、端末−プロキシサーバ間やプロキシサーバ−ＷＷＷサーバ間といった他ホスト間で送受信されるデータであり、そのデータが設定されたパケットの宛先は通信記録装置でない。また、ＯＳのＴＣＰ／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）プロトコルスタックは自宛でないパケットを処理対象にしないため、通信記録装置はＯＳのＴＣＰ／ＩＰプロトコルスタック機能を用いて記録の対象である他ホスト間の通信データを組み立てることができない。
【０００６】
また、通信記録装置は、ミラーリングポートからパケットのコピーを受信しているため、パケットがミラーリングポートへの転送の最中に通信エラーとなって廃棄された場合、廃棄されたパケットで送信されたデータを受信することができない。さらに、このパケットは、ミラーリングポートへの転送の最中に通信エラーとなっても、内部ネットワークとインターネットとの間では送受信が完了する。このため、パケットの再送は行われず、通信記録装置がこのパケットを受信することはない。そして、通信記録装置においてこのパケットのシーケンス番号以降のデータはシーケンス番号の連続性が保たれず、このパケットで送信されるデータを含んだアプリケーションデータの組み立ては完了しない。従ってミラーリングポートへの転送時にパケットが廃棄された場合、通信記録装置は廃棄されたパケットで送信されるデータを含んだアプリケーションデータを解析することができない。
【０００７】
本発明は、例えば、上記のような課題を解決するためになされたもので、ネットワーク上で他ホスト間のＴＣＰ／ＩＰの通信データを受信し、他ホスト宛のパケットの組み立てを行い、アプケーション解析を実行できるようにすることを目的とする。
また例えば、本発明は、パケットがミラーリングポートに転送する最中に通信エラーとなって廃棄された場合でも、アプリケーション解析を継続してパケットを記録できるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
本発明の通信記録装置は、他の複数の通信装置間の通信の履歴を記録する通信記録装置であり、特定のデータを示すアプリケーションデータが複数のパケットに分割されて通信される通信ネットワークに接続し、前記複数の通信装置の少なくともいずれかを送信先とする前記複数のパケットのうち前記通信ネットワークに送出されたパケットを受信し、受信したパケットを主記憶装置に記憶する受信制御部と、前記受信制御部により前記複数のパケットのうち一部のパケットが前記主記憶装置に記憶されたときに、前記主記憶装置から前記一部のパケットを読み出し、読み出した前記一部のパケットに含まれる前記アプリケーションデータの一部を補助記憶装置に前記通信ネットワークの通信履歴の一部として記録する通信記録部とを備える。
【発明の効果】
【０００９】
本発明によれば、例えば、アプリケーションデータの一部を受信することができなかった場合でも、受信できた部分を通信ネットワークの通信履歴として記録することができる。これにより、記録された部分に基づいてアプリケーションデータを解析することができる。
【発明を実施するための最良の形態】
【００１０】
実施の形態１．
図１は、実施の形態１における通信ネットワークシステム１００の一例を示す図である。
図１において、社内ネットワーク２２（社内ＬＡＮ［ＬＡＮ：ローカルエリアネットワーク］）に接続する端末２１（通信端末装置の一例）は、ＦＷ２５（ファイアウォール装置）およびプロキシサーバ２６を介して、インターネット２４に接続するＷＷＷサーバ２３からデータを取得する。
ＦＷ２５は社内ネットワーク２２のセキュリティを確保するために設けられ、社内ネットワーク２２とインターネット２４と間で直接に通信することを制限する。プロキシサーバ２６は社内ネットワーク２２の端末２１がインターネット２４上のＷＷＷサーバ２３からデータを取得できるように、端末２１の代わりにＷＷＷサーバ２３からデータを取得し、取得したデータを端末２１に送信する。
【００１１】
通信記録装置１は、プロキシサーバ２６とＷＷＷサーバ２３との間で送受信されるデータをＳＷ２７（スイッチングハブ装置）を介して受信し、受信したデータを社内ネットワーク２２とインターネット２４との間で通信されたデータの履歴（通信履歴１２０、通信ログ）として記録する。端末２１は社内ネットワーク２２に通信接続する端末の一つであり、ＷＷＷサーバ２３はインターネット２４に通信接続する端末の一つである。通信記録装置１は社内ネットワーク２２の通信端末とインターネット２４に接続する通信端末との間での（プロキシサーバ２６を介した）通信の履歴を記録する。通信記録装置１により記録された通信履歴１２０を検証することにより、インターネット２４から社内ネットワーク２２への不正なアクセスや社内ネットワーク２２からインターネット２４への情報漏えいの有無およびその内容を調べることができる。つまり、通信履歴１２０は不正アクセスの有無、不正アクセスの手順の解析、情報流失の有無を証明するフォレンジックな証拠として活用される。
【００１２】
ＳＷ２７は通信ケーブルが接続される複数のポートを有する。各ポートに接続された通信ケーブルはＦＷ２５、プロキシサーバ２６および通信記録装置１に接続されている。特に、通信記録装置１の接続されているポートを「ミラーリングポート」という。ＳＷ２７は社内ネットワーク２２から送信され又は社内ネットワーク２２に送信されたデータを各ポート間で中継（リレー）し、各ポートからＦＷ２５、プロキシサーバ２６および通信記録装置１に接続されている通信ケーブルに送出する。特に、ＳＷ２７は、各ポート間で中継された全てのデータを通信ケーブル２９を介して通信記録装置１の接続されているミラーリングポートに中継する。ＳＷ２７が有するこの機能を「ポートモニタ機能」という。通信記録装置１はＳＷ２７のポートモニタ機能により各ポート間で中継された全てのデータを受信することができる。
【００１３】
図２は、ＩＰパケット１０５の構成を示す図である。
社内ネットワーク２２およびインターネット２４ではＴＣＰ／ＩＰ通信が行われ、ＴＣＰ／ＩＰ通信では図２に示すように構成されるＩＰパケット１０５が通信される。
【００１４】
ＩＰパケット１０５（ＩＰデータグラムともいう）は、制御情報が設定されたＩＰヘッダ１０１を有すると共に、ＴＣＰパケット１０４を包含してカプセル化する。ＩＰヘッダ１０１には、送信元の端末を識別する「送信元ＩＰアドレス」、送信先の端末を識別する「送信先ＩＰアドレス」、ＩＰパケット１０５のサイズを示す「パケット長」、ＩＰヘッダ１０１のサイズを示す「ヘッダ長」などが設定される。ＴＣＰパケット１０４のサイズはパケット長からヘッダ長を減算したサイズである。
【００１５】
ＴＣＰパケット１０４（ＴＣＰセグメントともいう）は、制御情報が設定されたＴＣＰヘッダ１０２とアプリケーションデータの少なくとも一部が設定されたＴＣＰデータ１０３とを有する。ＴＣＰヘッダ１０２には、送信元のアプリケーションプログラムを識別する「送信元ポート番号」、送信先のアプリケーションプログラムを識別する「送信先ポート番号」、アプリケーションデータ内でのＴＣＰデータ１０３の並び位置を示す「シーケンス番号」、送信先（受信側）から次に送信されるＴＣＰデータ１０３のアプリケーションデータ内での並び位置を示す「確認応答番号」などが設定される。
【００１６】
以下、ＩＰパケット１０５およびＴＣＰパケット１０４を総称して「パケット」という。
また、シーケンス番号を「ｓｅｑ」と記し、確認応答番号を「ａｃｋ」と記す。
【００１７】
図３は、ＧＥＴｍ１０７の構成を示す図であり、図４は、Ｒｅｓｍ１０８の構成を示す図である。
図３に示すＨＴＴＰのリクエストメッセージ（ＧＥＴｍ１０７と記す）や図４に示すＨＴＴＰのレスポンスメッセージ（Ｒｅｓｍ１０８と記す）は、ＴＣＰデータ１０３に設定されるアプリケーションデータの一例である。
ＧＥＴｍ１０７およびＲｅｓｍ１０８はそれぞれ制御情報が設定されたメッセージヘッダ７１と通信の目的のデータであるメッセージボディ７２とを有し、メッセージヘッダ７１とメッセージボディ７２とは空行６６により区切られる。
ＧＥＴｍ１０７のメッセージヘッダ７１にはリクエストライン６１、リクエストヘッダフィールド６２、汎用ヘッダフィールド６３、ヘッダフィールド６４およびその他６５から構成され、Ｒｅｓｍ１０８のメッセージヘッダ７１にはステータスライン６８、レスポンスヘッダフィールド６９、汎用ヘッダフィールド６３、ヘッダフィールド６４およびその他６５から構成される。
ＧＥＴｍ１０７のリクエストライン６１には“ＧＥＴ”が設定され、このＨＴＴＰのメッセージがＧＥＴ４３であることを示す。ＧＥＴｍ１０７およびＲｅｓｍ１０８のヘッダフィールド６４にはメッセージボディ７２のサイズを示す「Ｃｏｎｔｅｎｔ−Ｌｅｎｇｔｈ」が設定されている。以下、メッセージボディ７２のサイズを「コンテントサイズ」という。
【００１８】
以下、ＧＥＴｍ１０７やＲｅｓｍ１０８を総称して「メッセージ１０６」という。
【００１９】
図５は、分割されたＲｅｓｍ１０８を示す図である。
図５において、メッセージ１０６（例えば、Ｒｅｓｍ１０８）のサイズが大きい場合、メッセージ１０６は複数に分割され、複数のパケットで送信される。
例えば、２０００バイト（ｂｙｔｅ）のＲｅｓｍ１０８は、１０００バイトずつ２つに分割され、メッセージヘッダ７１（Ｒｅｓｍ１０８の先頭）とメッセージボディ７２の一部とを含むパケット（Ｒｅｓ４４）と残りのメッセージボディ７２（Ｒｅｓｍ１０８の終端）を含むパケット（Ｄａｔａ４５）とで送信される。
【００２０】
以下、Ｒｅｓ４４に設定されたデータやＤａｔａ４５に設定されたデータのように分割されたメッセージ１０６を構成するそれぞれの部分を総称して「分割データ（または、フラグメント）」という。
【００２１】
図６は、実施の形態１における通信シーケンスの一例を示す図である。
図５に示したＲｅｓｍ１０８は、図６に示すような流れで、Ｒｅｓ４４とＤａｔａ４５とでＷＷＷサーバ２３からプロキシサーバ２６に送信される。
図６に示す矢印は、矢印の向きにパケットが送信されることを示している。
【００２２】
ここで、社内ネットワーク２２の端末２１からＷＷＷサーバ２３に何らかのデータが要求（ＨＴＴＰリクエスト）されたものとする。プロキシサーバ２６は端末２１からＷＷＷサーバ２３への要求を受信する。端末２１に要求されたデータを保持していない場合、プロキシサーバ２６は端末２１の代わりにＷＷＷサーバ２３に要求を出してデータを取得し、取得したデータを端末２１に応答する。図６は、プロキシサーバ２６が端末２１の代わりにＷＷＷサーバ２３に要求を出してデータを取得する際のパケットの送受信の流れを示している。
【００２３】
まず、プロキシサーバ２６はＳＹＮ４０、ＳＹＮ／ＡＣＫ４１およびＡＣＫ４２の送受信によりＷＷＷサーバ２３とＴＣＰのコネクションを確立し、確立したコネクションを用いてＧＥＴ４３、Ｒｅｓ４４、Ｄａｔａ４５およびＡＣＫ４７の送受信によりＷＷＷサーバ２３からデータを取得し、ＦＩＮ／ＡＣＫ５０、ＦＩＮ／ＡＣＫ５１およびＡＣＫ５２の送受信によりコネクションを切断する。
【００２４】
ＳＹＮ４０は、ＴＣＰヘッダ１０２にコネクションの確立の要求を示すフラグが設定されたパケットである。
ＳＹＮ／ＡＣＫ４１は、ＳＹＮ４０の受信の完了を示す確認応答番号（ａｃｋ）とＴＣＰヘッダ１０２にコネクションの確立を示すフラグとが設定されたパケットである。
ＡＣＫ４２は、ＴＣＰヘッダ１０２にＳＹＮ／ＡＣＫ４１の受信の完了を示す確認応答番号が設定されたパケットである。
ＧＥＴ４３は、ＴＣＰデータ１０３にＧＥＴｍ１０７が設定されたパケットである。
Ｒｅｓ４４は、ＴＣＰデータ１０３にＲｅｓｍ１０８の前半部分が設定されたパケットである。
Ｄａｔａ４５は、ＴＣＰデータ１０３にＲｅｓｍ１０８の後半部分が設定されたパケットである。
ＡＣＫ４７は、ＴＣＰヘッダ１０２にＲｅｓ４４およびＤａｔａ４５の受信の完了を示す確認応答番号が設定されたパケットである。
ＦＩＮ／ＡＣＫ５０は、ＴＣＰヘッダ１０２にコネクションの切断の要求を示すフラグが設定されたパケットである。
ＦＩＮ／ＡＣＫ５１は、ＴＣＰヘッダ１０２にＦＩＮ／ＡＣＫ５０の受信の完了を示す確認応答番号とコネクションの切断を示すフラグとが設定されたパケットである。
ＡＣＫ５２は、ＴＣＰヘッダ１０２にＦＩＮ／ＡＣＫ５１の受信の完了を示す確認応答番号が設定されたパケットである。
以下、ＳＹＮ４０、ＳＹＮ／ＡＣＫ４１、ＡＣＫ４２、ＡＣＫ４７、ＦＩＮ／ＡＣＫ５０、ＦＩＮ／ＡＣＫ５１及びＡＣＫ５２にＴＣＰデータ１０３が含まれない場合を例にして説明を行う。
【００２５】
送受信されるパケットのＴＣＰヘッダ１０２には「シーケンス番号（ｓｅｑ）」と「確認応答番号（ａｃｋ）」が設定される。
【００２６】
「シーケンス番号（ｓｅｑ）」は送信されたＴＣＰデータ１０３の並び順をバイト（ｂｙｔｅ）単位で示し、当該パケットの送信元（送信側）から当該パケットの送信先（受信側）に送信されるメッセージ１０６内での当該パケットのＴＣＰデータ１０３の並び位置を示す。「シーケンス番号（ｓｅｑ）」の初期値はＳＹＮ４０およびＳＹＮ／ＡＣＫ４１に設定される。
【００２７】
図６において、ＳＹＮ４０に設定されたｓｅｑ（９９）は、プロキシサーバ２６がＷＷＷサーバ２３に送信するＴＣＰデータ１０３の並び順を「９９」から続く連番で示すことを意味する。
また、ＳＹＮ／ＡＣＫ４１に設定されたｓｅｑ（７００）は、ＷＷＷサーバ２３がプロキシサーバ２６に送信するＴＣＰデータ１０３の並び順を「７００」から続く連番で示すことを意味する。
【００２８】
「確認応答番号（ａｃｋ）」は受信の完了したＴＣＰデータ１０３のシーケンス番号に「１」を加えた値であり、当該パケットの送信元が当該パケットの送信先から過去に受信したＴＣＰデータ１０３のシーケンス番号に「１」を加えた値を示す。当該パケットの送信先から当該パケットの送信元には、次に、当該パケットに設定された「確認応答番号（ａｃｋ）」から続くデータをＴＣＰデータ１０３として含んだパケットが送信される。
【００２９】
なお、ＳＹＮ４０、ＳＹＮ／ＡＣＫ４１、ＦＩＮ／ＡＣＫ５０およびＦＩＮ／ＡＣＫ５１は、ＴＣＰデータ１０３が１バイトのパケットとして扱われ、「シーケンス番号（ｓｅｑ）」に「１（バイト）」が加算される。
【００３０】
図６において、プロキシサーバ２６は、ＷＷＷサーバ２３とのコネクションを確立するために、自己のｓｅｑの初期値として「９９」を設定したＳＹＮ４０をＷＷＷサーバ２３に送信する。ＳＹＮ４０を受信したＷＷＷサーバ２３はＳＹＮ４０のｓｅｑ（９９）に「１」を加えた値（１００）をａｃｋとして設定すると共に、自己のｓｅｑの初期値として「７００」を設定したＳＹＮ／ＡＣＫ４１をプロキシサーバ２６に送信する。ＳＹＮ／ＡＣＫ４１を受信したプロキシサーバ２６はＳＹＮ／ＡＣＫ４１のｓｅｑ（７００）に「１」を加えた値（７０１）をａｃｋとして設定する共に、ＳＹＮ／ＡＣＫ４１のａｃｋ（１００）をｓｅｑに設定したＡＣＫ４２をＷＷＷサーバ２３に送信する。これにより、プロキシサーバ２６とＷＷＷサーバ２３との間にコネクションが確立する。
コネクションの確立後、プロキシサーバ２６は、ＧＥＴｍ１０７がＴＣＰデータ１０３として設定されたＧＥＴ４３をＷＷＷサーバ２３に送信する。ＧＥＴ４３のｓｅｑおよびａｃｋはＡＣＫ４２と同じである。ここで、ＧＥＴｍ１０７のサイズを１００バイトとする。
【００３１】
ＧＥＴ４３を受信したＷＷＷサーバ２３は、２０００バイトのＲｅｓｍ１０８を１０００バイトずつ２つに分割する。そして、ＷＷＷサーバ２３は、Ｒｅｓｍ１０８の先頭を含んだ前半の１０００バイトがＴＣＰデータ１０３として設定されたＲｅｓ４４をプロキシサーバ２６に送信すると共に、Ｒｅｓｍ１０８の終端を含んだ後半の１０００バイトがＴＣＰデータ１０３として設定されたＤａｔａ４５をプロキシサーバ２６に送信する。Ｒｅｓ４４のｓｅｑはＧＥＴ４３のａｃｋと同じ値になり、Ｄａｔａ４５のｓｅｑはＲｅｓ４４のｓｅｑ（７０１）にＲｅｓ４４のＴＣＰデータ１０３のサイズ（１０００）を加えた値（１７０１）になる。
Ｒｅｓ４４とＤａｔａ４５とを受信したプロキシサーバ２６は、ＧＥＴ４３のａｃｋ（７０１）にＲｅｓ４４とＤａｔａ４５とのＴＣＰデータ１０３の合計サイズ（２０００）を加えた値（２７０１）をａｃｋとして設定したＡＣＫ４７をＷＷＷサーバ２３に送信する。ＡＣＫ４７のｓｅｑはＲｅｓ４４およびＤａｔａ４５のａｃｋと同じである。
【００３２】
Ｒｅｓ４４とＤａｔａ４５とによりＲｅｓｍ１０８を受信したプロキシサーバ２６は、コネクションの切断のために、ＡＣＫ４７と同じｓｅｑ（２００）とａｃｋ（２７０１）とを設定したＦＩＮ／ＡＣＫ５０をＷＷＷサーバ２３に送信する。ＦＩＮ／ＡＣＫ５０を受信したＷＷＷサーバ２３はＦＩＮ／ＡＣＫ５０のｓｅｑ（２００）に「１」を加えた値（２０１）をａｃｋとして設定したＦＩＮ／ＡＣＫ５１（ｓｅｑ：２７０１）をプロキシサーバ２６に送信し、ＦＩＮ／ＡＣＫ５１を受信したプロキシサーバ２６はＦＩＮ／ＡＣＫ５１のｓｅｑ（２７０１）に「１」を加えた値（２７０２）をａｃｋとして設定したＡＣＫ５２（ｓｅｑ：２０１）をＷＷＷサーバ２３に送信する。これにより、プロキシサーバ２６とＷＷＷサーバ２３とのコネクションが切断される。
【００３３】
図６に示すように、通信記録装置１は、ＷＷＷサーバ２３とプロキシサーバ２６との間で通信された各パケット（ＳＹＮ４０〜ＡＣＫ５２）を受信し、各パケットに設定されているＴＣＰデータ１０３を通信履歴１２０として記録する。図６では、ＧＥＴ４３に設定されたＧＥＴｍ１０７、Ｒｅｓ４４とＤａｔａ４５とに設定されたＲｅｓｍ１０８が通信記録装置１により通信履歴１２０として記録される。
通信記録装置１は、Ｒｅｓ４４に設定されたＴＣＰデータ１０３とＤａｔａ４５に設定されたＴＣＰデータ１０３とを関連付けてＲｅｓｍ１０８として記録すると共に、ＧＥＴｍ１０７とＲｅｓｍ１０８とを関連付けて記録する。
【００３４】
図７は、実施の形態１におけるＧＥＴｍ１０７とＲｅｓｍ１０８とが設定された通信履歴１２０を示す図である。
例えば、通信記録装置１は、図７に示すようにしてＧＥＴｍ１０７とＲｅｓｍ１０８とを関連付けて記録する。
リクエストポインタ８１は、ＧＥＴ４３に設定されたＧＥＴｍ１０７の記録された記憶領域のアドレスを示す。
レスポンスポインタ８２は、Ｒｅｓｍ１０８の記録された記憶領域として、Ｒｅｓ４４に設定されたＲｅｓｍ１０８の前半部分の記録された記憶領域のアドレスとＤａｔａ４５に設定されたＲｅｓｍ１０８の後半部分の記録された記憶領域のアドレスとをデータの並び順（先頭→終端）に示す。
例えば、ＧＥＴｍ１０７とＲｅｓ４４に設定されたＲｅｓｍ１０８の前半部分とＤａｔａ４５に設定された後半部分とは連続する記憶領域に記憶される。
これにより、通信記録装置１は、プロキシサーバ２６とＷＷＷサーバ２３との間で通信されたメッセージ１０６を通信履歴１２０として記録することができる。
リクエストポインタ８１とレスポンスポインタ８２との組は、プロキシサーバ２６とＷＷＷサーバ２３との間で通信されたメッセージ１０６の数分、生成される。
また、各メッセージ１０６のリクエストポインタ８１とレスポンスポインタ８２との組は、コネクション毎に管理される。
通信記録装置１により記録される通信履歴のフォーマットは図７に示すものに限られない。
【００３５】
図８は、実施の形態１における通信記録装置１のハードウェア資源の一例を示す図である。
図８において、通信記録装置１は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介してキャッシュメモリ９０７、ＲＯＭ９１３、ＲＡＭ９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、ＣＤＤ９０５（コンパクトディスク装置）、プリンタ装置９０６、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４、キャッシュメモリ９０７は主記憶装置の一例であり、揮発性メモリの一例である。ＲＯＭ９１３は不揮発性メモリの一例である。ＦＤＤ９０４の記憶媒体、ＣＤＤ９０５の記憶媒体、磁気ディスク装置９２０は補助記憶装置の一例であり、不揮発性メモリの一例である。
通信ボード９１５、キーボード９０２、ＦＤＤ９０４などは、入力機器、入力装置あるいは入力部の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力機器、出力装置あるいは出力部の一例である。
【００３６】
通信ボード９１５は複数のポートを備え、各ポートには通信ケーブルの一端が接続され、通信ケーブルの他端はＳＷ２７のミラーリングポートに接続される。
【００３７】
磁気ディスク装置９２０には、ＯＳ９２１（オペレーティングシステム）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、ＯＳ９２１、ウィンドウシステム９２２により実行される。
【００３８】
上記プログラム群９２３には、実施の形態において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
【００３９】
ファイル群９２４には、実施の形態において、「〜部」の機能を実行した際の「〜の判定結果」、「〜の計算結果」、「〜の処理結果」などの結果データ、「〜部」の機能を実行するプログラム間で受け渡しするデータ、その他の情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。通信履歴１２０はファイル群９２４に含まれるものの一例である。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、実施の形態において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｃ）等の記録媒体に記録される。また、データや信号値は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００４０】
また、実施の形態において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、「〜部」としてコンピュータを機能させるものである。あるいは、「〜部」の手順や方法をコンピュータに実行させるものである。
【００４１】
図９は、実施の形態１における通信記録装置１の機能構成図である。
実施の形態１における通信記録装置１の機能構成について、図９に基づいて以下に説明する。
【００４２】
通信記録装置１は、受信制御部３、ＴＣＰ解析部４、ＴＣＰ順序制御部５、アプリケーション解析部６、データ表示部７、入力ポート２および記録部９を備える。
【００４３】
入力ポート２は通信ケーブル２９に接続され、通信ケーブル２９の他端はＳＷ２７のミラーリングポートに接続されている。入力ポート２は、通信ケーブル２９を介して、ＳＷ２７のポートモニタ機能により転送されたパケットを入力し、入力したパケットを受信制御部３に出力する。
【００４４】
記録部９は、アプリケーション解析部６によりメッセージ１０６が通信履歴１２０として記録される補助記憶装置（不揮発性メモリ）（例えば、磁気ディスク装置９２０、フラッシュメモリ、ＦＤ、ＣＤ、ＤＶＤ、）である。
【００４５】
受信制御部３は入力ポート２からパケットを入力し、入力した全てのパケットを主記憶装置（揮発性メモリ）（例えば、ＲＡＭ９１４、キャッシュメモリ９０７）に記憶する。受信制御部３には、自宛でないパケットも含めて全てのパケットを受信する動作モード（プロミスカスモード）が設定されている。
【００４６】
受信制御部３は、特定のデータを示すアプリケーションデータ（例えば、ＧＥＴｍ１０７、Ｒｅｓｍ１０８、メッセージ１０６）が複数のパケットに分割されて通信される通信ネットワーク（例えば、社内ネットワーク２２、インターネット２４）に入力ポート２、通信ケーブル２９およびＳＷ２７を介して接続し、複数のパケットのうち通信ネットワークに送出されたパケットを受信する（パケットを入力ポート２から入力する）。そして、受信制御部３は、受信したパケットを主記憶装置に記憶する。
【００４７】
ＴＣＰ解析部４は、受信制御部３に受信され主記憶装置に記憶された各パケットのＴＣＰヘッダ１０２を解析する。例えば、ＴＣＰ解析部４はコネクション情報の設定、検索および削除を行う。
【００４８】
ＴＣＰ順序制御部５は、受信制御部３に受信され主記憶装置に記憶された各パケットについて、ＴＣＰヘッダ１０２に設定されたシーケンス番号（ｓｅｑ）に基づいてＴＣＰパケット１０４の順序に関する制御を行う。
【００４９】
例えば、ＴＣＰ順序制御部５（順序判定部）は、受信制御部３により第１のＴＣＰデータと第１のＴＣＰデータのシーケンス番号の含まれる第１のＴＣＰヘッダとを含んだ第１のＴＣＰパケットが受信されて主記憶装置に記憶されると共に後述するアプリケーション解析部６（通信記録部）により第１のＴＣＰパケットに含まれる第１のＴＣＰデータが記録部９（補助記憶装置）に記録された後、受信制御部３により第２のＴＣＰデータと第２のＴＣＰデータのシーケンス番号の含まれる第２のＴＣＰヘッダとを含んだ第２のＴＣＰパケットが受信されて主記憶装置に記憶された場合、次のような処理を行う。ＴＣＰ順序制御部５は、第１のＴＣＰヘッダに含まれる第１のＴＣＰデータのシーケンス番号と第２のＴＣＰヘッダに含まれる第２のＴＣＰデータのシーケンス番号とに基づいて、第２のＴＣＰデータが第１のＴＣＰデータに続くデータであるか否かをＣＰＵを用いて判定する。
【００５０】
また例えば、ＴＣＰ順序制御部５（順序判定部）は、第２のＴＣＰデータを第１のＴＣＰデータに続くデータであると判定した場合、主記憶装置に記憶されている第３のＴＣＰパケットに含まれるＴＣＰヘッダを参照する。そして、ＴＣＰ順序制御部５は、参照したＴＣＰヘッダに含まれるシーケンス番号に基づいて、第３のＴＣＰパケットに含まれる第３のＴＣＰデータが第２のＴＣＰデータに続くデータであるか否かを判定する。
【００５１】
アプリケーション解析部６は、受信制御部３により受信され主記憶装置に記憶された各パケットについて、ＴＣＰデータ１０３を解析して記録部９に記録する。
【００５２】
例えば、アプリケーション解析部６（通信記録部）は、メッセージ１０６を分割した複数のパケットのうち一部のパケットが受信制御部３により主記憶装置に記憶されたときに、主記憶装置から一部のパケットを読み出し、読み出した一部のパケットに含まれるメッセージ１０６の一部を記録部９に通信履歴の一部として記録する。
【００５３】
また例えば、アプリケーション解析部６は、受信制御部３により主記憶装置に記憶されたＴＣＰパケット１０４に含まれるＴＣＰヘッダ１０２を参照する。そして、アプリケーション解析部６は、参照したＴＣＰヘッダ１０２に含まれるシーケンス番号（ｓｅｑ）に基づいて、ＴＣＰパケット１０４に含まれるＴＣＰデータ１０３をメッセージ１０６内での並び位置に対応させて記録部９に記録する。
【００５４】
また例えば、アプリケーション解析部６は、主記憶装置に記憶されている第２のＴＣＰデータが記録部９に記録されている第１のＴＣＰデータに続くデータであるとＴＣＰ順序制御部５により判定された場合、第２のＴＣＰデータを主記憶装置から読み出し、読み出した第２のＴＣＰデータを第１のＴＣＰデータに続かせて記録部９に記録する。
【００５５】
また例えば、アプリケーション解析部６は、主記憶装置に記憶されている第２のＴＣＰデータが記録部９に記録されている第１のＴＣＰデータに続くデータであるとＴＣＰ順序制御部５により判定されると共に、主記憶装置に記憶されている第３のＴＣＰデータが第２のＴＣＰデータに続くデータであると判定された場合、次のような処理を行う。アプリケーション解析部６は、第２のＴＣＰデータと第３のＴＣＰデータとを主記憶装置から読み出し、第２のＴＣＰデータを第１のＴＣＰデータに続かせて記録部９に記録すると共に第３のＴＣＰデータを第２のＴＣＰデータに続かせて記録部９に記録する。
【００５６】
データ表示部７は、記録部９に記録された通信履歴１２０を表示装置９０１に表示したり、プリンタ装置９０６から印刷したりする。
【００５７】
図１０は、実施の形態１における通信記録装置１の通信記録方法を示すフローチャートである。
実施の形態１における通信記録装置１の通信記録方法について、図１０に基づいて以下に説明する。
通信記録装置１の各部は、以下に説明する各処理をＣＰＵを用いて実行する。
【００５８】
＜Ｓ１１０：受信制御処理＞
受信制御部３はＩＰパケット１０５を入力ポート２から入力して受信し、受信したＩＰパケット１０５をメモリ（主記憶装置）に記憶する。
受信制御部３により受信されメモリに記憶されるＩＰパケット１０５は、図１において、プロキシサーバ２６とＷＷＷサーバ２３との間およびプロキシサーバ２６と端末２１との間で通信されているＩＰパケット１０５であり、ＳＷ２７のポートモニタ機能により転送されたＩＰパケット１０５である。ＩＰパケット１０５のＴＣＰデータ１０３は社内ネットワーク２２の端末２１からインターネット２４のＷＷＷサーバ２３へのメッセージ１０６およびインターネット２４のＷＷＷサーバ２３から社内ネットワーク２２の端末２１へのメッセージ１０６を示す。サイズの大きいメッセージ１０６は複数に分割され、それぞれがＴＣＰデータ１０３として複数のＩＰパケット１０５により送信される。
【００５９】
＜Ｓ１２０：ＴＣＰ解析処理＞
次に、ＴＣＰ解析部４はＳ１１０で受信制御部３により受信されメモリに記憶されたＩＰパケット１０５に含まれるＴＣＰパケット１０４を参照し、ＴＣＰヘッダ１０２に基づいてＴＣＰパケット１０４を解析する。
例えば、ＴＣＰ解析部４は、図６において、ＴＣＰパケット１０４がＳＹＮ４０、ＳＹＮ／ＡＣＫ４１、ＡＣＫ４２、ＧＥＴ４３、Ｒｅｓ４４、Ｄａｔａ４５、ＡＣＫ４７、ＦＩＮ／ＡＣＫ５０、ＦＩＮ／ＡＣＫ５１またはＡＣＫ５２のいずれであるかを識別する。
また例えば、ＴＣＰ解析部４は、ＳＹＮ４０およびＳＹＮ／ＡＣＫ４１に基づいてコネクション情報の設定を行う。
【００６０】
＜Ｓ１３０：ＴＣＰ順序制御処理＞
次に、ＴＣＰ順序制御部５は各ＴＣＰデータ１０３の並びの順序を判定する。
例えば、ＴＣＰ順序制御部５はＩＰパケット１０５に含まれるＴＣＰパケット１０４を参照し、ＴＣＰヘッダ１０２に設定されているシーケンス番号（ｓｅｑ）に基づいて分割前のメッセージ１０６内でのＴＣＰデータ１０３の並び位置を特定する。
【００６１】
＜Ｓ１４０：アプリケーション解析処理＞
そして、アプリケーション解析部６は各ＴＣＰデータ１０３を順序通りに並べてメッセージ１０６を通信履歴１２０として記録部９に記録する。
例えば、アプリケーション解析部６は各ＴＣＰデータ１０３をＩＰパケット１０５から取得し、取得した各ＴＣＰデータ１０３を分割前のメッセージ１０６内での並び位置に対応させて通信履歴として記録部９に記録する。
【００６２】
＜Ｓ１５０：データ表示処理＞
また、データ表示部７は記録部９から通信履歴１２０を取得し、取得した通信履歴１２０を表示装置９０１に表示したり、プリンタ装置９０６から印刷したりする。
【００６３】
図１１は、実施の形態１における通信記録方法のＴＣＰ解析処理（Ｓ１２０）〜アプリケーション解析処理（Ｓ１４０）の詳細を示すフローチャートである。
実施の形態１における通信記録方法のＴＣＰ解析処理（Ｓ１２０）〜アプリケーション解析処理（Ｓ１４０）の詳細について、図１１に基づいて以下に説明する。
【００６４】
実施の形態１の通信記録方法において、受信制御処理（Ｓ１１０）で受信制御部３によりＩＰパケット１０５が新たに受信されメモリに記憶された場合、新たなＩＰパケット１０５に対して図１１で示すＴＣＰ解析処理（Ｓ１２０）〜アプリケーション解析処理（Ｓ１４０）が実行される。
【００６５】
まず、ＴＣＰ解析処理（Ｓ１２０）として以下の処理が実行される。
ＴＣＰ解析部４はメモリに新たに記憶されたＩＰパケット１０５のＴＣＰヘッダ１０２を参照し、ＴＣＰパケット１０４がコネクション確立時に送信されるＳＹＮ４０またはＳＹＮ／ＡＣＫ４１であるか、コネクション切断時に送信されるＦＩＮ／ＡＣＫ５０であるか、その他のＴＣＰパケット１０４であるかを判定する。以下、メモリに新たに記憶されたＩＰパケット１０５を「受信パケット」という（Ｓ１）。
【００６６】
Ｓ１においてＴＣＰパケット１０４がＳＹＮ４０またはＳＹＮ／ＡＣＫ４１であった場合、ＴＣＰ解析部４はＴＣＰヘッダ１０２およびＩＰヘッダ１０１に基づいてコネクション情報を生成する（Ｓ４）。
【００６７】
このとき、ＴＣＰ解析部４は、ＳＹＮ４０がメモリに記憶された場合、ＩＰヘッダ１０１に設定されている「送信元ＩＰアドレス」および「送信先ＩＰアドレス」、ＴＣＰヘッダ１０２に設定されている「送信元ポート番号」および「送信先ポート番号」をコネクションを識別する情報（以下、「コネクション識別子」という）として、コネクション情報を生成する。また、ＴＣＰ解析部４はＳＹＮ４０のＴＣＰヘッダ１０２に設定されている「シーケンス番号（ｓｅｑ）」に「１」を加算した値をＳＹＮ４０の送信元のＮｅｘｔＳｅｑとしてコネクション情報に設定する。
また、ＴＣＰ解析部４は、ＳＹＮ／ＡＣＫ４１がメモリに記憶された場合、ＴＣＰヘッダ１０２に設定されているｓｅｑに「１」を加算した値をＳＹＮ／ＡＣＫ４１の送信元のＮｅｘｔＳｅｑとしてコネクション情報に設定する。
「ＮｅｘｔＳｅｑ」は次に記録部９に記録されるＴＣＰデータ１０３のシーケンス番号を示す。
【００６８】
Ｓ４の処理後、ＴＣＰ解析部４は受信パケット（ＳＹＮ４０およびＳＹＮ／ＡＣＫ４１）をメモリから消去する。以下、メモリからの消去を「廃棄」という（Ｓ２）。
受信パケット（ＳＹＮ４０およびＳＹＮ／ＡＣＫ４１）に対する処理はこれで終了する。
【００６９】
Ｓ１においてＴＣＰパケット１０４がＦＩＮ／ＡＣＫ５０であった場合、ＴＣＰ解析部４はＴＣＰヘッダ１０２およびＩＰヘッダ１０１に基づいて対応するコネクション情報を特定し、特定したコネクション情報を削除する（Ｓ４ｂ）。
【００７０】
Ｓ４ｂの処理後、ＴＣＰ解析部４は、ＴＣＰデータ１０３が含まれていないため（Ｓ１１）、受信パケット（ＦＩＮ／ＡＣＫ５０）を廃棄する（Ｓ２）。
受信パケット（ＦＩＮ／ＡＣＫ５０）に対する処理はこれで終了する。
【００７１】
Ｓ１においてＴＣＰパケット１０４がその他の種類であった場合、ＴＣＰ解析部４はＴＣＰヘッダ１０２に基づいて受信パケットのＴＣＰステートが正しいか否かを判定する（Ｓ３）。
【００７２】
例えば、ＴＣＰ解析部４は、受信パケットのコネクション識別子で識別されるコネクション情報の有無を調べ、コネクション情報が有ればＴＣＰステートを「ＯＫ」とし、コネクション情報が無ければＴＣＰステートを「ＮＧ」とする。
【００７３】
Ｓ３においてＴＣＰステートが「ＮＧ」であった場合、ＴＣＰ解析部４は受信パケットを廃棄する（Ｓ２）。
【００７４】
Ｓ３においてＴＣＰステートが「ＯＫ」であった場合、ＴＣＰ解析部４はＴＣＰデータ１０３のサイズが「０」であるか否かを判定する。ＴＣＰデータ１０３のサイズはＩＰヘッダ１０１に設定されているＩＰパケット１０５の「パケット長」からＩＰヘッダ１０１に設定されているＩＰヘッダ１０１の「ヘッダ長」を減算して求められる。以下、受信パケットのＴＣＰデータ１０３を「受信データ」とし、受信データのサイズを「受信サイズ」とする（Ｓ１１）。
【００７５】
Ｓ１１において受信サイズが「０」であった場合、ＴＣＰ解析部４は受信パケットを廃棄する（Ｓ２）。
【００７６】
次に、Ｓ１１において受信サイズが「０」でないと判定された受信パケットに対して順序判定処理Ｓ１３１がＴＣＰ順序制御処理Ｓ１３０として以下のように実行される。
【００７７】
ＴＣＰ順序制御部５は、受信パケットのＴＣＰヘッダ１０２と受信パケットのコネクション情報とを参照し、受信パケットのＴＣＰヘッダ１０２に設定されているｓｅｑとコネクション情報に設定されている受信パケットの送信元のＮｅｘｔＳｅｑとが同じか否かを判定する（Ｓ５）。
【００７８】
Ｓ５においてｓｅｑとＮｅｘｔＳｅｑとが同じでなかった場合、つまり、順序通りに受信データを受信できなかった場合、受信パケットに対する処理は終了する。このとき、受信パケットは廃棄されずメモリに記憶されたまま保持される。以下、メモリに保持された受信パケットを「保持パケット」という（Ｓ７）。
【００７９】
Ｓ５においてｓｅｑとＮｅｘｔＳｅｑとが同じであった場合、ＴＣＰ順序制御部５は受信データに付与できるＴＣＰデータ１０３を含む保持パケット（以下、「付与パケット」という）が有るか否かを判定する（Ｓ５０）。
【００８０】
このとき、ＴＣＰ順序制御部５は受信パケットのｓｅｑに受信サイズを加算した値がｓｅｑとして設定されている保持パケットを付与パケットとして特定する。付与パケットのＴＣＰデータ１０３は受信データとｓｅｑが連続し、メッセージ１０６内で受信データの後に続くデータである。
さらに、ＴＣＰ順序制御部５は、同様にして、付与パケットに対する第２の付与パケット、第２の付与パケットに対する第３の付与パケットというように、ＴＣＰデータ１０３が受信データのシーケンス番号から連続する関係にある付与パケットを全て特定する。
【００８１】
Ｓ５０において付与パケットが無かった場合、ＴＣＰ順序制御部５は受信パケットをアプリケーション解析部６に通知し、アプリケーション解析部６は受信パケットに対して以下に説明するアプリケーション解析処理（Ｓ１４０）を実行する。
アプリケーション解析処理（Ｓ１４０）の実行後、受信パケットに対する処理は終了する。
【００８２】
Ｓ５０において付与パケットが有った場合、ＴＣＰ順序制御部５は受信パケットとＳ５０で特定した付与パケットとを受信パケットとしてアプリケーション解析部６に通知し（Ｓ５１）、アプリケーション解析部６は受信パケット（付与パケットを含む）に対して以下に説明するアプリケーション解析処理（Ｓ１４０）を実行する。
アプリケーション解析処理（Ｓ１４０）の実行後、受信パケットに対する処理は終了する。
【００８３】
図１２は、実施の形態１における通信記録方法のアプリケーション解析処理（Ｓ１４０）の詳細を示すフローチャートである。
実施の形態１における通信記録方法のアプリケーション解析処理（Ｓ１４０）の詳細について、図１２に基づいて以下に説明する。
【００８４】
アプリケーション解析部６は受信パケットをメモリから読み出して受信データを記録部９に記録し、受信パケットをメモリから消去する。受信パケットに付与パケットが含まれる場合、アプリケーション解析部６は、さらに、付与パケットをメモリから読み出して付与パケットに設定されているＴＣＰデータ１０３（以下、「付与データ」という）を記録部９に記録し、付与パケットを削除する（Ｓ１３）。
【００８５】
このとき、アプリケーション解析部６は受信パケットのｓｅｑを参照し、受信データをｓｅｑに対応させて記録部９に記録する。例えば、アプリケーション解析部６は図７に示したような形式で受信データをメッセージ１０６の一部として記録する。例えば、図７において、Ｒｅｓｍ１０８がＲｅｓ４４とＤａｔａ４５とに分割されて送信された場合、アプリケーション解析部６は、レスポンスポインタ８２に、Ｒｅｓ４４のＴＣＰデータ１０３として設定されたＲｅｓｍ１０８の前半部分の記録された記憶領域のアドレスを第１のポインタとして設定する。さらに、アプリケーション解析部６は、レスポンスポインタ８２に、Ｄａｔａ４５のＴＣＰデータ１０３として設定されたＲｅｓｍ１０８の後半部分の記録された記憶領域のアドレスを第２のポインタとして設定する。さらに、Ｒｅｓｍ１０８の前半部分（Ｒｅｓ４４に設定されたＴＣＰデータ１０３）と後半部分（Ｄａｔａ４５に設定されたＴＣＰデータ１０３）とは、第１のポインタと第２のポインタとが「第１のポインタ＜第２のポインタ」の関係を満たすように記憶される。さらに、Ｒｅｓｍ１０８の前半部分と後半部分とは、連続する記憶領域に記録される。リクエストポインタ８１およびレスポンスポインタ８２は新たなメッセージ１０６の受信データが記録される際に新たに生成され、メッセージ１０６を構成する受信データの記録の度に受信データの記録領域を示すアドレスが追加される。
【００８６】
さらに、アプリケーション解析部６は、Ｓ１３で受信データ（付与データを含む）を記録部９に記録したため、受信パケットの送信元のＮｅｘｔＳｅｑに受信サイズ（付与データのサイズを含む。以下、付与データのサイズを「付与サイズ」という）を加算して受信パケットのコネクション情報を更新する。「ＮｅｘｔＳｅｑ」は次に記録部９に記録されるＴＣＰデータ１０３のｓｅｑを示す（Ｓ２１）。
受信パケットに対するアプリケーション解析処理（Ｓ１４０）はこれで終了する。
【００８７】
次に、図６に示した通信シーケンスを例にして、図１１および図１２に示したＴＣＰ解析処理（Ｓ１２０）〜アプリケーション解析処理（Ｓ１４０）を説明する。
【００８８】
端末２１からの情報取得要求は、プロキシサーバ２６を経由してＷＷＷサーバ２３に通知される。プロキシサーバ２６がインターネット２４に対して送受信するパケットはＳＷ２７経由で通信記録装置１に通知される。ＷＷＷサーバ２３への接続に使用されるＨＴＴＰプロトコルはＴＣＰ上で動作するため、プロキシサーバ２６は、コネクションの確立のため、ＳＹＮ４０を送信する。通信記録装置１の受信制御部３はすべてのパケットを受信するプロミスカスモードに設定され、他ホスト宛のパケットを受信できる。
【００８９】
受信制御部３によりＳＹＮ４０が受信されたら、ＴＣＰ解析部４はＴＣＰの種類およびＴＣＰステートをチェックする（ステップ１、３）。ＴＣＰ解析部４は、受信したパケットの送信元ＩＰアドレス、送信先（宛先）ＩＰアドレス、送信元ポート番号及び送信先（宛先）ポート番号が内部に登録されているかを解析し、登録されていなければパケット内のアドレス、ポート番号をコネクション情報として登録する（ステップ４）。以降、ＴＣＰ解析部４は、パケットが受信された際、確立されたコネクション上でパケットが送受信されているかをチェックする（ステップ３）。そして、ＴＣＰ解析部４は、コネクション未確立でパケットが送信されている場合、ＴＣＰステートエラーとしてパケットを廃棄する（ステップ２）。コネクション情報は、コネクション確立後、通信が行われている間保持され、コネクション切断パケット（ＦＩＮ／ＡＣＫ５０）が受信された時に削除される（ステップ４ｂ）。受信されたＳＹＮ４０は、ＴＣＰステートチェック後、廃棄される（ステップ２）。
【００９０】
ＳＹＮ４０を受信したＷＷＷサーバ２３は、ＳＹＮ／ＡＣＫ４１を送信する。ＳＹＮ／ＡＣＫ４１は、ＴＣＰ解析部４でのチェック（ステップ３）後に廃棄される（ステップ２）。
【００９１】
次に、プロキシサーバ２６はＡＣＫ４２を送信する。通信記録装置１はプロキシサーバ２６が送信したＡＣＫ４２を受信する。このとき、「社内（プロキシサーバ２６）→インターネット（ＷＷＷサーバ２３）」の向きで送信されるパケットのＮｅｘｔＳｅｑ（Ｏ）（以下、プロキシサーバ２６のＮｅｘｔＳｅｑ（Ｏ）という）は「１００」である。また、「社内（プロキシサーバ２６）←インターネット（ＷＷＷサーバ２３）」の向きで送信されるパケットのＮｅｘｔＳｅｑ（Ｉ）（以下、ＷＷＷサーバ２３のＮｅｘｔＳｅｑ（Ｉ）という）は「７０１」である。
次に、ＴＣＰ解析部４は、ＡＣＫ４２のデータサイズ（ＴＣＰデータ１０３のサイズ、受信サイズ）をチェックするが（Ｓ１１）、サイズが「０」のためＡＣＫ４２を廃棄する（ステップ２）。
【００９２】
次に、プロキシサーバ２６はＧＥＴ４３を送信する。受信制御部３によりＧＥＴ４３が受信された場合、ＴＣＰ解析部４は、ＧＥＴ４３のＴＣＰ種類（“以外”）を判定し（ステップ１）、ＴＣＰステート（“ＯＫ”）を判定し（ステップ３）、受信サイズ（＞０）を判定する（ステップ１１）。
次に、ＴＣＰ順序制御部５は、プロキシサーバ２６のＮｅｘｔＳｅｑ（Ｏ）と受信したＧＥＴ４３のＴＣＰシーケンス番号とを比較する（ステップ５）。ＮｅｘｔＳｅｑ（Ｏ）は「１００」であり、ＧＥＴ４３のシーケンス番号と一致する。
次に、ＴＣＰ順序制御部５は、保持しているデータの中で受信したデータの後方に位置するデータがあるかどうかを解析する（ステップ５０）。
ＧＥＴ４３に対する保持データはないため、次に、アプリケーション解析処理（ステップ１４０）が実行される。
アプリケーション解析処理（ステップ１４０）では、ＧＥＴ４３のメッセージヘッダ７１およびメッセージボディ７２が記録部９に記録され（ステップ１３）、ＮｅｘｔＳｅｑ（Ｏ）が受信サイズ分更新され「２００」になる（ステップ２１）。
【００９３】
ＧＥＴ４３を受信したＷＷＷサーバ２３はＲｅｓ４４およびＤａｔａ４５を送信する。
受信制御部３によりＲｅｓ４４が受信された場合、ＴＣＰ解析部４は、ＧＥＴ４３と同様に、Ｒｅｓ４４に対してＴＣＰ解析処理（ステップ１２０）を行う。
次に、ＴＣＰ順序制御部５は、ＷＷＷサーバ２３のＮｅｘｔＳｅｑ（Ｉ）と受信したＲｅｓ４４のＴＣＰシーケンス番号とを比較する（ステップ５）。ＮｅｘｔＳｅｑ（Ｉ）は「７０１」であり、Ｒｅｓ４４のシーケンス番号と一致する。
次に、ＴＣＰ順序制御部５は、保持しているデータの中で受信したデータの後方に位置するデータがあるかどうかを解析する（ステップ５０）。
Ｒｅｓ４４に対する保持データはないため、次に、アプリケーション解析処理（ステップ１４０）が実行される。
アプリケーション解析処理（ステップ１４０）では、Ｒｅｓ４４のメッセージヘッダ７１およびメッセージボディ７２が記録部９に記録され（ステップ１３）、ＮｅｘｔＳｅｑ（Ｉ）が受信サイズ分更新され「１７０１」になる（ステップ２１）。
Ｄａｔａ４５もＲｅｓ４４と同様に処理されて記録部９に記録され、ＮｅｘｔＳｅｑ（Ｉ）は「２７０１」に更新される。
【００９４】
Ｄａｔａ４５を受信したプロキシサーバ２６はＡＣＫ４７を送信する。
受信制御部３によりＡＣＫ４７が受信された場合、ＡＣＫ４７はデータサイズが「０」のため廃棄される（ステップ２）。
【００９５】
以降、コネクション切断のためＦＩＮ／ＡＣＫ５０、ＦＩＮ／ＡＣＫ５１、ＡＣＫ５２がプロキシサーバ２６とＷＷＷサーバ２３との間でやりとりされ受信制御部３により受信されるが、いずれも廃棄され（ステップ２）、処理は終了する。このとき、ＴＣＰコネクションが切断されるため、ＴＣＰ解析部４はコネクション情報を削除する（ステップ４ｂ）。
【００９６】
図１３は、実施の形態１における通信シーケンスの一例を示す図である。
次に、パケットがメッセージ１０６内での並び順とは異なる順序で送信先に届いた場合のＴＣＰ解析処理（Ｓ１２０）〜アプリケーション解析処理（Ｓ１４０）について、図１１〜図１３に基づいて説明する。
図１３では、図６に対してＲｅｓ４４とＤａｔａ４５との順序が逆転している。
【００９７】
ＳＹＮ４０〜ＧＥＴ４３に対する動作は図６に基づく上記の例と同様である。
ＧＥＴ４３に対する動作後、プロキシサーバ２６のＮｅｘｔＳｅｑ（Ｏ）は「２００」であり、ＷＷＷサーバ２３のＮｅｘｔＳｅｑ（Ｉ）は「７０１」である。
【００９８】
受信制御部３によりＤａｔａ４５が受信された場合、ＴＣＰ解析部４によるＴＣＰ解析処理（Ｓ１２０）の後、ＴＣＰ順序制御部５は、ＷＷＷサーバ２３のＮｅｘｔＳｅｑ（Ｉ）と受信したＤａｔａ４５のＴＣＰシーケンス番号とを比較する（ステップ５）。ここでは、ＮｅｘｔＳｅｑ（Ｉ）「７０１」とＤａｔａ４５のシーケンス番号「１７０１」とが不一致のため、Ｄａｔａ４５は記録部９に記録されず、メモリに保持される（ステップ７）。
【００９９】
次に、受信制御部３によりＲｅｓ４４が受信されると、ＴＣＰ解析部４によるＴＣＰ解析処理（Ｓ１２０）の後、ＴＣＰ順序制御部５は、ＷＷＷサーバ２３のＮｅｘｔＳｅｑ（Ｉ）と受信したＲｅｓ４４のＴＣＰシーケンス番号とを比較する（ステップ５）。このとき、ＮｅｘｔＳｅｑ（Ｉ）「７０１」とＲｅｓ４４のシーケンス番号「７０１」とは一致する。そのため、ＴＣＰ順序制御部５は、保持しているデータにこのＲｅｓ４４の後ろに付与できるデータがあるかどうかをチェックする（ステップ５０）。保持パケットには先に受信したＤａｔａ４５があるため、ＴＣＰ順序制御部５はＲｅｓ４４の後ろにＤａｔａ４５を付与したものを受信パケットとしてアプリケーション解析部６に通知する（ステップ５１）。
アプリケーション解析処理（Ｓ１４０）では、図６に基づく先の例と同様に、Ｒｅｓ４４のメッセージヘッダ７１とメッセージボディ７２およびＤａｔａ４５のメッセージボディ７２が記録部９に記録され（ステップ１３）、ＮｅｘｔＳｅｑ（Ｉ）が受信サイズ分（Ｒｅｓ４４のＴＣＰデータ１０３のサイズ＋Ｄａｔａ４５のＴＣＰデータ１０３のサイズ）更新され「２７０１」になる（ステップ２１）。
【０１００】
ＡＣＫ４７〜ＡＣＫ５２に対する動作は図６に基づく上記の例と同様である。
【０１０１】
実施の形態１では、以下のような通信記録装置１および通信記録装置１のアプリケーションデータ解析方法（通信記録方法）について説明した。
【０１０２】
通信記録装置１は、受信制御部３、ＴＣＰ解析部４、ＴＣＰ順序制御部５、アプリケーション解析部６、記録部９およびデータ表示部７を有し、受信したデータのシーケンス番号を解析し、データが順序どおり到着した場合は、データを組み立てバッファ（主記憶装置、メモリ）に保持せずにアプリケーション解析を実施して記録する。
受信制御部３は、ネットワークから他ホスト宛のパケットを含めすべてのパケットを受信する。
ＴＣＰ解析部４は、受信制御部３により受信されたパケットのＴＣＰステートを解析する。
ＴＣＰ順序制御部５は、パケットの順序が逆転していた場合に正しい順序になるよう制御する。
アプリケーション解析部６は、アプリケーションデータ（メッセージ１０６）を解析する。
記録部９は、アプリケーション解析部６の解析結果（アプリケーションデータ）が記録される。
データ表示部７は、記録部９のデータを表示する。
【０１０３】
以上のように、通信記録装置１は、他ホスト宛のデータに対して受信したデータのシーケンス番号とＮｅｘｔＳｅｑとを比較し、一致する場合、つまり、データが順序どおり到着した場合にはデータを保持しないでアプリケーション解析を実行する。このため、通信記録装置１はメモリなどのリソースを消費せず、アプリケーションデータを記録することができる。
また、通信記録装置１は、シーケンス番号が一致しない場合にはデータを保持し、このデータの前に位置するデータを受信した時点で保持データを付与してアプリケーション解析を実施する。このため、通信記録装置１はパケットの順序が逆転した場合にもアプリケーションデータを記録することができる。
【０１０４】
実施の形態２．
実施の形態２では、通信記録装置１が複数のメッセージ１０６の含まれるパケットを処理する形態について説明する。例えば、複数のメッセージ１０６が含まれるパケットとは、先に送信された第１のメッセージの終端を含む部分と第１のメッセージの後で送信された第２のメッセージの先頭を含む部分とが含まれるパケットである。
以下、実施の形態１と異なる事項について主に説明し、説明を省略する事項については実施の形態１と同様であるものとする。
【０１０５】
図１４は、実施の形態２における通信記録装置１の機能構成図である。
図１４において、実施の形態２における通信記録装置１は、実施の形態１の通信記録装置１の構成に加えて、終端検知部１０を備える。
【０１０６】
終端検知部１０は、受信制御部３により受信され主記憶装置に記憶された各パケットからメッセージ１０６の終端を検出する。
【０１０７】
例えば、終端検知部１０（終端特定部）は、受信制御部３により主記憶装置に記憶された複数のパケットそれぞれのサイズと複数のパケットに含まれる複数のメッセージ１０６それぞれのサイズとに基づいて、複数のパケットのうち各メッセージ１０６の終端が含まれるパケットを終端パケットとしてＣＰＵを用いて特定する。
【０１０８】
また例えば、終端検知部１０（終端特定部）は、終端パケットに第１のアプリケーションデータの終端と第２のアプリケーションデータの先頭とが含まれているか否かを判定する。
【０１０９】
アプリケーション解析部６は、終端検知部１０により特定された各メッセージ１０６の終端パケットに基づいて、受信制御部３により主記憶装置に記憶された複数のパケットをメッセージ１０６毎に区別する。そして、アプリケーション解析部６は、複数のパケットに含まれる複数のメッセージ１０６をメッセージ１０６毎に区別して記録部９に記録する。
【０１１０】
また、アプリケーション解析部６は、後述する終端検知部１０により終端パケットに第１のアプリケーションデータの終端と第２のアプリケーションデータの先頭とが含まれていると判定された場合、次のような処理を行う。アプリケーション解析部６は、終端パケットから第１のアプリケーションデータと第２のアプリケーションデータとを抽出し、第１のアプリケーションデータと第２のアプリケーションデータとを区別して記録部９に記録する。
【０１１１】
図１５は、分割されたメッセージ１０６を示す図である。
図１５において、メッセージ１０６ａのサイズが大きい場合、メッセージ１０６ａは複数に分割され、複数のパケットで送信される。また、メッセージ１０６ａの終端を含んだパケットには、メッセージ１０６ａの終端部分を含めてＴＣＰデータ１０３のサイズが所定の最大サイズになるように、メッセージ１０６ａの次に送信されるメッセージ１０６ｂの先頭部分が設定される。
例えば、メッセージ１０６ａのサイズが１５００バイト（ｂｙｔｅ）であり、メッセージ１０６ｂのサイズが５００バイトであり、ＴＣＰデータ１０３の最大サイズが１０００バイトである場合、メッセージ１０６ａとメッセージ１０６ｂとは、メッセージ１０６ａの先頭部分が設定されたＲｅｓ４４と、メッセージ１０６ａの終端部分およびメッセージ１０６ｂ（先頭部分〜終端部分）が設定されたＤａｔａ／Ｒｅｓ５３（終端パケット）との２つのパケットで送信される。
【０１１２】
図１６は、実施の形態２における通信記録方法のアプリケーション解析処理（Ｓ１４０）の詳細を示すフローチャートである。
実施の形態２における通信記録方法のアプリケーション解析処理（Ｓ１４０）の詳細について、図１６に基づいて以下に説明する。
ＴＣＰ解析処理（Ｓ１２０）〜ＴＣＰ順序制御処理（Ｓ１３０）は、実施の形態１（図１１）と同じである。
【０１１３】
まず、アプリケーション解析部６は受信データがメッセージ１０６の先頭であるか否かを判定する（Ｓ１６）。
【０１１４】
例えば、アプリケーション解析部６は後述するコンテントサイズと後述する記録サイズとを比較し、コンテントサイズと記録サイズとが一致する場合に受信データはメッセージ１０６の先頭であると判定する。
コンテントサイズはメッセージ１０６のメッセージボディ７２のサイズを示し、記録サイズはメッセージ１０６のメッセージボディ７２のうち記録部９に記録されたデータのサイズを示す。コンテントサイズと記録サイズとはＴＣＰ解析部４によるコネクション情報の生成時（Ｓ４）に初期値として「０」が設定されているものとする。コンテントサイズと記録サイズとは、コネクションを確立する双方それぞれに対して設定される。以下、「コンテントサイズ」および「記録サイズ」は“送信先”と明示しない場合、受信パケットの送信元に対するものとする。コンテントサイズと記録サイズとが同じであるのは、最初の受信データが受信された場合およびメッセージボディ７２が全て記録された場合のいずれかである。つまり、コンテントサイズと記録サイズが同じである場合、新たな受信データはメッセージ１０６の先頭を示す。
【０１１５】
Ｓ１６において受信データがメッセージ１０６の先頭であった場合、アプリケーション解析部６は受信パケットのコネクション情報に設定されている記録サイズを「０」に初期化する（Ｓ１７）。
【０１１６】
さらに、アプリケーション解析部６は、受信データの先頭から所定の位置に設定されているコンテントサイズ（メッセージヘッダ７１のヘッダフィールド６４内）を取得し、受信パケットのコネクション情報に設定する。また、受信サイズ（付与サイズを含む）からメッセージヘッダ７１のサイズを減算した値を「受信サイズＢ」として受信パケットのコネクション情報に設定する（Ｓ１８）。
【０１１７】
Ｓ１６において受信データがメッセージ１０６の先頭でなかった場合、アプリケーション解析部６は受信サイズを受信サイズＢに設定する（Ｓ１８ｂ）。
【０１１８】
次に、終端検知部１０は受信サイズＢと記録サイズとの合計値とコンテントサイズとを大小比較する。受信サイズＢと記録サイズとの合計値とコンテントサイズとが同じであるとき、受信データの終端はメッセージ１０６の終端となる（Ｓ１９）。
【０１１９】
コンテントサイズが受信サイズＢと記録サイズとの合計値より大きい場合とは、メッセージ１０６を分割する全てのパケットが受信されていないことを意味する。また、コンテントサイズが受信サイズＢと記録サイズとの合計値と等しい場合とは、メッセージ１０６を分割する全てのパケットが受信され、且つ、受信データに次のメッセージ１０６が含まれていないことを意味する。
【０１２０】
Ｓ１９においてコンテントサイズが受信サイズと記録サイズとの合計値以上であった場合、アプリケーション解析部６は、実施の形態１（図１２）と同様に、受信パケット（付与パケットを含む）に受信データとして設定されているメッセージボディ７２を受信サイズＢ分、記録部９に記録する。Ｓ１６において受信データがメッセージ１０６の先頭であった場合、メッセージヘッダ７１も記録される（Ｓ１３）。
【０１２１】
また、アプリケーション解析部６は、Ｓ１３において受信サイズＢ分のメッセージボディ７２を記録部９に記録したため、受信サイズＢを加算して記録サイズを更新する（Ｓ２０）。
【０１２２】
また、アプリケーション解析部６は、実施の形態１（図１２）と同様に、受信サイズを加算して送信元のＮｅｘｔＳｅｑを更新する（Ｓ２１）。
受信パケットに対するアプリケーション解析処理（Ｓ１４０）はこれで終了する。
【０１２３】
また、Ｓ１９においてコンテントサイズが受信サイズと記録サイズとの合計値未満であった場合、つまり、受信データに第１のメッセージの終端を含む部分（メッセージボディ７２の終端部分）が設定されていると共に第１のメッセージの終端の後に続いて第２のメッセージの先頭を含む部分が設定されている場合、アプリケーション解析部６は受信データ（付与データを含む）から第１のメッセージ部分を切り出す。以下、切り出した第１のメッセージを「切り出しデータ」とする（Ｓ２２）。
【０１２４】
次に、アプリケーション解析部６はＳ２２で受信データから切り出した切り出しデータ（メッセージボディ７２の終端部分）を記録部９に記録する（Ｓ１３ｂ）。
【０１２５】
このとき、アプリケーション解析部６は、Ｓ１３と同様に、切り出しデータをシーケンス番号に対応させて記録部９に記録する。切り出しデータはメッセージ１０６の最終データとして記録部９に記録される。
【０１２６】
また、アプリケーション解析部６は、Ｓ２２で受信データから切り出しデータ（メッセージボディ７２の終端部分）を切り出したため、切り出しデータのサイズ（以下、切り出しサイズとする）を減算して受信サイズを更新する（Ｓ２３）。
【０１２７】
また、アプリケーション解析部６は、Ｓ１３ｂにおいて切り出しデータを記録部９に記録したため、切り出しサイズを加算して記録サイズを更新する（Ｓ２４）。
【０１２８】
さらに、アプリケーション解析部６は、Ｓ１３ｂで切り出しデータを記録部９に記録したため、切り出しサイズを加算して送信元のＮｅｘｔＳｅｑを更新する（Ｓ２５）。
【０１２９】
そして、アプリケーション解析部６は、Ｓ２２で切り出しデータが切り出した残りの受信データ（付与データを含む）に対して、Ｓ１６以降の処理を実行する。
このとき、Ｓ２４において記録サイズが更新されているため、コンテントサイズと記録サイズとが等しく、受信データはメッセージ１０６の先頭と判断される（Ｓ１６）。
【０１３０】
図１７は、実施の形態２における通信シーケンスの一例を示す図であり、実施の形態１の図６に対してＤａｔａ４５をＤａｔａ／Ｒｅｓ５３に置き換えたものである。
図１５で説明したように、Ｄａｔａ／Ｒｅｓ５３はメッセージ１０６ａの終端部分とメッセージ１０６ｂ（先頭部分〜終端部分）とがＴＣＰデータ１０３として設定されたパケットである。
図１７に示す通信シーケンスを例にして、図１６に示したアプリケーション解析処理（Ｓ１４０）を説明する。
【０１３１】
ＳＹＮ４０〜ＡＣＫ４２は、実施の形態１で説明したように、ＴＣＰ解析処理（Ｓ１２０）で廃棄され（Ｓ２）、アプリケーション解析処理（Ｓ１４０）は実行されない。
【０１３２】
次に、プロキシサーバ２６からＷＷＷサーバ２３に送信されたＧＥＴ４３は、実施の形態１で説明したように、受信制御部３により受信されてメモリに記憶され（Ｓ１１０）、ＴＣＰ解析部４によりＴＣＰ解析処理（Ｓ１２０）され、ＴＣＰ順序制御部５によりＴＣＰ順序制御処理（Ｓ１３０）され、アプリケーション解析部６に受信パケットとして通知される。
【０１３３】
図１６において、アプリケーション解析部６は、ＧＥＴ４３がメッセージ１０６の先頭か否かを判定する（Ｓ１６）。このとき、プロキシサーバ２６用のコンテントサイズと記録サイズとは共に初期値「０」であるため、ＧＥＴ４３はメッセージ１０６の先頭と判断される。そこで、アプリケーション解析部６は、記録サイズを初期化し（Ｓ１７）、コンテントサイズの取得と受信サイズＢの設定とを行う（Ｓ１８）。
次に、終端検知部１０は、受信サイズＢと記録サイズとの合計値とコンテントサイズとを大小比較する（Ｓ１９）。ここで、受信サイズＢは「１００（からメッセージヘッダ７１のサイズを引いたもの）」、記録サイズは「０」、コンテントサイズは「１００（からメッセージヘッダ７１のサイズを引いたもの）」であるから受信サイズＢと記録サイズとの合計値はコンテントサイズと等しい。そこで、アプリケーション解析部６は、ＧＥＴ４３を記録部９に記録し（Ｓ１３）、記録サイズを受信サイズＢを加算した値に更新し（Ｓ２０）、プロキシサーバ２６のＮｅｘｔＳｅｑを受信サイズを加算した「２００」に更新し（Ｓ２１）、ＧＥＴ４３に対する処理を終了する。
【０１３４】
次に、ＷＷＷサーバ２３からプロキシサーバ２６に送信されたＲｅｓ４４は、実施の形態１で説明したように、受信制御部３により受信されてメモリに記憶され（Ｓ１１０）、ＴＣＰ解析部４によりＴＣＰ解析処理（Ｓ１２０）され、ＴＣＰ順序制御部５によりＴＣＰ順序制御処理（Ｓ１３０）され、アプリケーション解析部６に受信パケットとして通知される。
【０１３５】
図１６において、アプリケーション解析部６は、Ｒｅｓ４４がメッセージ１０６の先頭か否かを判定する（Ｓ１６）。このとき、ＷＷＷサーバ２３用のコンテントサイズと記録サイズとは共に初期値「０」であるため、Ｒｅｓ４４はメッセージ１０６ａの先頭と判断される。そこで、アプリケーション解析部６は、記録サイズを初期化し（Ｓ１７）、コンテントサイズ「１５００（からメッセージヘッダ７１のサイズを引いたもの）」の取得と受信サイズＢの設定とを行う（Ｓ１８）。
次に、終端検知部１０は、受信サイズＢと記録サイズとの合計値とコンテントサイズとを大小比較する（Ｓ１９）。ここで、受信サイズＢは「１０００（からメッセージヘッダ７１のサイズを引いたもの）」、記録サイズは「０」、コンテントサイズは「１５００（からメッセージヘッダ７１のサイズを引いたもの）」であるから受信サイズＢと記録サイズとの合計値はコンテントサイズより小さい。そこで、アプリケーション解析部６は、Ｒｅｓ４４を記録部９に記録し（Ｓ１３）、記録サイズを受信サイズＢを加算した値「１０００（からメッセージヘッダ７１のサイズを引いたもの）」に更新し（Ｓ２０）、ＷＷＷサーバ２３のＮｅｘｔＳｅｑを受信サイズを加算した「１７０１」に更新し（Ｓ２１）、Ｒｅｓ４４に対する処理を終了する。
【０１３６】
次に、ＷＷＷサーバ２３からプロキシサーバ２６に送信されたＤａｔａ／Ｒｅｓ５３は、実施の形態１で説明したように、受信制御部３により受信されてメモリに記憶され（Ｓ１１０）、ＴＣＰ解析部４によりＴＣＰ解析処理（Ｓ１２０）され、ＴＣＰ順序制御部５によりＴＣＰ順序制御処理（Ｓ１３０）され、アプリケーション解析部６に受信パケットとして通知される。
【０１３７】
図１６において、アプリケーション解析部６は、Ｄａｔａ／Ｒｅｓ５３がメッセージ１０６の先頭か否かを判定する（Ｓ１６）。このとき、プロキシサーバ２６用のコンテントサイズにはＲｅｓ４４の処理時に「１５００（からメッセージヘッダ７１のサイズを引いたもの）」が設定され、記録サイズにはＲｅｓ４４の処理時に「１０００（からメッセージヘッダ７１のサイズを引いたもの）」が設定されている。このため、コンテントサイズと記録サイズとは一致せず、Ｄａｔａ／Ｒｅｓ５３はメッセージ１０６の先頭ではないと判断される。
次に、終端検知部１０は、受信サイズＢと記録サイズとの合計値とコンテントサイズとを大小比較する（Ｓ１９）。ここで、受信サイズＢは「１０００」、記録サイズは「１０００（からメッセージヘッダ７１のサイズを引いたもの）」、コンテントサイズは「１５００（からメッセージヘッダ７１のサイズを引いたもの）」であるから受信サイズＢと記録サイズとの合計値はコンテントサイズより大きい。そこで、アプリケーション解析部６は、Ｄａｔａ／Ｒｅｓ５３にメッセージ１０６ａの他にメッセージ１０６ｂが含まれていると判断して、Ｄａｔａ／Ｒｅｓ５３からメッセージ１０６ａの終端部分（５００バイト）を切り出し（Ｓ２２）、切り出したメッセージ１０６ａの終端部分を記録部９に記録する（Ｓ１３ｂ）。また、アプリケーション解析部６は、受信サイズをメッセージ１０６ａの終端部分のサイズを減算した「５００」に更新し（Ｓ２３）、記録サイズをメッセージ１０６ａの終端部分のサイズを加算した「１５００（からメッセージヘッダ７１のサイズを引いたもの）」に更新し（Ｓ２４）、ＷＷＷサーバ２３のＮｅｘｔＳｅｑ（Ｉ）をメッセージ１０６ａの終端部分のサイズを加算した「２２０１」に更新する（Ｓ２５）。
【０１３８】
そして、アプリケーション解析部６はメッセージ１０６ａを切り出した残りのＤａｔａ／Ｒｅｓ５３（メッセージ１０６ｂ）に対してＳ１６から処理を行う。
アプリケーション解析部６は、残りのＤａｔａ／Ｒｅｓ５３（メッセージ１０６ｂ）がメッセージの先頭か否かを判定する（Ｓ１６）。このとき、コンテントサイズと記録サイズとは共に「１５００（からメッセージヘッダ７１のサイズを引いたもの）」であるため、残りのＤａｔａ／Ｒｅｓ５３はメッセージ１０６ｂの先頭と判断される。そこで、アプリケーション解析部６は、残りのＤａｔａ／Ｒｅｓ５３（メッセージ１０６ｂ）の記録サイズを初期化し（Ｓ１７）、コンテントサイズにメッセージ１０６ｂのサイズ「５００（からメッセージヘッダ７１のサイズを引いたもの）」の取得と受信サイズＢの設定とを行う（Ｓ１８）。
次に、終端検知部１０は、受信サイズＢと記録サイズとの合計値とコンテントサイズとを大小比較する（Ｓ１９）。ここで、受信サイズＢは「５００（からメッセージヘッダ７１のサイズを引いたもの）」、記録サイズは「０」、コンテントサイズは「５００（からメッセージヘッダ７１のサイズを引いたもの）」であるから受信サイズＢと記録サイズとの合計値はコンテントサイズと等しい。そこで、アプリケーション解析部６は、残りのＤａｔａ／Ｒｅｓ５３（メッセージ１０６ｂ）を記録部９に記録し（Ｓ１３）、記録サイズを受信サイズＢを加算した値に更新し（Ｓ２０）、ＷＷＷサーバ２３のＮｅｘｔＳｅｑを受信サイズを加算した「２７０１」に更新し（Ｓ２１）、Ｄａｔａ／Ｒｅｓ５３に対する処理を終了する。
【０１３９】
ＡＣＫ４７〜ＡＣＫ５２については、実施の形態１で説明したように、ＴＣＰ解析処理（Ｓ１２０）で廃棄され（Ｓ２）、アプリケーション解析処理（Ｓ１４０）は実行されない。
【０１４０】
上記のように、実施の形態２の通信記録装置１は、終端検知部１０がメッセージ１０６の終端が含まれるパケット（終端パケット）を特定することにより、アプリケーション解析部６が終端パケットに含まれる複数のメッセージ１０６を区別し、複数のメッセージ１０６をメッセージ１０６毎に区別して記録部９に記録することができる。
【０１４１】
実施の形態３．
実施の形態３では、プロキシサーバ２６とＷＷＷサーバ２３との間では正常に通信の完了したパケットが、ＳＷ２７内で通信記録装置１と接続するミラーリングポートへの転送時に発生したエラーにより損失したり、ＳＷ２７のミラーリングポートから通信記録装置１に繋がる通信ケーブル２９での伝送時に発生したエラーにより損失したりした場合について説明する。損失したパケットは、プロキシサーバ２６とＷＷＷサーバ２３との間では通信が完了しているため、プロキシサーバ２６とＷＷＷサーバ２３との間で再送されることはなく、通信記録装置１により受信されることはない。
以下、実施の形態１および実施の形態２と異なる事項について主に説明し、説明を省略する事項については実施の形態１および実施の形態２と同様であるものとする。
【０１４２】
実施の形態３における通信記録装置１の機能構成は実施の形態１および実施の形態２と同様である。
【０１４３】
実施の形態３において、ＴＣＰ順序制御部５（抜けデータ特定部）は、受信制御部３により主記憶装置に記憶されたＴＣＰパケット１０４に含まれるＴＣＰヘッダ１０２を参照する。そして、ＴＣＰ順序制御部５は、参照したＴＣＰヘッダ１０２に含まれる確認応答番号（ａｃｋ）に基づいて、受信制御部３により受信されていないＴＣＰデータ１０３であり、特定の通信端末装置間（例えば、プロキシサーバ２６とＷＷＷサーバ２３）で通信の完了したＴＣＰデータ１０３を抜けデータとしてＣＰＵを用いて特定する。
【０１４４】
アプリケーション解析部６は、ＴＣＰ順序制御部５により特定された抜けデータのサイズ分所定の値が設定されたデータを抜けデータとして生成し、生成した抜けデータを記録部９に記録する。
【０１４５】
図１８は、実施の形態３における通信記録方法のＴＣＰ解析処理（Ｓ１２０）〜アプリケーション解析処理（Ｓ１４０）の詳細を示すフローチャートである。
実施の形態３における通信記録方法のＴＣＰ解析処理（Ｓ１２０）〜アプリケーション解析処理（Ｓ１４０）の詳細について、図１８に基づいて以下に説明する。
【０１４６】
実施の形態３におけるＴＣＰ解析処理（Ｓ１２０）は、実施の形態１におけるＴＣＰ解析処理（Ｓ１２０）［図１１参照］からパケットの受信サイズ（ＴＣＰデータ１０３のサイズ）が「０」か否かの判定（Ｓ１１）が除かれたものである。
【０１４７】
実施の形態３におけるＴＣＰ順序制御処理（Ｓ１３０）は、実施の形態１におけるＴＣＰ順序制御処理（Ｓ１３０）［図１１参照］に抜けデータ特定処理（Ｓ１３２）が加わったものである。
【０１４８】
また、実施の形態３のＴＣＰ順序制御処理（Ｓ１３０）において、ＴＣＰ順序制御部５は、受信パケットを保持する際（Ｓ７）、受信パケットのＴＣＰヘッダ１０２に設定されているＳｅｑを受信パケットの送信元の「組み立てＳｅｑ」としてコネクション情報に設定する。但し、既に「組み立てＳｅｑ」が設定されている場合、ＴＣＰ順序制御部５は、設定済みの組み立てＳｅｑと受信パケットのＳｅｑとを大小比較し、受信パケットＳｅｑの方が小さい場合に組み立てＳｅｑを更新する。設定済みの組み立てＳｅｑの方が大きい場合、ＴＣＰ順序制御部５は、組み立てＳｅｑを更新しない。つまり、組み立てＳｅｑには（複数の）保持パケットの先頭のＳｅｑが設定される。なお、「組み立てＳｅｑ」はＴＣＰ解析部４によるコネクション情報の生成時（Ｓ４）に初期値「０」が設定されるものとする。「組み立てＳｅｑ」はコネクションを確立する通信端末の双方に対して設定される。
以下に、抜けデータ特定処理（Ｓ１３２）について説明する。
【０１４９】
順序判定処理（Ｓ１３１）においてアプリケーション処理（Ｓ１４０）または受信パケットの保持（Ｓ７）の後、ＴＣＰ順序制御部５は、受信パケットのＴＣＰヘッダ１０２と受信パケットのコネクション情報とを参照する。そして、ＴＣＰ順序制御部５は、受信パケットのＴＣＰヘッダ１０２に設定されているａｃｋ（確認応答番号）とコネクション情報に設定されている受信パケットの送信先（受信側）のＮｅｘｔＳｅｑとを大小比較する。この大小比較により、ＴＣＰ順序制御部５は、通信端末間（例えば、プロキシサーバ２６とＷＷＷサーバ２３）では正常に通信が完了したが通信記録装置１への転送中に損失して通信記録装置１により受信されないパケット（以下、抜けパケットという）の有無を判定する（Ｓ８）。
【０１５０】
Ｓ８において受信パケットのａｃｋが受信パケットの送信先のＮｅｘｔＳｅｑ以下であった場合、抜けパケットは無いため、受信パケットに対する処理は終了する。
【０１５１】
Ｓ８において受信パケットのａｃｋが受信パケットの送信先のＮｅｘｔＳｅｑより大きかった場合、ＴＣＰ順序制御部５は、受信パケットのＴＣＰヘッダ１０２と受信パケットのコネクション情報とを参照する。そして、ＴＣＰ順序制御部５は、受信パケットのＴＣＰヘッダ１０２に設定されているａｃｋとコネクション情報に設定されている受信パケットの送信先の組み立てＳｅｑとを大小比較する（Ｓ９）。
【０１５２】
受信パケットのａｃｋは受信を完了したＴＣＰデータ１０３のシーケンス番号（に「１」を加えたもの）を送信先に示すものである。このため、受信パケットのａｃｋが受信パケットの送信先のＮｅｘｔＳｅｑより大きい場合とは、少なくとも送信先のＮｅｘｔＳｅｑから続くＴＣＰデータ１０３が通信端末間では通信が完了したが受信制御部３には届かなかったことを意味する。このとき、送信先のＮｅｘｔＳｅｑから続くＴＣＰデータ１０３の受信を期待して保持パケットを保持し続けても仕方がない。そこで、Ｓ９において、ＴＣＰ順序制御部５は、受信パケットのａｃｋと受信パケットの送信先の組み立てＳｅｑとを大小比較して、保持し続けても仕方がない保持パケットの有無を判定する。
【０１５３】
Ｓ９において受信パケットのａｃｋが受信パケットの送信先の組み立てＳｅｑ未満であった場合、受信パケットに対する処理は終了する。この場合、保持データの前に位置するＴＣＰデータ１０３が受信される可能性があるため、受信パケットの送信先から送信されて保持された保持パケット（以下、送信先の保持パケットという）はそのまま保持される。
【０１５４】
Ｓ９において受信パケットのａｃｋが受信パケットの送信先の組み立てＳｅｑ以上であった場合、ＴＣＰ順序制御部５は、受信パケットの送信先の組み立てＳｅｑから受信パケットの送信先のＮｅｘｔＳｅｑを減算した値を変数「Ｄｉｆｆ」に設定する。「Ｄｉｆｆ」は抜けパケットのＴＣＰデータ１０３のサイズを示す。以下、抜けパケットのＴＣＰデータ１０３を「抜けデータ」とし、抜けデータのサイズを「抜けサイズ」とする（Ｓ４１）。
【０１５５】
Ｓ４１の後、保持パケットを記録部９に記録するためのアプリケーション解析処理（Ｓ１４０）がアプリケーション解析部６により実行される。
【０１５６】
図１９は、実施の形態３における通信記録方法のアプリケーション解析処理（Ｓ１４０）の詳細を示すフローチャートである。
図２０は、実施の形態３における通信記録方法のアプリケーション解析処理（Ｓ１４０）の一部を示すフローチャートである。
実施の形態３における通信記録方法のアプリケーション解析処理（Ｓ１４０）の詳細について、図１９および図２０に基づいて以下に説明する。
【０１５７】
図１９において、アプリケーション解析部６はＤｉｆｆ（抜けデータのサイズ）が「０」か否かを判定する（Ｓ１０）。
【０１５８】
Ｓ１０においてＤｉｆｆが「０」であった場合、アプリケーション解析部６はＳ１１以降の処理を実行する。
Ｓ１０においてＤｉｆｆが「０」である場合とは図１８において順序判定処理（Ｓ１３１）後にアプリケーション解析処理（Ｓ１４０）が実行された場合であり、Ｓ１１以降の処理は受信データを記録部９に記録するために行われる処理である。
Ｓ１１以降の処理の詳細については後述する。
【０１５９】
Ｓ１０においてＤｉｆｆが「０」でなかった場合、アプリケーション解析部６は図２０で示すＳ５１以降の処理を実行する。
Ｓ１０においてＤｉｆｆが「０」でない場合とは図１８において抜けデータ特定処理（Ｓ１３２）後にアプリケーション解析処理（Ｓ１４０）が実行された場合であり、Ｓ５１以降の処理は送信先の保持データを記録部９に記録するために行われる処理である。
以下に、Ｓ５１以降の処理について説明する。
【０１６０】
図２０において、アプリケーション解析部６は、送信先の保持パケットのうち保持データのシーケンス番号が受信パケットのａｃｋ未満のものを特定する。ここで特定された保持パケットの保持データが以下で記録部９に記録される対象となる（Ｓ５１）。
【０１６１】
次に、アプリケーション解析部６は、抜けパケットの代わりとする代替パケットを作成する（Ｓ５２）。
【０１６２】
例えば、アプリケーション解析部６は、送信先の保持パケットのＩＰヘッダ１０１とＴＣＰヘッダ１０２とを代替パケットに設定し、ＩＰヘッダ１０１のパケットサイズやＴＣＰヘッダ１０２のｓｅｑなどを抜けデータに合わせて更新する。また例えば、アプリケーション解析部６は、抜けデータの代わりに記録部９に記録する代替データを作成し、作成した代替データを代替パケットに設定する。代替データのサイズはＤｉｆｆであり、代替データのデータ値は代替データであることを示す特定の値（例えば、オール０。以下、代替値とする）である。その他に、アプリケーション解析部６は受信パケットのａｃｋ未満で保持データの無い部分についても代替データを作成する。例えば、受信パケットのａｃｋ未満で保持データが無い部分とは、受信パケットのａｃｋが４０１であり、シーケンス番号が１０１〜２００の保持データＡとシーケンス番号が３０１〜４００の保持データＢとが有る場合、シーケンス番号が２０１〜３００のデータのことである。また例えば、受信パケットのａｃｋ未満で保持データが無い部分とは、受信パケットａｃｋが４０１であり、シーケンス番号が２０１〜３００の保持データが有る場合、シーケンス番号が３０１〜４００のデータのことである（Ｓ５２）。
【０１６３】
次に、アプリケーション解析部６は受信パケットのコネクション情報を参照し、受信パケットの送信先の記録サイズおよびＤｉｆｆの合計値と受信パケットの送信先のコンテントサイズとを比較する（Ｓ２６）。
【０１６４】
Ｓ２６において、送信先の記録サイズおよびＤｉｆｆの合計値が送信先のコンテントサイズより大きい場合、抜けパケットに次のメッセージ１０６のメッセージヘッダ７１が含まれる。つまり、次のメッセージ１０６のコンテントサイズが不明となり、以降のＴＣＰデータ１０３をメッセージ１０６毎に区別することはできない。
【０１６５】
そのため、アプリケーション解析部６はＳ５１で特定した保持データとＳ５２で生成した代替データとを記録部９に記録するが、図７に示したようにメッセージ１０６毎に区別はしない（Ｓ１３ｃ）。
【０１６６】
また、アプリケーション解析部６は、Ｓ１３ｃで保持データと代替データとを記録部９に記録したため、保持サイズと代替サイズとの合計値を加算して送信先の記録サイズを更新し（Ｓ５３）、保持サイズと代替サイズとの合計値を加算して送信先のＮｅｘｔＳｅｑを更新する（Ｓ５４）。
【０１６７】
そして、アプリケーション解析部６は、以後、受信パケットの送信先からのＴＣＰデータ１０３をメッセージ１０６毎に区別せずに記録部９に記録することを示すように異常フラグに「１」を設定する。この異常フラグは受信パケットのコネクション情報に受信パケットの送信先の異常フラグとして設定される（Ｓ３２）。
受信パケットに対する処理はこれで終了する。
【０１６８】
図２１は、記録サイズとＤｉｆｆとの合計値がコンテントサイズより大きい場合を示す図である。
図２１において、Ｒｅｓ４４は既に受信され記録部９に記録されているデータであり、Ｄａｔａ４５は抜けデータであり、Ｄａｔａ４６は保持データである。図２１ではメッセージヘッダ７１を除いてメッセージボディ７２の部分についてコンテントサイズ１１１と記録サイズ１１２を示している。図２１に示すように、記録サイズ１１２とＤｉｆｆ１１３との合計値がコンテントサイズ１１１より大きい場合、抜けデータであるＤａｔａ４５の途中から次のメッセージ１０６が始まることとなり、メッセージヘッダ７１が不明となる。このため、Ｄａｔａ４６が次のメッセージ１０６か２つ先のメッセージ１０６かも不明となる。図２１を「ケース２」とする。
ケース２の場合、アプリケーション解析部６は上記のように異常フラグに「１」を設定する。
【０１６９】
一方、Ｓ２６において、送信先の記録サイズおよびＤｉｆｆの合計値が送信先のコンテントサイズ以下である場合、アプリケーション解析部６は、実施の形態１での受信データと同様に、送信先の保持データ（および代替データ）をメッセージ１０６毎に区別して記録部９に記録することができる。
【０１７０】
図２２は、記録サイズとＤｉｆｆとの合計値がコンテントサイズ以下である場合を示す図であり、図２１に対応する図である。
図２２では、ケース１として、記録サイズ１１２とＤｉｆｆ１１３との合計値とコンテントサイズ１１１とが等しい場合を示している。ケース１では、Ｄａｔａ４６のＴＣＰデータ１０３は次のメッセージ１０６のメッセージヘッダ７１（先頭）から始まる。
また、図２２では、記録サイズ１１２とＤｉｆｆ１１３との合計値がコンテントサイズ未満である場合としてケース３、ケース４およびケース５を示している。
ケース３は、記録サイズ１１２とＤｉｆｆ１１３と保持サイズ１１４との合計値がコンテントサイズ１１１より大きい場合であり、Ｄａｔａ４６にはメッセージボディ７２の終端と次のメッセージ１０６のメッセージヘッダ７１とが含まれる。
ケース４は、記録サイズ１１２とＤｉｆｆ１１３と保持サイズ１１４との合計値がコンテントサイズ１１１と等しい場合であり、Ｄａｔａ４６のＴＣＰデータ１０３はメッセージボディ７２の終端で終わる。
ケース５は、記録サイズ１１２とＤｉｆｆ１１３と保持サイズ１１４との合計値がコンテントサイズ１１１より小さい場合であり、Ｄａｔａ４６には途中のメッセージボディ７２（終端無し）が含まれる。
【０１７１】
Ｓ２６において、送信先の記録サイズおよびＤｉｆｆの合計値が送信先のコンテントサイズ以下である場合（ケース１、ケース３、ケース４およびケース５）、処理は図１９の（２）に移り、アプリケーション解析部６は、Ｓ４１で特定した保持パケットとＳ４２で生成した代替パケットとを受信パケットとして、実施の形態１と同様に、Ｓ１６以下の処理を実行する。
但し、Ｓ１６において、受信データがメッセージの先頭で且つ代替データである場合、処理は（３）に移る。
【０１７２】
図２３は、実施の形態３におけるＧＥＴｍ１０７とＲｅｓｍ１０８とが設定された通信履歴１２０を示す図であり、実施の形態１の図７に対応する図である。
実施の形態３における通信記録装置１のアプリケーション解析部６は、図２３に示すように、消失して受信制御部３により受信されなかったパケット（Ｄａｔａ４５）のデータをデータ無しとして記録する。
【０１７３】
図２４は、実施の形態３における通信シーケンスの一例を示す図であり、実施の形態１の図６に対応する図である。
図２４に示す通信シーケンスを例にして、図１９に示したアプリケーション解析処理（Ｓ１４０）を説明する。
図２４では、Ｄａｔａ４５が消失し通信記録装置１により受信されていない。また、Ｄａｔａ４６はメッセージ１０６の終端を示すものとする（ケース４）。
【０１７４】
端末２１からの情報取得要求は、プロキシサーバ２６を経由してＷＷＷサーバ２３に通知される。プロキシサーバ２６がインターネット２４に対して送受信するパケットはＳＷ２７経由で通信記録装置１に通知される。ＷＷＷサーバ２３への接続に使用されるＨＴＴＰプロトコルはＴＣＰ上で動作するため、プロキシサーバ２６は、コネクションの確立のため、ＳＹＮ４０を送信する。通信記録装置１の受信制御部３によりＳＹＮ４０が受信されたら、ＴＣＰ解析部４はＴＣＰの種類およびＴＣＰステートをチェックする（ステップ１、３）。ＴＣＰ解析部４は、受信したパケットの送信元ＩＰアドレス、送信先（宛先）ＩＰアドレス、送信元ポート番号及び送信先（宛先）ポート番号が内部に登録されているかを解析し、登録されていなければパケット内のアドレス、ポート番号をコネクション情報として登録する（ステップ４）。以降、ＴＣＰ解析部４は、パケットが受信された際、確立されたコネクション上でパケットが送受信されているかをチェックする（ステップ３）。そして、ＴＣＰ解析部４は、コネクション未確立でパケットが送信されている場合、ＴＣＰステートエラーとしてパケットを廃棄する（ステップ２）。コネクション情報は、コネクション確立後、通信が行われている間保持され、コネクション切断パケット（ＦＩＮ／ＡＣＫ５０）が受信された時に削除される。受信されたＳＹＮ４０は、ＴＣＰステートチェック後、廃棄される（ステップ２）。
【０１７５】
ＳＹＮ４０を受信したＷＷＷサーバ２３は、ＳＹＮ／ＡＣＫ４１を送信する。ＳＹＮ／ＡＣＫ４１は、ＴＣＰ解析部４でのチェック（ステップ３）後に廃棄される（ステップ２）。
【０１７６】
次に、プロキシサーバ２６はＡＣＫ４２を送信する。通信記録装置１はプロキシサーバ２６が送信したＡＣＫ４２を受信する。ＴＣＰ解析部４はＡＣＫ４２に対して図１８に示したＴＣＰ解析処理（Ｓ１２０）を行う。このとき、プロキシサーバ２６のＮｅｘｔＳｅｑ（Ｏ）は「１００」であり、ＷＷＷサーバ２３のＮｅｘｔＳｅｑ（Ｉ）は「７０１」である。
ＴＣＰ順序制御部５は、ＡＣＫ４２のシーケンス番号（Ｓｅｑ）とプロキシサーバ２６のＮｅｘｔＳｅｑ（Ｏ）とを比較する（ステップ５）。ここで、ＡＣＫ４２のｓｅｑとプロキシサーバ２６のＮｅｘｔＳｅｑ（Ｏ）とは「１００」で一致する。このため、アプリケーション解析処理（ステップ１４０）が実行される。このとき、シーケンス番号の差分を示すＤｉｆｆは図１８のＳ４１での設定が行われていないため「０」である。
図１９のアプリケーション解析処理（ステップ１４０）では、Ｄｉｆｆが「０」のため（ステップ１０）、アプリケーション解析部６は受信サイズをチェックする（ステップ１１）、ＡＣＫ４２のサイズは０であり、ＡＣＫ４２に対するアプリケーション解析処理（Ｓ１４０）は終了する。また、図１８のステップ８において、ＡＣＫ４２のａｃｋとＷＷＷサーバ２３のＮｅｘｔＳｅｑ（Ｉ）とは「７０１」で一致するため、ＡＣＫ４２に対する処理は終了する。
【０１７７】
その後、プロキシサーバ２６は、ＧＥＴ４３を送信する。ＧＥＴ４３はＨＴＴＰリクエストとして送信される。受信制御部３によりＧＥＴ４３が受信された場合、ＴＣＰ解析部４はＧＥＴ４３に対して図１８に示したＴＣＰ解析処理（Ｓ１２０）を行う。次に、ＴＣＰ順序制御部５は、ＧＥＴ４３のヘッダのシーケンス番号とプロキシサーバ２６のＮｅｘｔＳｅｑ（Ｏ）とを比較する（Ｓ５）。ＧＥＴ４３のｓｅｑとプロキシサーバ２６のＮｅｘｔＳｅｑ（Ｏ）とは「１００」で一致するため、「Ｄｉｆｆ＝０」としてアプリケーション解析処理（ステップ１４０）が実行される。
図１９のアプリケーション解析処理（ステップ１４０）では、「Ｄｉｆｆ＝＝０」であり（ステップ１０）、「受信サイズ！＝０」であり（ステップ１１）、「異常フラグ！＝１」であるため（ステップ１２）、アプリケーション解析部６は受信データがメッセージ１０６の先頭かどうかをチェックする（ステップ１６）。
メッセージ１０６の先頭とは、図３のＧＥＴｍ１０７（ＨＴＴＰリクエストメッセージ）のリクエストライン６１の先頭から始まること（リクエストの場合）、もしくは、図４のＲｅｓｍ１０８（ＨＴＴＰレスポンスメッセージ）のステータスライン６８の先頭から始まること（レスポンスの場合）を意味する。コネクションを確立して最初に送信されるメッセージ１０６は、メッセージ１０６の先頭から送信される。
【０１７８】
ここで、前述した実施の形態２について補足する。
画像データのようにサイズの大きなデータを含んだＲｅｓｍ１０８（ＧＥＴレスポンス）は、図５に示したように、メッセージボディ７２は１つのパケットに格納されず、２つのパケットに分割されて送信される。この際、２つ目以降のパケットには、メッセージボディ７２のみが格納される。メッセージボディ７２のみが格納されるパケットはメッセージ１０６を先頭からではなく途中から示す。このように、メッセージ１０６が複数のパケットに分割された場合、実施の形態２で説明したように、終端検知部１０は、コンテントサイズおよび受信サイズに基づいてメッセージボディ７２のデータの区切りを検索し、データの終端を識別する（ステップ１９）。
図５では、Ｒｅｓ４４とＤａｔａ４５とが１つのメッセージＲｅｓｍ１０８として処理される。また、図１５では、メッセージ１０６ａがＲｅｓ４４とＤａｔａ／Ｒｅｓ５３との２つのパケットに分割され、さらに２つ目のパケット（Ｄａｔａ／Ｒｅｓ５３）にはメッセージ１０６ａのメッセージボディ７２とメッセージ１０６ｂのメッセージヘッダ７１とが格納されている。この場合（区切りの先にデータがある場合）、実施の形態２で説明したように、アプリケーション解析部６はＤａｔａ／Ｒｅｓ５３に格納されているメッセージ１０６ａのメッセージボディ７２を切り出し（ステップ２２）、メッセージ１０６ａのメッセージボディ７２を記録部９に記録し（Ｓ１３ｂ）、受信サイズ、記録サイズおよびプロキシサーバ２６のＮｅｘｔＳｅｑ（Ｏ）を更新する（Ｓ２３〜Ｓ２５）。そして、アプリケーション解析部６はメッセージ１０６ａのメッセージボディ７２の終端以降のデータ（メッセージヘッダ７１、空行５６、メッセージボディ７２）を新規のメッセージとして処理するため、メッセージの先頭のチェック（Ｓ１６）に戻り、処理を繰り返す。区切りの先にデータがない場合、処理は終了する。次に、受信されたデータはメッセージ１０６の先頭として処理される。
【０１７９】
実施の形態３での図２４では、ＧＥＴ４３、ＧＥＴ４８及びＲｅｓ４９は１パケットに格納され（データの終端あり）、Ｒｅｓ４４、Ｄａｔａ４５およびＤａｔａ４６はデータを３つに分割していることとして動作を説明する（Ｄａｔａ４６にデータの終端あり）。
以下、図２４に基づいて説明を続ける。
【０１８０】
図１９において、ＧＥＴ４３はＧＥＴリクエストの先頭となるため（ステップ１６）、アプリケーション解析部６は記録サイズを初期化する（ステップ１７）。次に、アプリケーション解析部６は、メッセージヘッダ７１内のリクエストライン６１、リクエストヘッダフィールド６２、汎用ヘッダフィールド６３、ヘッダフィールド６４およびその他（６５）のヘッダからコンテントサイズ（メッセージボディ７２のサイズ）やデータ送信フォーマットの情報を取得する（ステップ１８）。ここで取得した情報は、先に説明したデータの区切りの検索に使用される。
次に、終端検知部１０は、コンテントサイズ、受信サイズ、記録サイズを比較し、データの終端があるかどうかをチェックする（ステップ１９）。以降、説明の簡略化のため、「コンテントサイズ＝メッセージ１０６（メッセージヘッダ７１を含む）のサイズ」、「受信サイズ＝受信サイズＢ」、「記録サイズ＝記録されたメッセージ１０６サイズ」として説明を続ける。ＧＥＴ４３ではコンテンツサイズ（１００）≧受信サイズＢ（１００）＋記録サイズ（０）のため、アプリケーション解析部６は、終端あり（パケットには終端の先にデータが無い）として、ＧＥＴ４３を記録部９に記録する（ステップ１３）。図７は記録部９でのメッセージ１０６の記録の例である。記録部９では、リクエストポインタ８１で示される領域にＧＥＴｍ１０７が保存される。
そして、アプリケーション解析部６は記録サイズに受信サイズＢを加算し（ステップ２０）、プロキシサーバ２６のＮｅｘｔＳｅｑ（Ｏ）に受信サイズを加算する（ステップ２１）。このとき、プロキシサーバ２６のＮｅｘｔＳｅｑ（Ｉ）は「２００」に更新され、ＷＷＷサーバ２３のＮｅｘｔＳｅｑ（Ｏ）は「７０１」のままである。
次に、図１８において、ＴＣＰ順序制御部５は、ＧＥＴ４３のＡＣＫ番号と反対側のＮｅｘｔＳｅｑ（Ｉ）とを比較し（ステップ８）、共に「７０１」で一致するため処理を終了する。
【０１８１】
ＧＥＴ４３を受信したＷＷＷサーバ２３はＲｅｓ４４を送信する。
受信制御部３によりＲｅｓ４４が受信された場合、図１９のコンテントサイズを取得する処理（ステップ１８）までは前記ＧＥＴ４３と同様である（ステップ１、３、４、５、６、１０、１１、１２、１６、１７）。Ｒｅｓ４４はＧＥＴレスポンスの先頭であり、アプリケーション解析部６はＲｅｓ４４からコンテントサイズ、送信フォーマットの情報を取得する（ステップ１８）。Ｒｅｓ４４は、１０００バイトのデータであるが、３０００バイトのデータを分割した３つのパケット（Ｒｅｓ４４、Ｄａｔａ４５、Ｄａｔａ４６）の先頭であるため、コンテントサイズは３０００となる。
次に、終端検知部１０はコンテントサイズと受信サイズ＋記録サイズを比較する（Ｓ１９）。Ｒｅｓ４４ではコンテントサイズ（３０００）≧受信サイズＢ（１０００）＋記録サイズ（０）のため、アプリケーション解析部６はＲｅｓ４４を記録部９に記録する（ステップ１３）。記録部９への記録（ステップ１３）では、記録部９のレスポンスポインタ８２で示される領域にＲｅｓ４４が保存される。
そして、アプリケーション解析部６は記録サイズに受信サイズＢを加算し（ステップ２０）、ＷＷＷサーバ２３のＮｅｘｔＳｅｑ（Ｉ）に受信サイズを加算する（ステップ２１）。このとき、プロキシサーバ２６のＮｅｘｔＳｅｑ（Ｏ）は「２００」のままであり、ＷＷＷサーバ２３のＮｅｘｔＳｅｑ（Ｉ）は「１７０１」に更新される。
次に、図１８において、ＴＣＰ順序制御部５は、Ｒｅｓ４４のＡＣＫ番号と反対側のＮｅｘｔＳｅｑ（Ｏ）とを比較し（ステップ８）、共に「２００」で一致するため処理を終了する。
【０１８２】
次に、ＷＷＷサーバ２３はＤａｔａ４５とＤａｔａ４６とを送信するが、Ｄａｔａ４５はネットワーク上でエラー等により廃棄され、通信記録装置１に届かなかったものとする。
【０１８３】
受信制御部３によりＤａｔａ４５が受信されず、Ｄａｔａ４６が受信された場合、図１８において、ＴＣＰ解析部４によるＴＣＰの種類とＴＣＰステートのチェック後（ステップ１、３）、ＴＣＰ順序制御部５はＤａｔａ４６のヘッダのシーケンス番号（２７０１）とＷＷＷサーバ２３のＮｅｘｔＳｅｑ（Ｉ）（１７０１）とを比較する（ステップ５）。そして、ＴＣＰ順序制御部５は両者が一致しないためパケットの順序が逆転したと判断し、Ｄａｔａ４５が届くまでＤａｔａ４６を保持し、組み立てＳｅｑを「２７０１」とする（ステップ７）。
次に、ＴＣＰ順序制御部５はＤａｔａ４６のＡＣＫ番号と反対側のＮｅｘｔＳｅｑ（Ｏ）とを比較し（ステップ８）、共に「２００」で一致するため処理を終了する。
【０１８４】
Ｄａｔａ４５とＤａｔａ４６とを受信したプロキシサーバ２６はＡＣＫ４７を送信する。
受信制御部３によりＡＣＫ４７が受信された場合、図８においてＡＣＫ４７のヘッダのシーケンス番号とプロキシサーバ２６のＮｅｘｔＳｅｑ（Ｏ）とが「２００」で一致するため（ステップ５）、ＡＣＫ４７に対してアプリケーション解析処理（ステップ１４０）が実施される。図１９のアプリケーション解析処理（ステップ１４０）では、ＡＣＫ４７はデータがないため（受信サイズ＝＝０）、処理が終了する。
次に、図１８において、ＴＣＰ順序制御部５はＡＣＫ４７のヘッダのＡＣＫ番号（３７０１）と反対側のＮｅｘｔＳｅｑ（Ｉ）（１７０１）とを比較する（ステップ８）。このとき、「ＡＣＫ４７のヘッダのＡＣＫ＞反対側のＮｅｘｔＳｅｑ（Ｉ）」となる。
次に、ＴＣＰ順序制御部５はＡＣＫ（３７０１）と組み立てＳｅｑ（２７０１）とを比較する（ステップ９）。このとき、「ＡＣＫ≧組み立てＳｅｑ」となる。
次に、ＴＣＰ順序制御部５はＤｉｆｆに「組み立てＳｅｑ−反対側のＮｅｘｔＳｅｑ（Ｉ）」を設定する（ステップ４１）。
そして、アプリケーション解析部６は、Ｄｉｆｆ＝１０００として、保持しているＤａｔａ４６に対してアプリケーション解析処理（ステップ１４０）を実施する。
図１９において、「Ｄｉｆｆ！＝０」のため、図２０の（１）に処理が飛ぶ。
図２０において、アプリケーション解析部６はＤａｔａ４６を記録対象と特定し（Ｓ４１）、消失した抜けパケットに代わる代替パケットを作成する（Ｓ４２）。ここで、コンテント（３０００）≧記録サイズ（１０００）＋Ｄｉｆｆ（１０００）であるため（ステップ２６）、図１９の（２）に処理が飛ぶ。
図１９において、アプリケーション解析部６は、Ｄａｔａ４６と代替パケットとを記録し、記録サイズを更新し、ＷＷＷサーバ２３のＮｅｘｔＳｅｑ（Ｉ）を更新して（ステップ１６、１８ｂ、１９、１３、２０、２１）、Ｄａｔａ４６に対する処理を終了する。
【０１８５】
以降のＡＣＫ４７、ＧＥＴ４８、Ｒｅｓ４９、ＦＩＮ／ＡＣＫ５０、ＦＩＮ／ＡＣＫ５１およびＡＣＫ５２に対する処理は、実施の形態１と同様である。ＧＥＴ４８およびＲｅｓ４９はＧＥＴ４３と同様に処理される。ＧＥＴ４８およびＲｅｓ４９は、ＧＥＴ４３およびＲｅｓ４４（Ｄａｔａ４５、Ｄａｔａ４６）と同様に、別のメッセージ１０６として記録部９に記録される。
【０１８６】
図２３に基づいてケース４の場合を説明したが、ケース１、ケース３およびケース５の場合も、通信記録装置１は、ケース４の場合と同様に、抜けたパケットの分を飛ばしてメッセージ１０６を記録することができる。
ケース２の場合、通信記録装置１はヘッダ情報が参照できないため、ＴＣＰデータ１０３の位置づけを把握できない。このケースでは、通信記録装置１は抜けたパケット分を飛ばしてＴＣＰデータ１０３を記録し、異常フラグをセットし、以降のパケットのＴＣＰデータ１０３を記録する。
【０１８７】
実施の形態３では、以下のような通信記録装置１およびアプリケーション解析方法について説明した。
通信記録装置１は、受信制御部３、ＴＣＰ解析部４、ＴＣＰ順序制御部５、アプリケーション解析部６、終端検知部１０、記録部９およびデータ表示部７を備え、パケットが抜けてシーケンス番号が飛んだ場合にはシーケンス番号およびコンテントサイズを用いて抜けた分を考慮し、アプリケーション解析を実施し、データを記録する。
受信制御部３はネットワークからパケットを受信する。
ＴＣＰ解析部４は受信制御部３により受信されたパケットのＴＣＰステートを解析する。
ＴＣＰ順序制御部５はパケットの順序が逆転していた場合に正しい順序になるよう制御する。
アプリケーション解析部６はアプリケーションデータを解析する。
終端検知部１０はアプリケーションのデータが複数のメッセージに分割されて送信された場合にメッセージの区切りを検出する。
記録部９は解析結果が記録される。
データ表示部７は記録部９のデータを表示する。
【０１８８】
実施の形態３における通信記録装置１は、上記のように、パケットが廃棄され通知されなかった場合、パケットを保持し、保持したパケットと以降に受信したパケットとのＡＣＫ番号の差分（Ｄｉｆｆ）を計算することで、パケット抜けを検出する。そして、通信記録装置１は、廃棄されたパケット分を飛ばしてアプリケーション解析処理（Ｓ１４０）を実施する。このため、通信記録装置１はパケットが廃棄された場合でもアプリケーションデータ（メッセージ１０６）を記録することができる。
【０１８９】
実施の形態４．
実施の形態４では、受信制御部３がパケットを受信することのできるルートが複数ある形態について説明する。
以下、実施の形態１〜実施の形態３と異なる事項について主に説明し、説明を省略する事項については実施の形態１〜実施の形態３と同様であるものとする。
【０１９０】
図２５は、実施の形態４における通信ネットワークシステム１００の一例を示す図である。
図２５に示すように、実施の形態４における通信ネットワークシステム１００は、実施の形態１における通信ネットワークシステム１００に対して、ＳＷ２８を加えたものである。
ＳＷ２８は、ＳＷ２７と同様に、ポートモニタ機能により全てのパケットを通信ケーブル３０を介して通信記録装置１に転送する。
通信記録装置１は、２つのスイッチ（ＳＷ２７、ＳＷ２８）からパケットを受信するため同じパケットを２度受信することになるが、一方のスイッチでパケットがエラーのため廃棄されたとしても他方からパケットを受信できる。
【０１９１】
図２６は、実施の形態４における通信記録装置１の機能構成図である。
図２６に示すように、受信制御部３は全てのパケットをＳＷ２７から通信ケーブル２９および入力ポート２を介して受信すると共に、全てのパケットをＳＷ２８から通信ケーブル３０および入力ポート１２を介して受信する。
【０１９２】
ＴＣＰ解析部４は、受信制御部３によりＴＣＰパケット１０４が受信され主記憶装置に第１のＴＣＰパケットとして記憶された後、受信制御部３により新たにＴＣＰパケット１０４が受信され主記憶装置に第２のＴＣＰパケットとして記憶された場合、次のような処理を行う。ＴＣＰ解析部４は、第１のＴＣＰパケットのシーケンス番号（ｓｅｑ）と第２のＴＣＰパケットのシーケンス番号（ｓｅｑ）とに基づいて、第１のＴＣＰパケットと第２のＴＣＰパケットとが受信制御部３により異なる経路（ＳＷ２７→通信ケーブル２９→入力ポート２、ＳＷ２８→通信ケーブル３０→入力ポート１２）から受信された同一のＴＣＰパケット１０４であるか否かを判定する。そして、ＴＣＰ解析部４は、第１のＴＣＰパケットと第２のＴＣＰパケットとが同一のＴＣＰパケットであると判定した場合、後から受信された第２のＴＣＰパケットを主記憶装置から削除する。
【０１９３】
図２７は、実施の形態４における通信記録方法のＴＣＰ解析処理（Ｓ１２０）〜アプリケーション解析処理（Ｓ１４０）の詳細を示すフローチャートである。
図２７は、実施の形態３の図１８にＳ３３とＳ２とを加えたものである。
【０１９４】
ＴＣＰ解析部４は、受信パケットが過去に受信されたパケットと同じパケットか否かを判定する（Ｓ３３）。
【０１９５】
通常、ＳＷ２７とＳＷ２８とから同じパケットが通信記録装置１に転送される場合、同じパケットは連続して通信記録装置１に到達する。そこで、ＴＣＰ解析部４は、前回の受信パケットのＩＰヘッダ１０１およびＴＣＰヘッダ１０２をコネクション情報に設定しておき、新たな受信パケットのＩＰヘッダ１０１およびＴＣＰヘッダ１０２とコネクション情報に設定されている前回の受信パケットのＩＰヘッダ１０１およびＴＣＰヘッダ１０２とを比較する。そして、ＴＣＰ解析部４は、新たな受信パケットのＩＰヘッダ１０１およびＴＣＰヘッダ１０２とコネクション情報に設定されている前回の受信パケットのＩＰヘッダ１０１およびＴＣＰヘッダ１０２とが同じである場合、受信パケットが過去に受信されたパケットと同じパケットであると判定する。また例えば、ＴＣＰ解析部４は、全ての受信パケットのＩＰヘッダ１０１およびＴＣＰヘッダ１０２をコネクション情報に設定しておき、いずれかの受信パケットとＩＰヘッダ１０１およびＴＣＰヘッダ１０２が同じである場合に受信パケットが過去に受信されたパケットと同じパケットであると判定してもよい。この場合、受信済みのパケットと同じパケットであると判定した受信パケットのＩＰヘッダ１０１およびＴＣＰヘッダ１０２はコネクション情報に設定されなくてよい。
【０１９６】
Ｓ３３において受信パケットが過去に受信されたパケットと同じパケットであった場合、ＴＣＰ解析部４は受信パケットを廃棄する（Ｓ２）。
【０１９７】
Ｓ３３において受信パケットが過去に受信されたパケットと同じパケットでなかった場合、受信パケットに対して実施の形態１〜実施の形態３で説明したＳ１以降の処理が実行される。
【０１９８】
実施の形態４において、以下のような通信記録装置１およびアプリケーション解析方法について説明した。
【０１９９】
通信記録装置１において、受信制御部３は複数の入力ポートからパケットを受信し、ＴＣＰ解析部４は受信制御部３により受信されたパケットが同じであるか比較し、同じデータを受信した場合には一方を廃棄する。一方からしかパケットが受信されなかった場合、アプリケーション解析部６は受信されたパケットに対してデータ解析を実施する。また、すべてのポートからパケットを受信しなかった場合、アプリケーション解析部６はパケットが抜けたこととしてアプリケーション解析を実施する。
【０２００】
実施の形態４における通信記録装置１は、上記のように、２つの入力ポートからパケットを受信するため、一方のスイッチでパケットがエラーのため廃棄されたとしても、他方から受信したパケットで処理を継続できる。
【０２０１】
各実施の形態では、他ホスト宛てのパケットを受信し、受信したパケットに基づいてアプリケーションデータを組み立て、組み立てたアプリケーションデータを“通信履歴”として記録する形態について説明した。
但し、組み立てられたアプリケーションデータは“通信履歴”として記録されなくても構わない。
例えば、組み立てられたアプリケーションデータは、本来の送信先である通信（端末）装置、または、その他の特定の通信（端末）装置に送信（または、中継、転送）されてもよい。本来の送信先である通信（端末）装置とは、当該アプリケーションデータの少なくとも一部を含むパケットに送信先として設定された端末のことであり、Ｒｅｓｍ１０８（組み立てられたアプリケーションデータの一例）に対するプロキシサーバ２６および端末２１のことである。
つまり、各実施の形態で説明した通信記録装置（および、方法、プログラム）は、他ホスト宛てのパケットを受信し、受信したパケットに基づいてアプリケーションデータを組み立て、組み立てたアプリケーションデータを特定の通信（端末）装置に送信（または、中継、転送）する通信データ処理装置（および、方法、プログラム）として用いられてもよい。
また、通信データ処理装置は、組み立てたアプリケーションデータを解析し、解析結果を本来の送信先である通信（端末）装置に送信しても構わない。
通信データ処理装置は、データ表示部７の代わりに（または、データ表示部７と共に）、データ送信部を備える。
【図面の簡単な説明】
【０２０２】
【図１】実施の形態１における通信ネットワークシステム１００の一例を示す図。
【図２】ＩＰパケット１０５の構成を示す図。
【図３】ＧＥＴ４３の構成を示す図。
【図４】Ｒｅｓ４４の構成を示す図。
【図５】分割されたＲｅｓｍ１０８を示す図。
【図６】実施の形態１における通信シーケンスの一例を示す図。
【図７】実施の形態１におけるＧＥＴｍ１０７とＲｅｓｍ１０８とが設定された通信履歴１２０を示す図。
【図８】実施の形態１における通信記録装置１のハードウェア資源の一例を示す図。
【図９】実施の形態１における通信記録装置１の機能構成図。
【図１０】実施の形態１における通信記録装置１の通信記録方法を示すフローチャート。
【図１１】実施の形態１における通信記録方法のＴＣＰ解析処理（Ｓ１２０）〜アプリケーション解析処理（Ｓ１４０）の詳細を示すフローチャート。
【図１２】実施の形態１における通信記録方法のアプリケーション解析処理（Ｓ１４０）の詳細を示すフローチャート。
【図１３】実施の形態１における通信シーケンスの一例を示す図。
【図１４】実施の形態２における通信記録装置１の機能構成図。
【図１５】分割されたメッセージ１０６を示す図。
【図１６】実施の形態２における通信記録方法のアプリケーション解析処理（Ｓ１４０）の詳細を示すフローチャート。
【図１７】実施の形態２における通信シーケンスの一例を示す図。
【図１８】実施の形態３における通信記録方法のＴＣＰ解析処理（Ｓ１２０）〜アプリケーション解析処理（Ｓ１４０）の詳細を示すフローチャート。
【図１９】実施の形態３における通信記録方法のアプリケーション解析処理（Ｓ１４０）の詳細を示すフローチャート。
【図２０】実施の形態３における通信記録方法のアプリケーション解析処理（Ｓ１４０）の一部を示すフローチャート。
【図２１】記録サイズとＤｉｆｆとの合計値がコンテントサイズより大きい場合を示す図。
【図２２】記録サイズとＤｉｆｆとの合計値がコンテントサイズ以下である場合を示す図。
【図２３】実施の形態３におけるＧＥＴｍ１０７とＲｅｓｍ１０８とが設定された通信履歴１２０を示す図。
【図２４】実施の形態３における通信シーケンスの一例を示す図。
【図２５】実施の形態４における通信ネットワークシステム１００の一例を示す図。
【図２６】実施の形態４における通信記録装置１の機能構成図。
【図２７】実施の形態４における通信記録方法のＴＣＰ解析処理（Ｓ１２０）〜アプリケーション解析処理（Ｓ１４０）の詳細を示すフローチャート。
【符号の説明】
【０２０３】
１  通信記録装置、２  入力ポート、３  受信制御部、４  ＴＣＰ解析部、５  ＴＣＰ順序制御部、６  アプリケーション解析部、７  データ表示部、９  記録部、１０  終端検知部、１２  入力ポート、２１  端末、２２  社内ネットワーク、２３  ＷＷＷサーバ、２４  インターネット、２５  ＦＷ、２６  プロキシサーバ、２７，２８  ＳＷ、２９，３０  通信ケーブル、４０  ＳＹＮ、４１  ＳＹＮ／ＡＣＫ、４２  ＡＣＫ、４３  ＧＥＴ、４４  Ｒｅｓ、４５  Ｄａｔａ、４６  Ｄａｔａ、４７  ＡＣＫ、４８  ＧＥＴ、４９  Ｒｅｓ、５０，５１  ＦＩＮ／ＡＣＫ、５２  ＡＣＫ、５３  Ｄａｔａ／Ｒｅｓ、５３ｄ  Ｄａｔａ／Ｒｅｓｍ、５４  Ｄａｔａ、６１  リクエストライン、６２  リクエストヘッダフィールド、６３  汎用ヘッダフィールド、６４  ヘッダフィールド、６５  その他、６６  空行、６７  ボディ、６８  ステータスライン、６９  レスポンスヘッダフィールド、７１  メッセージヘッダ、７２  メッセージボディ、８１  リクエストポインタ、８２  レスポンスポインタ、１００  通信ネットワークシステム、１０１  ＩＰヘッダ、１０２  ＴＣＰヘッダ、１０３  ＴＣＰデータ、１０４  ＴＣＰパケット、１０５  ＩＰパケット、１０６，１０６ａ，１０６ｂ  メッセージ、１０７  ＧＥＴｍ、１０８  Ｒｅｓｍ、１１１  コンテントサイズ、１１２  記録サイズ、１１３  Ｄｉｆｆ、１１４  保持サイズ、１２０  通信履歴、９０１  表示装置、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ装置、９０７  キャッシュメモリ、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  磁気ディスク装置、９２１  ＯＳ、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群。
【図１】
0005014199.tif 000002
【図２】
0005014199.tif 000003
【図３】
0005014199.tif 000004
【図４】
0005014199.tif 000005
【図５】
0005014199.tif 000006
【図６】
0005014199.tif 000007
【図７】
0005014199.tif 000008
【図８】
0005014199.tif 000009
【図９】
0005014199.tif 000010
【図１０】
0005014199.tif 000011
【図１１】
0005014199.tif 000012
【図１２】
0005014199.tif 000013
【図１３】
0005014199.tif 000014
【図１４】
0005014199.tif 000015
【図１５】
0005014199.tif 000016
【図１６】
0005014199.tif 000017
【図１７】
0005014199.tif 000018
【図１８】
0005014199.tif 000019
【図１９】
0005014199.tif 000020
【図２０】
0005014199.tif 000021
【図２１】
0005014199.tif 000022
【図２２】
0005014199.tif 000023
【図２３】
0005014199.tif 000024
【図２４】
0005014199.tif 000025
【図２５】
0005014199.tif 000026
【図２６】
0005014199.tif 000027
【図２７】
0005014199.tif 000028