[実施の形態1]
本技術に係る実施の形態における中継装置200は、図2に示すように、(A)パケットを受信する受信部210と、(B)受信部210により受信されたパケットのデータを格納するキュー250と、(C)1のメッセージを構成する複数のパケットのうち一部のパケットを組み立てる部分パケット組立部220と、(D)部分パケット組立部220によって生成されたメッセージの一部分からユーザ識別子を特定するユーザ識別部230と、(E)受信したパケットに対してユーザ識別部230により特定されたユーザ識別子に基づき、フィルタ処理や課金などのためのパケット数計数などの所定のパケット処理を実施するパケット処理部240とを有する。パケット処理部240は、フィルタ対象外のパケットについては宛先に出力するが、この部分については従来と同じであり、本実施の形態の主旨ではないので、これ以上述べない。
このような中継装置200は、以下のように動作する。すなわち、受信部210は、1のメッセージに係る複数のパケットを順次受信して、キュー250に格納する。そして、部分パケット組立部220は、キュー250に格納された上記複数のパケットのうち上記1のメッセージに係る先頭パケットから上記1のメッセージのヘッダにおけるユーザ識別情報をペイロードに含むパケットまでのパケット群を組み立てて、部分メッセージ・データを生成し、当該部分メッセージ・データをユーザ識別部230に出力する。
その後、ユーザ識別部230は、部分パケット組立部220により生成された部分メッセージ・データからユーザ識別情報を抽出すると共に、当該ユーザ識別情報からユーザ識別子を特定する。ユーザ識別情報そのものをユーザ識別子として使用しても良い。そして、パケット処理部240は、上記1のメッセージに係る上記パケット群と上記複数のパケットのうち部分パケット組立部220で組み立てられなかったパケットとに対して、ユーザ識別部230によって特定されたユーザ識別子に基づき所定のパケット処理を実施する。
部分パケット組立部220は、キュー250に格納されているパケットのデータのコピーを処理する場合もあれば、先頭パケットからユーザ識別情報をペイロードに含むパケットまでのパケット群を少なくとも取り出して処理する場合もある。後者の場合には、ユーザ識別部230の処理の後に部分メッセージ・データをパケットに分割する処理を実施して、パケット処理部240で処理する。
以上述べたように、1のメッセージを構成する複数のパケットのうち一部についてのみ組立処理の対象とすることで、中継装置200の処理負荷を軽減している。
なお、ユーザ毎にコネクションを張るような場合には、コネクションを切断するまではユーザは変化しないので、上で述べた処理を先頭のメッセージについて実施すれば後続のメッセージについてのパケット組立処理を省略することができる。複数ユーザでコネクションを共用する場合には、メッセージ毎に上で述べたような処理を実施することになるが、メッセージ全体を組み立てないので、その分処理負荷を軽減できる。
[実施の形態2]
本技術の第2の実施の形態に係る中継装置300の機能ブロック図を図3に示す。中継装置300は、パケット層の要素として、キュー301と、コネクションテーブル管理部303と、組立不要パケット判別部305と、ユーザ識別待ち制御部307と、第1ユーザ識別部309と、第1組立制御設定部311と、キュー313と、ユーザ振分部315と、パケット処理部A(317A)と、パケット処理部B(317B)と、コネクションテーブル格納部319と、組立制御テーブル格納部321とを有する。パケット処理部317については、ユーザ毎に所定の処理を実施するものであり、2つに限定されるものではない。
さらに、中継装置300は、メッセージ層の要素として、キュー323と、パケット組立部325と、第2ユーザ識別部327と、コネクション・ユーザ関連付設定部329と、第2組立制御設定部331と、ルールテーブル格納部333と、識別テーブル格納部335とを有する。
キュー301には、中継装置300が受信したパケットが順次格納される。コネクションテーブル管理部303は、キュー301からパケットのデータを順番に取り出し、コネクションテーブル格納部319を必要に応じて更新し、キュー301から取り出したパケットのデータを組立不要パケット判別部305に出力する。組立不要パケット判別部305は、コネクションテーブル格納部319を参照して必要であれば組立制御テーブル格納部321に格納されている組立制御テーブルを更新すると共に、コネクションテーブル管理部303から受け取ったパケットのデータを処理して、ユーザ識別待ち制御部307に出力する。ユーザ識別待ち制御部307は、組立不要パケット判別部305からパケットのデータを受け取り、コピーしてメッセージ層のキュー323に格納すると共に、コネクション毎に自らのキューに格納する。
パケット組立部325は、ルールテーブル格納部333に格納されているデータに従って、キュー323に格納されているパケットのデータを取り出してパケット組立処理を行い、処理結果を第2ユーザ識別部327に出力する。第2ユーザ識別部327は、ルールテーブル格納部333及び識別テーブル格納部335に格納されているデータに従って、第2ユーザ識別部327からの出力データに対して処理を行い、自らの処理結果をコネクション・ユーザ関連付設定部329に出力する。コネクション・ユーザ関連付設定部329は、第2ユーザ識別部327からの出力データに応じて、コネクションテーブル格納部319を参照して、組立制御テーブル格納部321を更新し、第2ユーザ識別部327からの出力データを第2組立制御設定部331に出力する。第2組立制御設定部331は、コネクション・ユーザ関連付設定部329からの出力データに応じて、コネクションテーブル格納部319を参照して、組立制御テーブル格納部321を更新すると共に、ユーザ識別待ち制御部307に指示を出力する。
ユーザ識別待ち制御部307は、第2組立制御設定部331からの指示に応じて、自らのキュー内のパケットのデータを第1ユーザ識別部309に出力する。第1ユーザ識別部309は、受け取ったパケットのデータに応じてコネクションテーブル格納部319及び組立制御テーブル格納部321を参照して、ユーザ識別子をパケットのデータに設定する。そして、第1ユーザ識別部309は、パケットのデータを第1組立制御設定部311に出力する。第1組立制御設定部311は、パケットのデータを参照して必要があれば、コネクションテーブル格納部319及び組立制御テーブル格納部321を更新する。そして、第1組立制御設定部311は、パケットのデータをキュー313に格納する。
ユーザ振分部315は、キュー313に格納されているパケットのデータを順番に取り出して、ユーザ識別子に応じて担当のパケット処理部317に出力する。パケット処理部317は、パケットのデータについて所定の処理を実施する。
なお、第2組立制御設定部331は、不要なパケットのデータがキュー323に格納されているようであれば、削除を指示する。
次に、図4乃至図14を用いて、図3に示した中継装置300の動作の詳細を説明する。まず、中継装置300のパケット受信部(図示せず)は、中継装置300に接続されている装置からパケットを受信し、キュー301に格納する(図3:ステップS1)。そして、コネクションテーブル管理部303は、キュー301からパケットのデータを読み出し、当該パケットについてコネクション確認処理を実施する(ステップS3)。具体的には、パケットのTCP(又はUDP)/IPヘッダから、送信元IPアドレス、宛先IPアドレス、送信元ポート番号及び宛先ポート番号をコネクション識別データとして抽出し、このコネクション識別データからコネクションを特定する。そして、コネクションテーブル管理部303は、コネクション識別データでコネクションテーブル格納部319におけるコネクションテーブルを検索し、該当エントリが存在しなければ、当該コネクション識別データを含む新規エントリを登録する。一方、該当エントリが存在していれば、コネクションテーブル管理部303は、処理対象のパケットに応じて、該当エントリを更新する。また、コネクションテーブル管理部303は、処理対象のパケットのデータを組立不要パケット判別部305に出力する。
コネクションテーブルは、例えば図5に示すようなテーブルである。図5の例では、送信元IPアドレスと、宛先IPアドレスと、送信元ポート番号、宛先ポート番号と、TCPシーケンス番号やコネクション確立中などのコネクションの状態に関する状態管理データと、組立制御テーブルの該当エントリへのリンク(エントリ番号やポインタ)とが格納されるようになっている。状態管理データについては、該当エントリが存在している場合にも更新されるデータである。
そして、組立不要パケット判別部305は、処理対象のパケットのデータを受け取ると、パケットのヘッダからコネクション識別データを抽出して、当該コネクション識別データでコネクションテーブル格納部319におけるコネクションテーブルを検索して、組立制御テーブル格納部321における組立制御テーブルにおける該当エントリへのリンクの有無に従って、組立制御テーブルに該当エントリが存在しているか確認する(ステップS5)。組立制御テーブルに該当エントリが存在しない場合には、組立不要パケット判別部305は、コネクション識別データに対応するエントリを組立制御テーブルに登録すると共に(ステップS7)、当該エントリへのリンクをコネクション識別データに対応付けてコネクションテーブル格納部319におけるコネクションテーブルに登録する。処理はステップS9に移行する。
組立制御テーブルは、例えば図6に示すようなテーブルである。図6の例では、組立フラグと、ユーザ識別子とを登録するようになっている。なお、ステップS7では、エントリにおいて、組立フラグを「true」にして、ユーザ識別子を空「−」にしておく。組立フラグが「true」である場合には、パケットのデータをメッセージ層に出力し、組立フラグが「false」である場合には、パケット層で処理を行うことを表す。図5及び図6において、エントリの関連付けは同一の行に登録されており行番号「#」が同一であるものとする。なお、組立制御テーブルにもコネクション識別データを登録するようにしても良い。
ステップS7の後に、又は組立制御テーブルに該当エントリが存在する場合には、組立不要パケット判別部305は、処理対象のパケットのデータに制御データを付加して、ユーザ識別待ち制御部307に出力する(ステップS9)。
制御データ付きパケットデータは、例えば図7に示すようなデータである。図7の例では、ユーザ識別子を含む制御データと、パケットのデータ(すなわちヘッダ及びペイロード)とが含まれる。但し、初期的にはユーザ識別子には何も設定されない。
ユーザ識別待ち制御部307は、制御データ付きパケットデータを受け取ると、パケットのデータからコネクション識別データを抽出してコネクションテーブルの該当エントリを特定し、さらに該当エントリに関連付けられている、組立制御テーブルにおけるエントリを読み出して、組立フラグが「true」(組立要)になっているか判断する(ステップS11)。組立フラグが「false」である場合には、端子Aを介して図14の処理に移行する。
一方、組立フラグが「true」である場合には、ユーザ識別待ち制御部307は、制御データ付きパケットデータをコピーしてメッセージ層に出力する(ステップS13)。すなわち、メッセージ層のキュー323に登録する。さらに、ユーザ識別待ち制御部307は、制御データ付きパケットデータを、コネクション毎に自身のキューに登録し、キュー解放まで待機する(ステップS15)。
なお、制御データ付きパケットデータがキュー323に登録されると、メッセージ層処理が実施される(ステップS14)。このメッセージ層処理については、図8乃至図12を用いて説明する。
まず、パケット組立部325は、キュー323から、メッセージの先頭パケットからユーザ識別情報を含むパケットまで、それらの制御データ付きパケットデータを取り出し、パケットヘッダを除去した上でこれらのパケットのペイロードを組み立て、メモリに格納する(図8:ステップS21)。この際、パケット組立部325は、ルールテーブル格納部333に格納されている組立設定テーブルを用いる。
組立設定テーブルは、図9に示すようなテーブルである。図9の例では、宛先IPアドレス、宛先ポート番号及び宛先URI(Uniform Resource Identifier)のうちの少なくともいずれかにより特定されるキーと、当該キーに該当する場合の組立設定とが登録されるようになっている。組立設定は、ユーザを識別するためにどこまでパケットを組み立てればよいかを示すデータである。例えば、HTTPの場合にはL7ヘッダまで(¥r¥n¥r¥n受信まで)、又は16パケットまでといった設定がなされる。図9の例では、宛先ポート番号毎にどこまでパケットを組み立てるのかが設定されており、宛先ポート番号80であれば、HTTPヘッダ全体が取得されるまでパケットを組み立て、宛先ポート番号5060であれば、SIP(Session Initiation Protocol)ヘッダ全体が取得されるまでパケットを組み立てる。なお、キーについては、宛先I/F(宛先ポート)などを設定する場合もある。
従って、パケット組立部325は、パケットのヘッダから特定されるコネクション識別データに基づき、組立設定テーブルから該当するエントリを特定し、当該エントリの組立設定に従って、必要となるパケットの制御データ付きパケットデータを、キュー323から読み出す。
また、パケット組立部325は、組み立てたメッセージの一部を用いて、制御データ付きメッセージデータを生成し、メモリに格納する(ステップS23)。制御データ付きメッセージデータは、例えば図10に示すようなデータフォーマットを有する。図10の例では、ユーザ識別子を含む制御データと、ステップS21で組み立てられるメッセージの一部のデータである部分メッセージ・データと、組み立てに用いられたパケットのヘッダとが含まれる。この段階では、まだユーザ識別子は特定されていないので空欄とされる。パケット組立部325は、このような制御データ付きメッセージデータを生成すると、第2ユーザ識別部327に出力する。
第2ユーザ識別部327は、ルールテーブル格納部333に格納されている識別ルールテーブルに従って、パケット組立部325から受け取った制御データ付きメッセージデータに含まれる部分メッセージ・データからユーザ識別情報を抽出し、さらに識別テーブル格納部335に格納されている識別テーブルを検索して対応するユーザ識別子を特定する(ステップS25)。
識別ルールテーブルの一例を図11に示す。図11の例では、宛先IPアドレス、宛先ポート番号及び宛先URI(Uniform Resource Identifier)のうちの少なくともいずれかにより特定されるキーと、当該キーに該当する場合の識別情報格納場所とが登録されるようになっている。識別情報格納場所は、メッセージヘッダのいずれにユーザ識別情報が記載されているかを示しており、Xpathや正規表現で示される。通常は全てのユーザに共通であるが、図11の例のごとく、宛先毎に別の値を設定するようにしても良い。第2ユーザ識別部327は、例えばHTTPメッセージのヘッダに含まれるURLの一部をユーザ識別情報として抽出する。
さらに、識別テーブルの一例を図12に示す。図12の例では、ユーザ識別情報に対応付けて、中継装置300内のユーザ識別子が登録されている。従って、識別ルールテーブルから抽出されたユーザ識別情報で識別テーブルを検索すれば、対応するユーザ識別子を特定できる。
その後、第2ユーザ識別部327は、制御データに、ステップS25で特定されたユーザ識別子を設定し、制御データ付きメッセージデータをコネクション・ユーザ関連付設定部329に出力する(ステップS27)。
そして、コネクション・ユーザ関連付設定部329は、受け取った制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データ(送信元IPアドレス、宛先IPアドレス、送信元ポート番号及び宛先ポート番号)を抽出し、さらにコネクション識別データでコネクションテーブルを検索して組立制御テーブルの該当エントリを特定し、この該当エントリに、制御データに含まれるユーザ識別子を設定する(ステップS29)。そして、コネクション・ユーザ関連付設定部329は、制御データ付きメッセージデータを第2組立制御設定部331に出力する。
第2組立制御設定部331は、制御データ付きメッセージデータを受け取ると、制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データを抽出してコネクションテーブルを検索して、関連付けされている、組立制御テーブル内の該当エントリを特定し、この該当エントリにおける組立フラグを組立不要に設定する(ステップS31)。
また、第2組立制御設定部331は、メッセージ層におけるキュー323において、ステップS31で特定したコネクション識別データと同一のコネクション識別データが抽出されるパケットを破棄させる(ステップS35)。これによって、余分にコピーされてキュー323に格納されたパケットのデータを削除することができる。なお、第2組立制御設定部331の処理は残っているが、説明の都合上元の処理に戻る。
図4の説明に戻って、第2組立制御設定部331は、ステップS31で特定したコネクション識別データを含むキュー解放指示を、ユーザ識別待ち制御部307に出力する(ステップS16)。例えば図13に示すようなデータを出力する。図13の例では、キュー解放指示を表すデータと、送信元IPアドレスと、宛先IPアドレスと、送信元ポート番号と、宛先ポート番号とを含む。ユーザ識別待ち制御部307は、コネクション識別データを含むキュー解放指示を受信すると(ステップS17)、当該コネクション識別データで特定されるコネクションについてのキューからパケットのデータを順次読み出し、第1ユーザ識別部309に出力する(ステップS19)。そして処理は端子Aを介して図14の処理に移行する。
図14の処理の説明に移行して、第1ユーザ識別部309は、制御データ付きパケットデータを受け取ると、当該パケットデータからコネクション識別データを抽出してコネクションテーブルを検索して、関連付けされている、組立制御テーブルの該当エントリを特定する。そして第1ユーザ識別部309は、この該当エントリにおけるユーザ識別子を読み出して、制御データ付きパケットデータにおける制御データに付与し、ユーザ識別子が付与された制御データ付きパケットデータを第1組立制御設定部311に出力する(ステップS41)。
第1組立制御設定部311は、制御データ付きパケットデータを受け取ると、パケットデータのヘッダに基づきこのパケットが例えばTCPのFINパケットなどコネクション切断のためのパケットであるか判断する(ステップS43)。コネクション切断のためのパケットである場合には、第1組立制御設定部311は、パケットデータからコネクション識別データを抽出し、当該コネクション識別データでコネクションテーブルを検索して該当エントリを特定し、さらに関連付けされている、組立制御テーブルのエントリを特定して、それらのエントリを削除する(ステップS45)。そして、ステップS47に移行する。
処理対象のパケットがコネクション切断のためのパケットでない場合又はステップS45の後に、第1組立制御設定部311は、受け取った制御データ付きパケットデータをキュー313に格納する。
その後、ユーザ振分部315は、キュー313に格納されている制御データ付きパケットデータを順に読み出し、制御データのユーザ識別子に基づき当該ユーザ識別子のパケットを担当するパケット処理部317を特定して、そのパケット処理部317に制御データ付きパケットデータを出力する。パケット処理部317は、制御データ付きパケットデータを受信すると、フィルタリング処理や統計処理、ログ記録処理等を実施する(ステップS47)。上でも述べたが、パケット処理部317の処理は従来と同じなのでこれ以上述べない。なお、パケット処理部317の処理後は、フィルタリングされなければ、制御データを除去されたパケットのデータが、そのパケットの宛先が接続されているポートに出力される。
以上のような処理を実施することによって、コネクション確立からコネクション切断までのうち、最初のメッセージに係る一部のパケットのみを組み立てるだけでユーザ識別子を特定することができ、メッセージ層における処理負荷が大幅に削減されている。
なお、本実施の形態では、1コネクションにつき1ユーザであることを前提としている。しかし、実際には1コネクションにつき複数ユーザである可能性もある。1コネクションにつき複数ユーザである場合には、メッセージ毎にユーザ識別子を特定する。但し、メッセージ全体を組み立てないという点については上で述べたものと同じであり、ユーザ識別情報及びメッセージ長を抽出できるまでパケットを組み立てる。このように、メッセージのヘッダからメッセージ長を抽出すれば、メッセージの切れ目を特定でき、メッセージの切れ目で再度次のメッセージに係るパケットの組み立てを行うようにする。これによって、メッセージ毎にユーザ識別子を特定する場合においても、当該メッセージに係る一部のパケットについては組み立てを行わないので、処理負荷を削減することができる。
[実施の形態3]
次に、第3の実施の形態に係る中継装置400の機能ブロック図を図15に示す。中継装置400は、パケット層の要素として、キュー401と、コネクションテーブル管理部403と、組立不要パケット判別部405と、第1ユーザ識別部409と、第1組立制御設定部411と、処理レイヤ振分部412と、キュー413と、ユーザ振分部415と、パケット処理部A(417A)と、パケット処理部B(417B)と、コネクションテーブル格納部419と、組立制御テーブル格納部421とを有する。パケット処理部417については、ユーザ毎に所定の処理を実施するものであり、2つに限定されるものではない。
さらに、中継装置400は、メッセージ層の要素として、キュー423と、パケット組立部425と、第2ユーザ識別部427と、コネクション・ユーザ関連付設定部429と、第2組立制御設定部431と、ルールテーブル格納部433と、識別テーブル格納部435と、パケット化処理部437とを有する。
キュー401には、中継装置400が受信したパケットが順次格納される。コネクションテーブル管理部403は、キュー401からパケットのデータを順番に取り出し、コネクションテーブル格納部419を必要に応じて更新し、キュー401から取り出したパケットのデータを組立不要パケット判別部405に出力する。組立不要パケット判別部405は、コネクションテーブル格納部419を参照して必要であれば組立制御テーブル格納部421に格納されている組立制御テーブルを更新すると共に、コネクションテーブル管理部403から受け取ったパケットのデータを処理して、第1ユーザ識別部409に出力する。この際、組立制御テーブルの該当エントリに組立要(「true」)が設定されていれば、組立不要パケット判別部405は、パケットのデータに対して組立フラグを組立要に設定する。それ以外の場合には、組立フラグは組立不要に設定されるか、何も設定しない。
第1ユーザ識別部409は、コネクションテーブル格納部419及び組立制御テーブル格納部421を参照して、既にユーザ識別子が特定されていればパケットのデータにユーザ識別子を付加した上で、パケットのデータを第1組立制御設定部411に出力する。第1組立制御設定部411は、パケットのデータを参照して必要があれば、コネクションテーブル格納部419及び組立制御テーブル421を更新する。そして、第1組立制御設定部411は、当該パケットのデータを処理レイヤ振分部412に出力する。処理レイヤ振分部412は、パケットのデータに含まれる組立フラグを確認して、組立要であればメッセージ層におけるキュー423にパケットのデータを格納し、組立不要であればパケット層におけるキュー413にパケットのデータを格納する。
パケット組立部425は、ルールテーブル格納部433に格納されているデータに従って、キュー423に格納されているパケットのデータを取り出してパケット組立処理を行い、処理結果を第2ユーザ識別部427に出力する。第2ユーザ識別部427は、ルールテーブル格納部433及び識別テーブル格納部435に格納されているデータに従って、第2ユーザ識別部427からの出力データに対して処理を行い、自らの処理結果をコネクション・ユーザ関連付設定部429に出力する。コネクション・ユーザ関連付設定部429は、第2ユーザ識別部427からの出力データに応じて、コネクションテーブル格納部419を参照して、組立制御テーブル格納部421を更新し、第2ユーザ識別部427からの出力データを第2組立制御設定部431に出力する。第2組立制御設定部431は、コネクション・ユーザ関連付設定部429からの出力データに応じて、コネクションテーブル格納部419を参照して、組立制御テーブル格納部421を更新すると共に、パケット化処理部437に出力する。パケット化処理部437は、メッセージのデータをパケットのデータに分割する処理を実施した後、パケットのデータをキュー413に出力する。パケット組立部425及びコネクション・ユーザ関連付設定部429は、パケット組み立てが不要なパケットであるがキュー423に格納されたパケットのデータを処理して、コネクション・ユーザ関連付設定部429は、処理結果をパケット化処理部437に出力する。
ユーザ振分部415は、キュー413に格納されているパケットのデータを順番に取り出して、ユーザ識別子に応じて担当のパケット処理部417に出力する。パケット処理部417は、パケットのデータについて所定の処理を実施する。
次に、図16乃至図20を用いて中継装置400の動作の詳細を説明する。まず、中継装置400のパケット受信部(図示せず)は、中継装置400に接続されている装置からパケットを受信し、キュー401に格納する(図16:ステップS51)。そして、コネクションテーブル管理部403は、キュー401からパケットのデータを読み出し、当該パケットについてコネクション確認処理を実施する(ステップS53)。具体的には、パケットのTCP(又はUDP)/IPヘッダから、送信元IPアドレス、宛先IPアドレス、送信元ポート番号及び宛先ポート番号をコネクション識別データとして抽出し、このコネクション識別データからコネクションを特定する。そして、コネクションテーブル管理部403は、コネクション識別データでコネクションテーブル格納部419におけるコネクションテーブルを検索し、該当エントリが存在しなければ、当該コネクション識別データを含む新規エントリを登録する。一方、該当エントリが存在していれば、コネクションテーブル管理部403は、処理対象のパケットに応じて、該当エントリを更新する。また、コネクションテーブル管理部403は、処理対象のパケットのデータを組立不要パケット判別部405に出力する。コネクションテーブルは、第2の実施の形態と同じように例えば図5に示すようなテーブルである。
そして、組立不要パケット判別部405は、処理対象のパケットのデータを受け取ると、パケットのヘッダからコネクション識別データを抽出して、当該コネクション識別データでコネクションテーブル格納部419におけるコネクションテーブルを検索し、組立制御テーブル格納部421における組立制御テーブルにおける該当エントリへのリンクの有無に基づき、組立制御テーブルに該当エントリが存在しているか確認する(ステップS55)。組立制御テーブルに該当エントリが存在しない場合には、組立不要パケット判別部405は、コネクション識別データに対応するエントリを組立制御テーブルに登録すると共に(ステップS57)、当該エントリへのリンクをコネクション識別データに対応付けてコネクションテーブル格納部419におけるコネクションテーブルに登録する。処理はステップS59に移行する。組立制御テーブルは、第2の実施の形態と同じように、例えば図6に示すようなテーブルである。なお、組立フラグは、初期的には「true」にセットされている。また、ユーザ識別子は、この段階では登録されない。
ステップS57の後に、又は組立制御テーブルに該当エントリが存在する場合には、組立不要パケット判別部405は、処理対象のパケットのデータに制御データを付加する(ステップS59)。
本実施の形態における制御データ付きパケットデータは、例えば図17に示すようなデータである。図17の例では、ユーザ識別子及び組立フラグを含む制御データと、パケットのデータ(すなわちヘッダ及びペイロード)とが含まれる。但し、初期的には、組立フラグ及びユーザ識別子には何も設定されない。
さらに、組立不要パケット判別部405は、処理対象のパケットのヘッダから抽出されるコネクション識別データに関連付けられている、組立制御テーブルにおけるエントリの組立フラグが組立要を表す「true」になっているかを確認する(ステップS61)。組立制御テーブルの該当エントリの組立フラグが「true」である場合には、組立不要パケット判別部305は、制御データの組立フラグを組立要にセットして、第1ユーザ識別部409に出力する(ステップS63)。但し、第1ユーザ識別部409は、ステップS63を経由した場合、すなわち組立要の組立フラグが制御データに含まれる場合には、何もせずに、制御データ付きパケットデータをそのまま第1組立制御設定部411に出力する。
一方、組立制御テーブルの該当エントリの組立フラグが「false」である場合には、既に組立制御テーブルの該当エントリにユーザ識別子が登録されているので、組立不要パケット判定部405は、制御データ付きパケットデータを、第1ユーザ識別部409に出力する。ここで制御データの組立フラグを組立不要にセットしても良い。第1ユーザ識別部409は、制御データ付きパケットデータを受信すると、パケットのヘッダからコネクション識別データを抽出して当該コネクション識別データでコネクションテーブルを検索し、該当エントリに関連付けられている、組立制御テーブルにおけるエントリのユーザ識別子を読み出し、制御データにユーザ識別子をセットする(ステップS65)。そして、第1ユーザ識別部409は、制御データ付きパケットデータを、第1組立制御設定部411に出力する。
ステップS63又はステップS65の後に、第1組立制御設定部411は、制御データ付きパケットデータを受け取ると、パケットデータのヘッダに基づきこのパケットがTCPのFINパケットなどコネクション切断のためのパケットであるか判断する(ステップS67)。コネクション切断のためのパケットである場合には、第1組立制御設定部411は、パケットデータからコネクション識別データを抽出し、当該コネクション識別データでコネクションテーブルを検索して該当エントリを特定し、さらに関連付けされている、組立制御テーブルのエントリを特定して、それらのエントリを削除する(ステップS69)。そして、第1組立制御設定部411は、制御データ付きパケットデータを処理レイヤ振分部412に出力する。その後、端子Bを介して図18の処理に移行する。一方、処理対象のパケットがコネクション切断のためのパケットではない場合にも、第1組立制御設定部411は、制御データ付きパケットデータを処理レイヤ振分部412に出力する。その後、端子Bを介して図18の処理に移行する。
図18の処理の説明に移行して、処理レイヤ振分部412は、受け取った制御データ付きパケットデータの制御データに含まれる組立フラグが組立要にセットされているか判断する(ステップS71)。制御データに含まれる組立フラグが組立要にセットされている場合には、処理レイヤ振分部412は、制御データ付きパケットデータを、メッセージ層のキュー423に格納する(ステップS72)。そして、メッセージ層処理を実施する(ステップS73)。一方、制御データに含まれる組立フラグが組立不要又は空である場合には、処理レイヤ振分部412は、パケット層のキュー413に制御データ付きパケットデータを格納する(ステップS74)。ユーザ識別子が既に制御データにセットされているので、組み立てなくても良い。
ここで、図19及び図20を用いて本実施の形態に係るメッセージ層処理について説明する。
まず、パケット組立部425は、キュー423から、メッセージの先頭パケットからユーザ識別情報を含むパケットまで、それらの制御データ付きパケットデータを取り出し、パケットヘッダを除去した上でこれらのパケットのペイロードを組み立て、メモリに格納する(図19:ステップS81)。この際、パケット組立部425は、ルールテーブル格納部433に格納されている組立設定テーブルを用いる。組立設定テーブルは、第2の実施の形態と同じように、図9に示すようなテーブルである。
従って、パケット組立部425は、パケットのヘッダから特定されるコネクション識別データに基づき、組立設定テーブルから該当するエントリを特定し、当該エントリの組立設定に従って、必要となるパケットの制御データ付きパケットデータを、キュー423から読み出す。
また、パケット組立部425は、組み立てたメッセージの一部を用いて、制御データ付きメッセージデータを生成し、メモリに格納する(ステップS83)。制御データ付きメッセージデータは、第2の実施の形態と同じように、例えば図10に示すようなデータフォーマットを有する。パケット組立部425は、このような制御データ付きメッセージデータを生成すると、第2ユーザ識別部427に出力する。
第2ユーザ識別部427は、ルールテーブル格納部433に格納されている識別ルールテーブルに従って、パケット組立部425から受け取った制御データ付きメッセージデータに含まれる部分メッセージ・データからユーザ識別情報を抽出し、さらに識別テーブル格納部435に格納されている識別テーブルを検索して対応するユーザ識別子を特定する(ステップS85)。識別ルールテーブルは、第2の実施の形態と同じように、図11に示すようなテーブルである。例えば、第2ユーザ識別部427は、例えばHTTPメッセージのヘッダに含まれるURLの一部をユーザ識別情報として抽出する。さらに、識別テーブルは、第2の実施の形態と同じように例えば図12に示すようなテーブルである。
その後、第2ユーザ識別部427は、制御データに、ステップS85で特定されたユーザ識別子を設定し、制御データ付きメッセージデータをコネクション・ユーザ関連付設定部429に出力する(ステップS87)。
そして、コネクション・ユーザ関連付設定部429は、制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データ(送信元IPアドレス、宛先IPアドレス、送信元ポート番号及び宛先ポート番号)を抽出してコネクションテーブルを検索して組立制御テーブルの該当エントリを特定し、この該当エントリに、制御データに含まれるユーザ識別子を設定する(ステップS89)。そして、コネクション・ユーザ関連付設定部429は、制御データ付きメッセージデータを第2組立制御設定部431に出力する。
第2組立制御設定部431は、制御データ付きメッセージデータを受け取ると、制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データを抽出してコネクションテーブルを検索して、さらに組立制御テーブルにおいて関連付けされているエントリを特定し、このエントリにおける組立フラグを組立不要(「false」)に設定する(ステップS91)。また、第2組立制御設定部431は、制御データ付きメッセージデータをパケット化処理部437に出力する。処理は端子Cを介して図20の処理に移行する。
図20の処理の説明に移行して、パケット化処理部437は、受け取った制御データ付きパケットデータを、制御データ付きパケットデータに分割し(ステップS93)、制御データ付きパケットデータをパケット層のキュー413に投入する(ステップS95)。パケット化処理では、制御データ付きメッセージデータから、パケットヘッダを取り出し、メッセージを分割して各パケットヘッダに付加する。パケットについての制御データにも、メッセージについての制御データに含まれるユーザ識別子をセットしておく。組立フラグについては空にしても良いし、組立不要を設定しても良い。このようにすれば、メッセージ層にパケットのデータをコピーせずに出力する場合であっても、ユーザ識別子が設定された制御データ付きパケットデータが、キュー413に格納されて、パケット処理が行われるようになる。
なお、パケット受信のタイミングやパケット組立処理のスループットの状況によっては、ユーザ識別情報をペイロードに含むパケットの後続パケットについても、メッセージ層のキュー413に格納されてしまう場合がある。このような場合には、以下のような処理を実施する。すなわち、パケット組立部425は、キュー423に残余のパケットが存在しているか判断する(ステップS97)。残余のパケットが存在していない場合には、メッセージ層の処理は完了して、元の処理に戻る。一方、残余のパケットが存在する場合には、パケット組立部425は、残余のパケットの制御データ付きパケットデータをキュー413から読み出し、パケット組立処理を実施して制御データ付き第2メッセージデータを生成し、第2ユーザ識別部427に出力する(ステップS99)。制御データ付き第2メッセージデータのフォーマットは、基本的には図10に示したものであるが、通常の制御データ付きメッセージデータとは異なるようなフラグなどを付すようにする。また、組立対象のパケットには、ユーザ識別情報をペイロードに含むパケットまでといった制限はない。
第2ユーザ識別部427は、制御データ付き第2メッセージデータを受け取ると、そのままコネクション・ユーザ関連付設定部429に出力する。コネクション・ユーザ関連付設定部429は、制御データ付き第2メッセージデータを受け取ると、パケットヘッダからコネクション識別データを抽出して、このコネクション識別データでコネクションテーブルを検索して組立制御テーブルの該当エントリを特定し、この該当エントリからユーザ識別子を読み出して、制御データにユーザ識別子を設定する(ステップS101)。そして、パケット化処理部437に出力する。すなわち、ステップS93に戻る。
このようにすれば、必要以上にパケットのデータがメッセージ層に出力された場合にも、適切にそれらのパケットのデータをパケット層に戻すことができるようになる。なお、ステップS99及びS101に示した処理は一例であって、パケット組立部425等がユーザ識別子を組立制御テーブルから読み出して制御データに設定した上で直接パケット層のキュー413に戻すようにしても良い。また、パケット組立部425等が、制御データの組立フラグを組立不要に設定した上で、第1ユーザ識別部409に出力するようにしてもよい。
図18の処理の説明に戻って、メッセージ層処理を実施した後又はステップS74の後に、ユーザ振分部415は、キュー413に格納されている制御データ付きパケットデータを順に読み出し、制御データのユーザ識別子に基づき当該ユーザ識別子のパケットを担当するパケット処理部417を特定して、そのパケット処理部417に制御データ付きパケットデータを出力する。パケット処理部417は、制御データ付きパケットデータを受信すると、フィルタリング処理や統計処理、ログ記録処理等を実施する(ステップS75)。上でも述べたが、パケット処理部417の処理は従来と同じなのでこれ以上述べない。なお、パケット処理部417の処理後は、フィルタリングされなければ、制御データを除去されたパケットのデータが、そのパケットの宛先が接続されているポートに出力される。
以上のような処理を実施することによって、コネクション確立からコネクション切断までのうち、最初のメッセージに係る一部のパケットのみを組み立てるだけでユーザ識別子を特定することができ、メッセージ層における処理負荷が大幅に削減されている。
なお、本実施の形態では、1コネクションにつき1ユーザであることを前提としている。しかし、実際には1コネクションにつき複数ユーザである可能性もある。1コネクションにつき複数ユーザである場合には、メッセージ毎にユーザ識別子を特定する。但し、メッセージ全体を組み立てないという点については上で述べたものと同じであり、ユーザ識別情報及びメッセージ長を抽出できるまでパケットを組み立てる。このように、メッセージのヘッダからメッセージ長を抽出すれば、メッセージの切れ目を特定でき、メッセージの切れ目で再度次のメッセージに係るパケットの組み立てを行うようにする。これによって、メッセージ毎にユーザ識別子を特定する場合においても、当該メッセージに係る一部のパケットについては組み立てを行わないので、処理負荷を削減することができる。
[実施の形態4]
実施の形態1では、ステップS17でキュー解放指示を受信した後ステップS19でキューからパケットを順次読み出してパケット処理を実施するが、パケットの読み出しが遅くなると後続のパケットがユーザ識別待ち制御部307内のキューを介さずにパケット処理に出力されてしまう場合もある。すなわち、パケット処理の順番が受信順番とは逆転する場合がある。
順番を逆転させないようにするためには、図21に示すような中継装置500を採用する。中継装置500は、パケット層の要素として、キュー501と、コネクションテーブル管理部503と、組立不要パケット判別部505と、ユーザ識別待ち制御部507と、順序制御部508と、第1ユーザ識別部509と、第1組立制御設定部511と、キュー513と、ユーザ振分部515と、パケット処理部A(517A)と、パケット処理部B(517B)と、コネクションテーブル格納部519と、組立制御テーブル格納部521とを有する。パケット処理部517については、ユーザ毎に所定の処理を実施するものであり、2つに限定されるものではない。
さらに、中継装置500は、メッセージ層の要素として、キュー523と、パケット組立部525と、第2ユーザ識別部527と、コネクション・ユーザ関連付設定部529と、順序制御キューイング設定部530と、第2組立制御設定部531と、ルールテーブル格納部533と、識別テーブル格納部535とを有する。
キュー501には、中継装置500が受信したパケットが順次格納される。コネクションテーブル管理部503は、キュー501からパケットのデータを順番に取り出し、コネクションテーブル格納部519を必要に応じて更新し、キュー501から取り出したパケットのデータを組立不要パケット判別部505に出力する。組立不要パケット判別部505は、コネクションテーブル格納部519を参照して必要であれば組立制御テーブル格納部521に格納されている組立制御テーブルを更新すると共に、コネクションテーブル管理部503から受け取ったパケットのデータを処理して、ユーザ識別待ち制御部507に出力する。ユーザ識別待ち制御部507は、組立不要パケット判別部505からパケットのデータを受け取り、コピーしてキュー523に格納すると共に、コネクション毎に自身のキューに格納する。
なお、組立不要パケット判定部505は、組立制御テーブルにおいて該当エントリの組立フラグが「false」、すなわち組立不要であれば、パケットのデータを順序制御部508に出力する。
パケット組立部525は、ルールテーブル格納部533に格納されているデータに従って、キュー523に格納されているパケットのデータを取り出してパケット組立処理を行い、処理結果を第2ユーザ識別部527に出力する。第2ユーザ識別部527は、ルールテーブル格納部533及び識別テーブル格納部535に格納されているデータに従って、第2ユーザ識別部527からの出力データに対して処理を行い、自らの処理結果をコネクション・ユーザ関連付設定部529に出力する。コネクション・ユーザ関連付設定部529は、第2ユーザ識別部527からの出力データに応じて、コネクションテーブル格納部519を参照して、組立制御テーブル格納部521を更新し、第2ユーザ識別部527からの出力データを、順序制御キューイング設定部530に出力する。順序制御キューイング設定部530は、順序制御キューイング設定部530からデータを受信すると、該当するコネクションについてのキュー閉塞指示を順序制御部508に出力する。
順序制御部508は、順序制御キューイング設定部530からのキュー閉塞指示に従って、受信したパケットのデータを、自身のキューに格納し始める。
さらに、順序制御キューイング設定部530は、受信したデータをそのまま第2組立制御設定部531に出力する。第2組立制御設定部531は、順序制御キューイング設定部530からの出力データに応じて、コネクションテーブル格納部519を参照して、組立制御テーブル格納部521を更新すると共に、ユーザ識別待ち制御部507にキュー解放指示を出力する。
ユーザ識別待ち制御部507は、第2組立制御設定部531からの指示に応じて、キュー内のパケットのデータを第1ユーザ識別部509に出力する。さらに、ユーザ識別待ち制御部507は、自身のキューからパケットのデータを全て出力した後に、順序制御部508にキュー出力指示を出力する。順序制御部508は、ユーザ識別待ち制御部507からキュー出力指示を受信した場合には、キューの閉塞を解除して、自身のキューに格納されているパケットのデータを、第1ユーザ識別部509に順次出力する。
第1ユーザ識別部509は、受け取ったパケットのデータに応じてコネクションテーブル格納部519及び組立制御テーブル格納部521を参照して、ユーザ識別子をパケットのデータに設定する。そして、第1ユーザ識別部509は、パケットのデータを第1組立制御設定部511に出力する。第1組立制御設定部511は、パケットのデータを参照して必要があれば、コネクションテーブル格納部519及び組立制御テーブル521を更新する。そして、第1組立制御設定部511は、パケットのデータをキュー513に格納する。
ユーザ振分部515は、キュー513に格納されているパケットのデータを順番に取り出して、ユーザ識別子に応じて担当のパケット処理部517に出力する。パケット処理部517は、パケットのデータについて所定の処理を実施する。
なお、組立制御設定部531は、不要なパケットのデータがキュー523に格納されているようであれば、削除を指示する。
次に、図22乃至図28を用いて、図21に示した中継装置500の動作の詳細を説明する。
まず、中継装置500のパケット受信部(図示せず)は、中継装置500に接続されている装置からパケットを受信し、キュー501に格納する(図22:ステップS111)。そして、コネクションテーブル管理部503は、キュー501からパケットのデータを読み出し、当該パケットについてコネクション確認処理を実施する(ステップS113)。具体的には、パケットのTCP(又はUDP)/IPヘッダから、送信元IPアドレス、宛先IPアドレス、送信元ポート番号及び宛先ポート番号をコネクション識別データとして抽出し、このコネクション識別データからコネクションを特定する。そして、コネクションテーブル管理部503は、コネクション識別データでコネクションテーブル格納部519におけるコネクションテーブルを検索し、該当エントリが存在しなければ、当該コネクション識別データを含む新規エントリを登録する。一方、該当エントリが存在していれば、コネクションテーブル管理部503は、処理対象のパケットに応じて、該当エントリを更新する。また、コネクションテーブル管理部503は、処理対象のパケットのデータを組立不要パケット判別部505に出力する。コネクションテーブルは、第2の実施の形態と同じように、例えば図5に示すようなテーブルである。
そして、組立不要パケット判別部505は、処理対象のパケットのデータを受け取ると、パケットのヘッダからコネクション識別データを抽出して、当該コネクション識別データでコネクションテーブル格納部519におけるコネクションテーブルを検索して、組立制御テーブル格納部521における組立制御テーブルにおける該当エントリへのリンクの有無に基づき、組立制御テーブルに該当エントリが存在しているか確認する(ステップS115)。組立制御テーブルに該当エントリが存在しない場合には、組立不要パケット判別部505は、コネクション識別データに対応するエントリを組立制御テーブルに登録すると共に(ステップS117)、当該エントリへのリンクをコネクション識別データに対応付けてコネクションテーブル格納部519におけるコネクションテーブルに登録する。処理はステップS119に移行する。組立制御テーブルは、第2の実施の形態と同じように、例えば図6に示すようなテーブルである。ステップS117では、エントリにおいて、組立フラグを「true」にして、ユーザ識別子を空「−」にしておく。
組立制御テーブルに該当エントリが存在する場合又はステップS117の後に、組立不要パケット判別部505は、処理対象のパケットのデータに制御データを付加する(ステップS119)。制御データ付きパケットデータは、第2の実施の形態と同じように、例えば図7に示すようなデータである。初期的にはユーザ識別子には何も設定されない。
なお、本実施の形態では、組立不要パケット判別部505は、組立制御テーブルにおける該当エントリの組立フラグが「true」であるか、すなわち組立要と設定されているか確認する(ステップS121)。なお、ステップS117を経由した場合には、組立制御テーブルを確認する必要はないが、その他の場合についてはこの段階で確認する。そして、組立要である場合、すなわち該当エントリの組立フラグが「true」である場合には、組立不要パケット判別部505は、制御データ付きパケットデータをユーザ識別待ち制御部507に出力し、ユーザ識別待ち制御部507は、制御データ付きパケットデータをコピーしてメッセージ層のキュー523に格納する(ステップS125)。さらに、ユーザ識別待ち制御部507は、制御データ付きパケットデータを、コネクション毎に自身のキューに登録し、キュー解放まで待機する(ステップS127)。キューの解放は、以下で述べるメッセージ層処理を実施した後に、組立制御設定部531が出力する。
一方、組立フラグが「false」である場合、すなわち、組立不要である場合には、組立不要パケット判別部505は、制御データ付きパケットデータを順序制御部508に出力して、順序制御部508は、順序制御処理を実施する(ステップS123)。この順序制御処理については、後に説明する。
なお、制御データ付きパケットデータがキュー523に登録されると、本実施の形態に係るメッセージ層処理が実施される。このメッセージ層処理については、図23乃至図25を用いて説明する。
まず、パケット組立部525は、キュー523から、メッセージの先頭パケットからユーザ識別情報を含むパケットまで、それらの制御データ付きパケットデータを取り出し、パケットヘッダを除去した上でこれらのパケットのペイロードを組み立て、メモリに格納する(図23:ステップS151)。この際、パケット組立部525は、ルールテーブル格納部533に格納されている組立設定テーブルを用いる。組立設定テーブルは、第2の実施の形態と同じように、図9に示すようなテーブルである。
従って、パケット組立部525は、パケットのヘッダから特定されるコネクション識別データに基づき、組立設定テーブルから該当するエントリを特定し、当該エントリの組立設定に従って、必要となるパケットの制御データ付きパケットデータを、キュー523から読み出す。
また、パケット組立部525は、組み立てたメッセージの一部を用いて、制御データ付きメッセージデータを生成し、メモリに格納する(ステップS153)。制御データ付きメッセージデータは、第2の実施の形態と同じように、例えば図10に示すようなデータフォーマットを有する。パケット組立部525は、このような制御データ付きメッセージデータを生成すると、第2ユーザ識別部527に出力する。
第2ユーザ識別部527は、ルールテーブル格納部533に格納されている識別ルールテーブルに従って、パケット組立部525から受け取った制御データ付きメッセージデータに含まれる部分メッセージ・データからユーザ識別情報を抽出し、さらに識別テーブル格納部535に格納されている識別テーブルを検索して対応するユーザ識別子を特定する(ステップS155)。識別ルールテーブルは、第2の実施の形態と同じように例えば図11に示すようなテーブルである。さらに、識別テーブルは、第2の実施の形態と同じように例えば図12に示すようなテーブルである。
その後、第2ユーザ識別部527は、制御データに、ステップS155で特定されたユーザ識別子を設定し、制御データ付きメッセージデータをコネクション・ユーザ関連付設定部529に出力する(ステップS157)。
そして、コネクション・ユーザ関連付設定部529は、制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データ(送信元IPアドレス、宛先IPアドレス、送信元ポート番号及び宛先ポート番号)を抽出してコネクションテーブルを検索して組立制御テーブルの該当エントリを特定し、この該当エントリに、制御データに含まれるユーザ識別子を設定する(ステップS159)。そして、コネクション・ユーザ関連付設定部529は、制御データ付きメッセージデータを、順序制御キューイング設定部530に出力する。
順序制御キューイング設定部530は、ユーザ識別子が設定された制御データ付きメッセージデータを受け取ると、受信データに含まれるパケットヘッダからコネクション識別データを抽出し、当該コネクション識別データを含むキュー閉塞指示を、順序制御部508に出力する(ステップS161)。キュー閉塞指示は、例えば図24に示すようなデータフォーマットである。図24の例では、キュー閉塞指示を表すデータと、送信元IPアドレスと、宛先IPアドレスと、送信元ポート番号と、宛先ポート番号とを含む。
順序制御部508は、コネクション識別データを含むキュー閉塞指示を受信すると、コネクション識別データで特定されるコネクションのキューを閉塞する。閉塞することによって、キューに制御データ付きパケットデータが格納されるようになるが、この段階ではまだ組立制御テーブルにおいて組立不要が設定されていないので、実際には制御データ付きパケットデータはまだ順序制御部508に出力されない。そして、順序制御キューイング設定部530は、受け取った制御データ付きメッセージデータを、第2組立制御設定部531に出力する。
第2組立制御設定部331は、制御データ付きメッセージデータを受け取ると、制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データを抽出してコネクションテーブルを検索して、さらに関連付けされている、組立制御テーブル内の該当エントリを特定し、この該当エントリにおける組立フラグを組立不要に設定する(ステップS163)。処理は端子Iを介して図25の処理に移行する。
この段階で組立不要パケット判別部505は、同一コネクションについてのパケットのデータを順序制御部508に出力して、順序制御部508は、キューイングを開始する。
図25の処理の説明に移行して、第2組立制御設定部531は、メッセージ層におけるキュー523において、ステップS163で特定したコネクション識別データと同一のコネクション識別データが抽出されるパケットを破棄させる(ステップS165)。これによって、余分にコピーされてキュー523に格納されたパケットのデータを削除することができる。なお、第2組立制御設定部531の処理は残っているが、説明の都合上元の処理に戻る。
図22の処理の説明に戻って、第2組立制御設定部531は、ステップS163で特定したコネクション識別データを含むキュー解放指示を、ユーザ識別待ち制御部507に出力する(ステップS129)。例えば図13に示すようなデータを出力する。
ユーザ識別待ち制御部507は、コネクション識別データを含むキュー解放指示を受信すると(ステップS131)、当該コネクション識別データで特定されるコネクションについてのキューから制御データ付きパケットデータを順次読み出し、第1ユーザ識別部509に出力する(ステップS133)。
その後、ユーザ識別待ち制御部507は、コネクション識別データで特定されるコネクションについてのキューから制御データ付きパケットデータを全て読み出した場合には、コネクション識別データを含むキュー出力指示を順序制御部508に出力する(ステップS135)。キュー出力指示は、例えば図26に示すようなフォーマットのデータである。図26の例では、キュー出力指示を表すデータと、送信元IPアドレスと、宛先IPアドレスと、送信元ポート番号と、宛先ポート番号とを含む。処理は端子Dを介して図28の処理に移行する。
ここで順序制御処理について図27を用いて説明する。順序制御部508は、組立不要となって制御データ付きパケットデータを受け取ると、当該パケットデータから抽出されるコネクション識別データで特定されるコネクションのキューが閉塞状態であるか確認する(ステップS171)。上で述べたように、順序制御キューイング設定部530からのキュー閉塞指示に応じて閉塞状態に移行する。
閉塞状態でない、すなわち解放状態であれば、順序制御部508は、受け取った制御データ付きパケットデータを該当コネクションのキューに投入して、このキューから順番に第1ユーザ識別部509に出力する。そして元の処理に戻る。
一方、閉塞状態である場合には、順序制御部508は、受け取った制御データ付きパケットデータを、該当コネクションのキューに登録し、キュー出力指示を待機する(ステップS173)。そして、上で述べたように、ユーザ識別待ち制御部507が、コネクション識別データを含むキュー出力指示を出力して、これに対して順序制御部508が、コネクション識別データを含むキュー出力指示を受信すると(ステップS175)、コネクション識別データから特定されるコネクションのキューから制御データ付きパケットデータを順次読み出し、第1ユーザ識別部509に出力する(ステップS177)。そして、順序制御部508は、該当コネクションのキューから制御データ付きパケットデータから全て読み出した後に当該キューを解放状態に変更する(ステップS179)。そして元の処理に戻る。
このような処理を実施することによって、ユーザ識別待ち制御部507内のキューから制御データ付きパケットデータが全て出力された後に、順序制御部508内のキューから制御データ付きパケットデータが出力される。そして、順序制御部508内のキューから制御データ付きパケットデータが全て出力されると、順序制御部508は、受信した順番で制御データ付きパケットデータをそのまま第1ユーザ識別部509に出力するようになる。これによって、受信順番そのままでキュー513に制御データ付きパケットデータが格納されるようになる。
端子Dの後の処理(図28)の説明に移行して、第1ユーザ識別部509は、制御データ付きパケットデータを受け取ると、当該パケットデータからコネクション識別データを抽出してコネクションテーブルを検索して、さらに関連付けされている、組立制御テーブルの該当エントリを特定する。そして第1ユーザ識別部509は、この該当エントリにおけるユーザ識別子を読み出して、制御データ付きパケットデータにおける制御データに付与し、ユーザ識別子が付与された制御データ付きパケットデータを第1組立制御設定部511に出力する(ステップS137)。
第1組立制御設定部511は、制御データ付きパケットデータを受け取ると、パケットデータのヘッダに基づきこのパケットがTCPのFINパケットなどコネクション切断のためのパケットであるか判断する(ステップS139)。コネクション切断のためのパケットである場合には、第1組立制御設定部511は、パケットデータからコネクション識別データを抽出し、当該コネクション識別データでコネクションテーブルを検索して該当エントリを特定し、さらに関連付けされている、組立制御テーブルのエントリを特定して、それらのエントリを削除する(ステップS141)。そして、ステップS143に移行する。
処理対象のパケットがコネクション切断のためのパケットでない場合又はステップS141の後に、第1組立制御設定部511は、受け取った制御データ付きパケットデータをキュー513に格納する。
その後、ユーザ振分部515は、キュー513に格納されている制御データ付きパケットデータを順に読み出し、制御データのユーザ識別子に基づき当該ユーザ識別子のパケットを担当するパケット処理部517を特定して、そのパケット処理部517に制御データ付きパケットデータを出力する。パケット処理部517は、制御データ付きパケットデータを受信すると、フィルタリング処理や統計処理、ログ記録処理等を実施する(ステップS143)。上でも述べたが、パケット処理部517の処理は従来と同じなのでこれ以上述べない。なお、パケット処理部517の処理後は、フィルタリングされなければ、制御データを除去されたパケットのデータが、そのパケットの宛先が接続されているポートに出力される。
以上のような処理を実施することによって、コネクション確立からコネクション切断までのうち、最初のメッセージに係る一部のパケットのみを組み立てるだけでユーザ識別子を特定することができ、メッセージ層における処理負荷が大幅に軽減されている。さらに、キュー513に投入される順番は、受信順番と同じになることが確保される。
なお、本実施の形態では、1コネクションにつき1ユーザであることを前提としている。しかし、実際には1コネクションにつき複数ユーザである可能性もある。1コネクションにつき複数ユーザである場合には、メッセージ毎にユーザ識別子を特定する。但し、メッセージ全体を組み立てないという点については上で述べたものと同じであり、ユーザ識別情報及びメッセージ長を抽出できるまでパケットを組み立てる。このように、メッセージのヘッダからメッセージ長を抽出すれば、メッセージの切れ目を特定でき、メッセージの切れ目で再度次のメッセージに係るパケットの組み立てを行うようにする。これによって、メッセージ毎にユーザ識別子を特定する場合においても、当該メッセージに係る一部のパケットについては組み立てを行わないので、処理負荷を削減することができる。
[実施の形態5]
第3の実施の形態に係る中継装置400についても、メッセージ層に出力したパケットのデータを再度パケット層に戻すような処理を行っているため、パケットのデータが受信順番とは異なる順番でキュー413に格納される場合がある。順番を変化させないようにするためには、図29に示すような中継装置600を採用する。
本実施の形態に係る中継装置600は、パケット層の要素として、キュー601と、コネクションテーブル管理部603と、組立不要パケット判別部605と、順序制御部607と、第1ユーザ識別部609と、第1組立制御設定部611と、処理レイヤ振分部612と、キュー613と、ユーザ振分部615と、パケット処理部A(617A)と、パケット処理部B(617B)と、コネクションテーブル格納部619と、組立制御テーブル格納部621とを有する。パケット処理部617については、ユーザ毎に所定の処理を実施するものであり、2つに限定されるものではない。
さらに、中継装置600は、メッセージ層の要素として、キュー623と、パケット組立部625と、第2ユーザ識別部627と、コネクション・ユーザ関連付設定部629と、順序制御キューイング設定部630、第2組立制御設定部631と、ルールテーブル格納部633と、識別テーブル格納部635と、パケット化処理部637と、キュー解放指示部639とを有する。
キュー601には、中継装置600が受信したパケットが順次格納される。コネクションテーブル管理部603は、キュー601からパケットのデータを順番に取り出し、コネクションテーブル格納部619を必要に応じて更新し、キュー601から取り出したパケットのデータを組立不要パケット判別部605に出力する。組立不要パケット判別部605は、コネクションテーブル格納部619を参照して必要であれば組立制御テーブル格納部621に格納されている組立制御テーブルを更新すると共に、コネクションテーブル管理部603から受け取ったパケットのデータを処理する。組立不要パケット判別部605は、パケットのデータを、パケット組立が必要である場合には第1組立制御設定部611に出力し、パケット組立が不要である場合には順序制御部607に出力する。順序制御部607は、コネクション毎にキューを有しており、後に述べるように順序制御キューイング設定部630及びキュー解放指示部639からの指示に応じて処理を行い、キュー解放が指示されればパケットのデータを第1ユーザ識別部609に出力する。
第1ユーザ識別部609は、コネクションテーブル格納部619及び組立制御テーブル格納部621を参照して、既にユーザ識別子が特定されていればパケットのデータにユーザ識別子を付加した上で、パケットのデータを第1組立制御設定部611に出力する。
第1組立制御設定部611は、パケットのデータを参照して必要があれば、コネクションテーブル格納部619及び組立制御テーブル621を更新する。そして、第1組立制御設定部611は、当該パケットのデータを処理レイヤ振分部612に出力する。処理レイヤ振分部612は、パケットのデータに含まれる組立フラグに応じて、組立要であればメッセージ層におけるキュー623にパケットのデータを格納し、組立不要であればパケット層におけるキュー613にパケットのデータを格納する。
パケット組立部625は、ルールテーブル格納部633に格納されているデータに従って、キュー623に格納されているパケットのデータを取り出してパケット組立処理を行い、処理結果を第2ユーザ識別部627に出力する。第2ユーザ識別部627は、ルールテーブル格納部633及び識別テーブル格納部635に格納されているデータに従って、第2ユーザ識別部627からの出力データに対して処理を行い、自らの処理結果をコネクション・ユーザ関連付設定部629に出力する。コネクション・ユーザ関連付設定部629は、第2ユーザ識別部627からの出力データに応じて、コネクションテーブル格納部619を参照して、組立制御テーブル格納部621を更新し、第2ユーザ識別部627からの出力データを順序制御キューイング設定部630に出力する。順序制御キューイング設定部630は、コネクション・ユーザ関連付設定部629からのデータを受け取ると、順序制御部607に対してキュー閉塞指示を出力すると共に、受け取ったデータを第2組立制御設定部631に出力する。第2組立制御設定部631は、コネクション・ユーザ関連付設定部629からの出力データに応じて、コネクションテーブル格納部619を参照して、組立制御テーブル格納部621を更新すると共に、パケット化処理部637に出力する。パケット化処理部637は、メッセージのデータをパケットのデータに分割する処理を実施した後、パケットのデータをキュー613に出力する。そして、パケット化処理部637は、処理が完了すると、キュー解放指示部639に指示を出力する。キュー解放指示部639は、パケット化処理部637からの指示に応じて、キュー解放指示を順序制御部607に出力する。
なお、パケット組立部625及びコネクション・ユーザ関連付設定部629は、パケット組み立てが不要なパケットであるがキュー623に格納されたパケットのデータを処理して、コネクション・ユーザ関連付設定部629は、処理結果をパケット化処理部637に出力する。
なお、第2ユーザ識別部627は、パケット組み立てが不要なパケットであるがキュー623に格納されたパケットのデータをパケット化処理部637に出力する。
また、ユーザ振分部615は、キュー613に格納されているパケットのデータを順番に取り出して、ユーザ識別子に応じて担当のパケット処理部617に出力する。パケット処理部617は、パケットのデータについて所定の処理を実施する。
次に、図30乃至図34を用いて中継装置600の詳細な動作について説明する。
まず、中継装置600のパケット受信部(図示せず)は、中継装置600に接続されている装置からパケットを受信し、キュー601に格納する(図30:ステップS201)。そして、コネクションテーブル管理部603は、キュー601からパケットのデータを読み出し、当該パケットについてコネクション確認処理を実施する(ステップS203)。具体的には、パケットのTCP(又はUDP)/IPヘッダから、送信元IPアドレス、宛先IPアドレス、送信元ポート番号及び宛先ポート番号をコネクション識別データとして抽出し、このコネクション識別データからコネクションを特定する。そして、コネクションテーブル管理部603は、コネクション識別データでコネクションテーブル格納部619におけるコネクションテーブルを検索し、該当エントリが存在しなければ、当該コネクション識別データを含む新規エントリを登録する。一方、該当エントリが存在していれば、コネクションテーブル管理部603は、処理対象のパケットに応じて、該当エントリを更新する。また、コネクションテーブル管理部603は、処理対象のパケットのデータを組立不要パケット判別部605に出力する。コネクションテーブルは、第2の実施の形態と同じように、例えば図5に示すようなテーブルである。
そして、組立不要パケット判別部605は、処理対象のパケットのデータを受け取ると、パケットのヘッダからコネクション識別データを抽出して、当該コネクション識別データでコネクションテーブル格納部619におけるコネクションテーブルを検索し、組立制御テーブル格納部621における組立制御テーブルにおける該当エントリへのリンクの有無に基づき、組立制御テーブルに該当エントリが存在しているか確認する(ステップS205)。組立制御テーブルに該当エントリが存在しない場合には、組立不要パケット判別部605は、コネクション識別データに対応するエントリを組立制御テーブルに登録すると共に(ステップS207)、当該エントリへのリンクをコネクション識別データに対応付けてコネクションテーブル格納部619におけるコネクションテーブルに登録する。処理はステップS209に移行する。組立制御テーブルは、第2の実施の形態と同じように、例えば図6に示すようなテーブルである。組立フラグは、初期的には「true」にセットされている。また、ユーザ識別子は、登録されない。
ステップS207の後に、又は組立制御テーブルに該当エントリが存在する場合には、組立不要パケット判別部605は、処理対象のパケットのデータに制御データを付加する(ステップS209)。
本実施の形態における制御データ付きパケットデータは、例えば図17に示すようなデータである。初期的には、制御データにおける組立フラグ及びユーザ識別子には何も設定されない。
さらに、組立不要パケット判別部605は、処理対象のパケットのヘッダから抽出されるコネクション識別データに関連付けられている、組立制御テーブルにおけるエントリの組立フラグが組立要を表す「true」になっているかを確認する(ステップS211)。組立制御テーブルの該当エントリの組立フラグが「true」である場合には、組立不要パケット判別部605は、制御データの組立フラグを組立要にセットして、第1組立制御設定部611に出力する(ステップS213)。なお、第1組立制御設定部611ではなく、第1ユーザ識別部609に出力するようにしても良い。但し、その場合でも第1ユーザ識別部609では特に何もせずに制御データ付きパケットデータを第1組立制御設定部611に出力する。そして、処理は端子Fを介して図31の処理に移行する。
一方、組立制御テーブルの該当エントリの組立フラグが「false」である場合には、組立不要パケット判定部605は、制御データ付きパケットデータを、順序制御部607に出力する。制御データにおける組立フラグを組立不要に設定するようにしても良い。組立フラグが「false」であるということは、ユーザ識別子が既に特定されているが、メッセージ層における処理が完了しているとは限らないので、順序制御部607に出力して、キューに保持する。なお、制御データにおける組立フラグを組立不要にセットするようにしても良い。処理は、端子Eを介して図31の処理に移行する。
図31の処理の説明に移行するが、まだユーザ識別子が特定される場面を説明していないので、ステップS213の後続の処理である端子F以降の処理について先に説明する。すなわち、ステップS215乃至S227の処理については後で述べる。
第1組立制御設定部611は、制御データ付きパケットデータを受け取ると、そのパケットデータのヘッダに基づきこのパケットがTCPのFINパケットなどコネクション切断のためのパケットであるか判断する(ステップS229)。コネクション切断のためのパケットである場合には、第1組立制御設定部611は、パケットデータからコネクション識別データを抽出し、当該コネクション識別データでコネクションテーブルを検索して該当エントリを特定し、さらに関連付けされている、組立制御テーブルのエントリを特定して、それらのエントリを削除する(ステップS231)。そして、第1組立制御設定部611は、制御データ付きパケットデータを処理レイヤ振分部612に出力する。その後、端子Gを介して図32の処理に移行する。一方、処理対象のパケットがコネクション切断のためのパケットではない場合にも、第1組立制御設定部611は、制御データ付きパケットデータを処理レイヤ振分部612に出力する。その後、端子Gを介して図32の処理に移行する。
図32の処理の説明に移行して、処理レイヤ振分部612は、受け取った制御データ付きパケットデータの制御データに含まれる組立フラグが組立要にセットされているか判断する(ステップS233)。制御データに含まれる組立フラグが組立要にセットされている場合には、処理レイヤ振分部612は、制御データ付きパケットデータを、メッセージ層のキュー623に格納する(ステップS234)。そして、メッセージ層処理を実施する(ステップS235)。一方、制御データに含まれる組立フラグが組立不要又は空である場合には、処理レイヤ振分部612は、パケット層のキュー613に制御データ付きパケットデータを格納する(ステップS236)。ユーザ識別子が既に制御データにセットされているので、組み立てなくても良い。
ここで、図33及び図34を用いて本実施の形態に係るメッセージ層処理について説明する。
まず、パケット組立部625は、キュー623から、メッセージの先頭パケットからユーザ識別情報を含むパケットまで、それらの制御データ付きパケットデータを取り出し、パケットヘッダを除去した上でこれらのパケットのペイロードを組み立て、メモリに格納する(図33:ステップS251)。この際、パケット組立部625は、ルールテーブル格納部633に格納されている組立設定テーブルを用いる。組立設定テーブルは、第2の実施の形態と同じように、図9に示すようなテーブルである。
従って、パケット組立部625は、パケットのヘッダから特定されるコネクション識別データに基づき、組立設定テーブルから該当するエントリを特定し、当該エントリの組立設定に従って、必要となるパケットの制御データ付きパケットデータを、キュー623から読み出す。
また、パケット組立部625は、組み立てたメッセージの一部を用いて、制御データ付きメッセージデータを生成し、メモリに格納する(ステップS253)。制御データ付きメッセージデータは、第2の実施の形態と同じように、例えば図10に示すようなデータフォーマットを有する。パケット組立部625は、このような制御データ付きメッセージデータを生成すると、第2ユーザ識別部627に出力する。
第2ユーザ識別部627は、ルールテーブル格納部633に格納されている識別ルールテーブルに従って、パケット組立部625から受け取った制御データ付きメッセージデータに含まれる部分メッセージ・データからユーザ識別情報を抽出し、さらに識別テーブル格納部635に格納されている識別テーブルを検索して対応するユーザ識別子を特定する(ステップS255)。識別ルールテーブルは、第2の実施の形態と同じように、例えば図11に示すようなテーブルである。さらに、識別テーブルは、第2の実施の形態と同じように、例えば図12に示すようなテーブルである。
その後、第2ユーザ識別部627は、制御データに、ステップS255で特定されたユーザ識別子を設定し、制御データ付きメッセージデータをコネクション・ユーザ関連付設定部629に出力する(ステップS257)。
そして、コネクション・ユーザ関連付設定部629は、制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データ(送信元IPアドレス、宛先IPアドレス、送信元ポート番号及び宛先ポート番号)を抽出してコネクションテーブルを検索して組立制御テーブルの該当エントリを特定し、この該当エントリに、制御データに含まれるユーザ識別子を設定する(ステップS259)。そして、コネクション・ユーザ関連付設定部629は、制御データ付きメッセージデータを、順序制御キューイング設定部630に出力する。
順序制御キューイング設定部630は、ユーザ識別子が設定された制御データ付きメッセージデータを受け取ると、受信データに含まれるパケットヘッダからコネクション識別データを抽出し、当該コネクション識別データを含むキュー閉塞指示を、順序制御部607に出力する(ステップS261)。キュー閉塞指示は、例えば図24に示すようなデータフォーマットを有する。
順序制御部607は、コネクション識別データを含むキュー閉塞指示を受信すると、コネクション識別データで特定されるコネクションのキューを閉塞する。閉塞することによって、キューに制御データ付きパケットデータが格納されるようになるが、この段階ではまだ組立制御テーブルの該当エントリにおいて組立不要が設定されていないので、実際には制御データ付きパケットデータはまだ順序制御部607に出力されない。そして、順序制御キューイング設定部630は、受け取った制御データ付きメッセージデータを、第2組立制御設定部631に出力する。
第2組立制御設定部631は、制御データ付きメッセージデータを受け取ると、制御データ付きメッセージデータに含まれるパケットヘッダからコネクション識別データを抽出してコネクションテーブルを検索し、さらに関連付けされている、組立制御テーブル内の該当エントリを特定し、この該当エントリにおける組立フラグを組立不要に設定する(ステップS263)。処理は端子Hを介して図34の処理に移行する。
この段階で組立不要パケット判別部605は、同一コネクションについてのパケットのデータを順序制御部607に出力して、順序制御部607は、キューイングを開始する。
図34の処理の説明に移行して、パケット化処理部637は、受け取った制御データ付きパケットデータを、制御データ付きパケットデータに分割し(ステップS265)、制御データ付きパケットデータをパケット層のキュー613に投入する(ステップS267)。パケット化処理では、制御データ付きメッセージデータから、パケットヘッダを取り出し、メッセージを分割して各パケットヘッダに付加する。パケットについての制御データにも、メッセージについての制御データに含まれるユーザ識別子をセットしておく。組立フラグについては空にしても良いし、組立不要を設定しても良い。このようにすれば、メッセージ層にパケットのデータをコピーせずに出力する場合にも、ユーザ識別子が設定された制御データ付きパケットデータが、キュー613に格納されて、パケット処理が行われるようになる。
なお、パケット受信のタイミングやパケット組立処理のスループットの状況によっては、ユーザ識別情報をペイロードに含むパケットの後続パケットについても、メッセージ層のキュー613に格納されてしまう場合がある。このような場合には、以下のような処理を実施する。すなわち、パケット組立部625は、キュー623に残余のパケットが存在しているか判断する(ステップS269)。
残余のパケットが存在する場合には、パケット組立部625は、残余のパケットの制御データ付きパケットデータをキュー613から読み出し、パケット組立処理を実施して制御データ付き第2メッセージデータを生成し、第2ユーザ識別部627に出力する(ステップS271)。制御データ付き第2メッセージデータのフォーマットは、基本的には図10に示したものと同じであるが、通常の制御データ付きメッセージデータとは異なるようなフラグなどを付すようにする。なお、組立対象のパケットには、ユーザ識別情報をペイロードに含むパケットまでといった制限はない。
第2ユーザ識別部627は、制御データ付き第2メッセージデータを受け取ると、そのままコネクション・ユーザ関連付設定部629に出力する。コネクション・ユーザ関連付設定部629は、制御データ付き第2メッセージデータを受け取ると、パケットヘッダからコネクション識別データを抽出し、このコネクション識別データでコネクションテーブルを検索して組立制御テーブルの該当エントリを特定し、この該当エントリからユーザ識別子を読み出して、制御データにユーザ識別子を設定する(ステップS273)。そして、パケット化処理部637に出力する。すなわち、ステップS265に戻る。
このようにすれば、必要以上にパケットのデータがメッセージ層に出力された場合にも、適切にそれらのパケットのデータをパケット層に戻すことができるようになる。なお、ステップS271及びS273に示した処理は一例であって、パケット組立部625等がユーザ識別子を組立制御テーブルから読み出して制御データに設定した上で直接パケット層のキュー613に戻すようにしても良い。また、パケット組立部625等が、制御データの組立フラグを組立不要に設定した上で、第1ユーザ識別部609に出力するようにしてもよい。
一方、残余のパケットがキュー623に残っていない場合には、パケット化処理部637は、パケットへの分割処理が完了したか判断する(ステップS275)。完了していない場合には、完了を待機する。一方、パケットへの分割処理が完了した場合には、キュー解放指示部639に、コネクション識別データを含む完了通知を出力し、キュー解放指示部639は、コネクション識別データを含む完了通知を受け取ると、コネクション識別データを含むキュー解放指示を、順序制御部607に出力する(ステップS277)。キュー解放指示については、図13に示したフォーマットを有する。そして、元の処理に戻る。
図32の処理の説明に戻って、メッセージ層処理を実施した後又はステップS236の後に、ユーザ振分部615は、キュー613に格納されている制御データ付きパケットデータを順に読み出し、制御データのユーザ識別子に基づき当該ユーザ識別子のパケットを担当するパケット処理部617を特定して、そのパケット処理部617に制御データ付きパケットデータを出力する。パケット処理部617は、制御データ付きパケットデータを受信すると、フィルタリング処理や統計処理、ログ記録処理等を実施する(ステップS237)。上でも述べたが、パケット処理部617の処理は従来と同じなのでこれ以上述べない。なお、パケット処理部617の処理後は、フィルタリングされなければ、制御データを除去されたパケットのデータが、そのパケットの宛先が接続されているポートに出力される。
さらに図31の処理に戻って、端子Eの後に、順序制御部608は、組立不要となって制御データ付きパケットデータを受け取ると、当該パケットデータから抽出されるコネクション識別データで特定されるコネクションのキューが閉塞状態であるか確認する(ステップS215)。上で述べたように、順序制御キューイング設定部630からのキュー閉塞指示に応じて閉塞状態に移行する。
閉塞状態でない、すなわち解放状態であれば、順序制御部608は、受け取った制御データ付きパケットデータを該当コネクションのキューに投入して、このキューから順番に第1ユーザ識別部609に出力する。処理はステップS227に移行する。
一方、閉塞状態である場合には、順序制御部608は、受け取った制御データ付きパケットデータを、該当コネクションのキューに登録し、キュー解放指示を待機する(ステップS217)。そして、上で述べたように、第2組立制御設定部631が、コネクション識別データを含むキュー解放指示を出力して(ステップS277)、これに対して順序制御部607が、コネクション識別データを含むキュー解放指示を受信すると(ステップS221)、コネクション識別データから特定されるコネクションのキューから制御データ付きパケットデータを順次読み出し、第1ユーザ識別部609に出力する(ステップS223)。そして、順序制御部607は、該当コネクションのキューから制御データ付きパケットデータを全て読み出した後に当該キューを解放状態に変更する(ステップS225)。処理はステップS227に移行する。
ステップS215でキューが解放状態である場合又はステップS225の後に、第1ユーザ識別部609は、制御データ付きパケットデータを受け取ると、当該パケットデータからコネクション識別データを抽出してコネクションテーブルを検索して、関連付けされている、組立制御テーブルの該当エントリを特定する。そして第1ユーザ識別部609は、この該当エントリにおけるユーザ識別子を読み出して、制御データ付きパケットデータにおける制御データに付与し、ユーザ識別子が付与された制御データ付きパケットデータを第1組立制御設定部611に出力する(ステップS227)。この後、既に説明したように、ステップS229に移行する。
このようにメッセージ層に出力されなかったパケットの制御データ付きパケットデータは、そのまま処理レイヤ振分部612によりキュー613に格納される。このキュー613に格納される順番は、メッセージ層でのパケット化処理が完了した後になるので、パケット処理部617における処理順番が逆転するといったことはない。
以上のような処理を実施することによって、コネクション確立からコネクション切断までのうち、最初のメッセージに係る一部のパケットのみを組み立てるだけでユーザ識別子を特定することができ、メッセージ層における処理負荷が大幅に削減されている。また、メッセージ層に出力されたパケットが後から処理されることはなく、パケット処理部617において処理順番が入れ替わることはない。
なお、本実施の形態では、1コネクションにつき1ユーザであることを前提としている。しかし、実際には1コネクションにつき複数ユーザである可能性もある。1コネクションにつき複数ユーザである場合には、メッセージ毎にユーザ識別子を特定する。但し、メッセージ全体を組み立てないという点については上で述べたものと同じであり、ユーザ識別情報及びメッセージ長を抽出できるまでパケットを組み立てる。このように、メッセージのヘッダからメッセージ長を抽出すれば、メッセージの切れ目を特定でき、メッセージの切れ目で再度次のメッセージに係るパケットの組み立てを行うようにする。これによって、メッセージ毎にユーザ識別子を特定する場合においても、当該メッセージに係る一部のパケットについては組み立てを行わないので、処理負荷を削減することができる。
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、機能ブロック図は一例であって、必ずしも部品やモジュールが、図示した形に分割されない場合もある。さらに、処理順番についても、処理結果が変化しない限りにおいて、並列実施したり、処理順番を入れ替えたりすることができる。さらに、各機能ブロックは、ハードウエアとして実装される場合もあれば、プログラムをプロセッサに実行させることによって実装される場合もある。
また、中継装置は専用の装置として実装される場合もあれば、コンピュータ装置として実装される場合もある。例えば、後者の場合、図35に示すように、メモリ2601とCPU2603とハードディスク・ドライブ(HDD)2605と表示装置2609に接続される表示制御部2607とリムーバブル・ディスク2611用のドライブ装置2613と入力装置2615とネットワークに接続するための通信部2617(図35では、2617a乃至2617c)とがバス2619で接続されている。なお、場合によっては、表示制御部2607、表示装置2609、ドライブ装置2613、入力装置2615は含まれない場合もある。オペレーティング・システム(OS:Operating System)及び本実施の形態における処理を実施するためのアプリケーション・プログラムは、HDD2605に格納されており、CPU2603により実行される際にはHDD2605からメモリ2601に読み出される。必要に応じてCPU2603は、表示制御部2607、通信部2617、ドライブ装置2613を制御して、必要な動作を行わせる。なお、通信部2617のいずれかを介して入力されたデータは、他の通信部2617を介して出力される。CPU2603は、通信部2617を制御して、適切に出力先を切り替える。また、処理途中のデータについては、メモリ2601に格納され、必要があればHDD2605に格納される。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2611に格納されて頒布され、ドライブ装置2613からHDD2605にインストールされる。インターネットなどのネットワーク及び通信部2617を経由して、HDD2605にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2603、メモリ2601などのハードウエアとOS及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
例えば、CPU2603、メモリ2601などのハードウエアとOS及び必要なアプリケーション・プログラムとが有機的に協働することにより、中継装置の各処理を行う機能部が実現される。また、データを格納する各格納部は、メモリ2601又はHDD2605に格納される。
以上述べた本技術の実施の形態をまとめると以下のとおりになる。
実施の形態に係る中継装置は、(A)1のメッセージに係る複数のパケットを順次受信する受信部と、(B)複数のパケットのうち上記1のメッセージに係る先頭パケットから上記1のメッセージのヘッダにおけるユーザ識別情報をペイロードに含むパケットまでのパケット群を組み立てて、部分メッセージ・データを生成するパケット組立部と、(C)部分メッセージ・データからユーザ識別情報を抽出すると共に、当該ユーザ識別情報からユーザ識別子を特定するユーザ識別部と、(D)上記1のメッセージに係る上記パケット群と複数のパケットのうちパケット組立部で組み立てられなかったパケットとに対して、特定されたユーザ識別子に基づき所定のパケット処理を実施するパケット処理部とを有する。
このようにパケット組立部で組み立てられなかったパケットの分、パケット組立部の処理負荷が軽減される。
また、上で述べた中継装置は、ユーザ識別部により特定されたユーザ識別子を、部分メッセージ・データ又は上記パケット群から抽出されるコネクション識別データに関連付けて制御データ格納部に格納する関連付設定部をさらに有するようにしてもよい。その場合、パケット処理部は、1のメッセージと同一のコネクションについての後続のメッセージに係るパケットに対して、制御データ格納部に格納されているユーザ識別子に基づき所定のパケット処理を実施するようにしてもよい。
1コネクションにつき1ユーザの場合には、コネクションが切断されるまで同一のユーザ識別子を用いることができ、さらなる処理負荷軽減が可能となる。
さらに、上で述べた中継装置は、受信したパケットを、当該パケットのヘッダから特定されるコネクション毎にキューに登録すると共に、当該パケットのコピーをパケット組立部に出力するパケット判別部と、ユーザ識別部によってユーザ識別子が特定された場合に、部分メッセージ・データ又は上記パケット群から特定されるコネクションについてのキューから、パケット処理部にパケットを出力させる組立制御設定部とをさらに有するようにしてもよい。このように、一部のパケットのデータをコピーしてメッセージ組立を行うようにすれば、中継装置の構成がシンプルになる。
また、上で述べた中継装置は、複数のパケットのうち先頭パケットのヘッダからコネクション識別データを抽出し、制御データ格納部に格納する制御データ管理部と、複数のパケットのうち先頭パケットについて、当該先頭パケットのヘッダから抽出されたコネクション識別データに関連付けて、パケット組立部の処理が必要であることを表す組立フラグを制御データ格納部に格納すると共に、組立フラグがパケット組立部の処理が必要であることを表している間、先頭パケットのヘッダについて抽出されたコネクション識別データと同一のコネクション識別データが抽出されるパケットをパケット組立部に出力するパケット判別部と、ユーザ識別部によってユーザ識別子が特定された場合に、部分メッセージ・データ又は上記パケット群から抽出されるコネクション識別データに関連付けて、パケット組立部の処理が不要であることを表す組立フラグを制御データ格納部に格納する組立制御設定部と、部分メッセージ・データをパケットに分割してパケット処理部に出力するパケット化処理部とをさらに有するようにしてもよい。
このようにパケットをコピーせずに、パケット組立部で組み立てた後に分解するような実装も可能である。
さらに、パケット化処理部を有する中継装置は、ユーザ識別部によりユーザ識別子が特定された場合、先頭パケットのヘッダについて抽出されたコネクション識別データと同一のコネクション識別データが抽出されるパケットをキューに登録する順序制御部と、パケット化処理部により、先頭パケットのヘッダについて抽出されたコネクション識別データと同一のコネクション識別データが抽出されるパケットについてのパケット分割処理が完了すると、順序制御部に、キューからパケットのデータを読み出して、パケット処理部へ出力させるキュー解放指示部とをさらに有するようにしてもよい。このような処理を行うことによって、パケットの受信順番とパケット処理部におけるパケットの処理順番が入れ替わったりすることが無くなる。
さらに、パケット化処理部を有しない中継装置は、(a)複数のパケットのうち先頭パケットのヘッダからコネクション識別データを抽出し、制御データ格納部に格納する制御データ管理部と、(b)複数のパケットのうち先頭パケットについて、当該先頭パケットのヘッダから抽出されたコネクション識別データに関連付けて、パケット組立部の処理が必要であることを表す組立フラグを制御データ格納部に格納すると共に、組立フラグがパケット組立部の処理が必要であることを表している間、先頭パケットのヘッダについて抽出されたコネクション識別データと同一のコネクション識別データが抽出されるパケットを、第1のキューに登録すると共に、当該パケットのコピーをパケット組立部に出力するパケット判別部と、(c)ユーザ識別部によってユーザ識別子が特定された場合に、部分メッセージ・データ又はパケット群から抽出されるコネクション識別データに関連付けて、パケット組立部の処理が不要であることを表す組立フラグを制御データ格納部に格納すると共に、パケット判別部に第1のキューからパケットを読み出してパケット処理部へ出力させる組立制御設定部と、(d)ユーザ識別部によってユーザ識別子が特定された場合に、先頭パケットのヘッダについて抽出されたコネクション識別データと同一のコネクション識別データが抽出されるパケットを第2のキューに登録する順序制御部とをさらに有するようにしても良い。この場合、パケット判別部が第1のキューから全てのパケットを読み出した後に、順序制御部の第2のキューからパケットを読み出すようにする。
このようにパケットをコピーして組み立てるような場合にも、パケットの受信順番とパケット処理部におけるパケットの処理順番が入れ替わることを防止することができるようになる。
また、実施の形態に係る中継方法(図36)は、(A)1のメッセージに係る複数のパケットのうち上記1のメッセージに係る先頭パケットから上記1のメッセージのヘッダにおけるユーザ識別情報をペイロードに含むパケットまでのパケット群を組み立てて、部分メッセージ・データを生成するステップ(図36:ステップS1001)と、(B)部分メッセージ・データからユーザ識別情報を抽出すると共に、当該ユーザ識別情報からユーザ識別子を特定するステップ(図36:ステップS1003)と、(C)上記1のメッセージに係るパケット群と複数のパケットのうちパケット組立部で組み立てられなかったパケットとに対して、特定されたユーザ識別子に基づき所定のパケット処理を実施するステップ(図36:ステップS1005)とを含む。
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROM、光磁気ディスク、半導体メモリ(例えばROM)、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、RAM等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
1のメッセージに係る複数のパケットを順次受信する受信部と、
前記複数のパケットのうち前記1のメッセージに係る先頭パケットから前記1のメッセージのヘッダにおけるユーザ識別情報をペイロードに含むパケットまでのパケット群を組み立てて、部分メッセージ・データを生成するパケット組立部と、
前記部分メッセージ・データから前記ユーザ識別情報を抽出すると共に、当該ユーザ識別情報からユーザ識別子を特定するユーザ識別部と、
前記1のメッセージに係る前記パケット群と前記複数のパケットのうち前記パケット組立部で組み立てられなかったパケットとに対して、特定された前記ユーザ識別子に基づき所定のパケット処理を実施するパケット処理部と、
を備えた中継装置。
(付記2)
前記ユーザ識別部により特定された前記ユーザ識別子を、前記部分メッセージ・データ又は前記パケット群から抽出されるコネクション識別データに関連付けて制御データ格納部に格納する関連付設定部と、
をさらに備え、
前記パケット処理部は、
前記1のメッセージと同一のコネクションについての後続のメッセージに係るパケットに対して、前記制御データ格納部に格納されている前記ユーザ識別子に基づき前記所定のパケット処理を実施する
付記1記載の中継装置。
(付記3)
受信したパケットを、当該パケットのヘッダから特定されるコネクション毎にキューに登録すると共に、当該パケットのコピーを前記パケット組立部に出力するパケット判別部と、
前記ユーザ識別部によって前記ユーザ識別子が特定された場合に、前記部分メッセージ・データ又は前記パケット群から特定されるコネクションについての前記キューから、前記パケット処理部に前記パケットを出力させる組立制御設定部と、
をさらに備えた付記1又は2記載の中継装置。
(付記4)
前記複数のパケットのうち先頭パケットのヘッダからコネクション識別データを抽出し、前記制御データ格納部に格納する制御データ管理部と、
前記複数のパケットのうち先頭パケットについて、当該先頭パケットのヘッダから抽出された前記コネクション識別データに関連付けて、前記パケット組立部の処理が必要であることを表す組立フラグを前記制御データ格納部に格納すると共に、前記組立フラグが前記パケット組立部の処理が必要であることを表している間、前記先頭パケットのヘッダについて抽出された前記コネクション識別データと同一のコネクション識別データが抽出されるパケットを前記パケット組立部に出力するパケット判別部と、
前記ユーザ識別部によって前記ユーザ識別子が特定された場合に、前記部分メッセージ・データ又は前記パケット群から抽出されるコネクション識別データに関連付けて、前記パケット組立部の処理が不要であることを表す組立フラグを前記制御データ格納部に格納する組立制御設定部と、
前記部分メッセージ・データをパケットに分割して前記パケット処理部に出力するパケット化処理部と、
をさらに備えた付記2記載の中継装置。
(付記5)
前記ユーザ識別部により前記ユーザ識別子が特定された場合、前記先頭パケットのヘッダについて抽出された前記コネクション識別データと同一のコネクション識別データが抽出されるパケットをキューに登録する順序制御部と、
前記パケット化処理部により、前記先頭パケットのヘッダについて抽出された前記コネクション識別データと同一のコネクション識別データが抽出されるパケットについてのパケット分割処理が完了すると、前記順序制御部に、前記キューから前記パケットのデータを読み出して、前記パケット処理部へ出力させるキュー解放指示部と、
をさらに備えた付記4記載の中継装置。
(付記6)
前記複数のパケットのうち先頭パケットのヘッダからコネクション識別データを抽出し、前記制御データ格納部に格納する制御データ管理部と、
前記複数のパケットのうち先頭パケットについて、当該先頭パケットのヘッダから抽出された前記コネクション識別データに関連付けて、前記パケット組立部の処理が必要であることを表す組立フラグを制御データ格納部に格納すると共に、前記組立フラグが前記パケット組立部の処理が必要であることを表している間、前記先頭パケットのヘッダについて抽出された前記コネクション識別データと同一のコネクション識別データが抽出されるパケットを、第1のキューに登録すると共に、当該パケットのコピーを前記パケット組立部に出力するパケット判別部と、
前記ユーザ識別部によって前記ユーザ識別子が特定された場合に、前記部分メッセージ・データ又は前記パケット群から抽出されるコネクション識別データに関連付けて、前記パケット組立部の処理が不要であることを表す組立フラグを前記制御データ格納部に格納すると共に、前記パケット判別部に前記第1のキューからパケットを読み出して前記パケット処理部へ出力させる組立制御設定部と、
前記ユーザ識別部によって前記ユーザ識別子が特定された場合に、前記先頭パケットのヘッダについて抽出された前記コネクション識別データと同一のコネクション識別データが抽出されるパケットを第2のキューに登録する順序制御部と、
を備え、
前記パケット判別部が前記第1のキューから全てのパケットを読み出した後に、前記順序制御部の前記第2のキューからパケットを読み出す
付記1記載の中継装置。
(付記7)
プロセッサを備え、
当該プロセッサにより、
1のメッセージに係る複数のパケットを順次受信し、
前記複数のパケットのうち前記1のメッセージに係る先頭パケットから前記1のメッセージのヘッダにおけるユーザ識別情報をペイロードに含むパケットまでのパケット群を組み立てて、部分メッセージ・データを生成し、
前記部分メッセージ・データから前記ユーザ識別情報を抽出すると共に、当該ユーザ識別情報からユーザ識別子を特定し、
前記1のメッセージに係る前記パケット群と前記複数のパケットのうち前記パケット組立部で組み立てられなかったパケットとに対して、特定された前記ユーザ識別子に基づき所定のパケット処理を実施する、
ことを特徴とする中継装置。
(付記8)
1のメッセージに係り且つ受信された複数のパケットのうち前記1のメッセージに係る先頭パケットから前記1のメッセージのヘッダにおけるユーザ識別情報をペイロードに含むパケットまでのパケット群を組み立てて、部分メッセージ・データを生成し、
前記部分メッセージ・データから前記ユーザ識別情報を抽出すると共に、当該ユーザ識別情報からユーザ識別子を特定し、
前記1のメッセージに係る前記パケット群と前記複数のパケットのうち前記パケット組立部で組み立てられなかったパケットとに対して、特定された前記ユーザ識別子に基づき所定のパケット処理を実施する
処理を、中継装置のプロセッサに実行させるためのプログラム。
(付記9)
中継装置における中継処理方法において、
プロセッサによって、
1のメッセージに係り且つ受信された複数のパケットのうち前記1のメッセージに係る先頭パケットから前記1のメッセージのヘッダにおけるユーザ識別情報をペイロードに含むパケットまでのパケット群を組み立てて、部分メッセージ・データを生成し、
前記部分メッセージ・データから前記ユーザ識別情報を抽出すると共に、当該ユーザ識別情報からユーザ識別子を特定し、
前記1のメッセージに係る前記パケット群と前記複数のパケットのうち前記パケット組立部で組み立てられなかったパケットとに対して、特定された前記ユーザ識別子に基づき所定のパケット処理を実施する、
処理を行うことを含むことを特徴とする中継処理方法。