図1は、本発明の実施例における通信システムの構成例を示す説明図である。
本実施例の通信システムは、複数のユーザ端末1、複数のルータ2、中継装置3、複数のサービス経路4、インターネット5、及び複数のWebサーバ6から構成される。
中継装置3は、パケットの中継処理を実行する装置であり、ルータ2−1と、サービス経路4−1及びサービス経路4−2と接続される。中継装置3は、サービス経路4−1及びサービス経路4−2のそれぞれに接続するネットワークインタフェースを有し、また、後述するようにルールテーブル(T2)(図2参照)を保持する。ルールテーブル(T2)(図2参照)には、HTTP(HyperText Transfer Protocol)上の通信に基づいてアプリケーション及びデータを識別し、サービス経路4−1からサービス経路4−2に切り替えるための情報が格納される。
サービス経路4は、通信事業者によって提供される通信経路である。なお、サービス経路4は、同一の通信事業者によって提供されてもよいし、異なる通信事業者によって提供されてもよい。本実施例では、通常の通信はサービス経路4−1を介して行われ、後述するルールに一致する通信はサービス経路4−2を介して行われる。
なお、サービス経路4を切り替えるためのルールは、通信事業者が予め設定しておいてもよいし、ルールテーブルを保持するデータサーバに問い合わせてもよい。また、ユーザが、ユーザ端末1が使用するサービス経路4を選択するためルールを設定してもよい。
ユーザ端末1は、ルータ2−1を介して中継装置3と接続される。ユーザ端末1は、プロセッサ(図示省略)、メモリ(図示省略)、及びインタフェース(図示省略)等のハードウェアを備える。ユーザ端末1上では、TCPを用いて通信を行うアプリケーション(図示省略)が稼働する。本実施例では、ユーザ端末1−1からユーザ端末1−nのn個存在する。また、ユーザ端末1−nにはIPアドレス「10.0.0.n」が予め設定される。
なお、本発明は、ユーザ端末1と中継装置3との間の接続方式には限定されず、ユーザ端末1と中継装置3との間は有線又は無線のいずれで接続されてもよい。また、ユーザ端末1と中継装置3との間の少なくとも一部が無線で接続されてもよい。
ルータ2−2は、複数のサービス経路4とインターネット5とを接続し、ユーザ端末1宛てのパケットをサービス経路4−1を介して転送するように予め設定される。
Webサーバ6は、ユーザ端末1の要求に応じて様々なコンテンツを配信する計算機であり、インターネット5及びルータ2−2を介して中継装置3に接続される。Webサーバ6は、プロセッサ(図示省略)、メモリ(図示省略)、記憶装置(図示省略)、及びインタフェース(図示省略)等のハードウェアを備える。なお、Webサーバ6は、ストレージシステムと接続されてもよく、この場合、Webサーバ6は記憶装置(図示省略)を備えていなくてもよい。本実施例では、Webサーバ6−1からWebサーバ6−mのm個の存在し、それぞれが個別のドメインを持つ。例えば、Webサーバ6−mにはIPアドレスとして「10.0.1.m」、ドメインとして「serverm.com」が予め設定される。なお、Webサーバ6によって配信されるコンテンツには、テキスト情報、画像、及び動画などが含まれる。
ここで、本発明の概要について説明する。
本実施例の通信システムにおいて、ユーザ端末1がHTTPを用いてWebサーバ6の保持するコンテンツを要求する場合、ユーザ端末1はWebサーバ6との間で3ウェイハンドシェイクと呼ばれるTCPコネクションを確立するための通信を行う。
中継装置3は、ハンドシェイクの通信を監視し、後述するコネクション管理テーブル(T1)(図2参照)にコネクション情報を登録する。TCPコネクションの確立中、中継装置3は、ユーザ端末1から受信したパケットをサービス経路4−1経由でWebサーバ6に転送し、また、Webサーバ6から受信したパケットをユーザ端末1に転送する。このとき、中継装置3は、パケットの監視のみを行い、当該パケットの操作等の特別な処理は実行しない。
ユーザ端末1とWebサーバ6との間でTCPコネクションが確立されると、ユーザ端末1は、Webサーバ6にHTTPリクエストを含むパケットを送信する。以下の説明において、HTTPリクエストを含むパケットをHTTPリクエストパケットとも記載する。なお、ユーザ端末1とWebサーバ6との間の通信では、TCPコネクションの確立時に用いられるACK番号及びシーケンス番号が引き続き用いられる。
中継装置3は、HTTPリクエストパケットを受信すると、ルールテーブル(T2)(図2参照)に格納される条件を参照して、サービス経路4−1及びサービス経路4−2のどちらを介した通信を行うかを判定する。
HTTPリクエストが条件に該当しない場合、中継装置3は、サービス経路4−1を介した通信を行う。中継装置3は、コネクション管理テーブル(T1)からコネクション情報を削除し、サービス経路4−1を介してWebサーバ6にHTTPリクエストパケットを転送する。コネクション管理テーブル(T1)には、HTTPリクエストパケットの送信後に受信するパケットのコネクション情報が存在しないため、中継装置3はWebサーバ6から受信したパケットをユーザ端末1に転送し、ユーザ端末1から受信したパケットをサービス経路4−1を介してWebサーバ6に転送する。
一方、HTTPリクエストが条件に該当する場合、中継装置3は、サービス経路4−2を介した通信の対象として、代理応答テーブル(T3)(図2参照)に代理応答情報を登録する。その後、中継装置3は、HTTPリクエストパケットのヘッダ情報に基づいて、Webサーバ6宛てのRSTパケットを生成し、サービス経路4−1を介してWebサーバ6に当該RSTパケットを送信する。これによって、中継装置3とWebサーバ6との間のTCPコネクションが切断される。ただし、中継装置3は、ユーザ端末1に対してRSTパケットは送信しない。これによって、ユーザ端末1と中継装置3との間のTCPコネクションを維持させる。
そして、中継装置3は、中継装置3とWebサーバ6との間を接続するサービス経路4−2上に新たなTCPコネクションを確立する。中継装置3は、代理応答情報のWebサーバ側情報(T34)(図5参照)に基づいて、ユーザ端末1から受信したHTTPリクエストパケットの送信元IPアドレス、送信元ポート番号、シーケンス番号、及びACK番号を書き換えて、サービス経路4−2を介して当該HTTPリクエストパケットをWebサーバ6に転送する。また、中継装置3は、Webサーバ6からACKパケットを受信すると、代理応答情報のユーザ端末側情報(T33)(図5参照)に基づいて、当該ACKパケットの宛先IPアドレス、宛先ポート番号、シーケンス番号、及びACK番号を書き換えて、当該ACKパケットをユーザ端末1に転送する。
その後、Webサーバ6からのコンテンツの配信が完了し、ユーザ端末1によってTCPコネクションが切断されるまでの間、中継装置3は、サービス経路4−2を介したユーザ端末1とWebサーバ6との間の通信を制御する。
具体的には、中継装置3は、Webサーバ6からパケットを受信した場合、代理応答情報のユーザ端末側情報(T33)に基づいて、受信したパケットの宛先IPアドレス、宛先ポート番号、シーケンス番号、及びACK番号を書き換えて、ユーザ端末1に当該パケットを転送する。また、中継装置3は、ユーザ端末1からパケットを受信した場合、代理応答情報のWebサーバ側情報(T34)に基づいて受信したパケットの送信元IPアドレス、送信元ポート番号、シーケンス番号、及びACK番号を書き換えて、サービス経路4−2を介してWebサーバ6に当該パケットを転送する。
ユーザ端末1によってTCPコネクションが切断された後、中継装置3は、コネクション管理テーブル(T1)からコネクション情報を削除し、また、代理応答テーブル(T3)から代理応答情報を削除する。
本実施例では、Webサーバ6と中継装置3との間の通信、中継装置3とユーザ端末1との間の通信において同期をとり、中継装置3は、ユーザ端末1からACKパケットを受信して後にWebサーバ6にACKパケットを送信する。ただし、本発明はこれに限定されず、中継装置3は、同期をとらず、Webサーバ6からコンテンツを受信し次第、Webサーバ6にACKパケットを送信してもよい。これによって、Webサーバ6へのACKパケットが早く到着するため、コンテンツの転送時間が短くなるという効果がある。この場合、中継装置3は、Webサーバ6から受信したパケットをユーザ端末1に送信するまでの間、当該パケットをパケット格納部33に格納してもよい。
また、本実施例では、中継装置3は、TCPコネクションの切断時におけるシーケンスでも同様に同期をとるが、本発明はこれに限定されない。中継装置3は、同期をとらず、Webサーバ6からFINパケットを受信し次第、Webサーバ6にACKパケット及びFINパケットを送信し、ユーザ端末1からFINパケットを受信し次第、ユーザ端末1にACKパケットを送信してもよい。これによって、Webサーバ6に対してはACKパケット及びFINパケットが早く到着し、また、ユーザ端末1に対してACKパケットが早く到着するため、TCPコネクションの確立時間が短くなり、TCPコネクションを維持するための資源を早く解放できるという効果がある。
図2は、本発明の実施例における中継装置3のハードウェア構成及びソフトウェア構成を説明するブロック図である。
中継装置3は、プロセッサ31、テーブル格納部32、パケット格納部33、インタフェース部34、及び命令格納部35を有する。
プロセッサ31は、命令格納部35に格納されているプログラムを読み出し、当該プログラムを実行する。これによって、中継装置3が備える機能を実現することができる。
テーブル格納部32は、処理に用いる各種情報を格納する。テーブル格納部32は、例えば、DRAM等のメモリを用いて実現できる。本実施例のテーブル格納部32は、コネクション管理テーブル(T1)、ルールテーブル(T2)、及び代理応答テーブル(T3)の三つのテーブルを格納する。
コネクション管理テーブル(T1)は、ユーザ端末1とWebサーバ6との間の接続状態に関する情報を格納する。コネクション管理テーブル(T1)の詳細は図3を用いて後述する。ルールテーブル(T2)は、サービス経路4−1からサービス経路4−2に切り替えるための情報を格納する。ルールテーブル(T2)の詳細は図4を用いて後述する。代理応答テーブル(T3)は、サービス経路4−2を介して通信が行われる場合における、パケットの転送に必要な情報を格納する。代理応答テーブル(T3)の詳細は図5を用いて後述する。
本実施例では、ルールテーブル(T2)は、テーブル格納部32に予め格納されているものとするが、本発明はこれに限定されない。例えば、外部のデータベースがルールテーブル(T2)を保持し、中継装置3が外部のデータベースから取得してもよい。
パケット格納部33は、HTTPリクエストが複数のパケットに分割される場合に、当該分割されたHTTPリクエストを含むHTTPリクエストパケットのコピーを格納する。パケット格納部33は、例えば、DRAM等のメモリを用いて実現できる。
インタフェース部34は、外部の装置又はネットワークと接続するインタフェースを複数有する。本実施例のインタフェース部34は、ユーザ側インタフェース341、サービス1側インタフェース342、及びサービス2側インタフェース343を有する。
ユーザ側インタフェース341は、ユーザ端末1が接続されるルータ2−1と接続するためのインタフェースである。サービス1側インタフェース342は、サービス経路4−1を介してWebサーバ6と接続するためのインタフェースである。本実施例では、サービス1側インタフェース342にはIPアドレス「10.0.2.1」が設定される。また、サービス2側インタフェース343は、サービス経路4−2を介してWebサーバ6と接続するためのインタフェースである。本実施例では、サービス2側インタフェース343にはIPアドレス「10.0.2.2」が設定される。
命令格納部35は、プロセッサ31によって実行されるプログラムを格納する。命令格納部35は、DRAM等のメモリを用いて実現できる。本実施例の命令格納部35は、TCP管理部351、ルール判定部354、HTTPリクエスト送信部355、及びデータ中継部356を実現するプログラムを格納する。なお、命令格納部35には、パケットの送受信を制御する制御部も格納されるが公知のものであるため省略している。
TCP管理部351は、TCPコネクションの監視、及びTCPコネクションを介したHTTP上のアプリケーション及びデータの種類等、TCP上のHTTPを用いた通信を管理する。TCP管理部351は、複数のプログラムモジュールから構成される。具体的には、TCP管理部351は、監視部352及び応答部353を含む。
監視部352は、ユーザ側インタフェース341から受信したパケットに対する処理を実行する。監視部352が実行する処理の詳細は、図8、図9を用いて後述する。応答部353は、サービス1側インタフェース342から受信したパケットに対する処理を実行する。応答部353が実行する処理の詳細は、図13を用いて後述する。
ルール判定部354は、サービス経路4−1からサービス経路4−2に切り替えるか否かを判定する。ルール判定部354が実行する処理の詳細は、図10を用いて後述する。HTTPリクエスト送信部355は、ルールに一致するHTTPリクエストを受信した場合、サービス経路4−2を介した通信を行うために、新たなTCPコネクションを確立する。HTTPリクエスト送信部355が実行する処理の詳細は、図11を用いて後述する。データ中継部356は、サービス経路4−2を介した通信時に、ユーザ端末1とWebサーバ6との間で送受信されるパケットのIPアドレス等を書き換えて、当該パケットを転送する。データ中継部356が実行する処理の詳細は、図12を用いて後述する。
図2に示す例では、テーブル格納部32及び命令格納部35を別々の構成として記載したが本発明はこれに限定されない。例えば、一つのメモリの領域を二つに分割し、一つの領域をテーブル格納部32、他方の領域を命令格納部35として実現することもできる。また、テーブル格納部32、パケット格納部33、及び命令格納部35は、メモリ以外に、HDD又はSSD等の他の記憶装置を用いても実現できる。
図3は、本発明の実施例のコネクション管理テーブル(T1)の構成例を示す説明図である。
コネクション管理テーブル(T1)は、ユーザ端末1とWebサーバ6との間に確立されるTCPコネクションの状態を示すコネクション情報を格納する。コネクション情報は、ユーザ端末1からWebサーバ6に対して送信されるSYNパケットを受信した場合に生成される。コネクション情報は、識別子(T11)、サーバIP(T12)、サーバPort(T13)、ユーザ端末IP(T14)、ユーザ端末Port(T15)、MSS(T16)、コネクション状態(T17)、及びパケットポインタ(T18)を含む。
識別子(T11)は、コネクション管理テーブル(T1)に格納されるコネクション情報を識別するための識別番号である。サーバIP(T12)は、Webサーバ6に割り当てられるIPアドレスである。サーバPort(T13)は、Webサーバ6のポート番号である。ユーザ端末IP(T14)は、ユーザ端末1に割り当てられるIPアドレスである。ユーザ端末Port(T15)は、ユーザ端末1のポート番号である。
サーバIP(T12)、サーバPort(T13)、ユーザ端末IP(T14)、及びユーザ端末Port(T15)は、HTTPを用いて通信を行うアプリケーションによって使用される情報である。
MSS(T16)は、TCPコネクションのMSS(Maximum Segment Size)である。中継装置3は、Webサーバ6からユーザ端末1へ送信されるSYN+ACKパケットを受信した場合に、当該パケットに含まれるMSS情報を取得し、取得されたMSS情報をMSS(T16)に格納する。
コネクション状態(T17)は、中継装置3とWebサーバ6との間に確立されるTCPコネクションの状態を示す。本実施例では、コネクション状態(T17)には、「SYN1」、「SYN2」、「確立」、「HTTPリクエスト一部受信」、及び「代理応答中」の五つの情報のいずれかが格納される。
「SYN1」はTCPコネクション確立時の初期状態を表し、「SYN2」はSYN+ACKパケットを受信したことを表す。「確立」はTCPコネクションが確立されたことを表す。「HTTPリクエスト一部受信」はHTTPリクエストが複数のパケットに分割されていることを表す。「代理応答中」はサービス経路4−2を介してパケットが転送されていることを表す。
パケットポインタ(T18)は、パケット格納部33に格納されるHTTPリクエストパケットの複製データの格納場所を示すポインタである。パケットポインタ(T18)は、コネクション状態(T17)が「HTTPリクエスト一部受信」である場合にポインタが格納される。
図4は、本発明の実施例のルールテーブル(T2)の構成例を示す説明図である。
ルールテーブル(T2)は、使用するサービス経路4を判定するためのルールを格納する。ルールは、識別子(T21)、サーバIP(T22)、サーバPort(T23)、ユーザ端末IP(T24)、ユーザ端末Port(T25)、及びHTTPリクエスト条件(T26)を含む。
識別子(T21)は、ルールテーブル(T2)に登録されるルールを識別するための識別番号である。サーバIP(T22)は、Webサーバ6に割り当てられるIPアドレスであり、サーバIP(T12)と同一のものである。サーバPort(T23)は、Webサーバ6のポート番号であり、サーバPort(T13)と同一のものである。ユーザ端末IP(T24)は、ユーザ端末1に割り当てられるIPアドレスであり、ユーザ端末IP(T14)と同一のものである。ユーザPort(T25)は、ユーザ端末1のポート番号であり、ユーザ端末Port(T15)と同一のものである。
HTTPリクエスト条件(T26)は、レイヤ7に相当するHTTPに関する条件を格納する。HTTPリクエスト条件(T26)には、例えば、URLに対する条件、Cookieの内容又はその他のフィールドに対する条件を設定してもよい。URLに対する条件は、ホスト名、並びにディレクトリ名及びファイル名を条件として設定してもよいし、さらに、ファイルの拡張子に対する条件を設定することによってコンテンツの種類を特定することも可能である。
HTTPリクエスト条件(T26)に格納される条件の記述構文は、PCRE(Perl Compatible Regular Expressions)でもよいし、ほかの記述構文でもよい。図4の「*」はワイルドカードを表し、任意の文字又は文字列に一致する記号である。
なお、HTTP以外の通信プロトコルに適用する場合、OSI参照モデルにおけるアプリケーション層の情報を条件としては設定すればよい。
図5は、本発明の実施例の代理応答テーブル(T3)の構成例を示す説明図である。
代理応答テーブル(T3)は、サービス経路4−2を介した通信時に、Webサーバ6又はユーザ端末1から受信したパケットを転送するために必要な代理応答情報を格納する。代理応答情報は、識別子(T31)、コネクションID(T32)、ユーザ端末側情報(T33)、及びWebサーバ側情報(T34)を含む。
識別子(T31)は、代理応答テーブル(T3)に登録される代理応答情報を識別するための識別番号である。コネクションID(T32)は、コネクション情報の識別番号であり、識別子(T11)に対応する。コネクションID(T32)は、コネクション情報に対応する代理応答情報を検索するための検索キーとして用いられる。
ユーザ端末側情報(T33)は、Webサーバ6から受信したパケットをユーザ端末1に転送する場合に用いられる情報である。ユーザ端末側情報(T33)は、ユーザ端末IP(T331)、ユーザ端末Port(T332)、シーケンス番号(T333)、及びACK番号(T334)を含む。
ユーザ端末IP(T331)は、ユーザ端末1に割り当てられるIPアドレスであり、ユーザ端末IP(T14)と同一のものである。ユーザ端末Port(T332)は、ユーザ端末1のポート番号であり、ユーザ端末Port(T15)と同一のものである。シーケンス番号(T333)及びACK番号(T334)は、中継装置3からユーザ端末1へのパケットの送信時に使用される番号である。
Webサーバ側情報(T34)は、ユーザ端末1から受信したパケットをWebサーバ6に転送する場合に用いられる情報である。Webサーバ側情報(T34)は、代理IP(T341)、代理Port(T342)、シーケンス番号(T343)、及びACK番号(T344)を含む。
代理IP(T341)は、中継装置3のIPアドレスである。代理Port(T342)は、中継装置3のポート番号である。シーケンス番号(T343)及びACK番号(T344)は、中継装置3からWebサーバ6へのパケットの送信時に使用される番号である。
図6は、本発明の実施例におけるACK受信通知又はFIN受信通知の通知内容の一例を示す説明図である。
通知内容7は、Type71、コネクションID72、及びパケット73を含む。Type71は、ACK又はFINのどちらの受信通知であるかを示す。コネクションID72は、コネクションの識別子である。パケット73は、ACKパケット又はFINパケットを格納する。
図7A、図7B、及び図7Cは、本発明の実施例におけるHTTPメッセージの一例を示す説明図である。
図7Aは、GETメソッドを用いたHTTPリクエスト(M1)の一例を示し、図7Bは、POSTメソッドを用いたHTTPリクエスト(M2)の一例を示し、図7Cは、HTTPレスポンス(M3)の一例を示す。
HTTPメッセージは、ユーザ端末1が要求するコンテンツへのURL(M11)、(M21)を含むHTTPメソッド、複数のヘッダフィールド、HTTPヘッダの終端を表す空行(M12)、(M23)、(M32)、及び空行に続くHTTPメッセージボディから構成される。
ヘッダフィールドの一つであるContent−Length(M22)、(M31)はHTTPメッセージボディの長さを表すフィールドである。
次に、中継装置3が実行する処理についてフローチャートを用いて説明する。
図8は、本発明の実施例の監視部352が実行する監視処理S100の詳細を説明するフローチャートである。
TCP管理部351は、ユーザ側インタフェース341を介してパケットを受信した場合、監視部352を呼び出し、処理の実行を指示する。
監視部352は、受信したパケットがSYNパケットであるか否かを判定する(S101)。
受信したパケットがSYNパケットでないと判定された場合、監視部352は、コネクション管理テーブル(T1)に当該パケットに関連するコネクション情報が存在するか否かを判定する(S102)。具体的には、以下のような処理が実行される。監視部352は、受信したパケットから送信元IPアドレス、送信元ポート番号、宛先IPアドレス、及び宛先ポート番号を取得する。監視部352は、サーバIP(T12)、サーバPort(T13)、ユーザ端末IP(T14)、及びユーザ端末Port(T15)が、取得された送信元IPアドレス、送信元ポート番号、宛先IPアドレス、及び宛先ポート番号と一致するエントリを検索する。
コネクション管理テーブル(T1)に受信したパケットに関連するコネクション情報が存在しないと判定された場合、監視部352は、S110に進む。コネクション管理テーブル(T1)に受信したパケットに関連するコネクション情報が存在すると判定された場合、監視部352は、当該コネクション情報を参照し、コネクション状態(T17)が「代理応答中」であるか否かを判定する(S103)。
コネクション状態(T17)が「代理応答中」であると判定された場合、監視部352は、ユーザ側代理応答処理S200を実行し(S104)、処理を終了する。ユーザ側代理応答処理S200の詳細は、図9を用いて後述する。
コネクション状態(T17)が「代理応答中」でないと判定された場合、監視部352は、受信したパケットがACKパケット、かつ、コネクション状態(T17)が「SYN2」であるか否かを判定する(S105)。S105の条件を満たす場合、受信したパケットは、HTTPのSYNパケット及びSYN+ACKパケットの受信後に受信するACKパケットに対応し、S105の条件を満たさない場合、受信したパケットは、HTTPリクエストパケットに対応する。
S105の判定条件を満たさないと判定された場合、監視部352は、ルール判定処理S300を実行し(S107)、処理を終了する。ルール判定処理S300の詳細は図10を用いて後述する。
S105の判定条件を満たすと判定された場合、監視部352は、コネクション状態(T17)を「確立」に更新し(S106)、その後、S110に進む。
S101において、受信したパケットがSYNパケットである判定された場合、監視部352は、当該SYNパケットがHTTP上で送信されるパケットであるか否かを判定する(S108)。具体的には、監視部352は、受信したパケットに含まれる宛先ポート番号を取得し、当該宛先ポート番号がHTTPに用いられるポート番号であるか否かを判定する。HTTPに用いられるポート番号としては、80、8080、8000等が考えられる。
受信したSYNパケットがHTTP上で送信されるパケットでないと判定された場合、監視部352は、S110に進む。受信したSYNパケットがHTTP上で送信されるパケットであると判定された場合、監視部352は、当該SYNパケットに含まれる情報を用いて、コネクション管理テーブル(T1)にコネクション情報を登録する(S109)。具体的には、以下のような処理が実行される。
監視部352は、コネクション管理テーブル(T1)に行を追加し、当該行の識別子(T11)に所定の識別番号を設定する。ここでは、識別子(T11)には、上の行の識別子(T11)に「1」加算した識別番号が設定される。監視部352は、受信したSYNパケットから送信元IPアドレス、送信元ポート番号、宛先IPアドレス、及び宛先ポート番号を取得する。
監視部352は、サーバIP(T12)に宛先IPアドレス、サーバPort(T13)に宛先ポート番号、ユーザ端末IP(T14)に送信元IPアドレス、さらに、ユーザ端末Port(T15)に送信元ポート番号を設定する。また、監視部352は、コネクション状態(T17)に「SYN1」を設定する。以上がS109の処理の説明である。
S102の判定結果がNO、S106の処理が実行された後、S108の判定結果がNO、又はS109の処理が実行された後、監視部352は、サービス1側インタフェース342を介して受信したパケットをWebサーバ6に送信し(S110)、処理を終了する。
図9は、本発明の実施例の監視部352が実行するユーザ側代理応答処理S200を説明するフローチャートである。
監視部352は、受信したパケットがACKパケットであるか否かを判定する(S201)。
受信したパケットがACKパケットであると判定された場合、監視部352は、データ中継部356にACK受信通知を出力し(S202)、処理を終了する。
受信したパケットがACKパケットでないと判定された場合、監視部352は、受信したパケットがFINパケットであるか否かを判定する(S203)。
受信したパケットがFINパケットでないと判定された場合、監視部352は処理を終了する。受信したパケットがFINパケットであると判定された場合、監視部352は、データ中継部356にFIN受信通知を出力し(S204)、処理を終了する。
なお、ACK受信通知及びFIN受信通知の出力方法としては、監視部352が、予め所定のレジスタにACK受信通知又はFIN受信通知を書き込む方法が考えられる。この場合、データ中継部356は、当該レジスタをポーリングすることによって、ACK受信通知及びFIN受信通知を受けつけることができる。また、監視部352が、データ中継部356に割り込みを通知することによって実現することもできる。
図10は、本発明の実施例のルール判定部354が実行するルール判定処理S300を説明するフローチャートである。
ルール判定部354は、監視部352から処理の実行が指示されると、ルール判定処理S300を開始する。
ルール判定部354は、HTTPリクエスト全体を受信したか否かを判定する(S301)。例えば、GETメソッドを用いたHTTPリクエスト(M1)の場合、ルール判定部354は、空行(M12)が含まれるパケットを受信するとHTTPリクエスト全体を受信したと判定する。POSTメソッドを用いたHTTPリクエスト(M2)の場合、ルール判定部354は、空行(M23)からContent−Length(M22)に示すバイト分のパケットを受信するとHTTPリクエスト全体を受信したと判定する。
HTTPリクエスト全体を受信したと判定された場合、ルール判定部354は、コネクション管理テーブル(T1)を参照し、HTTPリクエストパケットに対応するコネクション情報のコネクション状態(T17)が「HTTPリクエスト一部受信」であるか否かを判定する(S302)。
コネクション状態(T17)が「HTTPリクエスト一部受信」でないと判定された場合、ルール判定部354は、S304に進む。コネクション状態(T17)が「HTTPリクエスト一部受信」であると判定された場合、ルール判定部354は、パケット格納部33からパケットを読み出す(S303)。具体的には、ルール判定部354は、コネクション情報のパケットポインタ(T18)に基づいて、パケット格納部33からパケットを読み出す。
ルール判定部354は、HTTPリクエストパケットに基づいてルールテーブル(T2)を参照し、HTTPリクエストに該当するルールが存在するか否かを判定する(S304)。例えば、以下のような処理が実行される。
ルール判定部354は、HTTPリクエストパケットから送信元IPアドレス、送信元ポート番号、宛先IPアドレス、及び宛先ポート番号を取得する。ルール判定部354は、取得された送信元IPアドレス、送信元ポート番号、宛先IPアドレス、及び宛先ポート番号と、ユーザ端末IP(T24)、ユーザ端末Port(T25)、サーバIP(T22)、及びサーバPort(T23)とを比較することによって、ルールを検索する。さらに、ルール判定部354は、検索されたルールのHTTPリクエスト条件(T26)を参照し、HTTPリクエストが当該条件を満たすか否かを判定する。以上がS304の処理の一例である。
HTTPリクエストに対応するルールが存在すると判定された場合、ルール判定部354は、コネクション情報のコネクション状態(T17)を「代理応答中」に更新し(S305)、HTTPリクエスト送信部355にHTTPリクエスト送信処理S400の実行を指示する(S306)。HTTPリクエスト送信処理S400の詳細は、図11を用いて後述する。
HTTPリクエストに対応するルールが存在しないと判定された場合、ルール判定部354は、コネクション管理テーブル(T1)からコネクション情報を削除し(S307)、その後、S311に進む。
S301において、HTTPリクエスト全体を受信していないと判定された場合、ルール判定部354は、パケット格納部33に受信したHTTPリクエストパケットをコピーする(S308)。ルール判定部354は、コネクション情報のパケットポインタ(T18)に、パケット格納部33に格納されたHTTPリクエストパケットの格納場所を示すポインタを登録する(S309)。また、ルール判定部354は、コネクション情報のコネクション状態(T17)を「HTTPリクエスト一部受信」に更新し、その後(S310)、S311に進む。
S307の処理の実行後又はS310の処理の実行後、ルール判定部354は、サービス1側インタフェース342を介して受信したHTTPリクエストパケットをWebサーバ6に送信し(S311)、処理を終了する。
図11は、本発明の実施例のHTTPリクエスト送信部355が実行するHTTPリクエスト送信処理S400を説明するフローチャートである。
HTTPリクエスト送信部355は、ルール判定部354から処理の実行が指示されると、HTTPリクエスト送信処理S400を開始する。
HTTPリクエスト送信部355は、代理応答テーブル(T3)に、受信したHTTPリクエストパケットに対応する代理応答情報を登録する(S401)。具体的には、以下のような処理が実行される。
HTTPリクエスト送信部355は、代理応答テーブル(T3)に行を追加する。HTTPリクエスト送信部355は、S102において検索されたコネクション情報の識別子(T11)を取得し、また、HTTPリクエストパケットからユーザ端末1のIPアドレス及びポート番号、並びにシーケンス番号及びACK番号を取得する。
HTTPリクエスト送信部355は、追加された行の識別子(T31)に所定の識別番号を設定し、コネクションID(T32)にコネクション情報の識別子(T11)から取得された識別番号を設定する。また、HTTPリクエスト送信部355は、追加された行のユーザ端末側情報(T33)のユーザ端末IP(T331)及びユーザ端末Port(T332)に、ユーザ端末1のIPアドレス及びポート番号を設定する。
HTTPリクエスト送信部355は、追加された行のユーザ端末側情報(T33)のシーケンス番号(T333)に取得されたシーケンス番号を設定する。さらに、HTTPリクエスト送信部355は、追加された行のユーザ端末側情報(T33)のACK番号(T334)に取得されたACK番号を設定する。以上がS401の処理の説明である。
HTTPリクエスト送信部355は、HTTPリクエストパケットのヘッダ情報に基づいてWebサーバ6宛のRSTパケットを生成し、サービス1側インタフェース342を介してWebサーバ6に当該RSTパケットを送信する(S402)。これは、サービス経路4−1上のTCPコネクションを切断するためである。
HTTPリクエスト送信部355は、サービス2側インタフェース343を用いてサービス経路4−2上に新たなTCPコネクションを確立し、確立されたTCPコネクションの情報に基づいて代理応答情報を更新する(S403)。具体的には、以下のような処理が実行される。
HTTPリクエスト送信部355は、サービス2側インタフェース343を用いて、Webサーバ6との間で3ウェイハンドシェイク通信を行う。これによって、中継装置3とWebサーバ6とを接続するサービス経路4−2上に、新たなTCPコネクションが確立される。このとき、中継装置3とWebサーバ6との間の通信では、新たなTCPコネクションの確立時に用いられるACK番号及びシーケンス番号が引き続き用いられる。
HTTPリクエスト送信部355は、S401において追加された行のWebサーバ側情報(T34)の代理IP(T341)及び代理Port(T342)に中継装置3のIPアドレス及びポート番号を設定する。また、HTTPリクエスト送信部355は、追加された行のWebサーバ側情報(T34)のシーケンス番号(T343)及びACK番号(T344)のそれぞれに、中継装置3がWebサーバ6にパケットを送信する場合に使用するシーケンス番号及びACK番号を設定する。以上がS403の処理の説明である。
HTTPリクエスト送信部355は、代理応答情報のWebサーバ側情報(T34)に基づいてHTTPリクエストパケットのヘッダを書き換え、サービス2側インタフェース343を介してWebサーバ6に書き換えられたHTTPリクエストパケットを送信する(S404)。具体的には、以下のような処理が実行される。
HTTPリクエスト送信部355は、HTTPリクエストの送信元IPアドレス、及び送信元ポート番号を、代理応答情報のWebサーバ側情報(T34)の代理IP(T341)、及び代理Port(T342)に書き換える。
また、HTTPリクエスト送信部355は、代理応答情報のWebサーバ側情報(T34)のシーケンス番号(T343)及びACK番号(T344)に基づいて、Webサーバ6へのパケット送信に用いるシーケンス番号及びACK番号を決定する。HTTPリクエスト送信部355は、HTTPリクエストのシーケンス番号及びACK番号を、決定されたシーケンス番号及びACK番号に書き換える。以上がS404の処理の説明である。
なお、シーケンス番号及びACK番号の決定方法は公知のものであるため詳細な説明を省略する。
なお、HTTPリクエスト送信部355は、書き換えられたHTTPリクエストパケットの送信後、当該HTTPリクエストパケットに対するACKパケットを受信するまで待ち状態となる。
HTTPリクエスト送信部355は、Webサーバ6から中継装置3宛てのACKパケットを受信すると、代理応答情報のユーザ端末側情報(T33)に基づいてACKパケットのヘッダを書き換え、ユーザ側インタフェース341を介してユーザ端末1に書き換えられたACKパケットを送信する(S405)。具体的には、以下のような処理が実行される。
HTTPリクエスト送信部355は、代理応答テーブル(T3)を参照し、代理IP(T341)及び代理Port(T342)がACKパケットの宛先IPアドレス及び宛先ポート番号と一致する代理応答情報を検索する。
HTTPリクエスト送信部355は、ACKパケットのシーケンス番号及びACK番号に検索された代理応答情報のWebサーバ側情報(T34)のシーケンス番号(T343)及びACK番号(T344)を設定し、ACKパケットの宛先IPアドレス、及び宛先ポート番号を、検索された代理応答情報のユーザ端末側情報(T33)のユーザ端末IP(T331)、及びユーザ端末Port(T332)に書き換える。
また、HTTPリクエスト送信部355は、検索された代理応答情報のユーザ端末側情報(T33)のシーケンス番号(T333)及びACK番号(T334)に基づいて、ユーザ端末1へのパケットの送信に用いるシーケンス番号及びACK番号を決定する。HTTPリクエスト送信部355は、ACKパケットのシーケンス番号及びACK番号を、決定されたシーケンス番号及びACK番号に書き換える。以上がS405の処理の説明である。
HTTPリクエスト送信部355は、書き換えられたACKパケットの送信後、データ中継部356に処理の実行を指示する(S406)。
なお、HTTPリクエスト送信部355は、ユーザ端末1から受信したパケットのシーケンス番号及びACK番号に基づいて、ユーザ端末1にパケットを送信する場合に用いるシーケンス番号及びACK番号を予め算出し、算出されたシーケンス番号及びACK番号をシーケンス番号(T333)及びACK番号(T334)に格納してもよい。この場合、HTTPリクエスト送信部355は、ACKパケットのシーケンス番号及びACK番号を、シーケンス番号(T333)及びACK番号(T334)に書き換える。Webサーバ側情報(T34)のシーケンス番号(T343)及びACK番号(T344)も同様の制御が可能である。
図12は、本発明の実施例のデータ中継部356が実行するデータ中継処理S500を説明するフローチャートである。
データ中継部356は、HTTPリクエスト送信部355から処理の実行が指示されると、データ中継処理S500を開始する。
データ中継部356は、処理を開始した後、Webサーバ6から中継装置3宛のパケットを受信するまで待機する(S501)。データ中継部356は、Webサーバ6からパケットを受信すると、当該パケットがFINパケットであるか否かを判定する(S502)。
受信したパケットがFINパケットでない、すなわち、コンテンツを含むパケットであると判定された場合、データ中継部356は、当該パケットに対応する代理応答情報に基づいてパケットのヘッダを書き換えて、ユーザ側インタフェース341を介してユーザ端末1に書き換えられたパケットを送信する(S503)。その後、データ中継部356は、ACK受信通知を受けつけるまで待機する。具体的には、以下のような処理が実行される。
データ中継部356は、代理応答テーブル(T3)を参照し、代理IP(T341)及び代理Port(T342)が受信したパケットの宛先IPアドレス及び宛先ポート番号と一致する代理応答情報を検索する。データ中継部356は、パケットのシーケンス番号及びACK番号に検索された代理応答情報のWebサーバ側情報(T34)のシーケンス番号(T343)及びACK番号(T344)を設定し、ACKパケットの宛先IPアドレス、及び宛先ポート番号を、検索された代理応答情報のユーザ端末側情報(T33)のユーザ端末IP(T331)、及びユーザ端末Port(T332)に書き換える。
また、データ中継部356は、検索された代理応答情報のユーザ端末側情報(T33)のシーケンス番号(T333)及びACK番号(T334)に基づいて、ユーザ端末1へのパケットの送信に用いるシーケンス番号及びACK番号を決定する。データ中継部356は、ACKパケットのシーケンス番号及びACK番号を、決定されたシーケンス番号及びACK番号に書き換える。以上がS503の処理の説明である。
データ中継部356は、監視部352からACK受信通知を受けつけると、ACK受信通知に含まれるACKパケットに対応する代理応答情報に基づいてACKパケットのヘッダを書き換えて、サービス2側インタフェース343を介してWebサーバ6に書き換えられたACKパケットを送信する(S504)。その後、データ中継部356は、S501に戻る。具体的には、以下のような処理が実行される。
データ中継部356は、代理応答テーブル(T3)を参照し、コネクションID(T32)がACK受信通知に含まれるコネクションID72と一致する代理応答情報を検索する。
データ中継部356は、ACKパケットのシーケンス番号及びACK番号に検索された代理応答情報のユーザ端末側情報(T33)のシーケンス番号(T333)及びACK番号(T334)を設定し、ACKパケットの送信元IPアドレス及び送信元ポート番号を、検索された代理応答情報のWebサーバ側情報(T34)の代理IP(T341)及び代理Port(T342)に書き換える。
また、データ中継部356は、検索された代理応答情報のWebサーバ側情報(T34)のシーケンス番号(T343)及びACK番号(T344)に基づいて、Webサーバ6へのパケット送信に用いるシーケンス番号及びACK番号を決定する。データ中継部356は、ACKパケットのシーケンス番号及びACK番号を、決定されたシーケンス番号及びACK番号に書き換える。以上がS504の処理の説明である。
S502において受信したパケットがFINパケットであると判定された場合、データ中継部356は、当該FINパケットに対応する代理応答情報に基づいてFINパケットのヘッダを書き換えて、ユーザ側インタフェース341を介してユーザ端末1に書き換えられたFINパケットを送信する(S505)。その後、データ中継部356は、監視部352からACK受信通知を受けつけるまで待機する。
具体的には、データ中継部356は、S503と同様の処理を実行することによって、代理応答テーブル(T3)からFINパケットに対応する代理応答情報を検索する。データ中継部356は、FINパケットのシーケンス番号及びACK番号に検索された代理応答情報のWebサーバ側情報(T34)のシーケンス番号(T343)及びACK番号(T344)を設定し、ユーザ端末側情報(T33)に基づいて、FINパケットの宛先IPアドレス、宛先ポート番号、シーケンス番号、及びACK番号を書き換える。
データ中継部356は、監視部352からACK受信通知を受けつけると、ACK受信通知に含まれるACKパケットに対応する代理応答情報に基づいてACKパケットのヘッダを書き換えて、サービス2側インタフェース343を介してWebサーバ6に書き換えられたACKパケットを送信する(S506)。その後、データ中継部356は、監視部352からFIN受信通知を受けつけるまで待機する。
具体的には、データ中継部356は、S504と同様の処理を実行することによって、代理応答テーブル(T3)からACKパケットに対応する代理応答情報を検索する。データ中継部356は、ACKパケットのシーケンス番号及びACK番号に検索された代理応答情報のユーザ端末側情報(T33)のシーケンス番号(T333)及びACK番号(T334)を設定し、Webサーバ側情報(T34)に基づいて、ACKパケットの宛先IPアドレス、宛先ポート番号、シーケンス番号、及びACK番号を書き換える。
データ中継部356は、監視部352からFIN受信通知を受け付けると、FIN受信通知に含まれるFINパケットに対応する代理応答情報に基づいてFINパケットのヘッダを書き換えて、サービス2側インタフェース343を介してWebサーバ6に送信する(S507)。その後、データ中継部356は、Webサーバ6から中継装置3宛のACKパケットを受信するまで待機する。
具体的には、データ中継部356は、S504と同様の処理を実行することによって、代理応答テーブル(T3)からFINパケットに対応する代理応答情報を検索する。データ中継部356は、FINパケットのシーケンス番号及びACK番号に検索された代理応答情報のユーザ端末側情報(T33)のシーケンス番号(T333)及びACK番号(T334)を設定し、Webサーバ側情報(T34)に基づいて、ACKパケットの宛先IPアドレス、宛先ポート番号、シーケンス番号、及びACK番号を書き換える。
データ中継部356は、Webサーバ6から中継装置3宛のACKパケットを受信すると、ACKパケットに対応する代理応答情報のユーザ端末側情報(T33)に基づいてACKパケットのヘッダを書き換えて、ユーザ側インタフェース341を介してユーザ端末1に書き換えられたACKパケットを送信する(S508)。
具体的には、データ中継部356は、S503と同様の処理を実行することによって、代理応答テーブル(T3)からACKパケットに対応する代理応答情報を検索する。データ中継部356は、ACKパケットのシーケンス番号及びACK番号に検索された代理応答情報のWebサーバ側情報(T34)のシーケンス番号(T343)及びACK番号(T344)を設定し、ユーザ端末側情報(T33)に基づいて、ACKパケットの宛先IPアドレス、宛先ポート番号、シーケンス番号、及びACK番号を書き換える。
データ中継部356は、コネクション管理テーブル(T1)及び代理応答テーブル(T3)から、切断されたTCPコネクションに対応するコネクション情報及び代理応答情報を削除し(S509)、処理を終了する。
図13は、本発明の実施例の応答部353が実行する応答処理S600を説明するフローチャートである。
TCP管理部351は、サービス1側インタフェース342を介してパケットを受信した場合、応答部353を呼び出し、処理の実行を指示する。
応答部353は、受信したパケットがHTTPのSYN+ACKパケットであるか否かを判定する(S601)。すなわち、受信したパケットが、SYNパケットの受信後に受信するSYN+ACKパケットであるか否かが判定される。
受信したパケットがHTTPのSYN+ACKパケットでないと判定された場合、応答部353はS606に進む。受信したパケットがHTTPのSYN+ACKパケットであると判定された場合、応答部353は、コネクション管理テーブル(T1)に、受信したSYN+ACKパケットに関連するコネクション情報が存在するか否かを判定する(S602)。S602の判定方法は、S102と同一の判定方法を用いればよい。
なお、コネクション情報が存在しない場合、不正な通信又は障害の発生等に該当するが、中継装置3は、特にパケットに対する処理をすることなくユーザ端末1に送信する。この場合、ユーザ端末1が不正な通信又は障害の発生等を判定することとなる。
コネクション管理テーブル(T1)に、受信したSYN+ACKパケットに関連するコネクション情報が存在しないと判定された場合、応答部353は、S606に進む。受信したSYN+ACKパケットに関連するコネクション情報が存在すると判定された場合、応答部353は、当該コネクション情報のコネクション状態(T17)が「SYN1」であるか否かを判定する(S603)。
コネクション情報のコネクション状態(T17)が「SYN1」でないと判定された場合、応答部353は、S606に進む。コネクション情報のコネクション状態(T17)が「SYN1」であると判定された場合、応答部353は、コネクション状態(T17)を「SYN2」に更新する(S604)。
応答部353は、受信したSYN+ACKパケットからMSSの情報を取得し、取得されたMSSの情報をコネクション情報のMSS(T16)に格納する(S605)。
応答部353は、ユーザ側インタフェース341を介して受信したパケットをユーザ端末1に送信し(S606)、処理を終了する。
次に、通信システムにおける通信の流れについてシーケンス図を用いて説明する。なお、シーケンス図において、ユーザ端末1と中継装置3との間を接続するルータ2−1は、ユーザ端末1と中継装置3との間のパケット転送のみを行うため省略する。
(動作例1)
図14A及び図14Bは、本発明の実施例の通信システムにおけるサービス経路4が切り替えられない場合の通信の流れを示すシーケンス図である。
動作例1では、IPアドレスが「10.0.0.1」であるユーザ端末1−1がIPアドレスが「10.0.1.1」であるWebサーバ6−1が保持するコンテンツ(HTTP://server2.com/index.html)を要求する。動作例1では、HTTPリクエストがルールテーブル(T2)のいずれのルールにも該当しないため、サービス経路4−1を用いて通信が行われる。
なお、動作例1ではHTTPリクエストが一つのパケットに格納されているものとする。HTTPリクエストが複数のパケットに分割されて送信される場合の動作については、動作例3(図16参照)において説明する。
ユーザ端末1−1は、Webサーバ6−1宛てのSYNパケットを送信する(SQ101)。中継装置3は、SYNパケットを受信すると監視処理S100を開始する。
監視処理S100では、監視部352は、受信したSYNパケットがHTTP上のパケットであるか否かを判定する(S108)。ここでは、HTTP上のパケットであると判定されるため、監視部352は、コネクション管理テーブル(T1)にコネクション情報を登録する(S109)。また、監視部352は、サービス1側インタフェース342を介してWebサーバ6−1に受信したSYNを送信する(S110、SQ102)。
中継装置3は、Webサーバ6−1からユーザ端末1−1宛てのSYN+ACKパケットを受信すると(SQ103)、応答処理S600を開始する。
応答処理S600では、応答部353は、コネクション状態(T17)が「SYN1」であるか否かを判定する(S603)。ここでは、コネクション状態(T17)が「SYN1」であるため、応答部353は、コネクション状態(T17)を「SYN2」に更新し(S604)、受信したSYN+ACKパケットから取得されたMSS情報をMSS(T16)に登録する(S605)。応答部353は、ユーザ側インタフェース341を介してユーザ端末1−1に受信したSYN+ACKパケットを送信する(S606、SQ104)。
中継装置3は、ユーザ端末1−1からWebサーバ6−1宛てのACKパケットを受信すると(SQ105)、監視処理S100を開始する。
監視処理S100では、監視部352は、コネクション管理テーブル(T1)に存在するコネクション情報のコネクション状態(T17)が「代理応答中」であるか否かを判定する(S103)。コネクション状態(T17)は「代理応答中」ではないため、監視部352は、受信したパケットがACKパケット、かつ、コネクション状態(T17)が「SYN2」であるか否かを判定する(S105)。ここでは、S105の条件を満たすため、監視部352は、コネクション状態(T17)を「確立」に更新する(S106)。監視部352は、サービス1側インタフェースを介してWebサーバ6−1に受信したACKパケットを送信する(S110、SQ106)。
中継装置3は、ユーザ端末1−1からWebサーバ6−1宛てのHTTPリクエストパケットを受信すると(SQ107)、監視処理S100を開始する。
監視処理S100では、監視部352は、S105の条件を満たすか否かを判定する。ここでは、S105の条件を満たさないため、監視部352は、ルール判定部354に処理の実行を指示する(S107)。
ルール判定処理S300では、ルール判定部354は、一つのパケットにHTTPリクエスト全体が含まれるため、コネクション状態(T17)が「HTTPリクエスト一部受信」であるか否かを判定する(S302)。コネクション状態(T17)は「HTTPリクエスト一部受信」ではないため、ルール判定部354は、HTTPリクエストに該当するルールが存在するか否かを判定する(S304)。ここでは、該当するルールが存在しないものと判定される。そのため、ルール判定部354は、コネクション管理テーブル(T1)からコネクション情報を削除し(S307)、サービス1側インタフェース342を介してWebサーバ6−1に受信したHTTPリクエストパケットを送信する(S311、SQ108)。
中継装置3は、Webサーバ6−1からユーザ端末1−1宛てのACKパケットを受信すると(SQ109)、応答処理S600開始する。
応答処理S600では、応答部353は、受信したパケットがSYN+ACKパケットであるか否かを判定する(S601)。受信したパケットはSYN+ACKパケットではないため、応答部353は、ユーザ側インタフェース341を介してユーザ端末1−1に受信したACKパケットを送信する(S606、SQ110)。
中継装置3は、Webサーバ6−1からユーザ端末1−1宛てのコンテンツを格納するパケットを受信すると(SQ111)、応答処理S600を開始する。応答処理S600では、SQ110と同様に、ユーザ側インタフェース341を介してユーザ端末1−1に受信したパケットが送信される(S606、SQ112)。
中継装置3は、ユーザ端末1−1からWebサーバ6−1宛てのACKパケットを受信すると(SQ113)、監視処理S100を開始する。
監視処理S100では、監視部352は、コネクション管理テーブル(T1)にコネクション情報が存在するか否かを判定する(S102)。SQ107の後に実行されるルール判定処理S300においてコネクション情報が削除されているため(S307)、監視部352は、サービス1側インタフェース342を介してWebサーバ6−1に受信したACKパケットを送信する(S110、SQ114)。
中継装置3は、全てのコンテンツが送信されるまでSQ103〜SQ114までの処理を繰り返し実行することとなる。
中継装置3は、Webサーバ6−1からユーザ端末1−1宛てのFINパケットを受信した後(SQ115)、又は、ユーザ端末1−1宛のACKパケットを受信した後(SQ121)、応答処理S600を開始する。当該応答処理S600は、SQ109の後に実行される応答処理S600のフローと同様のフローとなる。すなわち、受信したFINパケット又はACKパケットがユーザ側インタフェース341を介してユーザ端末1−1に送信される(SQ116、SQ122)。
また、中継装置3は、ユーザ端末1−1からWebサーバ6−1宛てのACKパケットを受信した後(SQ117)、又はFINパケットを受信した後(SQ119)、監視処理S100を開始する。当該監視処理S100は、SQ113の後に実行される監視処理S100と同様のフローとなる。すなわち、受信したACKパケット又はFINパケットがサービス1側インタフェース342を介してWebサーバ6−1に送信される(SQ118、SQ120)。
(動作例2)
図15A及び図15Bは、本発明の実施例の通信システムにおけるサービス経路4が切り替えられる場合の通信の流れを示すシーケンス図である。
動作例2では、IPアドレスが「10.0.0.3」であるユーザ端末1−1がIPアドレスが「10.0.1.3」であるWebサーバ6−1が保持するコンテンツ(HTTP://server3.com/IMAGE.JPG)を要求する。動作例2では、HTTPリクエストがルールテーブル(T2)のいずれかのルールに該当するため、サービス経路4−2を用いて通信が行われる。
なお、動作例2ではHTTPリクエストが一つのパケットに格納されているものとする。HTTPリクエストが複数のパケットに分割されて送信される場合の動作については、動作例4(図17参照)において説明する。
SQ201からSQ206までのTCPコネクションの確立処理は、SQ101からSQ106までの処理と同一であるため説明を省略する。
中継装置3は、ユーザ端末1−1からWebサーバ6−1宛てのHTTPリクエストパケットを受信すると(SQ207)、監視処理S100を開始する。
監視処理S100では、監視部352は、S105の条件を満たさないため、監視部352は、ルール判定部354に処理の実行を指示する(S107)。
ルール判定処理S300では、ルール判定部354は、HTTPリクエストに該当するルールが存在すると判定するため、コネクション状態(T13)を「代理応答中」に更新し(S305)、HTTPリクエスト送信部355に処理の実行を指示する(S306)。
HTTPリクエスト送信処理S400では、HTTPリクエスト送信部355は、代理応答テーブル(T3)に代理応答情報を登録する(S401)。HTTPリクエスト送信部355は、サービス経路4−1経由でWebサーバ6−1にRSTパケットを送信する(S402、SQ208)。HTTPリクエスト送信部355は、サービス経路4−2上に新たなTCPコネクションを確立し、新たなTCPコネクションの情報に基づいて代理応答情報を更新する(S403、SQ209)。HTTPリクエスト送信部355は、ユーザ端末1−1から受信したHTTPリクエストパケットのヘッダを書き換えて、サービス2側インタフェースを介してWebサーバ6−1に送信する(S404、SQ210)。
HTTPリクエスト送信部355は、Webサーバ6−1から中継装置3宛てのACKパケットを受信すると(SQ211)、代理応答情報に基づいてACKパケットのヘッダを書き換えて、ユーザ側インタフェース341を介してユーザ端末1−1に書き換えられたACKパケットを送信する(S405、SQ212)。その後、HTTPリクエスト送信部355は、データ中継部356に処理の実行を指示する(S406)。
ユーザ端末1−1に送信されるACKパケットのACK番号及びシーケンス番号は、ユーザ端末1−1とWebサーバ6−1との間のTCPコネクションの確立時に用いられたACK番号及びシーケンス番号が引き続き用いられる。したがって、ユーザ端末1−1は、最初のTCPコネクションを介した通信であるように認識される。すなわち、ユーザ端末1−1には通信経路の切り替え等が認識されない。
データ中継処理S500では、データ中継部356が、Webサーバ6−1から中継装置3宛てのコンテンツを含むパケットを受信すると(SQ213)、代理応答情報のユーザ端末側情報(T33)に基づいてコンテンツを格納するパケットのヘッダを書き換え、ユーザ側インタフェース341を介してユーザ端末1−1に書き換えられたパケットを送信する(S503、SQ214)。
ユーザ端末1−1に送信されるコンテンツを含むパケットのACK番号及びシーケンス番号も、SQ212の場合と同様に、ユーザ端末1−1とWebサーバ6−1との間のTCPコネクションの確立時に用いられたACK番号及びシーケンス番号が引き続き用いられる。
また、中継装置3は、ユーザ端末1−1からWebサーバ6−1宛てのACKパケットを受信すると(SQ215)、監視処理S100を開始する。
監視処理S100では、コネクション状態(T17)が「代理応答中」であるため、監視部352は、ユーザ側代理応答処理S200を開始する。ユーザ側代理応答処理S200では、監視部352は、受信したパケットがACKパケットであるため、データ中継部356にACK受信通知を出力する(S202)。
このとき、データ中継処理S500では、データ中継部356が、代理応答情報のWebサーバ側情報(T34)に基づいてACKパケットのヘッダを書き換え、サービス2側インタフェース343を介してWebサーバ6−1に書き換えられたACKパケットを送信する(S504、SQ216)。
Webサーバ6−1に送信されるACKパケットのACK番号及びシーケンス番号は、中継装置3とWebサーバ6−1との間の新たなTCPコネクションの確立時に用いられたACK番号及びシーケンス番号が引き続き用いられる。
全てのコンテンツが送信されるまで、SQ213からSQ216までの処理が実行されることとなる。
中継装置3がWebサーバ6−1から中継装置3宛てのFINパケットを受信すると(SQ217)、データ中継部356は、代理応答情報のユーザ端末側情報(T33)に基づいてFINパケットのヘッダを書き換え、ユーザ側インタフェース341からユーザ端末1−1に書き換えられたFINパケットを送信する(S505、SQ218)。
ユーザ端末1−1に送信されるコンテンツを含むパケットのACK番号及びシーケンス番号も、SQ212の場合と同様に、ユーザ端末1−1とWebサーバ6−1との間のTCPコネクションの確立時に用いられたACK番号及びシーケンス番号が引き続き用いられる。
中継装置3は、ユーザ端末1−1からWebサーバ6−1宛てのACKパケットを受信すると(SQ219)、監視処理S100を開始する。
当該監視処理S100は、SQ215の後に実行される監視処理S100と同様のフローとなる。すなわち、データ中継部356にACK受信通知が出力される(S202)。
このとき、データ中継処理S500では、データ中継部356が、代理応答情報のWebサーバ側情報(T34)に基づいてACKパケットのヘッダを書き換え、サービス2側インタフェース343を介してWebサーバ6−1に書き換えられたACKパケットを送信する(S506、SQ220)。
Webサーバ6−1に送信されるACKパケットのACK番号及びシーケンス番号は、中継装置3とWebサーバ6−1との間の新たなTCPコネクションの確立時に用いられたACK番号及びシーケンス番号が引き続き用いられる。
中継装置3は、ユーザ端末1−1からWebサーバ6−1宛てのFINパケットを受信すると(SQ221)、監視処理S100を開始する。
監視処理S100では、監視部352は、コネクション状態(T17)が「代理応答中」デあるため、ユーザ側代理応答処理S200を開始する。ユーザ側代理応答処理S200では、監視部352は、受信したパケットがFINパケットであるか否かを判定する(S203)。ここでは、受信したパケットはFINパケットであるため、監視部352は、データ中継部356にFIN受信通知を出力する(S204)。
このとき、データ中継処理S500では、データ中継部356が、代理応答情報のWebサーバ側情報(T34)に基づいてFINパケットのヘッダを書き換え、サービス2側インタフェース343を介してWebサーバ6−1に書き換えられたFINパケットを送信する(S507、SQ222)。
Webサーバ6−1に送信されるFINパケットのACK番号及びシーケンス番号は、中継装置3とWebサーバ6−1との間の新たなTCPコネクションの確立時に用いられたACK番号及びシーケンス番号が引き続き用いられる。
中継装置3がWebサーバ6−1から中継装置3宛てのACKパケットを受信すると(SQ223)、データ中継部356は、代理応答情報のユーザ端末側情報(T33)に基づいてACKパケットのヘッダを書き換え、ユーザ側インタフェース341を介してユーザ端末1−1に書き換えられたACKパケットを送信する(S508、SQ224)。その後、データ中継部356は、コネクション管理テーブル(T1)からコネクション情報を削除し、代理応答テーブル(T3)から代理応答情報を削除する(S509)。
ユーザ端末1−1に送信されるコンテンツを含むパケットのACK番号及びシーケンス番号も、SQ212の場合と同様に、ユーザ端末1−1とWebサーバ6−1との間のTCPコネクションの確立時に用いられたACK番号及びシーケンス番号が引き続き用いられる。
動作例2では、ユーザ端末1−1は、Webサーバ6−1との間で確立されたTCPコネクションの情報(ACK番号及びシーケンス番号)を用いてWebサーバ6−1宛にパケットを送信すればよく、サービス経路4の切り替えが意識する必要はない。また、サービス経路4の切り替え時には、ユーザ端末1−1と中継装置3との間のTCPコネクションは維持されるため、ユーザ端末1−1からは、サービス経路4の切り替え時におけるTCPコネクションの切断は認識されない。すなわち、中継装置3は、ユーザ端末1−1には特に変更を行うことなく、サービス経路4を切り替えることができる。
(動作例3)
図16は、本発明の実施例の通信システムにおけるサービス経路4が切り替えられない場合の通信の流れを示すシーケンス図である。
動作例3は、動作例1とほぼ同一の動作であるが、HTTPリクエストが複数のパケットに分割されて送信される点が異なる。以下、動作例1との差異を中心に、動作例3について説明する。
TCPコネクションを確立するまでの処理は動作例1と同一であるため省略する。
中継装置3は、ユーザ端末1−1からWebサーバ6−1宛てのHTTPリクエスト1/2を受信すると(SQ301)、監視処理S100を開始する。監視処理S100では、監視部352は、S105の条件を満たさないためルール判定部354に処理の実行を指示する。
ルール判定処理S300では、ルール判定部は、HTTPリクエスト全体を受信したか否かを判定する(S301)。ここでは、HTTPリクエスト全体を受信していないため、ルール判定部354は、パケット格納部33に受信したHTTPリクエストパケットをコピーし(S308)、コネクション情報のパケットポインタ(T18)に当該パケットが格納される位置を示すポインタを設定する(S309)。さらに、ルール判定部354は、コネクション状態(T17)を「HTTPリクエスト一部受信」に更新する(S310)。その後、ルール判定部354は、サービス1側インタフェース342を介してWebサーバ6−1に受信したHTTPリクエストパケットを送信する(S311、SQ302)。
中継装置3は、Webサーバ6−1からユーザ端末1−1宛てのACKパケットを受信すると(SQ303)、応答処理S600を開始する。
当該応答処理S600は、SQ109の後に実行される応答処理S600と同様のフローとなる。すなわち、応答部353は、ユーザ側インタフェース341を介してユーザ端末1−1に受信したACKパケットを送信する(S606、SQ304)。
中継装置3は、ユーザ端末1−1からWebサーバ6−1宛てのHTTPリクエスト2/2を受信すると(SQ305)、監視処理S100を開始する。
監視処理S100では、監視部352は、S105の条件を満たさないためルール判定部354に処理の実行を指示する。
ルール判定処理S300では、ルール判定部354は、HTTPリクエスト全体を受信したと判定されるため、コネクション状態(T17)が「HTTPリクエスト一部受信」であるか否かを判定する(S302)。ここでは、コネクション状態(T17)が「HTTPリクエスト一部受信」であるため、ルール判定部354は、パケットポインタ(T18)に基づいてパケット格納部33からHTTPリクエストパケットを読み出す(S303)。ルール判定部354は、HTTPリクエストがルールテーブル(T2)のいずれかのルールに該当するか否かを判定する(S304)。ここでは、該当するルールが存在しないため、ルール判定部354は、コネクション管理テーブル(T1)からコネクション情報を削除し(S307)、サービス1側インタフェース342を介してWebサーバ6−1に受信したHTTPリクエストパケット2/2を送信する(S311、SQ306)。
中継装置3は、Webサーバ6−1からユーザ端末1−1宛てのACKパケットを受信すると(SQ307)、応答処理S600を開始する。
当該応答処理S600は、SQ109の後に実行される応答処理S600と同様のフローとなる。すなわち、応答部353は、ユーザ側インタフェース341を介してユーザ端末1−1に受信したACKパケットを送信する(S606、SQ308)。
図16では、HTTPリクエストが二つのパケットに分割された例を示したが本発明はこれに限定されない。HTTPリクエストは三つ以上に分割されていてもよい。この場合、HTTPリクエスト全体を受信するまではSQ301からSQ304までの処理が実行され、HTTPリクエスト全体を受信するとSQ305からSQ308までの処理が実行される。
(動作例4)
図17は、本発明の実施例の通信システムにおけるサービス経路4が切り替えられる場合の通信の流れを示すシーケンス図である。
動作例4は、動作例2とほぼ同一の動作であるが、HTTPリクエストが複数のパケットに分割されて送信される点が異なる。以下、動作例2との差異を中心に、動作例4について説明する。
SQ401からSQ404の処理は、SQ301からSQ304までの処理と同一の処理であるため説明を省略する。
中継装置3は、ユーザ端末1−1からWebサーバ6−1宛のHTTPリクエストパケット2/2を受信すると(SQ405)、監視処理S100を開始する。当該監視処理S100は、SQ305の後に実行される監視処理S100と同様のフローとなる。すなわち、監視部352は、ルール判定部354に処理の実行を指示する。
ルール判定処理S300では、ルール判定部354は、HTTPリクエストに該当するルールが存在するため、コネクション状態(T17)を「代理応答中」に更新し(S305)、HTTPリクエスト送信部355に処理の実行を指示する(S306)。
HTTPリクエスト送信処理S400では、HTTPリクエスト送信部355は、代理応答テーブル(T3)に代理応答情報を登録し(S401)、RSTパケットを送信する(S402、SQ406)。HTTPリクエスト送信部355は、新たなTCPコネクションの確立し、代理応答情報の更新する(S403、SQ407)。HTTPリクエスト送信部355は、代理応答情報のWebサーバ側情報(T34)に基づいてHTTPリクエストパケット1/2及びHTTPリクエストパケット2/2のそれぞれのヘッダを書き換え、サービス2側インタフェース343を介してWebサーバ6−1に書き換えられたHTTPリクエストパケット1/2及びHTTPリクエストパケット2/2を送信する(S404、SQ408、SQ409)。
中継装置3がWebサーバ6−1から中継装置3宛てのACKパケットを受信すると(SQ410、SQ411)、HTTPリクエスト送信部355は、代理応答情報のユーザ端末側情報(T33)に基づいてACKパケットのヘッダを書き換え、ユーザ側インタフェース341を介してユーザ端末1−1に書き換えられたACKパケットを送信する(S405、SQ412)。
図17では、HTTPリクエストが二つのパケットに分割された例を示したが本発明はこれに限定されない。HTTPリクエストは三つ以上に分割されていてもよい。この場合、HTTPリクエスト全体を受信するまではSQ301からSQ304までの処理が実行され、HTTPリクエスト全体を受信するとSQ405からSQ408までの処理が実行される。
以上で説明したように、本発明によれば、ユーザ端末1及びWebサーバ6等の既存のネットワーク構成を大幅に変更することなく、かつ、ユーザ端末1及びWebサーバ6に特別な操作をさせることなく、中継装置3は、HTTP上のアプリケーション及びデータの種類等のHTTPリクエストの解析結果に基づいて、サービス経路4を切り替えることができる。また、中継装置3は、ユーザ端末1からは経路の切り替えを意識させることなく、サービス経路4を切り替えることができる。
これによって、オフロード用の通信経路に振り分けることが可能となり、他のユーザトラフィックへ影響させないトラフィックオフロードが可能となる。また、アプリケーション及びデータの種類によって特徴の異なるサービス経路を切り替え、使用するサービス網ごとに異なる料金を徴収する新たな課金が可能となる。
本実施例では、サービス経路4が二つある場合を例に説明したが、サービス経路4は三つ以上あってもよい。この場合、ルールテーブル(T2)のルールに新たにサービス経路のカラムを対応付ければよい。これによって、中継装置3は、HTTPリクエスト条件(T26)に該当するHTTPリクエストパケットを受信した場合、ルールに対応付けられるサービス経路4を特定し、当該サービス経路4との間で新たなTCPコネクションを確立する。
また、本実施例では、HTTPを用いた通信を例に説明したが、SIPなど、TCPが上位階層のプロトコルとなる通信プロトコルを利用するアプリケーションであれば同様の取り扱いをすることができる。
なお、本実施例では、ソフトウェアによる制御を用いた例について説明したが、その一部をハードウェアによって実現することも可能である。
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。