以下、本発明の実施形態について、図面を参照しながら詳細に説明する。
<第1の実施形態>
図2は、第1の実施形態による端末装置、及びその端末装置を用いてサービスを利用可能なサービス提供システムの構成を示す図である。このサービス提供システムは、第1の実施形態による中継装置を用いて構築されたものであり、例えば1台以上の中継装置2、2台以上のサーバ3、及び1台の経路制御装置4が不図示の通信ネットワークを介して接続されている。図2には便宜的に、中継装置2及びサーバ3は1台のみ表している。
各サーバ3はそれぞれ、アプリケーション・プログラムであるサーバアプリケーション31を実行することにより、クライアントである端末装置1のユーザにサービスを提供する。中継装置2は、端末装置1とサーバ3の間でメッセージの中継を行う。端末装置1からメッセージ101を受信した場合、そのメッセージ101を転送すべきサーバ3を決定し、決定したサーバ3にメッセージ101を転送する。
各サーバ3は、中継装置2を介して端末装置1からのメッセージ101を受信することにより、セッションを生成する。このときサーバ3は、生成したセッションに、そのセッションを識別するための識別子であるセッションIDを割り当てる。このセッションIDは、端末装置1に送信するメッセージ302中に挿入する。端末装置1は、継続してサービスを利用する場合、セッションIDを挿入したメッセージ101を送信する。このことからサーバ3は、端末装置1から受信したメッセージ101中にセッションIDがあるか否か確認し、そのセッションIDがない場合にセッションを生成する。以降、便宜的に、セッションIDが存在しないメッセージ101、つまりセッションを生成する契機となるメッセージは「初期メッセージ」と呼び、符号として101aを付すこととする。セッションIDが存在するメッセージ101には符号として101bを付すこととする。101は、初期メッセージ101a、及びメッセージ101bの何れであっても良いメッセージに付すこととする。送信元を特定する必要がないメッセージには符号は付さないこととする。
端末装置1は、携帯電話機、PDA、或いはパーソナルコンピュータ(PC)等の通信機能を備えたコンピュータ(情報処理装置)である。この端末装置1には、サーバ3が提供するサービスを利用可能とするプログラムであるクライアントアプリケーション12が格納されている。それにより、端末装置1のユーザは、このクライアントアプリケーション12を実行させることにより、サーバ3が提供するサービスを利用する。
サーバ3、及び端末装置1は、メッセージの秘匿性を担保するために、ペイロードを暗号化してメッセージを送信する。セッションID等のセッションの識別子はペイロードに格納されるのが普通である。このため、中継装置2は、受信したメッセージのペイロードを復号しなければ、セッションIDを確認することができない。セッションIDを確認できない場合、メッセージ101bを転送すべきサーバ3に転送する一意性保証は実現できない。しかし、復号は、中継装置2の負荷を増大させる。このことから本実施形態では、中継装置2に復号を行わせることなく、一意性保証を実現させている。
経路制御装置4は、ペイロードを復号することなく、一意性保証を可能とさせる情報(以降「中継設定情報」と表記)を中継装置2に提供する。その中継設定情報は、サーバ3、及び端末装置1からそれぞれ提供される情報を用いて生成する。以降、図3〜図13も参照しつつ、中継設定情報を生成する仕組み、及びその中継設定情報を用いた中継を可能とする仕組みについて具体的に説明する。ここでは、端末装置1は中継装置2及び経路制御装置4とLANにより接続され、中継装置2、各サーバ3、及び経路制御装置4はLANに接続されていると想定する。通信ネットワークは、LAN以外のもの、例えばWAN、インターネット等であっても良い。
クライアントアプリケーション12を実行する端末装置1は、クライアント側アプリケーションセッション情報通知部11、及び通信部13を備えている。通信部13は、LANを介してメッセージの送受信を行う機能を備えている。メッセージ101のペイロードの暗号化/復号は、この通信部13が行う。
図3は、端末装置から送信されるメッセージの構成を説明する図である。図3(a)は、初期メッセージ101a、つまりペイロードにセッションIDが挿入されていないセッション確立前のメッセージの構成を表している。図3(b)は、ペイロードにセッションIDが挿入されているセッション確立後のメッセージ101bの構成を表している。
図3(a)及び(b)に示すように、メッセージ101のペイロードはL2〜L4ヘッダを除く部分である。HTTPを用いたメッセージ101では、そのペイロードの部分はHTTPヘッダ(図3中「HTTPプロトコルヘッダ」と表記)、及びHTTPボディ(図3中「メッセージコンテンツ」と表記)を含んでいる(図1(b)参照)。HTTPヘッダには、Hostフィールド、及びRequest−URIフィールドが存在する。サーバアプリケーション31は、それらのフィールドに格納するデータが表すURLによって指定される。セッション確立後のメッセージ101bには、セッションIDがcookieフィールドのデータとして記述される。
L2(レイヤ2)ヘッダは、イーサネット(LAN)に接続可能な機器が有する固有のID番号であるMAC(Media Access Control address)アドレス(イーサネットアドレス)によるデータ伝送用のヘッダである。このL2ヘッダには、送信元MACアドレス(Source MAC)、及び宛先MACアドレス(Destination MAC)が格納される。L3ヘッダ及びL4ヘッダは、例えば図1に示すHTTPメッセージにおけるIPヘッダ及びTCPヘッダである。それにより、この2つのヘッダは、送信元IPアドレス・ポート番号、及び宛先IPアドレス・ポート番号を表している。
クライアントアプリケーション12は、セッションIDを格納したセッションIDテーブル15を管理する。このセッションIDテーブル15の各エントリ(レコード)には、図10に示すように、セッションIDと宛先IPアドレスを格納するようにしている。セッションIDに宛先IPアドレスを対応付けているのは、この宛先IPアドレスはセッションIDと共にメッセージ101に格納するデータだからである。このメッセージ101は中継装置3を中継してサーバ3に転送されることから、宛先IPアドレスは中継装置2のIPアドレスである。
クライアントアプリケーション12は、サーバ3から応答のメッセージ302(中継装置2からメッセージ202として端末装置1に送信される)を受信すると、そのメッセージ302からセッションIDを抽出し、セッションIDテーブル15の検索を行う。その検索により、セッションIDを格納したエントリを抽出できなかった場合、セッションIDテーブル15に1エントリを追加する。追加したエントリには、メッセージ302中のセッションID、及び送信元IPアドレス(ここでは送信元ポート番号を含む)を格納する。この送信元IPアドレスは、宛先IPアドレスとして格納する。
クライアントアプリケーション12は、メッセージ101を送信する場合、そのメッセージ101の宛先IPアドレス(ここではポート番号を含む)をキーにセッションIDテーブル15を検索することにより、その宛先IPアドレスを格納したエントリが存在するか否か確認する。それにより、該当するエントリが存在することを確認した場合、そのエントリのセッションID、その宛先IPアドレス、及び送信元IPアドレス(ここではポート番号を含む)と共にクライアント側アプリケーションセッション情報通知部11に通知する。該当するエントリが存在するのは、メッセージ101bを送信する場合のみである。
クライアント側アプリケーションセッション情報通知部11は、クライアントアプリケーション12から通知されたセッションID、送信元IPアドレス・ポート番号、及び宛先IPアドレス・ポート番号をセッション情報として経路制御装置4に通知する。セッションIDと共に送信元IPアドレス・ポート番号、及び宛先IPアドレス・ポート番号を通知するのは、これらのデータは一意性保証を実現すべき端末装置1とサーバ3間のコネクション(対応関係)を識別できるものだからである。このことから以降、送信元IPアドレス・ポート番号と宛先IPアドレス・ポート番号の組み合わせは「コネクションID」と呼ぶこととする。本実施形態では、送信元IPアドレス・ポート番号として端末装置1のIPアドレス・ポート番号、宛先IPアドレス・ポート番号としてHost及びRequest−URIフィールドが表すサーバアプリケーション31のURLを採用している。
図4は、端末装置1からセッション情報の通知のために送信するメッセージ102の構成を説明する図である。図4に示すように、L2ヘッダには送信元MACアドレスとして端末装置1のMACアドレス、宛先MACアドレスとして経路制御装置4のMACアドレスがそれぞれ格納されている。L3・L4ヘッダには、端末装置1のIPアドレス及びポート番号が送信元IPアドレス及びポート番号として、経路制御装置4のIPアドレス及びポート番号が宛先IPアドレス及びポート番号としてそれぞれ格納されている。経路制御装置4のIPアドレス及びポート番号は、その経路制御装置4がサーバに搭載されている場合、そのサーバのIPアドレス及びポート番号となる。ここでは便宜的に、経路制御装置4は専用の装置として、つまり1台のサーバとして実現されていると想定する。セッション情報は、メッセージ102のペイロードとして格納される。
メッセージ101は、TCP以外の通信プロトコルを用いて送信することができる。その通信プロトコルとしては、例えばUDP(User Datagram Protocol)を挙げることができる。このことから図4では、コネクションIDのポート番号を得る通信プロトコルとしてTCP以外にUDPを挙げている。
クライアントアプリケーション12は、セッションIDを格納したセッションIDテーブル15を管理する。このセッションIDテーブル15の各エントリ(レコード)には、図10に示すように、セッションIDと宛先IPアドレスを格納するようにしている。セッションIDに宛先IPアドレスを対応付けているのは、この宛先IPアドレスはセッションIDと共にメッセージ101に格納するデータだからである。このメッセージ101は中継装置3を中継してサーバ3に転送されることから、宛先IPアドレスは中継装置2のIPアドレスである。
中継装置2は、端末装置1から受信したメッセージ101のL2ヘッダの送信元MACアドレスを自身のMACアドレス、宛先MACアドレスをサーバ3のMACアドレスに変更する。また、L3・L4ヘッダの宛先IPアドレス・ポート番号をサーバ3のIPアドレス・ポート番号に変更する。そのような変更を行うことにより生成したメッセージ201を送信する。このとき、L3・L4ヘッダに宛先IPアドレス・ポート番号を格納するサーバ3は、受信したメッセージ101が初期メッセージ101aであればラウンドロビン方式等の自律振分アルゴリズムにより選択したものである。初期メッセージ101aでなければ、セッションを確立したサーバ3である。セッションを確立したサーバ3の判別方法等についての詳細は後述する。
図5は、中継装置からサーバに転送されるメッセージの構成を説明する図である。図5(a)は、初期メッセージ101aの受信時に転送するセッション確立前のメッセージ201の構成を表している。図5(b)は、セッション確立後に転送するメッセージ201の構成を表している。以降、メッセージ201を区別する必要がある場合、セッション確立前のメッセージ201の符号としては201a、セッション確立後のメッセージ201の符号としては201bを用いる。図5(a)及び(b)に示すように、メッセージ201a、201bの主な相違は、初期メッセージ101a、10bと同様に、ペイロードにおけるセッションIDの有無である。
サーバ3は、中継装置2からメッセージ201を受信すると、そのメッセージ201のペイロードを復号し、サーバアプリケーション31に渡す。サーバアプリケーション31は、ペイロードにセッションIDが存在するか否か確認することにより、セッションIDが存在しなければセッションを新たに確立し、そのセッションにセッションIDを割り当てる。また、継続したサービスを提供するために必要な情報を生成し保存する。
本実施形態では、セッションID、及び情報の保存にセッションテーブル35を用いている。このセッションテーブル35の各エントリ(レコード)には、図12に示すように、セッションIDと、サービスの提供(サーバアプリケーション31による処理の実行)に必要な情報(以降「セッション関連情報」)が格納される。セッションIDが存在しないメッセージ201bをサーバ3が受信した場合、サーバアプリケーション31は、対応するセッション関連情報を必要に応じて更新する。
サーバアプリケーション31は、受信したメッセージ201によりリクエストされたデータやセッションIDをペイロードに格納したメッセージ302を生成し、中継装置2に送信する。図7は、サーバから送信されるメッセージの構成を説明する図である。図7に示すように、L2ヘッダには送信元MACアドレスとしてサーバ3のMACアドレス、宛先MACアドレスとして経路制御装置4のMACアドレスがそれぞれ格納されている。L3・L4ヘッダには、送信元IPアドレス及びポート番号としてサーバ3のIPアドレス及びポート番号、宛先IPアドレス及びポート番号として端末装置1のIPアドレス及びポート番号がそれぞれ格納されている。
中継装置4は、サーバ3からメッセージ302を受信すると、L2ヘッダの送信元MACアドレスを自身のMACアドレス、宛先MACアドレスを端末装置1のMACアドレスに変更する。また、L3・L4ヘッダの送信元IPアドレス・ポート番号を自身のIPアドレス・ポート番号に変更する。そのような変更を行うことで図6に示すようなメッセージ202を生成し端末装置1に送信する。このとき、端末装置1のMACアドレスは、L3・L4ヘッダに格納された宛先IPアドレス・ポート番号から特定する。
サーバ3のサーバ側アプリケーションセッション情報通知部32は、サーバアプリケーション31が新たにセッションを生成した場合、そのセッションID、及びサーバアプリケーション31のサービスを利用可能なサーバ3のIPアドレス及びポート番号(以降「サーバIPアドレス」と表記)を経路制御装置4に通知する。その通知は、図8に示すようなメッセージ301を生成して送信することで行う。そのメッセージ301には、ペイロードとして、セッションID、及びサーバIPアドレスがセッション情報として格納されている。ペイロードに格納されるサーバIPアドレスは、L3・L4ヘッダに格納される送信元IPアドレス・ポート番号と必ず一致するものではない。つまり、それらは同じであっても良いが、異なっていても良い。
経路制御装置4は、サーバ側アプリケーションセッション情報収集部41、クライアント側アプリケーションセッション情報収集部42、中継設定生成部43、及び設定部44を備えている。サーバ3から受信したメッセージ301はサーバ側アプリケーションセッション情報収集部41によって処理され、そのメッセージ301に格納されたセッション情報が抽出される。同様に、端末装置1から受信したメッセージ102はクライアント側アプリケーションセッション情報収集部42によって処理され、そのメッセージ102に格納されたセッション情報が抽出される。各セッション情報収集部41及び42が抽出したセッション情報は中継設定生成部43に出力される。
中継設定生成部43は、各セッション情報収集部41及び42から収集したセッション情報の対応関係をセッションIDにより特定する。それにより、同じセッションIDが組み合わされたサーバIPアドレスとコネクションIDを対応付ける。上記中継設定情報は、このようにしてサーバIPアドレスとコネクションIDを対応付けることにより生成する情報である。生成した中継設定情報は、設定部44に出力する。
中継設定生成部43は、設定管理テーブル45を用いて、中継設定情報の生成を管理する。この設定管理テーブル45の各エントリ(レコード)には、図13に示すように、対応付けたサーバIPアドレス、及びコネクションIDに加えて、セッションIDが格納可能となっている。それにより中継設定生成部43は、メッセージ102、或いはメッセージ301の受信によりセッション情報がセッション情報収集部41及び42の何れかから入力した場合、設定管理テーブル41を参照し、中継設定情報を生成すべきか否か判定する。それにより、コネクションIDの無いエントリに対して、そのコネクションIDが端末装置1から通知された場合にのみ、中継設定情報を生成する。中継設定情報を生成した場合には、該当するエントリにコネクションIDを格納する。
設定部44は、中継設定生成部43から中継設定情報を入力すると、その中継設定情報を中継装置2に通知するためのメッセージ401を生成し、中継装置2に送信する。このメッセージ401は、例えば図9に示すような構成であり、中継設定情報はペイロードとしてメッセージ401に格納されている。
経路制御装置4から送信されたメッセージ401は、中継装置2の設定受付部24によって処理される。その設定受付部24は、メッセージ401から中継設定情報を抽出し、抽出した中継設定情報を中継設定テーブル25に格納する。
この中継設定テーブル25の各エントリには、図11に示すように、中継設定情報、つまりコネクションIDとサーバIPアドレスが格納されている。このことから設定受付部24は、抽出した中継設定情報のコネクションIDをキーにした検索を行い、この検索結果に応じて中継設定情報の格納を行う。それにより、検索によってエントリを抽出できた場合、そのエントリに中継設定情報を上書きし、エントリを抽出できなかった場合には、1エントリを追加して、追加したエントリに中継設定情報を格納する。そのようにして、同一のコネクションIDが格納されたエントリは1つのみとする。
中継装置2は、上記設定受付部24の他に、中継部21、負荷分散部22及び中継設定記録部23を備えている。これら各部21〜23は、それぞれ以下のような動作を行う。
中継部21は、中継設定テーブル25を参照して、端末装置1とサーバ3間のメッセージの中継を実現させる。端末装置1からメッセージ101を受信した場合、L3・L4ヘッダから送信元、及び宛先のIPアドレス・ポート番号を抽出し、抽出したIPアドレス・ポート番号の組み合わせをキーにして中継設定テーブル25を検索する。その検索によって、その組み合わせをコネクションIDとして格納したエントリを抽出した場合、つまりメッセージ101がメッセージ101bであった場合、L3・L4ヘッダの宛先IPアドレス・ポート番号をそのエントリのサーバIPアドレスに変更する。メッセージ101bのL2ヘッダの送信元、及び宛先のMACアドレスはそれぞれ、自身のMACアドレス、そのサーバIPアドレスを持つサーバ3のMACアドレスに変更する。そのような変更によりメッセージ201bを生成し、サーバ3に送信する。そのようなエントリを抽出できなかった場合、メッセージ101は初期メッセージ101aであるとして、負荷分散部22に出力する。
負荷分散部22は、自律振分アルゴリズムにより初期メッセージ101aの転送先とするサーバ3を選択し、選択したサーバ3のIPアドレス・ポート番号を、L3・L4ヘッダの宛先IPアドレス・ポート番号として格納することにより、メッセージ201aを生成する。L2ヘッダの送信元MACアドレスは自身のMACアドレス、宛先MACアドレスは選択したサーバ3のMACアドレスに変更する。そのようにして生成したメッセージ201aをサーバ3に送信し、初期メッセージ101aのL3・L4ヘッダの送信元、及び宛先のIPアドレス・ポート番号、並びに選択したサーバ3のIPアドレス・ポート番号を中継設定記録部23に通知する。
中継設定記録部23は、負荷分散部22から通知された送信元、及び宛先のIPアドレス・ポート番号をコネクションID、サーバ3のIPアドレス・ポート番号をサーバIPアドレスとして、中継設定テーブル25に格納する。負荷分散部22からこれらIPアドレス・ポート番号が通知されるのは、上述したように端末装置1から初期メッセージ101aを受信した場合である。このことから、中継設定記録部23は、中継設定テーブル25に1エントリを追加し、追加したエントリにこれらのIPアドレス・ポート番号を中継設定情報として格納する。
上記中継部21は、サーバ3からメッセージ302を受信した場合、メッセージ101bの受信時と同様のアドレス書き換え操作を行い、メッセージ202を生成する。受信したメッセージ302のL3・L4ヘッダの送信元IPアドレス・ポート番号を自身のIPアドレス・ポート番号に変更し、L2ヘッダの送信元、宛先のMACアドレスはそれぞれ自身のMACアドレス、端末装置1のMACアドレスに変更する。そのような変更によりメッセージ202を生成し、端末装置1に送信する。
上記端末装置1、中継装置2、サーバ3及び経路制御装置4は何れも、コンピュータに専用のプログラムを実行させることで動作する。端末装置1は、クライアントアプリケーション12をコンピュータに実行させることにより実現される。サーバ3はサーバアプリケーション31をコンピュータに実行させることにより実現される。中継装置2はメッセージの中継を可能とさせるプログラム(以降「中継プログラム」)、経路制御装置4は中継装置2に中継設定情報を設定させるプログラム(以降「経路制御プログラム」)をそれぞれ実行させることにより実現される。ここで図23を参照して、端末装置1、中継装置2、サーバ3或いは経路制御装置4として使用可能なコンピュータについて具体的に説明する。
図23に示すコンピュータは、CPU61、メモリ62、入力装置63、出力装置64、外部記憶装置65、媒体駆動装置66、及びネットワーク接続装置67を有し、これらがバス68によって互いに接続された構成となっている。図23に示す構成は一例であり、これに限定されるものではない。
CPU61は、当該コンピュータ全体の制御を行う。
メモリ62は、プログラムの実行、データ更新等の際に、外部記憶装置65(あるいは可搬型の記録媒体70)に記憶されているプログラムあるいはデータを一時的に格納するRAM等の半導体メモリである。CPU61は、プログラムをメモリ62に読み出して実行することにより、全体の制御を行う。
入力装置63は、例えば、キーボード、マウス等の操作装置を介したデータ入力を可能とするものである。操作装置と接続可能なインターフェース、或いは操作装置とインターフェースを含むものである。操作装置に対するユーザの操作を検出し、その検出結果をCPU61に通知する。この操作装置はコンソール等であっても良い。
出力装置64は、例えば表示装置、或いは表示装置と接続された表示制御装置である。外部記憶装置65は、例えばハードディスク装置である。主に各種データやプログラムの保存に用いられる。
媒体駆動装置66は、光ディスク、光磁気ディスク、或いはメモリカード等の可搬型の記録媒体70にアクセスするものである。ネットワーク接続装置67は、通信ネットワークを介して外部装置と通信を行うためのものである。
上記専用プログラムは、外部記憶装置65、若しくは記録媒体70に記録されているか、或いは通信ネットワークを介してネットワーク接続装置67により取得される。その専用プログラムが外部記憶装置65に格納されていると想定する場合、端末装置1、中継装置2、サーバ3及び経路制御装置4の各構成要素は、上記コンピュータの以下のような構成要素の組み合わせによって実現される。その組み合わせは、更に、端末装置1、中継装置2、サーバ3及び経路制御装置4は全て同じ通信ネットワーク(LAN)に接続されていると想定した場合のものである。
端末装置1のクライアント側アプリケーションセッション情報通知部11は、例えばCPU61、メモリ62、外部記憶装置65、ネットワーク接続装置67、及びバス68によって実現される。セッションIDテーブル15は、例えば外部記憶装置65に保存され、必要に応じてメモリ62に読み出されて参照、或いは更新される。
中継装置2の中継部21、負荷分散部22、及び設定受付部24は共に、例えばCPU61、メモリ62、外部記憶装置65、ネットワーク接続装置67、及びバス68によって実現される。中継設定記録部23は、例えばCPU61、メモリ62、外部記憶装置65及びバス68によって実現される。中継設定テーブル25は、例えば外部記憶装置65に保存され、必要に応じてメモリ62に読み出されて参照、或いは更新される。
サーバ3のサーバ側アプリケーションセッション情報通知部32は、例えばCPU61、メモリ62、外部記憶装置65、ネットワーク接続装置67、及びバス68によって実現される。セッションテーブル35は、例えば外部記憶装置65に保存され、必要に応じてメモリ62に読み出されて参照、或いは更新される。
経路制御装置4のサーバ側アプリケーションセッション情報収集部41、クライアント側アプリケーションセッション情報収集部42、及び設定部44は共に、例えばCPU61、メモリ62、外部記憶装置65、ネットワーク接続装置67、及びバス68によって実現される。経路制御装置4と端末装置1を接続する通信ネットワークが、経路制御装置4、中継装置2及びサーバ3を接続する通信ネットワークと異なる場合、これら情報州中部41及び42を実現するネットワーク接続装置は異なることになる。具体的には、クライアント側アプリケーションセッション情報収集部42は、例えばネットワーク接続装置67の代わりにネットワーク接続装置68を用いて実現されることとなる。
設定生成部43は、例えばCPU61、メモリ62、外部記憶装置65及びバス68によって実現される。設定管理テーブル45は、例えば外部記憶装置65に保存され、必要に応じてメモリ62に読み出されて参照、或いは更新される。
図14は、端末装置1、中継装置2、サーバ3及び経路制御装置4の各専用プログラムによって実現される処理を説明する図である。図14では便宜的に、装置1〜4の専用プログラムによって実現される処理は状況別に分けて示している。次に図14を参照して、各装置1〜4の専用プログラムによって実現される処理について説明する。
端末装置1の専用プログラムであるクライアントアプリケーション12は、何らかのリクエストであるメッセージ101を送信するためのリクエスト送信処理F11を実現させる。そのメッセージ101への応答として送信されるメッセージ(メッセージ202)への対応のために、応答取得処理F12を実現させる。
中継装置2の専用プログラムである中継プログラムは、設定受付処理F21、主信号リクエスト処理F22及び主信号応答処理F23を実現させる。設定受付処理F21は、経路制御装置4から送信される中継設定情報を中継設定テーブル25に登録するために実行される。設定受付部24は、この設定受付処理F21の実行によって実現される。主信号リクエスト処理F22は、端末装置1から受信したメッセージ101に対応するための処理である。中継部21の一部、負荷分散部22及び中継設定記録部23は、この主信号リクエスト処理F22の実行によって実現される。主信号応答処理F23は、サーバ3から応答(レスポンス)として送信されるメッセージ302に対応するための処理である。中継部21の残り部分は、この主信号応答処理F23の実行によって実現される。
サーバ3の専用プログラムであるサーバアプリケーション31は、端末装置1から中継装置2を介して転送されるメッセージ201に対応するためのサーバ処理F31を実現させる。
経路制御装置4の専用プログラムである経路制御プログラムは、サーバ側セッション情報収集処理F41及びクライアント側セッション情報収集処理F42を実現させる。サーバ側セッション情報収集処理F41は、サーバ3から送信されるメッセージ301に対応するために実行される。クライアント側セッション情報収集処理F42は、端末装置1から送信されるメッセージ102への対応、及び中継装置2への中継設定情報の設定のために実行される。サーバ側アプリケーションセッション情報収集部41は、サーバ側セッション情報収集処理F41の実行によって実現される。クライアント側セッション情報収集部42、中継設定生成部43及び設定部44は、クライアント側セッション情報収集処理F42の実行によって実現される。
以降は、図14に示した各処理について、図15〜図22に示す各フローチャートを参照して詳細に説明する。
始めに、端末装置1がクライアントアプリケーション12によって実行するリクエスト送信処理F11及び応答取得処理F12について詳細に説明する。
図15は、上記リクエスト送信処理F11のフローチャートである。この図15にフローチャートを示すリクエスト送信処理F11は、ユーザがサービス提供システムへのアクセス、つまりサービス提供システムへのメッセージ101の送信を指示することを契機に実行される。そのアクセスの指示、つまりURLの指定は、URLの入力、或いはURLが関連付けられたリンクのクリック等により行われる。図15を参照して、始めにこのリクエスト送信処理F11について詳細に説明する。
先ず、ステップS111では、クライアントアプリケーション12は、ユーザが指定したメッセージ101を送信するURL(宛先URL)をキーに、セッションIDテーブル15(図10)を検索する。続くステップS112では、クライアントアプリケーション12は、その検索結果から、キーとしたURL(IPアドレス)と対応付けたセッションIDが有るか否か判定する。検索によって、キーとしたURLを格納するエントリを抽出できた場合、判定はYESとなってステップS113に移行する。そのようなエントリを抽出できたなかった場合、判定はNOとなってステップS117に移行する。
ステップS113では、クライアントアプリケーション12は、メッセージ(リクエスト)を送信するコネクションを決定する。このコネクションの決定では、宛先IPアドレス・ポート番号としてユーザが指定したURLを選択し、送信元IPアドレスとして端末装置1に事前設定されたIPアドレスを選択し、送信元ポート番号として、空いているポート番号から一つを選択する。次のステップS114では、クライアントアプリケーション12は、決定した送信元IPアドレス・ポート番号、宛先IPアドレス・ポート番号、及びセッションIDをセッション情報として、クライアント側セッション情報通知処理に引数として渡す。その次に移行するステップS115では、クライアントアプリケーション12はこの通知処理を実行する。
この通知処理は、セッション情報を経路制御装置4に通知するための処理である。図4に示すメッセージ102の生成、及び経路制御装置4への送信は、この通知処理を実行することで実現される。そのメッセージ102を受信した経路制御装置4は、端末装置1に、そのメッセージ102を処理した旨を示すメッセージである処理完了応答を返信する。このことからクライアントアプリケーション12は、ステップS115でクライアント側セッション情報通知処理を実行した後、ステップS116に移行して、経路制御装置4から処理完了応答を取得するのを待つ。ステップS118には、処理完了応答を取得した後に移行する。図2に示すクライアント側アプリケーションセッション情報通知部11は、これらステップS115及びS116の実行によって実現される。これらステップS115及びS116は、クライアントアプリケーション12を構成するサブプログラムにより実現、つまりサブルーチン処理として実行される。
上記ステップS112の判定がNOとなって移行するステップS117では、クライアントアプリケーション12は、ステップS113と同様にして、メッセージを送信するコネクションを決定する。次に移行するステップS118では、クライアントアプリケーション12は、中継装置2との間にコネクションを確立し、ペイロードを暗号化したメッセージ101を生成して送信する。その後、このリクエスト送信処理を終了する。
図16は、上記応答取得処理F12のフローチャートである。この図16にフローチャートを示す応答取得処理F12は、中継装置2を介してサーバ3からのメッセージ(レスポンス)202の受信を契機に実行される。次に図16を参照して、この押送取得処理F12について詳細に説明する。
先ず、ステップS121では、クライアントアプリケーション12は、端末装置1が受信したメッセージ202を受け取る。続くステップS122では、クライアントアプリケーション12は、メッセージ202のペイロードを復号化して、セッションIDがHTTPヘッダに記載されているか否か確認する。それにより、HTTPヘッダにセッションIDが記載されていないことを確認した場合、その旨が判定され、ここで応答取得処理を終了する。一方、HTTPヘッダにセッションIDが記載されていることを確認した場合には、その旨が判定されてステップS123に移行する。
ステップS123では、クライアントアプリケーション12は、HTTPヘッダのセッションID、及びL3・L4ヘッダの送信元IPアドレス・ポート番号(図16中「URL」と表記)をそれぞれ抽出し、セッションIDテーブル15に書き込む。その書き込みは、例えばセッションIDをキーにセッションIDテーブルを検索し、その検索によって抽出したエントリが存在すれば、そのエントリに対して行う。その検索によってエントリを抽出できなければ、1エントリを追加し、追加したエントリに対して行う。そのようにしてセッションIDテーブル15を更新した後、この応答取得処理を終了する。
端末装置1では、上述したような内容のリクエスト送信処理F11及び応答取得処理F12がクライアントアプリケーション12によって実行される。それにより、サーバ3が提供するサービスを利用する場合に、セッションIDテーブル15の更新、及びメッセージ102の生成・送信によるセッション情報の経路制御装置4への通知が行われる。
次に、サーバ3でのサーバ処理F31について詳細に説明する。
図17は、サーバ3がサーバアプリケーション31によって実行するサーバ処理のフローチャートである。次に図17を参照して、このサーバ処理について詳細に説明する。この図17のフローチャートは、中継装置2から送信された1メッセージ201に対応するために実行する処理の流れを示したものである。
先ず、ステップS311では、サーバアプリケーション31は、サーバ3が受信したメッセージ201を受け取る。続くステップS312では、サーバアプリケーション31は、メッセージ201のペイロードを復号化する。その後に移行するステップS313では、サーバアプリケーション31は、HTTPヘッダのcookieフィールドからセッションIDの抽出できたか否か確認する。それにより、HTTPヘッダからセッションIDを抽出できなかった場合、その旨が判定され、ステップS318に移行する。一方、HTTPヘッダからセッションIDを抽出できた場合には、その旨が判定されてステップS314に移行する。
ステップS314では、サーバアプリケーション31は、抽出したセッションIDをキーにセッションテーブル35(図12)を検索し、そのセッションIDに対応付けられたセッション関連情報を取得する。続くステップS315では、サーバアプリケーション31は、取得したセッション関連情報を用いて、ペイロード中のデータによって指定される処理(図17中「同アプリケーションセッション処理」と表記)を実行する。その後、サーバアプリケーション31は、ステップS316で応答とするメッセージ302の生成、次のステップS317で生成したメッセージ302の送信を行う。その送信を行った後、このサーバ処理を終了する。
メッセージ302の生成は、受信したメッセージ201のL2〜L4ヘッダの送信元、宛先を入れ換え、HTTPヘッダのSet−cookieフィールド(図7参照)にセッションID、HTTPボディにリクエストされたデータを格納することで行われる。HTTPヘッダ、及びボディを含むペイロードは、暗号化する。それにより、図7に示すようなメッセージ302が生成・送信される。
上記ステップS313でセッションIDを抽出できないと判定した場合に移行するステップS318では、サーバアプリケーション31は、セッション関連情報、及びセッションIDを生成し、これらのデータをセッションテーブル35に登録する。この登録は、1エントリを追加し、追加したエントリにこれらのデータを格納することで行う。続くステップS319では、サーバアプリケーション31は、サブルーチン処理であるサーバ側セッション情報通知処理(サブプログラム)に制御を渡す。
このサブプログラムは、サーバアプリケーション31から制御が渡されると、サーバ3自身のIPアドレスを取得し、セッションIDと共に経路制御装置4に通知する。この通知は、図8に示すようなメッセージ301の生成、及び生成したメッセージ301の経路制御装置4への送信によって実現される。メッセージ301を受信した経路制御装置4は、そのメッセージ301を処理した旨を示すメッセージである処理完了応答をサーバ3に返信する。このサブプログラムの制御は、その処理完了応答を取得するのを待って、サーバアプリケーション31に返す。図2に示すサーバ側アプリケーションセッション情報通知部32は、このようなサブプログラム、つまりサーバ側セッション情報通知処理を実行することで実現される。処理完了応答の取得による制御のサーバアプリケーション31への移行は、ステップS320で行われ、制御を受け取ったサーバアプリケーション31は、次にステップS315の処理を実行することとなる。
次に、経路制御装置4が経路制御プログラムによって実行するサーバ側セッション情報収集処理F41及びクライアント側セッション情報収集処理F42について詳細に説明する。
図18は、サーバ側セッション情報収集処理F41のフローチャートである。この図18のフローチャートは、サーバ3から受信した1メッセージ301に対応するための処理の流れを示したものである。始めに図18を参照して、この収集処理F41について詳細に説明する。
先ず、ステップS411では、経路制御プログラムは、受信したメッセージ301(図8)のペイロードからセッション情報、つまりセッションID、及びIPアドレスを収集する。続くステップS412では、経路制御プログラムは、収集したセッション情報を設定管理テーブル45に登録する。その登録後は、ステップS413に移行して、経路制御プログラムは、メッセージ301を受信したサーバ3に、セッション情報を登録した旨を示すメッセージである登録完了通知を返信する。その後、このサーバ側セッション情報収集処理F41を終了する。
セッション情報の登録は、実際には、セッション情報のセッションIDをキーにした設定管理テーブル45の検索を行い、その検索によって抽出されるエントリが存在するか否か確認して行われる。それにより、エントリが抽出できれば、そのエントリにセッション情報を格納し、エントリを抽出できなければ、1エントリを追加し、追加したエントリにセッション情報を格納する。
図19は、クライアント側セッション情報収集処理F42のフローチャートである。この図19のフローチャートも同様に、端末装置1から受信した1メッセージ102に対応するための処理の流れを示したものである。次に図19を参照して、この収集処理F42について詳細に説明する。
先ず、ステップS421では、経路制御プログラムは、受信したメッセージ102(図4)のペイロードからセッション情報、つまりセッションID、及びコネクションIDを収集する。続くステップS422では、経路制御プログラムは、そのセッションIDをキーにした設定管理テーブル45の検索により1エントリを抽出し、そのエントリにコネクションIDを格納すると共に、そのエントリからサーバ3のIPアドレスを取得する。その後、ステップS423に移行する。
ステップS423では、経路制御プログラムは、取得したIPアドレスとコネクションIDを組み合わせて中継設定情報を生成する。次のステップS424では、経路制御プログラムは、生成した中継設定情報をペイロードに格納したメッセージ401(図9)を作成して中継装置2に送信することにより、その中継設定情報を付与する。その後、経路制御プログラムは、中継装置2から中継設定情報の設定完了を通知するメッセージである設定完了通知を受信するのを待ち(ステップS425)、その設定完了通知の受信後は中継設定情報の設定完了を通知するメッセージである設定完了通知を端末装置1に送信する(ステップS426)。その設定完了通知の送信後、このクライアント側セッション情報収集処理F42を終了する。
このようにして端末装置1への設定完了通知は、中継設定情報が中継装置3に設定された後に送信される。このため、その設定完了通知の受信後に端末装置1から送信されるメッセージ101bは、中継装置2によって転送すべきサーバ3に転送されることとなる。
上述したように、クライアント側セッション情報収集処理F42は、経路制御装置4のクライアント側セッション情報収集部42、中継設定生成部43及び設定部44を実現させる。より具体的には、クライアント側セッション情報収集部42は、上記ステップS421及びS426の処理を実行することで実現される。中継設定生成部43は、上記ステップS422及びS423の処理を実行することで実現される。設定部44は、上記ステップS424の処理を実行することで実現される。
最後に、中継装置2が中継プログラムによって実行する設定受付処理F21、主信号リクエスト処理F22及び主信号応答処理F23について詳細に説明する。
図20は、設定受付処理F21のフローチャートである。この図20のフローチャートは、経路制御装置4から受信した1メッセージ401に対応、つまり1中継設定情報を設定するための処理の流れを示したものである。中継装置2が実行する処理では、始めに図20を参照して、この設定受付処理F21について詳細に説明する。上述したように、図2の設定受付部24は、この設定受付処理F21を実行することで実現される。
先ず、ステップS211では、中継プログラムは、経路制御装置4から受信したメッセージ(図20中では「中継設定配布メッセージ」と表記)401を取得する。続くステップS212では、中継プログラムは、メッセージ401のペイロードに格納されている中継設定情報のコネクションIDを取得し、このコネクションIDをキーにして中継設定テーブル25を検索し、その検索結果を判定する。その検索の結果、コネクションIDを格納したエントリを抽出できた場合、ヒット(Hit)と判定され、ステップS213に移行する。一方、そのようなエントリを抽出できなかった場合、ミスヒット(Not Hit)と判定され、ステップS214に移行する。
ステップS213では、中継プログラムは、抽出したエントリに、中継設定情報のIPアドレスを上書きする。一方、ステップS214では、中継プログラムは、1エントリを追加し、追加したエントリに中継設定情報、つまりキーにしたコネクションIDとそのコネクションIDに組み合わされたサーバ3のIPアドレスを格納する。ステップS213、或いはS214の処理の実行により中継設定テーブル25を更新した後はステップS215に移行して、中継プログラムは、中継設定情報の設定完了を通知するメッセージである設定完了通知を経路制御装置4に返信する。その返信を行った後、設定受付処理を終了する。
図21は、主信号リクエスト処理F22のフローチャートである。この図21のフローチャートは、端末装置1から受信した1メッセージ101に対応するための処理の流れを示したものである。次に図21を参照して、このリクエスト処理F22について詳細に説明する。
先ず、ステップS221では、中継プログラムは、端末装置1からメッセージ101を受信するのを待つ。メッセージ101を受信すると、ステップS222に移行して、中継プログラムは、受信したメッセージ101のL3・L4ヘッダからコネクションID、つまり送信元IPアドレス・ポート番号、及び宛先IPアドレス・ポート番号を抽出する。その抽出後はステップS223に移行する。
ステップS223では、中継プログラムは、抽出したコネクションIDをキーに中継設定テーブル25を検索し、その検索結果を判定する。その検索の結果、コネクションIDを格納したエントリを抽出できなかった場合、ヒットしなかった(Not Hit)と判定され、ステップS226に移行する。一方、そのようなエントリを抽出できた場合、ヒット(Hit)と判定され、ステップS224に移行する。
ステップS224では、中継プログラムは、受信したメッセージ101のL3・L4ヘッダの宛先IPアドレス・ポート番号として、抽出したエントリの転送先サーバアドレス(IPアドレス・ポート番号)を書き込むことにより、メッセージ201を作成する。次のステップS225では、中継プログラムは、作成したメッセージ201をサーバ3に送信する。その後、この主信号リクエスト処理F22を終了する。
上記ステップS224で作成するメッセージ201は、図5(b)に示すように、L2ヘッダの送信元MACアドレスは中継装置2のMACアドレス、宛先MACアドレスは転送先とするサーバ3のMACアドレスに書き換えられたものである。L3・L4ヘッダの送信元IPアドレス・ポート番号は元のままである。
上記ステップS223でNot Hitと判定した場合に移行するステップS226では、中継プログラムは負荷分散アルゴリズムに従ってメッセージ101(101a)の転送先とするサーバ3を選択する。続くステップS227では、中継プログラムは、中継設定テーブル25に1エントリを追加し、追加したエントリにコネクションIDと選択したサーバ3のIPアドレスを中継設定情報として記録する。その後、上記ステップS224に移行する。
上記したように、中継装置2の中継部21の一部、負荷分散部22及び中継設定記録部23は、この主信号リクエスト処理F22の実行によって実現される。より具体的には、中継部21の一部は、ステップS221−S225の処理の実行によって実現される。負荷分散部22は、ステップS226、S224及びS225の処理の実行によって実現される。中継設定記録部23は、ステップS227の処理の実行によって実現される。
図22は、主信号応答処理F23のフローチャートである。この図22のフローチャートも同様に、サーバ3から受信した1メッセージ302(図7)に対応するための処理の流れを示したものである。最後に図22を参照して、この主信号応答処理F23について詳細に説明する。サーバ3から端末装置1にメッセージを転送する中継部21の機能は、この主信号相当処理F23の実行により実現される。
先ず、ステップS231では、中継プログラムは、サーバ3からメッセージ302を受信するのを待つ。メッセージ302を受信すると、ステップS232に移行して、中継プログラムは、受信したメッセージ302のL2〜L4ヘッダの書き換えによりメッセージ202(図6)を作成する。その次のステップS233では、中継プログラムは、作成したメッセージ202を送信する。その送信を行った後、この主信号応答処理を終了する。
上記メッセージ202の作成では、受信したメッセージ302のL2ヘッダの送信元、及び宛先のMACアドレスLとして中継装置2及び端末装置1のMACアドレスをそれぞれ格納する。L3・L4ヘッダの送信元IPアドレス・ポート番号は中継装置2のIPアドレス・ポート番号に変更する。そのようにして、メッセージ302からメッセージ202が作成される。
<第2の実施形態>
セッションIDは、第3者に知られないようにすることが望ましい。これは、セッションIDを知った第3者は、セッションIDの所有者である端末装置1のユーザになりすますことができるからである。このようなことから、セッションIDを含むセッション情報をメッセージ102により経路制御装置4に通知する場合、そのメッセージ102の秘匿性の担保も必要と云える。このような理由から第2の実施形態は、メッセージ102の秘匿性を担保するようにしたものである。
メッセージ102の秘匿性を担保するために、第2の実施形態では、以下の点が第1の実施形態から異なっている。その異なっている点について、図24を参照して具体的に説明する。その図24は、第2の実施形態による端末装置、及びその端末装置を用いてサービスを利用可能なサービス提供システムの構成を示す図である。
第2の実施形態による端末装置1のクライアント側アプリケーションセッション情報通知部11は、図24に示すように、アプリケーションセッションID暗号化部11aを備えている。このID暗号化部11aは、例えばメッセージ102のペイロード、つまりセッション情報を暗号化するものである。それにより、端末装置1は、セッション情報を暗号化したメッセージ102を経路制御装置4に送信する。セッション情報の暗号化は、図15にフローチャートを示すリクエスト送信処理F11において、例えばステップS115で行われる。
端末装置1から送信されたメッセージ102は、経路制御装置4のクライアント側セッション情報収集部42によって処理される。このセッション情報収集部42は、受信したメッセージ102のセッション情報を復号化することにより、セッション情報を取得し、取得したセッション情報を中継設定生成部43に渡す。それにより、中継設定生成部43は、第1の実施形態と同様に、中継設定情報を生成して設定部44に渡す。セッション情報の復号化は、図19にフローチャートを示すクライアント側セッション情報収集処理F42において、例えばステップ421で行われる。
第2の実施形態では、このようにして、端末装置1はセッション情報を暗号化したメッセージ102を経路制御装置4に送信し、経路制御装置4は、メッセージ102のセッション情報を復号化して、中継設定情報の中継装置2への設定を行う。このため、第1の実施形態と比較して、セッション情報の漏洩は大幅に抑えることができる。
サーバ3でも同様に、サーバ側アプリケーションセッション情報通知部32は、図24に示すように、アプリケーションセッションID暗号化部32aを備えている。それにより、サーバ3もセッション情報を暗号化したメッセージ301を経路制御装置4に送信する。
なお、第2の実施形態では、経路制御装置4はセッション情報を復号化しているが、必ずしも復号化しなくとも良い。これは、端末装置1、及びサーバ3が同じデータを同じルールで暗号化した場合、暗号化後のデータは同じになるからである。それにより、セッション情報(例えばセッションIDのみであっても良い)は、その暗号化されたデータの位置が予め特定できるようにしておけば、その暗号化データをセッションIDの代わりとして用いることができるからである。そのようにして復号化を回避させた場合には、復号化に要するコストをより抑えることができる。
<第3の実施形態>
上記第1及び第2の実施形態では、端末装置1からのセッション情報の経路制御装置4への通知は、クライアントアプリケーション12の制御により行っている。第3の実施形態は、セッション情報の通知をクライアントアプリケーション12とは別のソフトウエア制御により行うようにしたものである。
第3の実施形態では、端末装置1のみが上記第1の実施形態から異なっている。このことから、端末装置1にのみ着目する形で説明を行う。動作等が異なっても第1の実施形態に存在するものにはその第1の実施形態と同じ符号を用いることとする。また、アプリケーションのセッションIDは「セッションID」、SSLセッションのIDは「SSLセッションID」と表記することにより、これらのIDを区別する。
図25は、第3の実施形態による端末装置、及びその端末装置を用いてサービスを利用可能なサービス提供システムの構成を示す図である。先ず、図25を参照して、第3の実施形態による端末装置1の機能構成について具体的に説明する。
図25に示すように、第3の実施形態による端末装置1は、代理応答・発行部111、及びフック部112を更に備えている。代理応答・発行部111は、クライアントアプリケーション12と通信部13の間に配置され、クライアントアプリケーション12と通信部13間のメッセージの受け渡しを制御する。フック部112は、通信部13から外部装置宛てに出力されるメッセージのなかの所定のメッセージをフックし、その所定のメッセージの送信を遅延させる。
メッセージ101の送信は、中継装置2との間にコネクション(TCPコネクション)を確立した後に行われる。このコネクションの確立は、その確立を要求するためのSYNパケット(SYNフラグを立てたパケット)を送信することで行われる。SSLセッションの確立は、このコネクションの確立後に行われる。本実施形態では、フック部112にこのSYNパケットを所定のメッセージとしてフックさせるようにしている。それにより、代理応答・要求部111、及びフック部112は、クライアントアプリケーション12が送信を要求するメッセージを実際に送信するタイミングを制御しつつ、セッション情報の取得、及び取得したセッション情報の経路制御装置4への通知を行う。要求されたメッセージを実際に送信するタイミングを制御することから、代理応答・要求部111は、クライアントアプリケーション12への応答を代理して行う。以降、代理応答・要求部111、及びフック部112に着目しつつ、動作を説明する。
クライアントアプリケーション12は、メッセージ101を送信する前に、そのメッセージ101を送信する予定の宛先IPアドレス・ポート番号を指定して、仮想の通信路であるSSLセッション(以降「SSL通信路」と表記する)の確立を要求する。代理応答・要求部111は、その要求を受け取った場合、仮のコネクションID(以降「仮コネクションID」)、及び仮のSSLセッションID(以降「仮SSLセッションID」)を生成し、それら生成したIDを応答として返す。
生成した仮コネクションID及び仮SSLセッションIDは、メッセージ101の実際の送信に用いられるとは限らない。このことから代理応答・要求部111は、仮コネクションID、及び仮SSLセッションIDの生成結果をそれぞれコネクションIDマッピングテーブル124及びSSLセッションIDマッピングテーブル125に保存する。コネクションIDマッピングテーブル124は、仮コネクションIDと実際のコネクションID(以降「実コネクションID」)の対応関係を特定できるように用意したものである。図29に示すように、1エントリには仮コネクションID及び実コネクションIDが格納される。SSLセッションIDマッピングテーブル125も同様に、仮SSLセッションIDと実際のSSLセッションID(以降「実SSLセッションID」)の対応関係を特定できるように用意したものである。図30に示すように、1エントリに仮SSLセッションID及び実SSLセッションIDが格納される。
応答として仮コネクションID及び仮SSLセッションIDを受け取ったクライアントアプリケーション12は、SSL通信路が確立したと判定し、これらのIDを用いてメッセージ101の送信を要求する。そのメッセージ101は、L3・L4ヘッダに仮コネクションIDが格納されたものである。代理応答・発行部111は、メッセージ101の送信要求をクライアントアプリケーション12から受け取ると、そのメッセージ101のL3・L4ヘッダに格納された送信元、及び宛先のIPアドレス・ポート番号を仮コネクションIDとして抽出する。次に抽出した仮コネクションIDをキーにしてコネクションIDマッピングテーブル125を検索することにより、その仮コネクションIDを格納したエントリを抽出し、そのエントリに実コネクションIDが格納されているか否か確認する。それにより、実コネクションIDが確認できなければ、実際にはSSL通信路(含むTCPコネクション)が確立されていないとして、メッセージ101を保存し、通信部13にSSL通信路の確立を要求する。メッセージ101の保存は、メッセージバッファテーブル123を用いて行う。このテーブル123の1エントリには、図28に示すように、仮コネクションID、及びメッセージ101本体、またはそのメッセージ101の保存場所を示すデータであるポインタが格納される。
SSL通信路の要求によって通信部13は、SSL通信路の確立を中継装置2に要求するためのメッセージであるSYNパケットを生成し出力する。このことから代理応答・発行部111は、フック部112に、そのSYNパケットのフックを指示する。一方、実コネクションIDが確認できれば、代理応答・発行部111は、メッセージ101を通信部13に渡し、そのメッセージ101の送信を要求する。
SYNパケットのフックの指示は、そのパケットのL3・L4ヘッダの宛先IPアドレス・ポート番号を指定することで行われる。フック部112は、代理応答・発行部111から指定された宛先IPアドレス・ポート番号をフック対象リスト(テーブル)122に登録する。それによりフック部112は、通信部13からメッセージを受け取ると、そのメッセージのL3・L4ヘッダの宛先IPアドレス・ポート番号を抽出し、抽出した宛先IPアドレス・ポート番号がフック対象リスト122に登録されているか否か確認する。その確認により、宛先IPアドレス・ポート番号がフック対象リスト122に登録されているメッセージをフックする。
図27は、フック対象リストの1エントリに格納されるデータを説明する図である。図27に示すように、フック対象リスト122の1エントリには、代理応答・発行部111から指定された宛先IPアドレス・ポート番号が、フック対象とするメッセージ(パケット)を識別するための情報として格納される。
通信部13からフック部112に渡されるメッセージのL3・L4ヘッダに送信元、及び宛先のIPアドレス・ポート番号として格納されているコネクションIDは、実コネクションIDである。このことからフック部112は、メッセージをフックすると、フックしたメッセージのコネクションIDを抽出し、抽出したコネクションIDを実コネクションIDとしてクライアント側アプリケーションセッション情報通知部11に通知する。その通知後、フックを解除し、フックしていたメッセージを送信する。
代理応答・発行部111は、メッセージのフックをフック部112に指示した後、このメッセージの送信を要求した通信部13から実コネクションID及び実SSLセッションIDを取得する。取得した実コネクションIDは、仮コネクションIDをキーにしてコネクションIDマッピングテーブル125から抽出したエントリに格納する。取得した実SSLセッションIDは、クライアントアプリケーション12から指定された仮SSLセッションIDをキーにSSLセッションIDマッピングテーブル125から抽出されるエントリに格納する。そのようにして、仮コネクションIDと実コネクションID、並びに仮SSLセッションIDと実SSLセッションIDの対応関係を確定させる。
クライアントアプリケーション12から代理応答・発行部111に渡されるメッセージは暗号化されていない。このことに着目し、本実施形態では、仮コネクションIDをキーにしてコネクションIDマッピングテーブル125から抽出したエントリに実コネクションIDが格納されていない場合、メッセージにセッションIDが存在するか否か確認するようにしている。それにより代理応答・発行部111は、セッションIDが存在する場合のみ、メッセージのフックを指示する。そのセッションIDは宛先IPアドレス・ポート番号と共に、フックを指示する前にクライアント側アプリケーションセッション情報通知部11に通知する。
このようなことから、クライアント側アプリケーションセッション情報通知部11には、セッションID、及び宛先IPアドレス・ポート番号が代理応答・発行部111から通知された後、フック部112から実コネクションIDが通知される。クライアント側アプリケーションセッション情報通知部11は、実コネクションIDの通知を契機に、経路制御装置4にセッション情報を通知する。このセッション情報の通知のために、セッション情報管理テーブル121を管理する。
図26は、セッション情報管理テーブルの1エントリに格納されるデータを説明する図である。図26に示すように、1エントリには、宛先IPアドレス・ポート番号、送信元IPアドレス・ポート番号、及びセッションIDが格納される。宛先IPアドレス・ポート番号、及び送信元IPアドレス・ポート番号は、実コネクションIDのものである。
フックしていたメッセージ(SYNパケット)をフック部112が送信させることにより、TCPコネクション及びSSL通信路が中継装置2との間で確立される。その確立は、通信路13の制御によって行われ、通信路13はSSL通信路の確立を代理応答・発行部111に通知する。その通知時に、実コネクションID、及び実SSLセッションIDは取得される。
このようにして、代理応答・発行部111及びフック部112は、経路制御装置4に通知するセッション情報の収集、及び収集したセッション情報を通知するうえで必要なメッセージの送信タイミングの調整を行う。それにより、クライアントアプリケーション12として、特別な機能を搭載していないものを使用できるようにしている。このことから代理応答・発行部111及びフック部112は、従来の端末装置に搭載させることにより、本実施形態による端末装置1を実現できるものとなっている。
図32は、第3の実施形態による端末装置1が実行するプログラムによって実現される処理を説明する図である。次に図32を参照して、端末装置1が実行するプログラム、及び各プログラムが実現させる処理について説明する。
第3の実施形態による端末装置1では、クライアントアプリケーション12の他に、クライアント側アプリケーションセッション情報通知部11を実現させるプログラム(以降「セッション情報通知プログラム」)、及びフック部112を実現させるプログラム(以降「フックプログラム」)が実行される。
通信部13は、OS(オペレーティング・システム)によって実現される。アプリケーション等のプログラムの実行は、OSの動作が前提となる。このことからOS、つまり通信部13は、端末装置1が実行するプログラムとして詳細な説明は省略する。セッション情報通知プログラム、代理応答プログラム及びフックプログラムは、例えば共にミドルウェアとして提供されている。
クライアントアプリケーション12は、リクエスト送信処理F121及び応答取得処理F12を実行させる。リクエスト送信処理F121は、リクエストであるメッセージ101を送信するための処理である。応答取得処理F12は、メッセージ101への応答として送信されるメッセージ(メッセージ202)に対応するための処理であり、その内容は基本的に第1の実施形態のもの(図16)と同じである。このため、その詳細な説明は省略する。
代理応答プログラムは、通信路確立要求応答処理F1111、代理要求処理F1112、代理応答処理F1113及びコネクション削除要求処理F1114を実現させる。通信路確立要求応答処理F1111は、クライアントアプリケーション12が行うSSL通信路確立要求に対応するための処理である。代理要求処理F1112は、アプリケーション12がSSL通信路確立要求の後に行うメッセージ101の送信要求に対応するための処理である。代理応答処理F1113は、メッセージ101の送信により応答として受信するメッセージ(メッセージ202)をクライアントアプリケーション12に渡すための処理である。確立したTCPコネクションは、送信すべきデータが無くなった側からの切断手続きによって開放される。その開放のために、FINパケット(コネクションの切断を要求するFINフラグが立ったメッセージ)が送信される。コネクション削除要求処理F1114は、そのFINパケットの受信に対応するための処理である。メッセージ101の送信によってサーバ3はメッセージ302を送信することから、端末装置1は中継装置2を介してこのFINパケットを受信するのが普通である。
セッション情報通知プログラムは、セッション情報保存処理F111及びセッション情報通知処理F112を実現させる。セッション情報保存処理F111は、代理応答・発行部111から通知されたセッション情報を保存するための処理である。セッション情報通知処理部F112は、セッション情報を経路制御装置4に通知するための処理である。
以降は、図32に示した各処理について、図33〜図39に示す各フローチャートを参照して詳細に説明する。
始めに、クライアントアプリケーション12によって実現されるリクエスト送信処理F121について、図33に示すフローチャートを参照して詳細に説明する。この送信処理F121も第1の実施形態と同様に、ユーザがサービス提供システムへのアクセス、つまりサービス提供システムへのメッセージ101の送信を指示することを契機に実行される。
先ず、ステップS3301では、クライアントアプリケーション12は、ユーザの指示によりメッセージ101を作成する。続くステップS3302では、ユーザが指定したURL(宛先URL)をキーに、セッションIDテーブル15(図10)を検索する。その次に移行するステップS3303では、クライアントアプリケーション12は、その検索結果から、キーとしたURL(IPアドレス・ポート番号)と対応付けたセッションIDが有るか否か判定する。検索によって、キーとしたURLを格納するエントリを抽出できた場合、判定はYESとなってステップS3304に移行し、クライアントアプリケーション12はセッションIDをメッセージ101に記載する。その後はステップS3305に移行する。一方、そのようなエントリを抽出できたなかった場合、判定はNOとなってそのステップS3305に移行する。
ステップS3305では、クライアントアプリケーション12は、メッセージ(リクエスト)101を送信するためのSSL通信路の情報が配布されているか否か判定する。上述したように、SSL通信路の確立要求によって代理応答・発行部111がクライアントアプリケーション12に返す情報は仮コネクションID、及び仮SSLセッションIDである。このことから、有効な仮コネクションID及び仮SSLセッションIDが存在する場合、判定はYESとなってステップS3306に移行し、クライアントアプリケーション12は作成したメッセージ101を仮SSLセッションIDと共に代理応答・発行部111に送出する。その後、このリクエスト送信処理を終了する。一方、有効な仮コネクションID及び仮SSLセッションIDが存在しない場合には、判定はNOとなってステップS3307に移行する。
ステップS3307では、クライアントアプリケーション12は、代理応答・発行部111にSSL通信路の確立を要求する。次のステップS3308では、クライアントアプリケーション12は、その確立要求によって代理応答・発行部111が返す応答、つまり仮コネクションID及び仮SSLセッションID等を取得するのを待つ。その応答取得後にステップS3306に移行する。
ステップS3306におけるメッセージ101の送出、及びステップS3307でのSSL通信路の確立要求は、代理応答・発行部111に対して行われる。しかし、それらメッセージ101の送出、及び確立要求は、クライアントアプリケーション12にとって、通信部13に対して行ったものとして扱われる。それにより、クライアントアプリケーション12には、代理応答・発行部111に応じた特別な機能は搭載されていない。
次に、代理応答プログラムによって実現される通信路確立要求応答処理F1111、代理要求処理F1112、代理応答処理F1113及びコネクション削除要求処理F1114について詳細に説明する。
図34は、通信路確立要求応答処理のフローチャートである。始めに図34を参照して、この要求応答処理F1111について詳細に説明する。この図34のフローチャートは、クライアントアプリケーション12からの1SSL通信路確立要求に対応するために実行する処理の流れを示したものである。
先ず、ステップS3401では、代理応答プログラムは、SSL通信路確立要求から宛先IPアドレス・ポート番号を取得する。次のステップS3402では、代理応答プログラムは、仮コネクションIDを生成し、コネクションIDマッピングテーブル124に1エントリを追加し、そのエントリに生成した仮コネクションIDを格納する。その仮コネクションIDは、端末装置1のIPアドレス、及び空いているポート番号のなかから選択したポート番号を送信元IPアドレス・ポート番号、取得した宛先IPアドレス・ポート番号とするものである。仮コネクションIDの格納を行った後はステップS3403に移行する。
ステップS3403では、仮SSLセッションIDを生成し、生成した仮SSLセッションIDを格納したエントリをSSLセッションIDマッピングテーブル125に追加する。続くステップS3404では、生成した仮コネクションID、及び仮SSLセッションIDを応答の形でクライアントアプリケーション12に返す。その後、この通信路確立要求応答処理を終了する。
図35は、代理要求処理のフローチャートである。次に図35を参照して、この要求処理F1112について詳細に説明する。この図35のフローチャートは、クライアントアプリケーション12からの1メッセージ101の送信要求に対応するために実行する処理の流れを示したものである。
先ず、ステップS3501では、代理応答プログラムは、クライアントアプリケーション12からメッセージ送信要求の形で受け取ったメッセージ101のL3・L4ヘッダから仮コネクションIDを取得する。次のステップS3502では、取得した仮コネクションIDをキーにコネクションIDマッピングテーブル124を検索することにより、実コネクションIDが取得できたか否か判定する。その検索によって抽出されたエントリに実コネクションIDが格納されていた場合、実コネクションIDは取得できたと判定され、ステップS3503に移行する。抽出されたエントリに実コネクションIDが格納されていなかった場合には、実コネクションIDは取得できなかったと判定され、ステップS3505に移行する。
ステップS3503では、代理応答プログラムは、クライアントアプリケーション12からの仮SSLセッションIDをキーにしてSSLセッションIDマッピングテーブル125を検索することにより、実SSLセッションIDを取得する。次のステップs3504では、代理応答プログラムは、メッセージ送信要求中のメッセージ101を取得し、そのメッセージ101を送信対象に設定する。その設定後、この代理要求処理F1112を終了する。
上記ステップS3502で実コネクションIDが取得できなかったと判定した場合に移行するステップS3505では、代理応答プログラムは、メッセージ101からセッションIDを取得できたか否か判定する。そのメッセージ101のHTTPヘッダにセッションIDが格納されていた場合、セッションIDは取得できたと判定され、ステップS3506に移行する。セッションIDがメッセージ101に格納されていなかった場合、セッションIDは取得できなかったと判定され、ステップS3510に移行する。
ステップS3506では、代理応答プログラムは、メッセージ101から抽出した仮コネクションID、及びそのメッセージ101自体、或いはそのポインタを格納したエントリをメッセージバッファテーブル123に追加する。次のステップS3507では、代理応答プログラムは、仮コネクションIDの宛先IPアドレス・ポート番号を取得する。その後に移行するステップS3508では、代理応答プログラムは、取得した宛先IPアドレス・ポート番号をセッションIDと共にクライアント側セッション情報通知部11に通知し、その応答を取得する。ステップS3509には応答を取得した後に移行する。
ステップS3509では、代理応答プログラムは、ステップS3507で取得した宛先IPアドレス・ポート番号をフック部112に通知することによりフック設定を行い、その応答を取得する。続くステップS3510では、代理応答プログラムは、宛先IPアドレス・ポート番号を通信部13に渡し、SSL通信路確立要求を行う。その次に移行するステップS3511では、代理応答プログラムは、通信部13から実コネクションID及び実SSLセッションIDを含む応答を取得し、それら実コネクションID及び実SSLセッションIDを保存する。
実コネクションIDの保存は、コネクションIDマッピングテーブル124のなかでクライアントアプリケーション12から渡された仮コネクションIDを格納したエントリにその実コネクションIDを書き込むことにより行われる。実SSLセッションIDの保存も同様に、SSLセッションIDマッピングテーブル125のなかでクライアントアプリケーション12から渡された仮SSLセッションIDを格納したエントリにその実SSLセッションIDを書き込むことで行われる。
そのようにして実コネクションID及び実SSLセッションIDを保存した後はステップS3512に移行する。そのステップS3512では、代理応答プログラムは、ステップS3506で保存したメッセージ101を取得する。このメッセージ101の取得は、取得した実コネクションIDをキーにしたコネクションIDマッピングテーブル124の検索により仮コネクションIDを抽出し、その仮コネクションIDをキーにしたメッセージバッファテーブル123の検索によりメッセージ101自体、或いはポインタを抽出することで行われる。このようにして取得されるメッセージ101を送信対象に設定した後、この代理応答処理F1112を終了する。
このようにして本実施形態では、SSL通信路が維持されていない状況下であることを条件に、実コネクションIDの生成を契機にする形で、セッション情報を経路制御装置4に通知するようにしている。これは、SSL通信路が維持されている時間はセッションが維持されている時間より短いと想定しているからである。つまり、確立したSSL通信路が開放されている場合でも、サーバ3でセッションが維持されている可能性があるためである。
図36は、代理応答処理のフローチャートである。次に図36を参照して、この応答処理F1113について詳細に説明する。この応答処理F1113は、代理要求処理F1112の終了後に起動される処理であり、図36のフローチャートは、代理要求処理F1112が送信対象に設定した1メッセージ101の送信に対応するために実行する処理の流れを示したものである。
先ず、ステップS3601では、代理応答プログラムは、通信部13にメッセージ送信要求を発行する。次のステップS3602では、代理応答プログラムは、通信部13から応答を取得する。ここでの応答は、メッセージ202を含むものである。そのような応答を取得した後、ステップS3603に移行する。
ステップS3603では、代理応答プログラムは、取得したメッセージ202のL3・L4ヘッダに格納された形の実コネクションIDをキーにしたコネクションIDマッピングテーブル124の検索により、仮コネクションIDを取得する。続くステップS3604では、代理応答プログラムは、実SSLセッションIDをキーにしたSSLセッションIDマッピングテーブル125の検索により、仮SSLセッションIDを取得する。その次のステップS3605では、代理応答プログラムは、クライアントアプリケーション12に応答を返す。その後、この代理応答処理F1113を終了する。
図37は、コネクション削除処理のフローチャートである。最後に図37を参照して、この削除処理F1114について詳細に説明する。
上述したように、確立したTCPコネクションは、送信すべきデータが無くなった側からのFINパケット(コネクションの切断を要求するFINフラグが立ったメッセージ)の送信によって開始される。FINパケットを受け取った側は送信すべきデータがなくなった時点でFINパケットを送信し、そのパケットの送受信が完了した後にコネクションは開放される。端末装置1はデータを要求する側であることから、そのFINパケットはコネクションの切断契機となる。コネクション削除要求処理F1114は、そのFINパケットの受信に対応するための処理である。図37のフローチャートは、1FINパケットの受信に対応するために実行する処理の流れを示したものである。
先ず、ステップS3701では、代理応答プログラムは、TCPコネクションの削除要求を受信する。この削除要求の受信は、通信部13からのFINパケットを取得することに相当する。
削除要求の受信後はステップS3702に移行し、代理応答プログラムは、FINパケットのL3・L4ヘッダに格納されている形の実コネクションIDをキーにしたコネクションIDマッピングテーブル124の検索によりエントリを抽出し、そのエントリをテーブル124から削除する。次のステップS3703では、代理応答プログラムは、実コネクションを削除した旨を通知するための削除完了応答を通信部13に返す。その後、このコネクション削除処理F1114を終了する。
このようにして確立したTCPコネクションは、端末装置1とサーバ3間のデータの送受信が終了する度に開放される。このことから、SSL通信路が維持されているか否かに係わらず、TCPコネクションの確立はメッセージ101の送信時に行われることとなる。
TCPコネクションの開放は、予め定めた手順に沿って行われる。このことからフック部112は、FINパケットを代理応答・発行部111に出力するタイミングを判断するために、不図示のコネクション管理テーブルを用意している。その管理テーブルには、図31に示すように、各エントリに実コネクションID、及びコネクションの状態(を示すデータ)が格納されている。それにより、フック部112は、実コネクション毎に状態、及び状態の推移を把握し、TCPコネクションを開放させるサーバ3からの最後のメッセージを代理応答・発行部111に出力するようにしている。
最後に、セッション情報通知プログラムによって実現されるセッション情報保存処理F111及びセッション情報通知処理F112について詳細に説明する。
図38は、セッション情報保存処理のフローチャートである。この保存処理F111は、代理応答・発行部111から通知されたセッション情報を保存するための処理である。その通知は、代理応答プログラムが図35のステップS3508の処理を実行することで実現される。このとき通知されるセッション情報は、宛先IPアドレス・ポート番号とセッションIDである。図38には、1セッション情報を保存するために実行する処理の流れを示している。始めに図38を参照して、この保存処理F111について詳細に説明する。
先ず、ステップS3801では、セッション情報通知プログラムは、代理応答プログラムから通知されたセッション情報、つまり宛先IPアドレス・ポート番号、及びセッションIDを取得する。次のステップS3802では、セッション情報通知プログラムは、通知されたセッション情報をセッション情報管理テーブル121に保存する。その保存は、例えばセッションIDをキーにセッション情報管理テーブル121を検索し、その検索によってエントリを抽出すれば、そのエントリにセッション情報を格納することで行う。エントリを抽出できなければ、1エントリを追加し、追加したエントリにセッション情報を格納することで行う。そのようにしてセッション情報を保存した後、このセッション情報保存処理F111を終了する。
図39は、セッション情報通知処理のフローチャートである。この通知処理F112は、セッション情報を経路制御装置4に通知するための処理である。図39のフローチャートは、1セッション情報を経路制御装置4に通知するために実行する処理の流れを示したものである。最後に図39を参照して、この通知処理F112について詳細に説明する。
フック部112は、代理応答プログラムが図35のステップS3509の処理を実行することにより指定したSYNパケットをフックする。SYNパケットをフックした場合、フック部112は、そのSYNパケットを送信する前に、そのSYNパケットのL3・L4ヘッダに格納された形の実コネクションIDをクライアント側アプリケーションセッション情報通知部11に通知する。セッション情報通知処理F112は、その実コネクションIDの通知を契機に実行される。
先ず、ステップS3901では、セッション情報通知プログラムは、フック部111から通知された実コネクションIDを取得する。続くステップS3902では、セッション情報通知プログラムは、実コネクションIDから宛先IPアドレス・ポート番号を取得する。その次のステップS3903では、セッション情報通知プログラムは、取得した宛先IPアドレス・ポート番号をキーにセッション情報管理テーブル121を検索し、その検索によって抽出したエントリからセッションIDを取得する。そのエントリには、実コネクションIDから取得した送信元IPアドレス・ポート番号を保存する。その後、ステップS3904に移行する。
ステップS3904では、セッション情報通知プログラムは、取得した実コネクションID、及びセッションIDをセッション情報として経路制御装置4に通知する。その通知は、第1の実施形態と同様に、メッセージ102(図4)を作成し送信することで行う。そのメッセージ102を受信した中継制御装置4は、中継設定情報を中継装置2に設定し、その設定完了を通知するメッセージである設定完了通知を端末装置1に送信する。このことから、その後に移行するステップS3905では、セッション情報通知プログラムは、設定完了通知を取得する。ステップS3906には、その設定完了通知を取得した後に移行する。
ステップS3906では、セッション情報通知プログラムは、経路制御装置4に通知したセッション情報を格納したエントリをセッション情報管理テーブル121から消去する。続くステップS3907では、セッション情報通知プログラムは、フック部112に、実コネクションIDの通知への応答を返す。その後、このセッション情報通知処理F112を終了する。フック部112は、この応答を取得した後、フックしているSYNパケットを送信させる。
なお、第3の実施形態では、クライアントアプリケーション12の他にプログラム(例えばミドルウェア)を用意し、代理応答・発行部111及びフック部112を実現させているが、それらを実現させる機能はクライアントアプリケーション12に搭載させても良い。その場合、仮コネクションID或いは/及び仮SSLセッションIDを生成することなく、セッション情報を経路制御装置4に通知できるようにしても良い。本実施形態(第1〜第3の実施形態)では、端末装置1からセッション情報を通知するタイミングはメッセージ101の送信時としているが、初期メッセージ101aのレスポンスの受信時としても良い。これら以外の変形を行っても良い。