(57)【特許請求の範囲】
【請求項１】
１のメッセージを構成する複数のパケットを受信する受信部と、
宛先の情報と、当該宛先に送信されるパケットのうち組み立ての対象であるパケットを示す組立情報とを対応付けて格納する組立情報格納部と、
前記組立情報格納部に格納されており、且つ前記複数のパケットの各々のヘッダに含まれる宛先の情報に対応付けられた組立情報に基づき、前記複数のパケットの一部であるパケット群を組み立て、前記１のメッセージの一部である部分メッセージ・データを生成するパケット組立部と、
前記部分メッセージ・データから特定されたユーザ識別子に基づき、前記複数のパケットに対するパケット処理を実施するパケット処理部と、
を備えた中継装置。
【請求項２】
請求項１記載の中継装置であって、
前記部分メッセージ・データからユーザ識別情報を抽出し、当該ユーザ識別情報からユーザ識別子を特定するユーザ識別部
をさらに備え、
前記パケット処理部は、
前記ユーザ識別部により特定されたユーザ識別子に基づいたパケット処理を実施する
中継装置。
【請求項３】
請求項２記載の中継装置であって、
前記ユーザ識別子を前記部分メッセージ・データ又は前記パケット群から抽出されるコネクション識別データに関連付けて制御データ格納部に格納する関連付設定部をさらに備え、
前記パケット処理部は、
前記１のメッセージと同一のコネクションについての後続のメッセージに係るパケットに対して、前記ユーザ識別子に基づいたパケット処理を実施する
中継装置。
【請求項４】
請求項２又は３記載の中継装置であって、
受信したパケットを、当該パケットのヘッダから特定されるコネクション毎にキューに登録するとともに、当該パケットのコピーを前記パケット組立部に出力するパケット判別部と、
前記ユーザ識別子が特定された場合に、前記部分メッセージ・データ又は前記パケット群から特定されるコネクションについての前記キューから、前記パケット処理部に前記パケットを出力させる組立制御設定部と、
をさらに備えた中継装置。
【請求項５】
請求項３記載の中継装置であって、
前記複数のパケットのうち先頭パケットのヘッダからコネクション識別データを抽出し、前記制御データ格納部に格納する制御データ管理部と、
前記複数のパケットのうち先頭パケットについて、当該先頭パケットのヘッダから抽出された前記コネクション識別データに関連付けて、前記パケット組立部の処理が必要であることを表す組立フラグを前記制御データ格納部に格納するとともに、前記組立フラグが前記パケット組立部の処理が必要であることを表している間、前記先頭パケットのヘッダについて抽出された前記コネクション識別データと同一のコネクション識別データが抽出されるパケットを前記パケット組立部に出力するパケット判別部と、
前記ユーザ識別部によって前記ユーザ識別子が特定された場合に、前記部分メッセージ・データ又は前記パケット群から抽出されるコネクション識別データに関連付けて、前記パケット組立部の処理が不要であることを表す組立フラグを前記制御データ格納部に格納する組立制御設定部と、
前記部分メッセージ・データをパケットに分割して前記パケット処理部に出力するパケット化処理部と、
をさらに備えた中継装置。
【請求項６】
請求項２記載の中継装置であって、
前記複数のパケットのうち先頭パケットのヘッダからコネクション識別データを抽出し、前記制御データ格納部に格納する制御データ管理部と、
前記複数のパケットのうち先頭パケットについて、当該先頭パケットのヘッダから抽出された前記コネクション識別データに関連付けて、前記パケット組立部の処理が必要であることを表す組立フラグを制御データ格納部に格納するとともに、前記組立フラグが前記パケット組立部の処理が必要であることを表している間、前記先頭パケットのヘッダについて抽出された前記コネクション識別データと同一のコネクション識別データが抽出されるパケットを、第１のキューに登録するとともに、当該パケットのコピーを前記パケット組立部に出力するパケット判別部と、
前記ユーザ識別部によって前記ユーザ識別子が特定された場合に、前記部分メッセージ・データ又は前記パケット群から抽出されるコネクション識別データに関連付けて、前記パケット組立部の処理が不要であることを表す組立フラグを前記制御データ格納部に格納するとともに、前記パケット判別部に前記第１のキューからパケットを読み出して前記パケット処理部へ出力させる組立制御設定部と、
前記ユーザ識別部によって前記ユーザ識別子が特定された場合に、前記先頭パケットのヘッダについて抽出された前記コネクション識別データと同一のコネクション識別データが抽出されるパケットを第２のキューに登録する順序制御部と、
をさらに備え、
前記パケット判別部が前記第１のキューから全てのパケットを読み出した後に、前記順序制御部の前記第２のキューからパケットを読み出す
中継装置。
【請求項７】
プロセッサを備え、
当該プロセッサにより、
１のメッセージを構成する複数のパケットを受信し、
宛先の情報と、当該宛先に送信されるパケットのうち組み立ての対象であるパケットを示す組立情報とを対応付けて格納する組立情報格納部に格納されており、且つ前記複数のパケットの各々のヘッダに含まれる宛先の情報に対応付けられた組立情報に基づき、前記複数のパケットの一部であるパケット群を組み立て、前記１のメッセージの一部である部分メッセージ・データを生成し、
前記部分メッセージ・データから特定されたユーザ識別子に基づき、前記複数のパケットに対するパケット処理を実施する、
ことを特徴とする中継装置。
【請求項８】
コンピュータに、
宛先の情報と、当該宛先に送信されるパケットのうち組み立ての対象であるパケットを示す組立情報とを対応付けて格納する組立情報格納部に格納されており、且つ１のメッセージを構成する複数のパケットの各々のヘッダに含まれる宛先の情報に対応付けられた組立情報に基づき、前記複数のパケットの一部であるパケット群を組み立て、前記１のメッセージの一部である部分メッセージ・データを生成し、
前記部分メッセージ・データから特定されたユーザ識別子に基づき、前記複数のパケットに対するパケット処理を実施する
処理を、実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、パケットの中継技術に関する。
【背景技術】
【０００２】
クラウド環境の広がりにより、マルチテナントシステムへの要求が高まっている。マルチテナントシステムとは、複数のユーザ及びテナント（すなわち企業）が同じサーバやデータベースを共有しつつ、且つそのユーザ及びテナント間で相互干渉が無いように分離して、利用してもらうための仕組みを有するシステムである。以下、ユーザ及びテナントについては、簡単にユーザと述べるものとする。そして、サーバ、ストレージだけでなく、中継装置にもマルチテナント対応が求められている。
【０００３】
マルチテナント環境を想定したシステム構成例を図１に示す。図１の例では、中継装置には、アプリケーションサーバＸ乃至Ｚと、ユーザ端末Ｃと、ゲートウェイ装置とが接続され、ゲートウェイ装置は、ユーザ端末Ａ及びＢが接続されている。そして、ユーザ端末Ａ乃至Ｃを操作するユーザＡ乃至Ｃは、アプリケーションサーバＸ乃至Ｚを共用しており、中継装置が、ユーザ端末Ａ乃至ＣからアプリケーションサーバＸ乃至Ｚへのリクエスト及びアプリケーションサーバＸ乃至Ｚからユーザ端末Ａ乃至Ｃへのレスポンスを中継する。
【０００４】
このようなマルチテナントシステムにおいて、ユーザを識別する情報を、個々のパケットではなく、１以上のパケットのペイロードを組み立ててメッセージを生成しないと得られない場合がある。例えば、ＨＴＴＰ（Hyper Text Transfer Protocol）ヘッダのＵＲＬ（Uniform Resource Locator）やクッキー（cookie）に記載の認証情報やユーザ証明書などは、メッセージを組み立てなければ得られない。
【０００５】
ユーザを識別する情報がメッセージを組み立てないと得られない場合、パケットだけを処理する中継装置では、ユーザを識別することはできない。従って、ユーザ個別の中継処理を行うことができない。そうすると、ファイアウォールなどのフィルタ処理やユーザ毎の帯域利用量など課金に用いる統計情報収集をアプリケーションサーバ側でやらざるをえず、サーバの負荷が高くなるといった問題が生じる。
【０００６】
なお、ストアアンドフォワードに対してカットスルーという技術が存在している。簡単に述べると、ストアアンドフォワードが、ＭＡＣフレーム全体を一旦格納してフレームの内容を確認の上転送する技術であり、カットスルーはＭＡＣフレームの一部をチェックしただけで転送してしまう技術である。但し、これは個別のＭＡＣフレームについての処理に過ぎない。カットスルーについては様々な技術が存在しているが、上で述べたような問題を解決するものはない。
【０００７】
さらに、上で述べた課金の問題や通信量の測定についても様々な技術が存在しているが、上で述べたような問題を解決するものはない。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００３−３３８８２９号公報
【特許文献２】特表２００３−５２４３３６号公報
【特許文献３】特開２００２−２３７７８７号公報
【特許文献４】特開２０００−２４４５６２号公報
【特許文献５】特開平１１−６８７６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上で述べたようにサーバに余分な負荷をかけることなく、中継装置側でフィルタ処理やユーザ毎の帯域利用量など課金に用いる統計情報収集を行うことが好ましい。しかし、図１に示したように中継装置は、複数のユーザ端末と複数のアプリケーションサーバとの間に配置されるため中継パケット数は膨大であり、単純に全中継パケットについてメッセージ組み立てを行うと中継装置がボトルネックになって、スループットの低下などの問題を生ずる。
【００１０】
従って、１つの側面では、本発明は、中継装置におけるユーザ識別のための処理負荷を軽減するための技術を提供することを目的とする。
【課題を解決するための手段】
【００１１】
１つの案では、中継装置は、（Ａ）１のメッセージを構成する複数のパケットを受信する受信部と、（Ｂ）宛先の情報と、当該宛先に送信されるパケットのうち組み立ての対象であるパケットを示す組立情報とを対応付けて格納する組立情報格納部と、（Ｃ）組立情報格納部に格納されており、且つ複数のパケットの各々のヘッダに含まれる宛先の情報に対応付けられた組立情報に基づき、複数のパケットの一部であるパケット群を組み立て、１のメッセージの一部である部分メッセージ・データを生成するパケット組立部と、（Ｄ）部分メッセージ・データから特定された識別子に基づき、複数のパケットに対するパケット処理を実施するパケット処理部とを有する。
【発明の効果】
【００１２】
中継装置におけるユーザ識別のための処理負荷を軽減できるようになる。
【図面の簡単な説明】
【００１３】
【図１】図１は、システム全体の概要図である。
【図２】図２は、第１の実施の形態に係る中継装置の機能ブロック図である。
【図３】図３は、第２の実施の形態に係る中継装置の機能ブロック図である。
【図４】図４は、第２の実施の形態に係る処理の処理フローを示す図である。
【図５】図５は、コネクションテーブルの一例を示す図である。
【図６】図６は、組立制御テーブルの一例を示す図である。
【図７】図７は、制御データ付きパケットデータのフォーマット例を示す図である。
【図８】図８は、第２の実施の形態に係るメッセージ層処理の処理フローを示す図である。
【図９】図９は、組立設定テーブルの一例を示す図である。
【図１０】図１０は、制御データ付きメッセージデータのフォーマット例を示す図である。
【図１１】図１１は、識別ルールテーブルの一例を示す図である。
【図１２】図１２は、識別テーブルの一例を示す図である。
【図１３】図１３は、キュー解放指示のデータフォーマットの一例を示す図である。
【図１４】図１４は、第２の実施の形態に係る処理の処理フローを示す図である。
【図１５】図１５は、第３の実施の形態に係る中継装置の機能ブロック図である。
【図１６】図１６は、第３の実施の形態に係る処理の処理フローを示す図である。
【図１７】図１７は、第３の実施の形態に係る制御データ付きパケットデータのフォーマット例を示す図である。
【図１８】図１８は、第３の実施の形態に係る処理の処理フローを示す図である。
【図１９】図１９は、第３の実施の形態に係るメッセージ層処理の処理フローを示す図である。
【図２０】図２０は、第３の実施の形態に係るメッセージ層処理の処理フローを示す図である。
【図２１】図２１は、第４の実施の形態に係る中継装置の機能ブロック図である。
【図２２】図２２は、第４の実施の形態に係る処理の処理フローを示す図である。
【図２３】図２３は、第４の実施の形態に係るメッセージ層処理の処理フローを示す図である。
【図２４】図２４は、キュー閉塞指示のデータフォーマットの一例を示す図である。
【図２５】図２５は、第４の実施の形態に係るメッセージ層処理の処理フローを示す図である。
【図２６】図２６は、キュー出力指示のデータフォーマットの一例を示す図である。
【図２７】図２７は、順序制御処理の処理フローを示す図である。
【図２８】図２８は、第４の実施の形態に係る処理の処理フローを示す図である。
【図２９】図２９は、第５の実施の形態に係る中継装置の機能ブロック図である。
【図３０】図３０は、第５の実施の形態に係る処理の処理フローを示す図である。
【図３１】図３１は、第５の実施の形態に係る処理の処理フローを示す図である。
【図３２】図３２は、第５の実施の形態に係る処理の処理フローを示す図である。
【図３３】図３３は、第５の実施の形態に係るメッセージ層処理の処理フローを示す図である。
【図３４】図３４は、第５の実施の形態に係るメッセージ層処理の処理フローを示す図である。
【図３５】図３５は、コンピュータの機能ブロック図である。
【図３６】図３６は、中継方法の処理フローを示す図である。
【発明を実施するための形態】
【００１４】
［実施の形態１］
本技術に係る実施の形態における中継装置２００は、図２に示すように、（Ａ）パケットを受信する受信部２１０と、（Ｂ）受信部２１０により受信されたパケットのデータを格納するキュー２５０と、（Ｃ）１のメッセージを構成する複数のパケットのうち一部のパケットを組み立てる部分パケット組立部２２０と、（Ｄ）部分パケット組立部２２０によって生成されたメッセージの一部分からユーザ識別子を特定するユーザ識別部２３０と、（Ｅ）受信したパケットに対してユーザ識別部２３０により特定されたユーザ識別子に基づき、フィルタ処理や課金などのためのパケット数計数などの所定のパケット処理を実施するパケット処理部２４０とを有する。パケット処理部２４０は、フィルタ対象外のパケットについては宛先に出力するが、この部分については従来と同じであり、本実施の形態の主旨ではないので、これ以上述べない。
【００１５】
このような中継装置２００は、以下のように動作する。すなわち、受信部２１０は、１のメッセージに係る複数のパケットを順次受信して、キュー２５０に格納する。そして、部分パケット組立部２２０は、キュー２５０に格納された上記複数のパケットのうち上記１のメッセージに係る先頭パケットから上記１のメッセージのヘッダにおけるユーザ識別情報をペイロードに含むパケットまでのパケット群を組み立てて、部分メッセージ・データを生成し、当該部分メッセージ・データをユーザ識別部２３０に出力する。
【００１６】
その後、ユーザ識別部２３０は、部分パケット組立部２２０により生成された部分メッセージ・データからユーザ識別情報を抽出すると共に、当該ユーザ識別情報からユーザ識別子を特定する。ユーザ識別情報そのものをユーザ識別子として使用しても良い。そして、パケット処理部２４０は、上記１のメッセージに係る上記パケット群と上記複数のパケットのうち部分パケット組立部２２０で組み立てられなかったパケットとに対して、ユーザ識別部２３０によって特定されたユーザ識別子に基づき所定のパケット処理を実施する。
【００１７】
部分パケット組立部２２０は、キュー２５０に格納されているパケットのデータのコピーを処理する場合もあれば、先頭パケットからユーザ識別情報をペイロードに含むパケットまでのパケット群を少なくとも取り出して処理する場合もある。後者の場合には、ユーザ識別部２３０の処理の後に部分メッセージ・データをパケットに分割する処理を実施して、パケット処理部２４０で処理する。
【００１８】
以上述べたように、１のメッセージを構成する複数のパケットのうち一部についてのみ組立処理の対象とすることで、中継装置２００の処理負荷を軽減している。
【００１９】
なお、ユーザ毎にコネクションを張るような場合には、コネクションを切断するまではユーザは変化しないので、上で述べた処理を先頭のメッセージについて実施すれば後続のメッセージについてのパケット組立処理を省略することができる。複数ユーザでコネクションを共用する場合には、メッセージ毎に上で述べたような処理を実施することになるが、メッセージ全体を組み立てないので、その分処理負荷を軽減できる。
【００２０】
［実施の形態２］
本技術の第２の実施の形態に係る中継装置３００の機能ブロック図を図３に示す。中継装置３００は、パケット層の要素として、キュー３０１と、コネクションテーブル管理部３０３と、組立不要パケット判別部３０５と、ユーザ識別待ち制御部３０７と、第１ユーザ識別部３０９と、第１組立制御設定部３１１と、キュー３１３と、ユーザ振分部３１５と、パケット処理部Ａ（３１７Ａ）と、パケット処理部Ｂ（３１７Ｂ）と、コネクションテーブル格納部３１９と、組立制御テーブル格納部３２１とを有する。パケット処理部３１７については、ユーザ毎に所定の処理を実施するものであり、２つに限定されるものではない。
【００２１】
さらに、中継装置３００は、メッセージ層の要素として、キュー３２３と、パケット組立部３２５と、第２ユーザ識別部３２７と、コネクション・ユーザ関連付設定部３２９と、第２組立制御設定部３３１と、ルールテーブル格納部３３３と、識別テーブル格納部３３５とを有する。
【００２２】
キュー３０１には、中継装置３００が受信したパケットが順次格納される。コネクションテーブル管理部３０３は、キュー３０１からパケットのデータを順番に取り出し、コネクションテーブル格納部３１９を必要に応じて更新し、キュー３０１から取り出したパケットのデータを組立不要パケット判別部３０５に出力する。組立不要パケット判別部３０５は、コネクションテーブル格納部３１９を参照して必要であれば組立制御テーブル格納部３２１に格納されている組立制御テーブルを更新すると共に、コネクションテーブル管理部３０３から受け取ったパケットのデータを処理して、ユーザ識別待ち制御部３０７に出力する。ユーザ識別待ち制御部３０７は、組立不要パケット判別部３０５からパケットのデータを受け取り、コピーしてメッセージ層のキュー３２３に格納すると共に、コネクション毎に自らのキューに格納する。
【００２３】
パケット組立部３２５は、ルールテーブル格納部３３３に格納されているデータに従って、キュー３２３に格納されているパケットのデータを取り出してパケット組立処理を行い、処理結果を第２ユーザ識別部３２７に出力する。第２ユーザ識別部３２７は、ルールテーブル格納部３３３及び識別テーブル格納部３３５に格納されているデータに従って、第２ユーザ識別部３２７からの出力データに対して処理を行い、自らの処理結果をコネクション・ユーザ関連付設定部３２９に出力する。コネクション・ユーザ関連付設定部３２９は、第２ユーザ識別部３２７からの出力データに応じて、コネクションテーブル格納部３１９を参照して、組立制御テーブル格納部３２１を更新し、第２ユーザ識別部３２７からの出力データを第２組立制御設定部３３１に出力する。第２組立制御設定部３３１は、コネクション・ユーザ関連付設定部３２９からの出力データに応じて、コネクションテーブル格納部３１９を参照して、組立制御テーブル格納部３２１を更新すると共に、ユーザ識別待ち制御部３０７に指示を出力する。
【００２４】
ユーザ識別待ち制御部３０７は、第２組立制御設定部３３１からの指示に応じて、自らのキュー内のパケットのデータを第１ユーザ識別部３０９に出力する。第１ユーザ識別部３０９は、受け取ったパケットのデータに応じてコネクションテーブル格納部３１９及び組立制御テーブル格納部３２１を参照して、ユーザ識別子をパケットのデータに設定する。そして、第１ユーザ識別部３０９は、パケットのデータを第１組立制御設定部３１１に出力する。第１組立制御設定部３１１は、パケットのデータを参照して必要があれば、コネクションテーブル格納部３１９及び組立制御テーブル格納部３２１を更新する。そして、第１組立制御設定部３１１は、パケットのデータをキュー３１３に格納する。
【００２５】
ユーザ振分部３１５は、キュー３１３に格納されているパケットのデータを順番に取り出して、ユーザ識別子に応じて担当のパケット処理部３１７に出力する。パケット処理部３１７は、パケットのデータについて所定の処理を実施する。
【００２６】
なお、第２組立制御設定部３３１は、不要なパケットのデータがキュー３２３に格納されているようであれば、削除を指示する。
【００２７】
次に、図４乃至図１４を用いて、図３に示した中継装置３００の動作の詳細を説明する。まず、中継装置３００のパケット受信部（図示せず）は、中継装置３００に接続されている装置からパケットを受信し、キュー３０１に格納する（図３：ステップＳ１）。そして、コネクションテーブル管理部３０３は、キュー３０１からパケットのデータを読み出し、当該パケットについてコネクション確認処理を実施する（ステップＳ３）。具体的には、パケットのＴＣＰ（又はＵＤＰ）／ＩＰヘッダから、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号及び宛先ポート番号をコネクション識別データとして抽出し、このコネクション識別データからコネクションを特定する。そして、コネクションテーブル管理部３０３は、コネクション識別データでコネクションテーブル格納部３１９におけるコネクションテーブルを検索し、該当エントリが存在しなければ、当該コネクション識別データを含む新規エントリを登録する。一方、該当エントリが存在していれば、コネクションテーブル管理部３０３は、処理対象のパケットに応じて、該当エントリを更新する。また、コネクションテーブル管理部３０３は、処理対象のパケットのデータを組立不要パケット判別部３０５に出力する。
【００２８】
コネクションテーブルは、例えば図５に示すようなテーブルである。図５の例では、送信元ＩＰアドレスと、宛先ＩＰアドレスと、送信元ポート番号、宛先ポート番号と、ＴＣＰシーケンス番号やコネクション確立中などのコネクションの状態に関する状態管理データと、組立制御テーブルの該当エントリへのリンク（エントリ番号やポインタ）とが格納されるようになっている。状態管理データについては、該当エントリが存在している場合にも更新されるデータである。
【００２９】
そして、組立不要パケット判別部３０５は、処理対象のパケットのデータを受け取ると、パケットのヘッダからコネクション識別データを抽出して、当該コネクション識別データでコネクションテーブル格納部３１９におけるコネクションテーブルを検索して、組立制御テーブル格納部３２１における組立制御テーブルにおける該当エントリへのリンクの有無に従って、組立制御テーブルに該当エントリが存在しているか確認する（ステップＳ５）。組立制御テーブルに該当エントリが存在しない場合には、組立不要パケット判別部３０５は、コネクション識別データに対応するエントリを組立制御テーブルに登録すると共に（ステップＳ７）、当該エントリへのリンクをコネクション識別データに対応付けてコネクションテーブル格納部３１９におけるコネクションテーブルに登録する。処理はステップＳ９に移行する。
【００３０】
組立制御テーブルは、例えば図６に示すようなテーブルである。図６の例では、組立フラグと、ユーザ識別子とを登録するようになっている。なお、ステップＳ７では、エントリにおいて、組立フラグを「ｔｒｕｅ」にして、ユーザ識別子を空「−」にしておく。組立フラグが「ｔｒｕｅ」である場合には、パケットのデータをメッセージ層に出力し、組立フラグが「ｆａｌｓｅ」である場合には、パケット層で処理を行うことを表す。図５及び図６において、エントリの関連付けは同一の行に登録されており行番号「＃」が同一であるものとする。なお、組立制御テーブルにもコネクション識別データを登録するようにしても良い。
【００３１】
ステップＳ７の後に、又は組立制御テーブルに該当エントリが存在する場合には、組立不要パケット判別部３０５は、処理対象のパケットのデータに制御データを付加して、ユーザ識別待ち制御部３０７に出力する（ステップＳ９）。
【００３２】
制御データ付きパケットデータは、例えば図７に示すようなデータである。図７の例では、ユーザ識別子を含む制御データと、パケットのデータ（すなわちヘッダ及びペイロード）とが含まれる。但し、初期的にはユーザ識別子には何も設定されない。
【００３３】
ユーザ識別待ち制御部３０７は、制御データ付きパケットデータを受け取ると、パケットのデータからコネクション識別データを抽出してコネクションテーブルの該当エントリを特定し、さらに該当エントリに関連付けられている、組立制御テーブルにおけるエントリを読み出して、組立フラグが「ｔｒｕｅ」（組立要）になっているか判断する（ステップＳ１１）。組立フラグが「ｆａｌｓｅ」である場合には、端子Ａを介して図１４の処理に移行する。
【００３４】
一方、組立フラグが「ｔｒｕｅ」である場合には、ユーザ識別待ち制御部３０７は、制御データ付きパケットデータをコピーしてメッセージ層に出力する（ステップＳ１３）。すなわち、メッセージ層のキュー３２３に登録する。さらに、ユーザ識別待ち制御部３０７は、制御データ付きパケットデータを、コネクション毎に自身のキューに登録し、キュー解放まで待機する（ステップＳ１５）。
【００３５】
なお、制御データ付きパケットデータがキュー３２３に登録されると、メッセージ層処理が実施される（ステップＳ１４）。このメッセージ層処理については、図８乃至図１２を用いて説明する。
【００３６】
まず、パケット組立部３２５は、キュー３２３から、メッセージの先頭パケットからユーザ識別情報を含むパケットまで、それらの制御データ付きパケットデータを取り出し、パケットヘッダを除去した上でこれらのパケットのペイロードを組み立て、メモリに格納する（図８：ステップＳ２１）。この際、パケット組立部３２５は、ルールテーブル格納部３３３に格納されている組立設定テーブルを用いる。
【００３７】
組立設定テーブルは、図９に示すようなテーブルである。図９の例では、宛先ＩＰアドレス、宛先ポート番号及び宛先ＵＲＩ（Uniform Resource Identifier）のうちの少なくともいずれかにより特定されるキーと、当該キーに該当する場合の組立設定とが登録されるようになっている。組立設定は、ユーザを識別するためにどこまでパケットを組み立てればよいかを示すデータである。例えば、ＨＴＴＰの場合にはＬ７ヘッダまで（￥ｒ￥ｎ￥ｒ￥ｎ受信まで）、又は１６パケットまでといった設定がなされる。図９の例では、宛先ポート番号毎にどこまでパケットを組み立てるのかが設定されており、宛先ポート番号８０であれば、ＨＴＴＰヘッダ全体が取得されるまでパケットを組み立て、宛先ポート番号５０６０であれば、ＳＩＰ（Session Initiation Protocol）ヘッダ全体が取得されるまでパケットを組み立てる。なお、キーについては、宛先Ｉ／Ｆ（宛先ポート）などを設定する場合もある。
【００３８】
従って、パケット組立部３２５は、パケットのヘッダから特定されるコネクション識別データに基づき、組立設定テーブルから該当するエントリを特定し、当該エントリの組立設定に従って、必要となるパケットの制御データ付きパケットデータを、キュー３２３から読み出す。
【００３９】
また、パケット組立部３２５は、組み立てたメッセージの一部を用いて、制御データ付きメッセージデータを生成し、メモリに格納する（ステップＳ２３）。制御データ付きメッセージデータは、例えば図１０に示すようなデータフォーマットを有する。図１０の例では、ユーザ識別子を含む制御データと、ステップＳ２１で組み立てられるメッセージの一部のデータである部分メッセージ・データと、組み立てに用いられたパケットのヘッダとが含まれる。この段階では、まだユーザ識別子は特定されていないので空欄とされる。パケット組立部３２５は、このような制御データ付きメッセージデータを生成すると、第２ユーザ識別部３２７に出力する。
【００４０】
第２ユーザ識別部３２７は、ルールテーブル格納部３３３に格納されている識別ルールテーブルに従って、パケット組立部３２５から受け取った制御データ付きメッセージデータに含まれる部分メッセージ・データからユーザ識別情報を抽出し、さらに識別テーブル格納部３３５に格納されている識別テーブルを検索して対応するユーザ識別子を特定する（ステップＳ２５）。
【００４１】
識別ルールテーブルの一例を図１１に示す。図１１の例では、宛先ＩＰアドレス、宛先ポート番号及び宛先ＵＲＩ（Uniform Resource Identifier）のうちの少なくともいずれかにより特定されるキーと、当該キーに該当する場合の識別情報格納場所とが登録されるようになっている。識別情報格納場所は、メッセージヘッダのいずれにユーザ識別情報が記載されているかを示しており、Ｘｐａｔｈや正規表現で示される。通常は全てのユーザに共通であるが、図１１の例のごとく、宛先毎に別の値を設定するようにしても良い。第２ユーザ識別部３２７は、例えばＨＴＴＰメッセージのヘッダに含まれるＵＲＬの一部をユーザ識別情報として抽出する。
【００４２】
さらに、識別テーブルの一例を図１２に示す。図１２の例では、ユーザ識別情報に対応付けて、中継装置３００内のユーザ識別子が登録されている。従って、識別ルールテーブルから抽出されたユーザ識別情報で識別テーブルを検索すれば、対応するユーザ識別子を特定できる。
【００４３】
その後、第２ユーザ識別部３２７は、制御データに、ステップＳ２５で特定されたユーザ識別子を設定し、制御データ付きメッセージデータをコネクション・ユーザ関連付設定部３２９に出力する（ステップＳ２７）。
【００４４】
そして、コネクション・ユーザ関連付設定部３２９は、受け取った制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データ（送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号及び宛先ポート番号）を抽出し、さらにコネクション識別データでコネクションテーブルを検索して組立制御テーブルの該当エントリを特定し、この該当エントリに、制御データに含まれるユーザ識別子を設定する（ステップＳ２９）。そして、コネクション・ユーザ関連付設定部３２９は、制御データ付きメッセージデータを第２組立制御設定部３３１に出力する。
【００４５】
第２組立制御設定部３３１は、制御データ付きメッセージデータを受け取ると、制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データを抽出してコネクションテーブルを検索して、関連付けされている、組立制御テーブル内の該当エントリを特定し、この該当エントリにおける組立フラグを組立不要に設定する（ステップＳ３１）。
【００４６】
また、第２組立制御設定部３３１は、メッセージ層におけるキュー３２３において、ステップＳ３１で特定したコネクション識別データと同一のコネクション識別データが抽出されるパケットを破棄させる（ステップＳ３５）。これによって、余分にコピーされてキュー３２３に格納されたパケットのデータを削除することができる。なお、第２組立制御設定部３３１の処理は残っているが、説明の都合上元の処理に戻る。
【００４７】
図４の説明に戻って、第２組立制御設定部３３１は、ステップＳ３１で特定したコネクション識別データを含むキュー解放指示を、ユーザ識別待ち制御部３０７に出力する（ステップＳ１６）。例えば図１３に示すようなデータを出力する。図１３の例では、キュー解放指示を表すデータと、送信元ＩＰアドレスと、宛先ＩＰアドレスと、送信元ポート番号と、宛先ポート番号とを含む。ユーザ識別待ち制御部３０７は、コネクション識別データを含むキュー解放指示を受信すると（ステップＳ１７）、当該コネクション識別データで特定されるコネクションについてのキューからパケットのデータを順次読み出し、第１ユーザ識別部３０９に出力する（ステップＳ１９）。そして処理は端子Ａを介して図１４の処理に移行する。
【００４８】
図１４の処理の説明に移行して、第１ユーザ識別部３０９は、制御データ付きパケットデータを受け取ると、当該パケットデータからコネクション識別データを抽出してコネクションテーブルを検索して、関連付けされている、組立制御テーブルの該当エントリを特定する。そして第１ユーザ識別部３０９は、この該当エントリにおけるユーザ識別子を読み出して、制御データ付きパケットデータにおける制御データに付与し、ユーザ識別子が付与された制御データ付きパケットデータを第１組立制御設定部３１１に出力する（ステップＳ４１）。
【００４９】
第１組立制御設定部３１１は、制御データ付きパケットデータを受け取ると、パケットデータのヘッダに基づきこのパケットが例えばＴＣＰのＦＩＮパケットなどコネクション切断のためのパケットであるか判断する（ステップＳ４３）。コネクション切断のためのパケットである場合には、第１組立制御設定部３１１は、パケットデータからコネクション識別データを抽出し、当該コネクション識別データでコネクションテーブルを検索して該当エントリを特定し、さらに関連付けされている、組立制御テーブルのエントリを特定して、それらのエントリを削除する（ステップＳ４５）。そして、ステップＳ４７に移行する。
【００５０】
処理対象のパケットがコネクション切断のためのパケットでない場合又はステップＳ４５の後に、第１組立制御設定部３１１は、受け取った制御データ付きパケットデータをキュー３１３に格納する。
【００５１】
その後、ユーザ振分部３１５は、キュー３１３に格納されている制御データ付きパケットデータを順に読み出し、制御データのユーザ識別子に基づき当該ユーザ識別子のパケットを担当するパケット処理部３１７を特定して、そのパケット処理部３１７に制御データ付きパケットデータを出力する。パケット処理部３１７は、制御データ付きパケットデータを受信すると、フィルタリング処理や統計処理、ログ記録処理等を実施する（ステップＳ４７）。上でも述べたが、パケット処理部３１７の処理は従来と同じなのでこれ以上述べない。なお、パケット処理部３１７の処理後は、フィルタリングされなければ、制御データを除去されたパケットのデータが、そのパケットの宛先が接続されているポートに出力される。
【００５２】
以上のような処理を実施することによって、コネクション確立からコネクション切断までのうち、最初のメッセージに係る一部のパケットのみを組み立てるだけでユーザ識別子を特定することができ、メッセージ層における処理負荷が大幅に削減されている。
【００５３】
なお、本実施の形態では、１コネクションにつき１ユーザであることを前提としている。しかし、実際には１コネクションにつき複数ユーザである可能性もある。１コネクションにつき複数ユーザである場合には、メッセージ毎にユーザ識別子を特定する。但し、メッセージ全体を組み立てないという点については上で述べたものと同じであり、ユーザ識別情報及びメッセージ長を抽出できるまでパケットを組み立てる。このように、メッセージのヘッダからメッセージ長を抽出すれば、メッセージの切れ目を特定でき、メッセージの切れ目で再度次のメッセージに係るパケットの組み立てを行うようにする。これによって、メッセージ毎にユーザ識別子を特定する場合においても、当該メッセージに係る一部のパケットについては組み立てを行わないので、処理負荷を削減することができる。
【００５４】
［実施の形態３］
次に、第３の実施の形態に係る中継装置４００の機能ブロック図を図１５に示す。中継装置４００は、パケット層の要素として、キュー４０１と、コネクションテーブル管理部４０３と、組立不要パケット判別部４０５と、第１ユーザ識別部４０９と、第１組立制御設定部４１１と、処理レイヤ振分部４１２と、キュー４１３と、ユーザ振分部４１５と、パケット処理部Ａ（４１７Ａ）と、パケット処理部Ｂ（４１７Ｂ）と、コネクションテーブル格納部４１９と、組立制御テーブル格納部４２１とを有する。パケット処理部４１７については、ユーザ毎に所定の処理を実施するものであり、２つに限定されるものではない。
【００５５】
さらに、中継装置４００は、メッセージ層の要素として、キュー４２３と、パケット組立部４２５と、第２ユーザ識別部４２７と、コネクション・ユーザ関連付設定部４２９と、第２組立制御設定部４３１と、ルールテーブル格納部４３３と、識別テーブル格納部４３５と、パケット化処理部４３７とを有する。
【００５６】
キュー４０１には、中継装置４００が受信したパケットが順次格納される。コネクションテーブル管理部４０３は、キュー４０１からパケットのデータを順番に取り出し、コネクションテーブル格納部４１９を必要に応じて更新し、キュー４０１から取り出したパケットのデータを組立不要パケット判別部４０５に出力する。組立不要パケット判別部４０５は、コネクションテーブル格納部４１９を参照して必要であれば組立制御テーブル格納部４２１に格納されている組立制御テーブルを更新すると共に、コネクションテーブル管理部４０３から受け取ったパケットのデータを処理して、第１ユーザ識別部４０９に出力する。この際、組立制御テーブルの該当エントリに組立要（「ｔｒｕｅ」）が設定されていれば、組立不要パケット判別部４０５は、パケットのデータに対して組立フラグを組立要に設定する。それ以外の場合には、組立フラグは組立不要に設定されるか、何も設定しない。
【００５７】
第１ユーザ識別部４０９は、コネクションテーブル格納部４１９及び組立制御テーブル格納部４２１を参照して、既にユーザ識別子が特定されていればパケットのデータにユーザ識別子を付加した上で、パケットのデータを第１組立制御設定部４１１に出力する。第１組立制御設定部４１１は、パケットのデータを参照して必要があれば、コネクションテーブル格納部４１９及び組立制御テーブル４２１を更新する。そして、第１組立制御設定部４１１は、当該パケットのデータを処理レイヤ振分部４１２に出力する。処理レイヤ振分部４１２は、パケットのデータに含まれる組立フラグを確認して、組立要であればメッセージ層におけるキュー４２３にパケットのデータを格納し、組立不要であればパケット層におけるキュー４１３にパケットのデータを格納する。
【００５８】
パケット組立部４２５は、ルールテーブル格納部４３３に格納されているデータに従って、キュー４２３に格納されているパケットのデータを取り出してパケット組立処理を行い、処理結果を第２ユーザ識別部４２７に出力する。第２ユーザ識別部４２７は、ルールテーブル格納部４３３及び識別テーブル格納部４３５に格納されているデータに従って、第２ユーザ識別部４２７からの出力データに対して処理を行い、自らの処理結果をコネクション・ユーザ関連付設定部４２９に出力する。コネクション・ユーザ関連付設定部４２９は、第２ユーザ識別部４２７からの出力データに応じて、コネクションテーブル格納部４１９を参照して、組立制御テーブル格納部４２１を更新し、第２ユーザ識別部４２７からの出力データを第２組立制御設定部４３１に出力する。第２組立制御設定部４３１は、コネクション・ユーザ関連付設定部４２９からの出力データに応じて、コネクションテーブル格納部４１９を参照して、組立制御テーブル格納部４２１を更新すると共に、パケット化処理部４３７に出力する。パケット化処理部４３７は、メッセージのデータをパケットのデータに分割する処理を実施した後、パケットのデータをキュー４１３に出力する。パケット組立部４２５及びコネクション・ユーザ関連付設定部４２９は、パケット組み立てが不要なパケットであるがキュー４２３に格納されたパケットのデータを処理して、コネクション・ユーザ関連付設定部４２９は、処理結果をパケット化処理部４３７に出力する。
【００５９】
ユーザ振分部４１５は、キュー４１３に格納されているパケットのデータを順番に取り出して、ユーザ識別子に応じて担当のパケット処理部４１７に出力する。パケット処理部４１７は、パケットのデータについて所定の処理を実施する。
【００６０】
次に、図１６乃至図２０を用いて中継装置４００の動作の詳細を説明する。まず、中継装置４００のパケット受信部（図示せず）は、中継装置４００に接続されている装置からパケットを受信し、キュー４０１に格納する（図１６：ステップＳ５１）。そして、コネクションテーブル管理部４０３は、キュー４０１からパケットのデータを読み出し、当該パケットについてコネクション確認処理を実施する（ステップＳ５３）。具体的には、パケットのＴＣＰ（又はＵＤＰ）／ＩＰヘッダから、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号及び宛先ポート番号をコネクション識別データとして抽出し、このコネクション識別データからコネクションを特定する。そして、コネクションテーブル管理部４０３は、コネクション識別データでコネクションテーブル格納部４１９におけるコネクションテーブルを検索し、該当エントリが存在しなければ、当該コネクション識別データを含む新規エントリを登録する。一方、該当エントリが存在していれば、コネクションテーブル管理部４０３は、処理対象のパケットに応じて、該当エントリを更新する。また、コネクションテーブル管理部４０３は、処理対象のパケットのデータを組立不要パケット判別部４０５に出力する。コネクションテーブルは、第２の実施の形態と同じように例えば図５に示すようなテーブルである。
【００６１】
そして、組立不要パケット判別部４０５は、処理対象のパケットのデータを受け取ると、パケットのヘッダからコネクション識別データを抽出して、当該コネクション識別データでコネクションテーブル格納部４１９におけるコネクションテーブルを検索し、組立制御テーブル格納部４２１における組立制御テーブルにおける該当エントリへのリンクの有無に基づき、組立制御テーブルに該当エントリが存在しているか確認する（ステップＳ５５）。組立制御テーブルに該当エントリが存在しない場合には、組立不要パケット判別部４０５は、コネクション識別データに対応するエントリを組立制御テーブルに登録すると共に（ステップＳ５７）、当該エントリへのリンクをコネクション識別データに対応付けてコネクションテーブル格納部４１９におけるコネクションテーブルに登録する。処理はステップＳ５９に移行する。組立制御テーブルは、第２の実施の形態と同じように、例えば図６に示すようなテーブルである。なお、組立フラグは、初期的には「ｔｒｕｅ」にセットされている。また、ユーザ識別子は、この段階では登録されない。
【００６２】
ステップＳ５７の後に、又は組立制御テーブルに該当エントリが存在する場合には、組立不要パケット判別部４０５は、処理対象のパケットのデータに制御データを付加する（ステップＳ５９）。
【００６３】
本実施の形態における制御データ付きパケットデータは、例えば図１７に示すようなデータである。図１７の例では、ユーザ識別子及び組立フラグを含む制御データと、パケットのデータ（すなわちヘッダ及びペイロード）とが含まれる。但し、初期的には、組立フラグ及びユーザ識別子には何も設定されない。
【００６４】
さらに、組立不要パケット判別部４０５は、処理対象のパケットのヘッダから抽出されるコネクション識別データに関連付けられている、組立制御テーブルにおけるエントリの組立フラグが組立要を表す「ｔｒｕｅ」になっているかを確認する（ステップＳ６１）。組立制御テーブルの該当エントリの組立フラグが「ｔｒｕｅ」である場合には、組立不要パケット判別部３０５は、制御データの組立フラグを組立要にセットして、第１ユーザ識別部４０９に出力する（ステップＳ６３）。但し、第１ユーザ識別部４０９は、ステップＳ６３を経由した場合、すなわち組立要の組立フラグが制御データに含まれる場合には、何もせずに、制御データ付きパケットデータをそのまま第１組立制御設定部４１１に出力する。
【００６５】
一方、組立制御テーブルの該当エントリの組立フラグが「ｆａｌｓｅ」である場合には、既に組立制御テーブルの該当エントリにユーザ識別子が登録されているので、組立不要パケット判定部４０５は、制御データ付きパケットデータを、第１ユーザ識別部４０９に出力する。ここで制御データの組立フラグを組立不要にセットしても良い。第１ユーザ識別部４０９は、制御データ付きパケットデータを受信すると、パケットのヘッダからコネクション識別データを抽出して当該コネクション識別データでコネクションテーブルを検索し、該当エントリに関連付けられている、組立制御テーブルにおけるエントリのユーザ識別子を読み出し、制御データにユーザ識別子をセットする（ステップＳ６５）。そして、第１ユーザ識別部４０９は、制御データ付きパケットデータを、第１組立制御設定部４１１に出力する。
【００６６】
ステップＳ６３又はステップＳ６５の後に、第１組立制御設定部４１１は、制御データ付きパケットデータを受け取ると、パケットデータのヘッダに基づきこのパケットがＴＣＰのＦＩＮパケットなどコネクション切断のためのパケットであるか判断する（ステップＳ６７）。コネクション切断のためのパケットである場合には、第１組立制御設定部４１１は、パケットデータからコネクション識別データを抽出し、当該コネクション識別データでコネクションテーブルを検索して該当エントリを特定し、さらに関連付けされている、組立制御テーブルのエントリを特定して、それらのエントリを削除する（ステップＳ６９）。そして、第１組立制御設定部４１１は、制御データ付きパケットデータを処理レイヤ振分部４１２に出力する。その後、端子Ｂを介して図１８の処理に移行する。一方、処理対象のパケットがコネクション切断のためのパケットではない場合にも、第１組立制御設定部４１１は、制御データ付きパケットデータを処理レイヤ振分部４１２に出力する。その後、端子Ｂを介して図１８の処理に移行する。
【００６７】
図１８の処理の説明に移行して、処理レイヤ振分部４１２は、受け取った制御データ付きパケットデータの制御データに含まれる組立フラグが組立要にセットされているか判断する（ステップＳ７１）。制御データに含まれる組立フラグが組立要にセットされている場合には、処理レイヤ振分部４１２は、制御データ付きパケットデータを、メッセージ層のキュー４２３に格納する（ステップＳ７２）。そして、メッセージ層処理を実施する（ステップＳ７３）。一方、制御データに含まれる組立フラグが組立不要又は空である場合には、処理レイヤ振分部４１２は、パケット層のキュー４１３に制御データ付きパケットデータを格納する（ステップＳ７４）。ユーザ識別子が既に制御データにセットされているので、組み立てなくても良い。
【００６８】
ここで、図１９及び図２０を用いて本実施の形態に係るメッセージ層処理について説明する。
【００６９】
まず、パケット組立部４２５は、キュー４２３から、メッセージの先頭パケットからユーザ識別情報を含むパケットまで、それらの制御データ付きパケットデータを取り出し、パケットヘッダを除去した上でこれらのパケットのペイロードを組み立て、メモリに格納する（図１９：ステップＳ８１）。この際、パケット組立部４２５は、ルールテーブル格納部４３３に格納されている組立設定テーブルを用いる。組立設定テーブルは、第２の実施の形態と同じように、図９に示すようなテーブルである。
【００７０】
従って、パケット組立部４２５は、パケットのヘッダから特定されるコネクション識別データに基づき、組立設定テーブルから該当するエントリを特定し、当該エントリの組立設定に従って、必要となるパケットの制御データ付きパケットデータを、キュー４２３から読み出す。
【００７１】
また、パケット組立部４２５は、組み立てたメッセージの一部を用いて、制御データ付きメッセージデータを生成し、メモリに格納する（ステップＳ８３）。制御データ付きメッセージデータは、第２の実施の形態と同じように、例えば図１０に示すようなデータフォーマットを有する。パケット組立部４２５は、このような制御データ付きメッセージデータを生成すると、第２ユーザ識別部４２７に出力する。
【００７２】
第２ユーザ識別部４２７は、ルールテーブル格納部４３３に格納されている識別ルールテーブルに従って、パケット組立部４２５から受け取った制御データ付きメッセージデータに含まれる部分メッセージ・データからユーザ識別情報を抽出し、さらに識別テーブル格納部４３５に格納されている識別テーブルを検索して対応するユーザ識別子を特定する（ステップＳ８５）。識別ルールテーブルは、第２の実施の形態と同じように、図１１に示すようなテーブルである。例えば、第２ユーザ識別部４２７は、例えばＨＴＴＰメッセージのヘッダに含まれるＵＲＬの一部をユーザ識別情報として抽出する。さらに、識別テーブルは、第２の実施の形態と同じように例えば図１２に示すようなテーブルである。
【００７３】
その後、第２ユーザ識別部４２７は、制御データに、ステップＳ８５で特定されたユーザ識別子を設定し、制御データ付きメッセージデータをコネクション・ユーザ関連付設定部４２９に出力する（ステップＳ８７）。
【００７４】
そして、コネクション・ユーザ関連付設定部４２９は、制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データ（送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号及び宛先ポート番号）を抽出してコネクションテーブルを検索して組立制御テーブルの該当エントリを特定し、この該当エントリに、制御データに含まれるユーザ識別子を設定する（ステップＳ８９）。そして、コネクション・ユーザ関連付設定部４２９は、制御データ付きメッセージデータを第２組立制御設定部４３１に出力する。
【００７５】
第２組立制御設定部４３１は、制御データ付きメッセージデータを受け取ると、制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データを抽出してコネクションテーブルを検索して、さらに組立制御テーブルにおいて関連付けされているエントリを特定し、このエントリにおける組立フラグを組立不要（「ｆａｌｓｅ」）に設定する（ステップＳ９１）。また、第２組立制御設定部４３１は、制御データ付きメッセージデータをパケット化処理部４３７に出力する。処理は端子Ｃを介して図２０の処理に移行する。
【００７６】
図２０の処理の説明に移行して、パケット化処理部４３７は、受け取った制御データ付きパケットデータを、制御データ付きパケットデータに分割し（ステップＳ９３）、制御データ付きパケットデータをパケット層のキュー４１３に投入する（ステップＳ９５）。パケット化処理では、制御データ付きメッセージデータから、パケットヘッダを取り出し、メッセージを分割して各パケットヘッダに付加する。パケットについての制御データにも、メッセージについての制御データに含まれるユーザ識別子をセットしておく。組立フラグについては空にしても良いし、組立不要を設定しても良い。このようにすれば、メッセージ層にパケットのデータをコピーせずに出力する場合であっても、ユーザ識別子が設定された制御データ付きパケットデータが、キュー４１３に格納されて、パケット処理が行われるようになる。
【００７７】
なお、パケット受信のタイミングやパケット組立処理のスループットの状況によっては、ユーザ識別情報をペイロードに含むパケットの後続パケットについても、メッセージ層のキュー４１３に格納されてしまう場合がある。このような場合には、以下のような処理を実施する。すなわち、パケット組立部４２５は、キュー４２３に残余のパケットが存在しているか判断する（ステップＳ９７）。残余のパケットが存在していない場合には、メッセージ層の処理は完了して、元の処理に戻る。一方、残余のパケットが存在する場合には、パケット組立部４２５は、残余のパケットの制御データ付きパケットデータをキュー４１３から読み出し、パケット組立処理を実施して制御データ付き第２メッセージデータを生成し、第２ユーザ識別部４２７に出力する（ステップＳ９９）。制御データ付き第２メッセージデータのフォーマットは、基本的には図１０に示したものであるが、通常の制御データ付きメッセージデータとは異なるようなフラグなどを付すようにする。また、組立対象のパケットには、ユーザ識別情報をペイロードに含むパケットまでといった制限はない。
【００７８】
第２ユーザ識別部４２７は、制御データ付き第２メッセージデータを受け取ると、そのままコネクション・ユーザ関連付設定部４２９に出力する。コネクション・ユーザ関連付設定部４２９は、制御データ付き第２メッセージデータを受け取ると、パケットヘッダからコネクション識別データを抽出して、このコネクション識別データでコネクションテーブルを検索して組立制御テーブルの該当エントリを特定し、この該当エントリからユーザ識別子を読み出して、制御データにユーザ識別子を設定する（ステップＳ１０１）。そして、パケット化処理部４３７に出力する。すなわち、ステップＳ９３に戻る。
【００７９】
このようにすれば、必要以上にパケットのデータがメッセージ層に出力された場合にも、適切にそれらのパケットのデータをパケット層に戻すことができるようになる。なお、ステップＳ９９及びＳ１０１に示した処理は一例であって、パケット組立部４２５等がユーザ識別子を組立制御テーブルから読み出して制御データに設定した上で直接パケット層のキュー４１３に戻すようにしても良い。また、パケット組立部４２５等が、制御データの組立フラグを組立不要に設定した上で、第１ユーザ識別部４０９に出力するようにしてもよい。
【００８０】
図１８の処理の説明に戻って、メッセージ層処理を実施した後又はステップＳ７４の後に、ユーザ振分部４１５は、キュー４１３に格納されている制御データ付きパケットデータを順に読み出し、制御データのユーザ識別子に基づき当該ユーザ識別子のパケットを担当するパケット処理部４１７を特定して、そのパケット処理部４１７に制御データ付きパケットデータを出力する。パケット処理部４１７は、制御データ付きパケットデータを受信すると、フィルタリング処理や統計処理、ログ記録処理等を実施する（ステップＳ７５）。上でも述べたが、パケット処理部４１７の処理は従来と同じなのでこれ以上述べない。なお、パケット処理部４１７の処理後は、フィルタリングされなければ、制御データを除去されたパケットのデータが、そのパケットの宛先が接続されているポートに出力される。
【００８１】
以上のような処理を実施することによって、コネクション確立からコネクション切断までのうち、最初のメッセージに係る一部のパケットのみを組み立てるだけでユーザ識別子を特定することができ、メッセージ層における処理負荷が大幅に削減されている。
【００８２】
なお、本実施の形態では、１コネクションにつき１ユーザであることを前提としている。しかし、実際には１コネクションにつき複数ユーザである可能性もある。１コネクションにつき複数ユーザである場合には、メッセージ毎にユーザ識別子を特定する。但し、メッセージ全体を組み立てないという点については上で述べたものと同じであり、ユーザ識別情報及びメッセージ長を抽出できるまでパケットを組み立てる。このように、メッセージのヘッダからメッセージ長を抽出すれば、メッセージの切れ目を特定でき、メッセージの切れ目で再度次のメッセージに係るパケットの組み立てを行うようにする。これによって、メッセージ毎にユーザ識別子を特定する場合においても、当該メッセージに係る一部のパケットについては組み立てを行わないので、処理負荷を削減することができる。
【００８３】
［実施の形態４］
実施の形態１では、ステップＳ１７でキュー解放指示を受信した後ステップＳ１９でキューからパケットを順次読み出してパケット処理を実施するが、パケットの読み出しが遅くなると後続のパケットがユーザ識別待ち制御部３０７内のキューを介さずにパケット処理に出力されてしまう場合もある。すなわち、パケット処理の順番が受信順番とは逆転する場合がある。
【００８４】
順番を逆転させないようにするためには、図２１に示すような中継装置５００を採用する。中継装置５００は、パケット層の要素として、キュー５０１と、コネクションテーブル管理部５０３と、組立不要パケット判別部５０５と、ユーザ識別待ち制御部５０７と、順序制御部５０８と、第１ユーザ識別部５０９と、第１組立制御設定部５１１と、キュー５１３と、ユーザ振分部５１５と、パケット処理部Ａ（５１７Ａ）と、パケット処理部Ｂ（５１７Ｂ）と、コネクションテーブル格納部５１９と、組立制御テーブル格納部５２１とを有する。パケット処理部５１７については、ユーザ毎に所定の処理を実施するものであり、２つに限定されるものではない。
【００８５】
さらに、中継装置５００は、メッセージ層の要素として、キュー５２３と、パケット組立部５２５と、第２ユーザ識別部５２７と、コネクション・ユーザ関連付設定部５２９と、順序制御キューイング設定部５３０と、第２組立制御設定部５３１と、ルールテーブル格納部５３３と、識別テーブル格納部５３５とを有する。
【００８６】
キュー５０１には、中継装置５００が受信したパケットが順次格納される。コネクションテーブル管理部５０３は、キュー５０１からパケットのデータを順番に取り出し、コネクションテーブル格納部５１９を必要に応じて更新し、キュー５０１から取り出したパケットのデータを組立不要パケット判別部５０５に出力する。組立不要パケット判別部５０５は、コネクションテーブル格納部５１９を参照して必要であれば組立制御テーブル格納部５２１に格納されている組立制御テーブルを更新すると共に、コネクションテーブル管理部５０３から受け取ったパケットのデータを処理して、ユーザ識別待ち制御部５０７に出力する。ユーザ識別待ち制御部５０７は、組立不要パケット判別部５０５からパケットのデータを受け取り、コピーしてキュー５２３に格納すると共に、コネクション毎に自身のキューに格納する。
【００８７】
なお、組立不要パケット判定部５０５は、組立制御テーブルにおいて該当エントリの組立フラグが「ｆａｌｓｅ」、すなわち組立不要であれば、パケットのデータを順序制御部５０８に出力する。
【００８８】
パケット組立部５２５は、ルールテーブル格納部５３３に格納されているデータに従って、キュー５２３に格納されているパケットのデータを取り出してパケット組立処理を行い、処理結果を第２ユーザ識別部５２７に出力する。第２ユーザ識別部５２７は、ルールテーブル格納部５３３及び識別テーブル格納部５３５に格納されているデータに従って、第２ユーザ識別部５２７からの出力データに対して処理を行い、自らの処理結果をコネクション・ユーザ関連付設定部５２９に出力する。コネクション・ユーザ関連付設定部５２９は、第２ユーザ識別部５２７からの出力データに応じて、コネクションテーブル格納部５１９を参照して、組立制御テーブル格納部５２１を更新し、第２ユーザ識別部５２７からの出力データを、順序制御キューイング設定部５３０に出力する。順序制御キューイング設定部５３０は、順序制御キューイング設定部５３０からデータを受信すると、該当するコネクションについてのキュー閉塞指示を順序制御部５０８に出力する。
【００８９】
順序制御部５０８は、順序制御キューイング設定部５３０からのキュー閉塞指示に従って、受信したパケットのデータを、自身のキューに格納し始める。
【００９０】
さらに、順序制御キューイング設定部５３０は、受信したデータをそのまま第２組立制御設定部５３１に出力する。第２組立制御設定部５３１は、順序制御キューイング設定部５３０からの出力データに応じて、コネクションテーブル格納部５１９を参照して、組立制御テーブル格納部５２１を更新すると共に、ユーザ識別待ち制御部５０７にキュー解放指示を出力する。
【００９１】
ユーザ識別待ち制御部５０７は、第２組立制御設定部５３１からの指示に応じて、キュー内のパケットのデータを第１ユーザ識別部５０９に出力する。さらに、ユーザ識別待ち制御部５０７は、自身のキューからパケットのデータを全て出力した後に、順序制御部５０８にキュー出力指示を出力する。順序制御部５０８は、ユーザ識別待ち制御部５０７からキュー出力指示を受信した場合には、キューの閉塞を解除して、自身のキューに格納されているパケットのデータを、第１ユーザ識別部５０９に順次出力する。
【００９２】
第１ユーザ識別部５０９は、受け取ったパケットのデータに応じてコネクションテーブル格納部５１９及び組立制御テーブル格納部５２１を参照して、ユーザ識別子をパケットのデータに設定する。そして、第１ユーザ識別部５０９は、パケットのデータを第１組立制御設定部５１１に出力する。第１組立制御設定部５１１は、パケットのデータを参照して必要があれば、コネクションテーブル格納部５１９及び組立制御テーブル５２１を更新する。そして、第１組立制御設定部５１１は、パケットのデータをキュー５１３に格納する。
【００９３】
ユーザ振分部５１５は、キュー５１３に格納されているパケットのデータを順番に取り出して、ユーザ識別子に応じて担当のパケット処理部５１７に出力する。パケット処理部５１７は、パケットのデータについて所定の処理を実施する。
【００９４】
なお、組立制御設定部５３１は、不要なパケットのデータがキュー５２３に格納されているようであれば、削除を指示する。
【００９５】
次に、図２２乃至図２８を用いて、図２１に示した中継装置５００の動作の詳細を説明する。
【００９６】
まず、中継装置５００のパケット受信部（図示せず）は、中継装置５００に接続されている装置からパケットを受信し、キュー５０１に格納する（図２２：ステップＳ１１１）。そして、コネクションテーブル管理部５０３は、キュー５０１からパケットのデータを読み出し、当該パケットについてコネクション確認処理を実施する（ステップＳ１１３）。具体的には、パケットのＴＣＰ（又はＵＤＰ）／ＩＰヘッダから、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号及び宛先ポート番号をコネクション識別データとして抽出し、このコネクション識別データからコネクションを特定する。そして、コネクションテーブル管理部５０３は、コネクション識別データでコネクションテーブル格納部５１９におけるコネクションテーブルを検索し、該当エントリが存在しなければ、当該コネクション識別データを含む新規エントリを登録する。一方、該当エントリが存在していれば、コネクションテーブル管理部５０３は、処理対象のパケットに応じて、該当エントリを更新する。また、コネクションテーブル管理部５０３は、処理対象のパケットのデータを組立不要パケット判別部５０５に出力する。コネクションテーブルは、第２の実施の形態と同じように、例えば図５に示すようなテーブルである。
【００９７】
そして、組立不要パケット判別部５０５は、処理対象のパケットのデータを受け取ると、パケットのヘッダからコネクション識別データを抽出して、当該コネクション識別データでコネクションテーブル格納部５１９におけるコネクションテーブルを検索して、組立制御テーブル格納部５２１における組立制御テーブルにおける該当エントリへのリンクの有無に基づき、組立制御テーブルに該当エントリが存在しているか確認する（ステップＳ１１５）。組立制御テーブルに該当エントリが存在しない場合には、組立不要パケット判別部５０５は、コネクション識別データに対応するエントリを組立制御テーブルに登録すると共に（ステップＳ１１７）、当該エントリへのリンクをコネクション識別データに対応付けてコネクションテーブル格納部５１９におけるコネクションテーブルに登録する。処理はステップＳ１１９に移行する。組立制御テーブルは、第２の実施の形態と同じように、例えば図６に示すようなテーブルである。ステップＳ１１７では、エントリにおいて、組立フラグを「ｔｒｕｅ」にして、ユーザ識別子を空「−」にしておく。
【００９８】
組立制御テーブルに該当エントリが存在する場合又はステップＳ１１７の後に、組立不要パケット判別部５０５は、処理対象のパケットのデータに制御データを付加する（ステップＳ１１９）。制御データ付きパケットデータは、第２の実施の形態と同じように、例えば図７に示すようなデータである。初期的にはユーザ識別子には何も設定されない。
【００９９】
なお、本実施の形態では、組立不要パケット判別部５０５は、組立制御テーブルにおける該当エントリの組立フラグが「ｔｒｕｅ」であるか、すなわち組立要と設定されているか確認する（ステップＳ１２１）。なお、ステップＳ１１７を経由した場合には、組立制御テーブルを確認する必要はないが、その他の場合についてはこの段階で確認する。そして、組立要である場合、すなわち該当エントリの組立フラグが「ｔｒｕｅ」である場合には、組立不要パケット判別部５０５は、制御データ付きパケットデータをユーザ識別待ち制御部５０７に出力し、ユーザ識別待ち制御部５０７は、制御データ付きパケットデータをコピーしてメッセージ層のキュー５２３に格納する（ステップＳ１２５）。さらに、ユーザ識別待ち制御部５０７は、制御データ付きパケットデータを、コネクション毎に自身のキューに登録し、キュー解放まで待機する（ステップＳ１２７）。キューの解放は、以下で述べるメッセージ層処理を実施した後に、組立制御設定部５３１が出力する。
【０１００】
一方、組立フラグが「ｆａｌｓｅ」である場合、すなわち、組立不要である場合には、組立不要パケット判別部５０５は、制御データ付きパケットデータを順序制御部５０８に出力して、順序制御部５０８は、順序制御処理を実施する（ステップＳ１２３）。この順序制御処理については、後に説明する。
【０１０１】
なお、制御データ付きパケットデータがキュー５２３に登録されると、本実施の形態に係るメッセージ層処理が実施される。このメッセージ層処理については、図２３乃至図２５を用いて説明する。
【０１０２】
まず、パケット組立部５２５は、キュー５２３から、メッセージの先頭パケットからユーザ識別情報を含むパケットまで、それらの制御データ付きパケットデータを取り出し、パケットヘッダを除去した上でこれらのパケットのペイロードを組み立て、メモリに格納する（図２３：ステップＳ１５１）。この際、パケット組立部５２５は、ルールテーブル格納部５３３に格納されている組立設定テーブルを用いる。組立設定テーブルは、第２の実施の形態と同じように、図９に示すようなテーブルである。
【０１０３】
従って、パケット組立部５２５は、パケットのヘッダから特定されるコネクション識別データに基づき、組立設定テーブルから該当するエントリを特定し、当該エントリの組立設定に従って、必要となるパケットの制御データ付きパケットデータを、キュー５２３から読み出す。
【０１０４】
また、パケット組立部５２５は、組み立てたメッセージの一部を用いて、制御データ付きメッセージデータを生成し、メモリに格納する（ステップＳ１５３）。制御データ付きメッセージデータは、第２の実施の形態と同じように、例えば図１０に示すようなデータフォーマットを有する。パケット組立部５２５は、このような制御データ付きメッセージデータを生成すると、第２ユーザ識別部５２７に出力する。
【０１０５】
第２ユーザ識別部５２７は、ルールテーブル格納部５３３に格納されている識別ルールテーブルに従って、パケット組立部５２５から受け取った制御データ付きメッセージデータに含まれる部分メッセージ・データからユーザ識別情報を抽出し、さらに識別テーブル格納部５３５に格納されている識別テーブルを検索して対応するユーザ識別子を特定する（ステップＳ１５５）。識別ルールテーブルは、第２の実施の形態と同じように例えば図１１に示すようなテーブルである。さらに、識別テーブルは、第２の実施の形態と同じように例えば図１２に示すようなテーブルである。
【０１０６】
その後、第２ユーザ識別部５２７は、制御データに、ステップＳ１５５で特定されたユーザ識別子を設定し、制御データ付きメッセージデータをコネクション・ユーザ関連付設定部５２９に出力する（ステップＳ１５７）。
【０１０７】
そして、コネクション・ユーザ関連付設定部５２９は、制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データ（送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号及び宛先ポート番号）を抽出してコネクションテーブルを検索して組立制御テーブルの該当エントリを特定し、この該当エントリに、制御データに含まれるユーザ識別子を設定する（ステップＳ１５９）。そして、コネクション・ユーザ関連付設定部５２９は、制御データ付きメッセージデータを、順序制御キューイング設定部５３０に出力する。
【０１０８】
順序制御キューイング設定部５３０は、ユーザ識別子が設定された制御データ付きメッセージデータを受け取ると、受信データに含まれるパケットヘッダからコネクション識別データを抽出し、当該コネクション識別データを含むキュー閉塞指示を、順序制御部５０８に出力する（ステップＳ１６１）。キュー閉塞指示は、例えば図２４に示すようなデータフォーマットである。図２４の例では、キュー閉塞指示を表すデータと、送信元ＩＰアドレスと、宛先ＩＰアドレスと、送信元ポート番号と、宛先ポート番号とを含む。
【０１０９】
順序制御部５０８は、コネクション識別データを含むキュー閉塞指示を受信すると、コネクション識別データで特定されるコネクションのキューを閉塞する。閉塞することによって、キューに制御データ付きパケットデータが格納されるようになるが、この段階ではまだ組立制御テーブルにおいて組立不要が設定されていないので、実際には制御データ付きパケットデータはまだ順序制御部５０８に出力されない。そして、順序制御キューイング設定部５３０は、受け取った制御データ付きメッセージデータを、第２組立制御設定部５３１に出力する。
【０１１０】
第２組立制御設定部３３１は、制御データ付きメッセージデータを受け取ると、制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データを抽出してコネクションテーブルを検索して、さらに関連付けされている、組立制御テーブル内の該当エントリを特定し、この該当エントリにおける組立フラグを組立不要に設定する（ステップＳ１６３）。処理は端子Ｉを介して図２５の処理に移行する。
【０１１１】
この段階で組立不要パケット判別部５０５は、同一コネクションについてのパケットのデータを順序制御部５０８に出力して、順序制御部５０８は、キューイングを開始する。
【０１１２】
図２５の処理の説明に移行して、第２組立制御設定部５３１は、メッセージ層におけるキュー５２３において、ステップＳ１６３で特定したコネクション識別データと同一のコネクション識別データが抽出されるパケットを破棄させる（ステップＳ１６５）。これによって、余分にコピーされてキュー５２３に格納されたパケットのデータを削除することができる。なお、第２組立制御設定部５３１の処理は残っているが、説明の都合上元の処理に戻る。
【０１１３】
図２２の処理の説明に戻って、第２組立制御設定部５３１は、ステップＳ１６３で特定したコネクション識別データを含むキュー解放指示を、ユーザ識別待ち制御部５０７に出力する（ステップＳ１２９）。例えば図１３に示すようなデータを出力する。
【０１１４】
ユーザ識別待ち制御部５０７は、コネクション識別データを含むキュー解放指示を受信すると（ステップＳ１３１）、当該コネクション識別データで特定されるコネクションについてのキューから制御データ付きパケットデータを順次読み出し、第１ユーザ識別部５０９に出力する（ステップＳ１３３）。
【０１１５】
その後、ユーザ識別待ち制御部５０７は、コネクション識別データで特定されるコネクションについてのキューから制御データ付きパケットデータを全て読み出した場合には、コネクション識別データを含むキュー出力指示を順序制御部５０８に出力する（ステップＳ１３５）。キュー出力指示は、例えば図２６に示すようなフォーマットのデータである。図２６の例では、キュー出力指示を表すデータと、送信元ＩＰアドレスと、宛先ＩＰアドレスと、送信元ポート番号と、宛先ポート番号とを含む。処理は端子Ｄを介して図２８の処理に移行する。
【０１１６】
ここで順序制御処理について図２７を用いて説明する。順序制御部５０８は、組立不要となって制御データ付きパケットデータを受け取ると、当該パケットデータから抽出されるコネクション識別データで特定されるコネクションのキューが閉塞状態であるか確認する（ステップＳ１７１）。上で述べたように、順序制御キューイング設定部５３０からのキュー閉塞指示に応じて閉塞状態に移行する。
【０１１７】
閉塞状態でない、すなわち解放状態であれば、順序制御部５０８は、受け取った制御データ付きパケットデータを該当コネクションのキューに投入して、このキューから順番に第１ユーザ識別部５０９に出力する。そして元の処理に戻る。
【０１１８】
一方、閉塞状態である場合には、順序制御部５０８は、受け取った制御データ付きパケットデータを、該当コネクションのキューに登録し、キュー出力指示を待機する（ステップＳ１７３）。そして、上で述べたように、ユーザ識別待ち制御部５０７が、コネクション識別データを含むキュー出力指示を出力して、これに対して順序制御部５０８が、コネクション識別データを含むキュー出力指示を受信すると（ステップＳ１７５）、コネクション識別データから特定されるコネクションのキューから制御データ付きパケットデータを順次読み出し、第１ユーザ識別部５０９に出力する（ステップＳ１７７）。そして、順序制御部５０８は、該当コネクションのキューから制御データ付きパケットデータから全て読み出した後に当該キューを解放状態に変更する（ステップＳ１７９）。そして元の処理に戻る。
【０１１９】
このような処理を実施することによって、ユーザ識別待ち制御部５０７内のキューから制御データ付きパケットデータが全て出力された後に、順序制御部５０８内のキューから制御データ付きパケットデータが出力される。そして、順序制御部５０８内のキューから制御データ付きパケットデータが全て出力されると、順序制御部５０８は、受信した順番で制御データ付きパケットデータをそのまま第１ユーザ識別部５０９に出力するようになる。これによって、受信順番そのままでキュー５１３に制御データ付きパケットデータが格納されるようになる。
【０１２０】
端子Ｄの後の処理（図２８）の説明に移行して、第１ユーザ識別部５０９は、制御データ付きパケットデータを受け取ると、当該パケットデータからコネクション識別データを抽出してコネクションテーブルを検索して、さらに関連付けされている、組立制御テーブルの該当エントリを特定する。そして第１ユーザ識別部５０９は、この該当エントリにおけるユーザ識別子を読み出して、制御データ付きパケットデータにおける制御データに付与し、ユーザ識別子が付与された制御データ付きパケットデータを第１組立制御設定部５１１に出力する（ステップＳ１３７）。
【０１２１】
第１組立制御設定部５１１は、制御データ付きパケットデータを受け取ると、パケットデータのヘッダに基づきこのパケットがＴＣＰのＦＩＮパケットなどコネクション切断のためのパケットであるか判断する（ステップＳ１３９）。コネクション切断のためのパケットである場合には、第１組立制御設定部５１１は、パケットデータからコネクション識別データを抽出し、当該コネクション識別データでコネクションテーブルを検索して該当エントリを特定し、さらに関連付けされている、組立制御テーブルのエントリを特定して、それらのエントリを削除する（ステップＳ１４１）。そして、ステップＳ１４３に移行する。
【０１２２】
処理対象のパケットがコネクション切断のためのパケットでない場合又はステップＳ１４１の後に、第１組立制御設定部５１１は、受け取った制御データ付きパケットデータをキュー５１３に格納する。
【０１２３】
その後、ユーザ振分部５１５は、キュー５１３に格納されている制御データ付きパケットデータを順に読み出し、制御データのユーザ識別子に基づき当該ユーザ識別子のパケットを担当するパケット処理部５１７を特定して、そのパケット処理部５１７に制御データ付きパケットデータを出力する。パケット処理部５１７は、制御データ付きパケットデータを受信すると、フィルタリング処理や統計処理、ログ記録処理等を実施する（ステップＳ１４３）。上でも述べたが、パケット処理部５１７の処理は従来と同じなのでこれ以上述べない。なお、パケット処理部５１７の処理後は、フィルタリングされなければ、制御データを除去されたパケットのデータが、そのパケットの宛先が接続されているポートに出力される。
【０１２４】
以上のような処理を実施することによって、コネクション確立からコネクション切断までのうち、最初のメッセージに係る一部のパケットのみを組み立てるだけでユーザ識別子を特定することができ、メッセージ層における処理負荷が大幅に軽減されている。さらに、キュー５１３に投入される順番は、受信順番と同じになることが確保される。
【０１２５】
なお、本実施の形態では、１コネクションにつき１ユーザであることを前提としている。しかし、実際には１コネクションにつき複数ユーザである可能性もある。１コネクションにつき複数ユーザである場合には、メッセージ毎にユーザ識別子を特定する。但し、メッセージ全体を組み立てないという点については上で述べたものと同じであり、ユーザ識別情報及びメッセージ長を抽出できるまでパケットを組み立てる。このように、メッセージのヘッダからメッセージ長を抽出すれば、メッセージの切れ目を特定でき、メッセージの切れ目で再度次のメッセージに係るパケットの組み立てを行うようにする。これによって、メッセージ毎にユーザ識別子を特定する場合においても、当該メッセージに係る一部のパケットについては組み立てを行わないので、処理負荷を削減することができる。
【０１２６】
［実施の形態５］
第３の実施の形態に係る中継装置４００についても、メッセージ層に出力したパケットのデータを再度パケット層に戻すような処理を行っているため、パケットのデータが受信順番とは異なる順番でキュー４１３に格納される場合がある。順番を変化させないようにするためには、図２９に示すような中継装置６００を採用する。
【０１２７】
本実施の形態に係る中継装置６００は、パケット層の要素として、キュー６０１と、コネクションテーブル管理部６０３と、組立不要パケット判別部６０５と、順序制御部６０７と、第１ユーザ識別部６０９と、第１組立制御設定部６１１と、処理レイヤ振分部６１２と、キュー６１３と、ユーザ振分部６１５と、パケット処理部Ａ（６１７Ａ）と、パケット処理部Ｂ（６１７Ｂ）と、コネクションテーブル格納部６１９と、組立制御テーブル格納部６２１とを有する。パケット処理部６１７については、ユーザ毎に所定の処理を実施するものであり、２つに限定されるものではない。
【０１２８】
さらに、中継装置６００は、メッセージ層の要素として、キュー６２３と、パケット組立部６２５と、第２ユーザ識別部６２７と、コネクション・ユーザ関連付設定部６２９と、順序制御キューイング設定部６３０、第２組立制御設定部６３１と、ルールテーブル格納部６３３と、識別テーブル格納部６３５と、パケット化処理部６３７と、キュー解放指示部６３９とを有する。
【０１２９】
キュー６０１には、中継装置６００が受信したパケットが順次格納される。コネクションテーブル管理部６０３は、キュー６０１からパケットのデータを順番に取り出し、コネクションテーブル格納部６１９を必要に応じて更新し、キュー６０１から取り出したパケットのデータを組立不要パケット判別部６０５に出力する。組立不要パケット判別部６０５は、コネクションテーブル格納部６１９を参照して必要であれば組立制御テーブル格納部６２１に格納されている組立制御テーブルを更新すると共に、コネクションテーブル管理部６０３から受け取ったパケットのデータを処理する。組立不要パケット判別部６０５は、パケットのデータを、パケット組立が必要である場合には第１組立制御設定部６１１に出力し、パケット組立が不要である場合には順序制御部６０７に出力する。順序制御部６０７は、コネクション毎にキューを有しており、後に述べるように順序制御キューイング設定部６３０及びキュー解放指示部６３９からの指示に応じて処理を行い、キュー解放が指示されればパケットのデータを第１ユーザ識別部６０９に出力する。
【０１３０】
第１ユーザ識別部６０９は、コネクションテーブル格納部６１９及び組立制御テーブル格納部６２１を参照して、既にユーザ識別子が特定されていればパケットのデータにユーザ識別子を付加した上で、パケットのデータを第１組立制御設定部６１１に出力する。
【０１３１】
第１組立制御設定部６１１は、パケットのデータを参照して必要があれば、コネクションテーブル格納部６１９及び組立制御テーブル６２１を更新する。そして、第１組立制御設定部６１１は、当該パケットのデータを処理レイヤ振分部６１２に出力する。処理レイヤ振分部６１２は、パケットのデータに含まれる組立フラグに応じて、組立要であればメッセージ層におけるキュー６２３にパケットのデータを格納し、組立不要であればパケット層におけるキュー６１３にパケットのデータを格納する。
【０１３２】
パケット組立部６２５は、ルールテーブル格納部６３３に格納されているデータに従って、キュー６２３に格納されているパケットのデータを取り出してパケット組立処理を行い、処理結果を第２ユーザ識別部６２７に出力する。第２ユーザ識別部６２７は、ルールテーブル格納部６３３及び識別テーブル格納部６３５に格納されているデータに従って、第２ユーザ識別部６２７からの出力データに対して処理を行い、自らの処理結果をコネクション・ユーザ関連付設定部６２９に出力する。コネクション・ユーザ関連付設定部６２９は、第２ユーザ識別部６２７からの出力データに応じて、コネクションテーブル格納部６１９を参照して、組立制御テーブル格納部６２１を更新し、第２ユーザ識別部６２７からの出力データを順序制御キューイング設定部６３０に出力する。順序制御キューイング設定部６３０は、コネクション・ユーザ関連付設定部６２９からのデータを受け取ると、順序制御部６０７に対してキュー閉塞指示を出力すると共に、受け取ったデータを第２組立制御設定部６３１に出力する。第２組立制御設定部６３１は、コネクション・ユーザ関連付設定部６２９からの出力データに応じて、コネクションテーブル格納部６１９を参照して、組立制御テーブル格納部６２１を更新すると共に、パケット化処理部６３７に出力する。パケット化処理部６３７は、メッセージのデータをパケットのデータに分割する処理を実施した後、パケットのデータをキュー６１３に出力する。そして、パケット化処理部６３７は、処理が完了すると、キュー解放指示部６３９に指示を出力する。キュー解放指示部６３９は、パケット化処理部６３７からの指示に応じて、キュー解放指示を順序制御部６０７に出力する。
【０１３３】
なお、パケット組立部６２５及びコネクション・ユーザ関連付設定部６２９は、パケット組み立てが不要なパケットであるがキュー６２３に格納されたパケットのデータを処理して、コネクション・ユーザ関連付設定部６２９は、処理結果をパケット化処理部６３７に出力する。
【０１３４】
なお、第２ユーザ識別部６２７は、パケット組み立てが不要なパケットであるがキュー６２３に格納されたパケットのデータをパケット化処理部６３７に出力する。
【０１３５】
また、ユーザ振分部６１５は、キュー６１３に格納されているパケットのデータを順番に取り出して、ユーザ識別子に応じて担当のパケット処理部６１７に出力する。パケット処理部６１７は、パケットのデータについて所定の処理を実施する。
【０１３６】
次に、図３０乃至図３４を用いて中継装置６００の詳細な動作について説明する。
【０１３７】
まず、中継装置６００のパケット受信部（図示せず）は、中継装置６００に接続されている装置からパケットを受信し、キュー６０１に格納する（図３０：ステップＳ２０１）。そして、コネクションテーブル管理部６０３は、キュー６０１からパケットのデータを読み出し、当該パケットについてコネクション確認処理を実施する（ステップＳ２０３）。具体的には、パケットのＴＣＰ（又はＵＤＰ）／ＩＰヘッダから、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号及び宛先ポート番号をコネクション識別データとして抽出し、このコネクション識別データからコネクションを特定する。そして、コネクションテーブル管理部６０３は、コネクション識別データでコネクションテーブル格納部６１９におけるコネクションテーブルを検索し、該当エントリが存在しなければ、当該コネクション識別データを含む新規エントリを登録する。一方、該当エントリが存在していれば、コネクションテーブル管理部６０３は、処理対象のパケットに応じて、該当エントリを更新する。また、コネクションテーブル管理部６０３は、処理対象のパケットのデータを組立不要パケット判別部６０５に出力する。コネクションテーブルは、第２の実施の形態と同じように、例えば図５に示すようなテーブルである。
【０１３８】
そして、組立不要パケット判別部６０５は、処理対象のパケットのデータを受け取ると、パケットのヘッダからコネクション識別データを抽出して、当該コネクション識別データでコネクションテーブル格納部６１９におけるコネクションテーブルを検索し、組立制御テーブル格納部６２１における組立制御テーブルにおける該当エントリへのリンクの有無に基づき、組立制御テーブルに該当エントリが存在しているか確認する（ステップＳ２０５）。組立制御テーブルに該当エントリが存在しない場合には、組立不要パケット判別部６０５は、コネクション識別データに対応するエントリを組立制御テーブルに登録すると共に（ステップＳ２０７）、当該エントリへのリンクをコネクション識別データに対応付けてコネクションテーブル格納部６１９におけるコネクションテーブルに登録する。処理はステップＳ２０９に移行する。組立制御テーブルは、第２の実施の形態と同じように、例えば図６に示すようなテーブルである。組立フラグは、初期的には「ｔｒｕｅ」にセットされている。また、ユーザ識別子は、登録されない。
【０１３９】
ステップＳ２０７の後に、又は組立制御テーブルに該当エントリが存在する場合には、組立不要パケット判別部６０５は、処理対象のパケットのデータに制御データを付加する（ステップＳ２０９）。
【０１４０】
本実施の形態における制御データ付きパケットデータは、例えば図１７に示すようなデータである。初期的には、制御データにおける組立フラグ及びユーザ識別子には何も設定されない。
【０１４１】
さらに、組立不要パケット判別部６０５は、処理対象のパケットのヘッダから抽出されるコネクション識別データに関連付けられている、組立制御テーブルにおけるエントリの組立フラグが組立要を表す「ｔｒｕｅ」になっているかを確認する（ステップＳ２１１）。組立制御テーブルの該当エントリの組立フラグが「ｔｒｕｅ」である場合には、組立不要パケット判別部６０５は、制御データの組立フラグを組立要にセットして、第１組立制御設定部６１１に出力する（ステップＳ２１３）。なお、第１組立制御設定部６１１ではなく、第１ユーザ識別部６０９に出力するようにしても良い。但し、その場合でも第１ユーザ識別部６０９では特に何もせずに制御データ付きパケットデータを第１組立制御設定部６１１に出力する。そして、処理は端子Ｆを介して図３１の処理に移行する。
【０１４２】
一方、組立制御テーブルの該当エントリの組立フラグが「ｆａｌｓｅ」である場合には、組立不要パケット判定部６０５は、制御データ付きパケットデータを、順序制御部６０７に出力する。制御データにおける組立フラグを組立不要に設定するようにしても良い。組立フラグが「ｆａｌｓｅ」であるということは、ユーザ識別子が既に特定されているが、メッセージ層における処理が完了しているとは限らないので、順序制御部６０７に出力して、キューに保持する。なお、制御データにおける組立フラグを組立不要にセットするようにしても良い。処理は、端子Ｅを介して図３１の処理に移行する。
【０１４３】
図３１の処理の説明に移行するが、まだユーザ識別子が特定される場面を説明していないので、ステップＳ２１３の後続の処理である端子Ｆ以降の処理について先に説明する。すなわち、ステップＳ２１５乃至Ｓ２２７の処理については後で述べる。
【０１４４】
第１組立制御設定部６１１は、制御データ付きパケットデータを受け取ると、そのパケットデータのヘッダに基づきこのパケットがＴＣＰのＦＩＮパケットなどコネクション切断のためのパケットであるか判断する（ステップＳ２２９）。コネクション切断のためのパケットである場合には、第１組立制御設定部６１１は、パケットデータからコネクション識別データを抽出し、当該コネクション識別データでコネクションテーブルを検索して該当エントリを特定し、さらに関連付けされている、組立制御テーブルのエントリを特定して、それらのエントリを削除する（ステップＳ２３１）。そして、第１組立制御設定部６１１は、制御データ付きパケットデータを処理レイヤ振分部６１２に出力する。その後、端子Ｇを介して図３２の処理に移行する。一方、処理対象のパケットがコネクション切断のためのパケットではない場合にも、第１組立制御設定部６１１は、制御データ付きパケットデータを処理レイヤ振分部６１２に出力する。その後、端子Ｇを介して図３２の処理に移行する。
【０１４５】
図３２の処理の説明に移行して、処理レイヤ振分部６１２は、受け取った制御データ付きパケットデータの制御データに含まれる組立フラグが組立要にセットされているか判断する（ステップＳ２３３）。制御データに含まれる組立フラグが組立要にセットされている場合には、処理レイヤ振分部６１２は、制御データ付きパケットデータを、メッセージ層のキュー６２３に格納する（ステップＳ２３４）。そして、メッセージ層処理を実施する（ステップＳ２３５）。一方、制御データに含まれる組立フラグが組立不要又は空である場合には、処理レイヤ振分部６１２は、パケット層のキュー６１３に制御データ付きパケットデータを格納する（ステップＳ２３６）。ユーザ識別子が既に制御データにセットされているので、組み立てなくても良い。
【０１４６】
ここで、図３３及び図３４を用いて本実施の形態に係るメッセージ層処理について説明する。
【０１４７】
まず、パケット組立部６２５は、キュー６２３から、メッセージの先頭パケットからユーザ識別情報を含むパケットまで、それらの制御データ付きパケットデータを取り出し、パケットヘッダを除去した上でこれらのパケットのペイロードを組み立て、メモリに格納する（図３３：ステップＳ２５１）。この際、パケット組立部６２５は、ルールテーブル格納部６３３に格納されている組立設定テーブルを用いる。組立設定テーブルは、第２の実施の形態と同じように、図９に示すようなテーブルである。
【０１４８】
従って、パケット組立部６２５は、パケットのヘッダから特定されるコネクション識別データに基づき、組立設定テーブルから該当するエントリを特定し、当該エントリの組立設定に従って、必要となるパケットの制御データ付きパケットデータを、キュー６２３から読み出す。
【０１４９】
また、パケット組立部６２５は、組み立てたメッセージの一部を用いて、制御データ付きメッセージデータを生成し、メモリに格納する（ステップＳ２５３）。制御データ付きメッセージデータは、第２の実施の形態と同じように、例えば図１０に示すようなデータフォーマットを有する。パケット組立部６２５は、このような制御データ付きメッセージデータを生成すると、第２ユーザ識別部６２７に出力する。
【０１５０】
第２ユーザ識別部６２７は、ルールテーブル格納部６３３に格納されている識別ルールテーブルに従って、パケット組立部６２５から受け取った制御データ付きメッセージデータに含まれる部分メッセージ・データからユーザ識別情報を抽出し、さらに識別テーブル格納部６３５に格納されている識別テーブルを検索して対応するユーザ識別子を特定する（ステップＳ２５５）。識別ルールテーブルは、第２の実施の形態と同じように、例えば図１１に示すようなテーブルである。さらに、識別テーブルは、第２の実施の形態と同じように、例えば図１２に示すようなテーブルである。
【０１５１】
その後、第２ユーザ識別部６２７は、制御データに、ステップＳ２５５で特定されたユーザ識別子を設定し、制御データ付きメッセージデータをコネクション・ユーザ関連付設定部６２９に出力する（ステップＳ２５７）。
【０１５２】
そして、コネクション・ユーザ関連付設定部６２９は、制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データ（送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号及び宛先ポート番号）を抽出してコネクションテーブルを検索して組立制御テーブルの該当エントリを特定し、この該当エントリに、制御データに含まれるユーザ識別子を設定する（ステップＳ２５９）。そして、コネクション・ユーザ関連付設定部６２９は、制御データ付きメッセージデータを、順序制御キューイング設定部６３０に出力する。
【０１５３】
順序制御キューイング設定部６３０は、ユーザ識別子が設定された制御データ付きメッセージデータを受け取ると、受信データに含まれるパケットヘッダからコネクション識別データを抽出し、当該コネクション識別データを含むキュー閉塞指示を、順序制御部６０７に出力する（ステップＳ２６１）。キュー閉塞指示は、例えば図２４に示すようなデータフォーマットを有する。
【０１５４】
順序制御部６０７は、コネクション識別データを含むキュー閉塞指示を受信すると、コネクション識別データで特定されるコネクションのキューを閉塞する。閉塞することによって、キューに制御データ付きパケットデータが格納されるようになるが、この段階ではまだ組立制御テーブルの該当エントリにおいて組立不要が設定されていないので、実際には制御データ付きパケットデータはまだ順序制御部６０７に出力されない。そして、順序制御キューイング設定部６３０は、受け取った制御データ付きメッセージデータを、第２組立制御設定部６３１に出力する。
【０１５５】
第２組立制御設定部６３１は、制御データ付きメッセージデータを受け取ると、制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データを抽出してコネクションテーブルを検索し、さらに関連付けされている、組立制御テーブル内の該当エントリを特定し、この該当エントリにおける組立フラグを組立不要に設定する（ステップＳ２６３）。処理は端子Ｈを介して図３４の処理に移行する。
【０１５６】
この段階で組立不要パケット判別部６０５は、同一コネクションについてのパケットのデータを順序制御部６０７に出力して、順序制御部６０７は、キューイングを開始する。
【０１５７】
図３４の処理の説明に移行して、パケット化処理部６３７は、受け取った制御データ付きパケットデータを、制御データ付きパケットデータに分割し（ステップＳ２６５）、制御データ付きパケットデータをパケット層のキュー６１３に投入する（ステップＳ２６７）。パケット化処理では、制御データ付きメッセージデータから、パケットヘッダを取り出し、メッセージを分割して各パケットヘッダに付加する。パケットについての制御データにも、メッセージについての制御データに含まれるユーザ識別子をセットしておく。組立フラグについては空にしても良いし、組立不要を設定しても良い。このようにすれば、メッセージ層にパケットのデータをコピーせずに出力する場合にも、ユーザ識別子が設定された制御データ付きパケットデータが、キュー６１３に格納されて、パケット処理が行われるようになる。
【０１５８】
なお、パケット受信のタイミングやパケット組立処理のスループットの状況によっては、ユーザ識別情報をペイロードに含むパケットの後続パケットについても、メッセージ層のキュー６１３に格納されてしまう場合がある。このような場合には、以下のような処理を実施する。すなわち、パケット組立部６２５は、キュー６２３に残余のパケットが存在しているか判断する（ステップＳ２６９）。
【０１５９】
残余のパケットが存在する場合には、パケット組立部６２５は、残余のパケットの制御データ付きパケットデータをキュー６１３から読み出し、パケット組立処理を実施して制御データ付き第２メッセージデータを生成し、第２ユーザ識別部６２７に出力する（ステップＳ２７１）。制御データ付き第２メッセージデータのフォーマットは、基本的には図１０に示したものと同じであるが、通常の制御データ付きメッセージデータとは異なるようなフラグなどを付すようにする。なお、組立対象のパケットには、ユーザ識別情報をペイロードに含むパケットまでといった制限はない。
【０１６０】
第２ユーザ識別部６２７は、制御データ付き第２メッセージデータを受け取ると、そのままコネクション・ユーザ関連付設定部６２９に出力する。コネクション・ユーザ関連付設定部６２９は、制御データ付き第２メッセージデータを受け取ると、パケットヘッダからコネクション識別データを抽出し、このコネクション識別データでコネクションテーブルを検索して組立制御テーブルの該当エントリを特定し、この該当エントリからユーザ識別子を読み出して、制御データにユーザ識別子を設定する（ステップＳ２７３）。そして、パケット化処理部６３７に出力する。すなわち、ステップＳ２６５に戻る。
【０１６１】
このようにすれば、必要以上にパケットのデータがメッセージ層に出力された場合にも、適切にそれらのパケットのデータをパケット層に戻すことができるようになる。なお、ステップＳ２７１及びＳ２７３に示した処理は一例であって、パケット組立部６２５等がユーザ識別子を組立制御テーブルから読み出して制御データに設定した上で直接パケット層のキュー６１３に戻すようにしても良い。また、パケット組立部６２５等が、制御データの組立フラグを組立不要に設定した上で、第１ユーザ識別部６０９に出力するようにしてもよい。
【０１６２】
一方、残余のパケットがキュー６２３に残っていない場合には、パケット化処理部６３７は、パケットへの分割処理が完了したか判断する（ステップＳ２７５）。完了していない場合には、完了を待機する。一方、パケットへの分割処理が完了した場合には、キュー解放指示部６３９に、コネクション識別データを含む完了通知を出力し、キュー解放指示部６３９は、コネクション識別データを含む完了通知を受け取ると、コネクション識別データを含むキュー解放指示を、順序制御部６０７に出力する（ステップＳ２７７）。キュー解放指示については、図１３に示したフォーマットを有する。そして、元の処理に戻る。
【０１６３】
図３２の処理の説明に戻って、メッセージ層処理を実施した後又はステップＳ２３６の後に、ユーザ振分部６１５は、キュー６１３に格納されている制御データ付きパケットデータを順に読み出し、制御データのユーザ識別子に基づき当該ユーザ識別子のパケットを担当するパケット処理部６１７を特定して、そのパケット処理部６１７に制御データ付きパケットデータを出力する。パケット処理部６１７は、制御データ付きパケットデータを受信すると、フィルタリング処理や統計処理、ログ記録処理等を実施する（ステップＳ２３７）。上でも述べたが、パケット処理部６１７の処理は従来と同じなのでこれ以上述べない。なお、パケット処理部６１７の処理後は、フィルタリングされなければ、制御データを除去されたパケットのデータが、そのパケットの宛先が接続されているポートに出力される。
【０１６４】
さらに図３１の処理に戻って、端子Ｅの後に、順序制御部６０８は、組立不要となって制御データ付きパケットデータを受け取ると、当該パケットデータから抽出されるコネクション識別データで特定されるコネクションのキューが閉塞状態であるか確認する（ステップＳ２１５）。上で述べたように、順序制御キューイング設定部６３０からのキュー閉塞指示に応じて閉塞状態に移行する。
【０１６５】
閉塞状態でない、すなわち解放状態であれば、順序制御部６０８は、受け取った制御データ付きパケットデータを該当コネクションのキューに投入して、このキューから順番に第１ユーザ識別部６０９に出力する。処理はステップＳ２２７に移行する。
【０１６６】
一方、閉塞状態である場合には、順序制御部６０８は、受け取った制御データ付きパケットデータを、該当コネクションのキューに登録し、キュー解放指示を待機する（ステップＳ２１７）。そして、上で述べたように、第２組立制御設定部６３１が、コネクション識別データを含むキュー解放指示を出力して（ステップＳ２７７）、これに対して順序制御部６０７が、コネクション識別データを含むキュー解放指示を受信すると（ステップＳ２２１）、コネクション識別データから特定されるコネクションのキューから制御データ付きパケットデータを順次読み出し、第１ユーザ識別部６０９に出力する（ステップＳ２２３）。そして、順序制御部６０７は、該当コネクションのキューから制御データ付きパケットデータを全て読み出した後に当該キューを解放状態に変更する（ステップＳ２２５）。処理はステップＳ２２７に移行する。
【０１６７】
ステップＳ２１５でキューが解放状態である場合又はステップＳ２２５の後に、第１ユーザ識別部６０９は、制御データ付きパケットデータを受け取ると、当該パケットデータからコネクション識別データを抽出してコネクションテーブルを検索して、関連付けされている、組立制御テーブルの該当エントリを特定する。そして第１ユーザ識別部６０９は、この該当エントリにおけるユーザ識別子を読み出して、制御データ付きパケットデータにおける制御データに付与し、ユーザ識別子が付与された制御データ付きパケットデータを第１組立制御設定部６１１に出力する（ステップＳ２２７）。この後、既に説明したように、ステップＳ２２９に移行する。
【０１６８】
このようにメッセージ層に出力されなかったパケットの制御データ付きパケットデータは、そのまま処理レイヤ振分部６１２によりキュー６１３に格納される。このキュー６１３に格納される順番は、メッセージ層でのパケット化処理が完了した後になるので、パケット処理部６１７における処理順番が逆転するといったことはない。
【０１６９】
以上のような処理を実施することによって、コネクション確立からコネクション切断までのうち、最初のメッセージに係る一部のパケットのみを組み立てるだけでユーザ識別子を特定することができ、メッセージ層における処理負荷が大幅に削減されている。また、メッセージ層に出力されたパケットが後から処理されることはなく、パケット処理部６１７において処理順番が入れ替わることはない。
【０１７０】
なお、本実施の形態では、１コネクションにつき１ユーザであることを前提としている。しかし、実際には１コネクションにつき複数ユーザである可能性もある。１コネクションにつき複数ユーザである場合には、メッセージ毎にユーザ識別子を特定する。但し、メッセージ全体を組み立てないという点については上で述べたものと同じであり、ユーザ識別情報及びメッセージ長を抽出できるまでパケットを組み立てる。このように、メッセージのヘッダからメッセージ長を抽出すれば、メッセージの切れ目を特定でき、メッセージの切れ目で再度次のメッセージに係るパケットの組み立てを行うようにする。これによって、メッセージ毎にユーザ識別子を特定する場合においても、当該メッセージに係る一部のパケットについては組み立てを行わないので、処理負荷を削減することができる。
【０１７１】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、機能ブロック図は一例であって、必ずしも部品やモジュールが、図示した形に分割されない場合もある。さらに、処理順番についても、処理結果が変化しない限りにおいて、並列実施したり、処理順番を入れ替えたりすることができる。さらに、各機能ブロックは、ハードウエアとして実装される場合もあれば、プログラムをプロセッサに実行させることによって実装される場合もある。
【０１７２】
また、中継装置は専用の装置として実装される場合もあれば、コンピュータ装置として実装される場合もある。例えば、後者の場合、図３５に示すように、メモリ２６０１とＣＰＵ２６０３とハードディスク・ドライブ（ＨＤＤ）２６０５と表示装置２６０９に接続される表示制御部２６０７とリムーバブル・ディスク２６１１用のドライブ装置２６１３と入力装置２６１５とネットワークに接続するための通信部２６１７（図３５では、２６１７ａ乃至２６１７ｃ）とがバス２６１９で接続されている。なお、場合によっては、表示制御部２６０７、表示装置２６０９、ドライブ装置２６１３、入力装置２６１５は含まれない場合もある。オペレーティング・システム（ＯＳ：Operating System）及び本実施の形態における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２６０５に格納されており、ＣＰＵ２６０３により実行される際にはＨＤＤ２６０５からメモリ２６０１に読み出される。必要に応じてＣＰＵ２６０３は、表示制御部２６０７、通信部２６１７、ドライブ装置２６１３を制御して、必要な動作を行わせる。なお、通信部２６１７のいずれかを介して入力されたデータは、他の通信部２６１７を介して出力される。ＣＰＵ２６０３は、通信部２６１７を制御して、適切に出力先を切り替える。また、処理途中のデータについては、メモリ２６０１に格納され、必要があればＨＤＤ２６０５に格納される。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２６１１に格納されて頒布され、ドライブ装置２６１３からＨＤＤ２６０５にインストールされる。インターネットなどのネットワーク及び通信部２６１７を経由して、ＨＤＤ２６０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２６０３、メモリ２６０１などのハードウエアとＯＳ及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０１７３】
例えば、ＣＰＵ２６０３、メモリ２６０１などのハードウエアとＯＳ及び必要なアプリケーション・プログラムとが有機的に協働することにより、中継装置の各処理を行う機能部が実現される。また、データを格納する各格納部は、メモリ２６０１又はＨＤＤ２６０５に格納される。
【０１７４】
以上述べた本技術の実施の形態をまとめると以下のとおりになる。
【０１７５】
実施の形態に係る中継装置は、（Ａ）１のメッセージに係る複数のパケットを順次受信する受信部と、（Ｂ）複数のパケットのうち上記１のメッセージに係る先頭パケットから上記１のメッセージのヘッダにおけるユーザ識別情報をペイロードに含むパケットまでのパケット群を組み立てて、部分メッセージ・データを生成するパケット組立部と、（Ｃ）部分メッセージ・データからユーザ識別情報を抽出すると共に、当該ユーザ識別情報からユーザ識別子を特定するユーザ識別部と、（Ｄ）上記１のメッセージに係る上記パケット群と複数のパケットのうちパケット組立部で組み立てられなかったパケットとに対して、特定されたユーザ識別子に基づき所定のパケット処理を実施するパケット処理部とを有する。
【０１７６】
このようにパケット組立部で組み立てられなかったパケットの分、パケット組立部の処理負荷が軽減される。
【０１７７】
また、上で述べた中継装置は、ユーザ識別部により特定されたユーザ識別子を、部分メッセージ・データ又は上記パケット群から抽出されるコネクション識別データに関連付けて制御データ格納部に格納する関連付設定部をさらに有するようにしてもよい。その場合、パケット処理部は、１のメッセージと同一のコネクションについての後続のメッセージに係るパケットに対して、制御データ格納部に格納されているユーザ識別子に基づき所定のパケット処理を実施するようにしてもよい。
【０１７８】
１コネクションにつき１ユーザの場合には、コネクションが切断されるまで同一のユーザ識別子を用いることができ、さらなる処理負荷軽減が可能となる。
【０１７９】
さらに、上で述べた中継装置は、受信したパケットを、当該パケットのヘッダから特定されるコネクション毎にキューに登録すると共に、当該パケットのコピーをパケット組立部に出力するパケット判別部と、ユーザ識別部によってユーザ識別子が特定された場合に、部分メッセージ・データ又は上記パケット群から特定されるコネクションについてのキューから、パケット処理部にパケットを出力させる組立制御設定部とをさらに有するようにしてもよい。このように、一部のパケットのデータをコピーしてメッセージ組立を行うようにすれば、中継装置の構成がシンプルになる。
【０１８０】
また、上で述べた中継装置は、複数のパケットのうち先頭パケットのヘッダからコネクション識別データを抽出し、制御データ格納部に格納する制御データ管理部と、複数のパケットのうち先頭パケットについて、当該先頭パケットのヘッダから抽出されたコネクション識別データに関連付けて、パケット組立部の処理が必要であることを表す組立フラグを制御データ格納部に格納すると共に、組立フラグがパケット組立部の処理が必要であることを表している間、先頭パケットのヘッダについて抽出されたコネクション識別データと同一のコネクション識別データが抽出されるパケットをパケット組立部に出力するパケット判別部と、ユーザ識別部によってユーザ識別子が特定された場合に、部分メッセージ・データ又は上記パケット群から抽出されるコネクション識別データに関連付けて、パケット組立部の処理が不要であることを表す組立フラグを制御データ格納部に格納する組立制御設定部と、部分メッセージ・データをパケットに分割してパケット処理部に出力するパケット化処理部とをさらに有するようにしてもよい。
【０１８１】
このようにパケットをコピーせずに、パケット組立部で組み立てた後に分解するような実装も可能である。
【０１８２】
さらに、パケット化処理部を有する中継装置は、ユーザ識別部によりユーザ識別子が特定された場合、先頭パケットのヘッダについて抽出されたコネクション識別データと同一のコネクション識別データが抽出されるパケットをキューに登録する順序制御部と、パケット化処理部により、先頭パケットのヘッダについて抽出されたコネクション識別データと同一のコネクション識別データが抽出されるパケットについてのパケット分割処理が完了すると、順序制御部に、キューからパケットのデータを読み出して、パケット処理部へ出力させるキュー解放指示部とをさらに有するようにしてもよい。このような処理を行うことによって、パケットの受信順番とパケット処理部におけるパケットの処理順番が入れ替わったりすることが無くなる。
【０１８３】
さらに、パケット化処理部を有しない中継装置は、（ａ）複数のパケットのうち先頭パケットのヘッダからコネクション識別データを抽出し、制御データ格納部に格納する制御データ管理部と、（ｂ）複数のパケットのうち先頭パケットについて、当該先頭パケットのヘッダから抽出されたコネクション識別データに関連付けて、パケット組立部の処理が必要であることを表す組立フラグを制御データ格納部に格納すると共に、組立フラグがパケット組立部の処理が必要であることを表している間、先頭パケットのヘッダについて抽出されたコネクション識別データと同一のコネクション識別データが抽出されるパケットを、第１のキューに登録すると共に、当該パケットのコピーをパケット組立部に出力するパケット判別部と、（ｃ）ユーザ識別部によってユーザ識別子が特定された場合に、部分メッセージ・データ又はパケット群から抽出されるコネクション識別データに関連付けて、パケット組立部の処理が不要であることを表す組立フラグを制御データ格納部に格納すると共に、パケット判別部に第１のキューからパケットを読み出してパケット処理部へ出力させる組立制御設定部と、（ｄ）ユーザ識別部によってユーザ識別子が特定された場合に、先頭パケットのヘッダについて抽出されたコネクション識別データと同一のコネクション識別データが抽出されるパケットを第２のキューに登録する順序制御部とをさらに有するようにしても良い。この場合、パケット判別部が第１のキューから全てのパケットを読み出した後に、順序制御部の第２のキューからパケットを読み出すようにする。
【０１８４】
このようにパケットをコピーして組み立てるような場合にも、パケットの受信順番とパケット処理部におけるパケットの処理順番が入れ替わることを防止することができるようになる。
【０１８５】
また、実施の形態に係る中継方法（図３６）は、（Ａ）１のメッセージに係る複数のパケットのうち上記１のメッセージに係る先頭パケットから上記１のメッセージのヘッダにおけるユーザ識別情報をペイロードに含むパケットまでのパケット群を組み立てて、部分メッセージ・データを生成するステップ（図３６：ステップＳ１００１）と、（Ｂ）部分メッセージ・データからユーザ識別情報を抽出すると共に、当該ユーザ識別情報からユーザ識別子を特定するステップ（図３６：ステップＳ１００３）と、（Ｃ）上記１のメッセージに係るパケット群と複数のパケットのうちパケット組立部で組み立てられなかったパケットとに対して、特定されたユーザ識別子に基づき所定のパケット処理を実施するステップ（図３６：ステップＳ１００５）とを含む。
【０１８６】
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ（例えばＲＯＭ）、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、ＲＡＭ等の記憶装置に一時保管される。
【０１８７】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１８８】
（付記１）
１のメッセージに係る複数のパケットを順次受信する受信部と、
前記複数のパケットのうち前記１のメッセージに係る先頭パケットから前記１のメッセージのヘッダにおけるユーザ識別情報をペイロードに含むパケットまでのパケット群を組み立てて、部分メッセージ・データを生成するパケット組立部と、
前記部分メッセージ・データから前記ユーザ識別情報を抽出すると共に、当該ユーザ識別情報からユーザ識別子を特定するユーザ識別部と、
前記１のメッセージに係る前記パケット群と前記複数のパケットのうち前記パケット組立部で組み立てられなかったパケットとに対して、特定された前記ユーザ識別子に基づき所定のパケット処理を実施するパケット処理部と、
を備えた中継装置。
【０１８９】
（付記２）
前記ユーザ識別部により特定された前記ユーザ識別子を、前記部分メッセージ・データ又は前記パケット群から抽出されるコネクション識別データに関連付けて制御データ格納部に格納する関連付設定部と、
をさらに備え、
前記パケット処理部は、
前記１のメッセージと同一のコネクションについての後続のメッセージに係るパケットに対して、前記制御データ格納部に格納されている前記ユーザ識別子に基づき前記所定のパケット処理を実施する
付記１記載の中継装置。
【０１９０】
（付記３）
受信したパケットを、当該パケットのヘッダから特定されるコネクション毎にキューに登録すると共に、当該パケットのコピーを前記パケット組立部に出力するパケット判別部と、
前記ユーザ識別部によって前記ユーザ識別子が特定された場合に、前記部分メッセージ・データ又は前記パケット群から特定されるコネクションについての前記キューから、前記パケット処理部に前記パケットを出力させる組立制御設定部と、
をさらに備えた付記１又は２記載の中継装置。
【０１９１】
（付記４）
前記複数のパケットのうち先頭パケットのヘッダからコネクション識別データを抽出し、前記制御データ格納部に格納する制御データ管理部と、
前記複数のパケットのうち先頭パケットについて、当該先頭パケットのヘッダから抽出された前記コネクション識別データに関連付けて、前記パケット組立部の処理が必要であることを表す組立フラグを前記制御データ格納部に格納すると共に、前記組立フラグが前記パケット組立部の処理が必要であることを表している間、前記先頭パケットのヘッダについて抽出された前記コネクション識別データと同一のコネクション識別データが抽出されるパケットを前記パケット組立部に出力するパケット判別部と、
前記ユーザ識別部によって前記ユーザ識別子が特定された場合に、前記部分メッセージ・データ又は前記パケット群から抽出されるコネクション識別データに関連付けて、前記パケット組立部の処理が不要であることを表す組立フラグを前記制御データ格納部に格納する組立制御設定部と、
前記部分メッセージ・データをパケットに分割して前記パケット処理部に出力するパケット化処理部と、
をさらに備えた付記２記載の中継装置。
【０１９２】
（付記５）
前記ユーザ識別部により前記ユーザ識別子が特定された場合、前記先頭パケットのヘッダについて抽出された前記コネクション識別データと同一のコネクション識別データが抽出されるパケットをキューに登録する順序制御部と、
前記パケット化処理部により、前記先頭パケットのヘッダについて抽出された前記コネクション識別データと同一のコネクション識別データが抽出されるパケットについてのパケット分割処理が完了すると、前記順序制御部に、前記キューから前記パケットのデータを読み出して、前記パケット処理部へ出力させるキュー解放指示部と、
をさらに備えた付記４記載の中継装置。
【０１９３】
（付記６）
前記複数のパケットのうち先頭パケットのヘッダからコネクション識別データを抽出し、前記制御データ格納部に格納する制御データ管理部と、
前記複数のパケットのうち先頭パケットについて、当該先頭パケットのヘッダから抽出された前記コネクション識別データに関連付けて、前記パケット組立部の処理が必要であることを表す組立フラグを制御データ格納部に格納すると共に、前記組立フラグが前記パケット組立部の処理が必要であることを表している間、前記先頭パケットのヘッダについて抽出された前記コネクション識別データと同一のコネクション識別データが抽出されるパケットを、第１のキューに登録すると共に、当該パケットのコピーを前記パケット組立部に出力するパケット判別部と、
前記ユーザ識別部によって前記ユーザ識別子が特定された場合に、前記部分メッセージ・データ又は前記パケット群から抽出されるコネクション識別データに関連付けて、前記パケット組立部の処理が不要であることを表す組立フラグを前記制御データ格納部に格納すると共に、前記パケット判別部に前記第１のキューからパケットを読み出して前記パケット処理部へ出力させる組立制御設定部と、
前記ユーザ識別部によって前記ユーザ識別子が特定された場合に、前記先頭パケットのヘッダについて抽出された前記コネクション識別データと同一のコネクション識別データが抽出されるパケットを第２のキューに登録する順序制御部と、
を備え、
前記パケット判別部が前記第１のキューから全てのパケットを読み出した後に、前記順序制御部の前記第２のキューからパケットを読み出す
付記１記載の中継装置。
【０１９４】
（付記７）
プロセッサを備え、
当該プロセッサにより、
１のメッセージに係る複数のパケットを順次受信し、
前記複数のパケットのうち前記１のメッセージに係る先頭パケットから前記１のメッセージのヘッダにおけるユーザ識別情報をペイロードに含むパケットまでのパケット群を組み立てて、部分メッセージ・データを生成し、
前記部分メッセージ・データから前記ユーザ識別情報を抽出すると共に、当該ユーザ識別情報からユーザ識別子を特定し、
前記１のメッセージに係る前記パケット群と前記複数のパケットのうち前記パケット組立部で組み立てられなかったパケットとに対して、特定された前記ユーザ識別子に基づき所定のパケット処理を実施する、
ことを特徴とする中継装置。
【０１９５】
（付記８）
１のメッセージに係り且つ受信された複数のパケットのうち前記１のメッセージに係る先頭パケットから前記１のメッセージのヘッダにおけるユーザ識別情報をペイロードに含むパケットまでのパケット群を組み立てて、部分メッセージ・データを生成し、
前記部分メッセージ・データから前記ユーザ識別情報を抽出すると共に、当該ユーザ識別情報からユーザ識別子を特定し、
前記１のメッセージに係る前記パケット群と前記複数のパケットのうち前記パケット組立部で組み立てられなかったパケットとに対して、特定された前記ユーザ識別子に基づき所定のパケット処理を実施する
処理を、中継装置のプロセッサに実行させるためのプログラム。
【０１９６】
（付記９）
中継装置における中継処理方法において、
プロセッサによって、
１のメッセージに係り且つ受信された複数のパケットのうち前記１のメッセージに係る先頭パケットから前記１のメッセージのヘッダにおけるユーザ識別情報をペイロードに含むパケットまでのパケット群を組み立てて、部分メッセージ・データを生成し、
前記部分メッセージ・データから前記ユーザ識別情報を抽出すると共に、当該ユーザ識別情報からユーザ識別子を特定し、
前記１のメッセージに係る前記パケット群と前記複数のパケットのうち前記パケット組立部で組み立てられなかったパケットとに対して、特定された前記ユーザ識別子に基づき所定のパケット処理を実施する、
処理を行うことを含むことを特徴とする中継処理方法。
【符号の説明】
【０１９７】
２００，３００，４００，５００，６００  中継装置
２１０  受信部  ２５０  キュー
２２０  部分パケット組立部  ２３０  ユーザ識別部
２４０  パケット処理部
３０１，４０１，５０１，６０１キュー
３０３，４０３，５０３，６０３  コネクションテーブル管理部
３０５，４０５，５０５，６０５  組立不要パケット判別部
３０７  ５０７  ユーザ識別待ち制御部
３０９，４０９，５０９，６０９  第１ユーザ識別部
３１１，４１１，５１１，６１１  第１組立制御設定部
３１３，４１３，５１３，６１３  キュー
３１５，４１５，５１５，６１５  ユーザ振分部
３１７，４１７，５１７，６１７  パケット処理部
３１９，４１９，５１９，６１９  コネクションテーブル格納部
３２１，４２１，５２１，６２１  組立制御テーブル格納部
３２３，４２３，５２３，６２３  キュー
３２５，４２５，５２５，６２５  パケット組立部
３２７，４２７，５２７，６２７  第２ユーザ識別部
３２９，４２９，５２９，６２９  コネクション・ユーザ関連付設定部
３３１，４３１，５３１，６３１  第２組立制御設定部
３３３，４３３，５３３，６３３  ルールテーブル格納部
３３５，４３５，５３５，６３５  識別テーブル格納部
４１２，６１２  処理レイヤ振分部
４３７，６３７  パケット化処理部
５０８，６０７  順序制御部
５３０，６３０  順序制御キューイング設定部
６３９  キュー解放指示部
【図１】
0005630070.tif 000002
【図２】
0005630070.tif 000003
【図３】
0005630070.tif 000004
【図４】
0005630070.tif 000005
【図５】
0005630070.tif 000006
【図６】
0005630070.tif 000007
【図７】
0005630070.tif 000008
【図８】
0005630070.tif 000009
【図９】
0005630070.tif 000010
【図１０】
0005630070.tif 000011
【図１１】
0005630070.tif 000012
【図１２】
0005630070.tif 000013
【図１３】
0005630070.tif 000014
【図１４】
0005630070.tif 000015
【図１５】
0005630070.tif 000016
【図１６】
0005630070.tif 000017
【図１７】
0005630070.tif 000018
【図１８】
0005630070.tif 000019
【図１９】
0005630070.tif 000020
【図２０】
0005630070.tif 000021
【図２１】
0005630070.tif 000022
【図２２】
0005630070.tif 000023
【図２３】
0005630070.tif 000024
【図２４】
0005630070.tif 000025
【図２５】
0005630070.tif 000026
【図２６】
0005630070.tif 000027
【図２７】
0005630070.tif 000028
【図２８】
0005630070.tif 000029
【図２９】
0005630070.tif 000030
【図３０】
0005630070.tif 000031
【図３１】
0005630070.tif 000032
【図３２】
0005630070.tif 000033
【図３３】
0005630070.tif 000034
【図３４】
0005630070.tif 000035
【図３５】
0005630070.tif 000036
【図３６】
0005630070.tif 000037