(57)【特許請求の範囲】
【請求項１】
ネットワーク上に存在する複数のクライアント端末と複数のサーバとの接続を制御するスイッチと、
ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）ヘッダを変換してプロトコル中継を行う中継装置と、
コントローラと
を含み、
前記コントローラは、
前記スイッチ内の転送先を決定する経路テーブルを集中制御する手段と、
前記中継装置の中継処理の制御を行う手段と、
クライアントからのコネクションを終端してメッセージを取り出し、メッセージの内容に基づいて、接続要求の宛先アドレスに対応する複数のサーバの中から接続先となる１つのサーバを選択する手段と、
前記複数のクライアント端末のうちの１つのクライアント端末と前記選択されたサーバとの間を結び、前記中継装置を含む経路を選択し、前記選択された経路を前記スイッチ内の経路テーブルに設定する手段と、
前記中継装置がプロトコル中継を行う際に用いられる中継情報を、前記中継装置に設定する手段と、
前記選択された１つのサーバに対してＴＣＰ接続要求を出して、複数のＴＣＰのパケットの中継に用いられるヘッダ変換情報を前記中継装置にハンドオフする手段と
を具備する
アプリケーションスイッチシステム。
【請求項２】
請求項１に記載のアプリケーションスイッチシステムであって、
前記コントローラは、
前記ネットワーク上に複数の中継装置が存在する場合、前記ネットワークの経路上において接続先となるサーバに最も近い位置に配備された中継装置を選択する手段
を更に具備する
アプリケーションスイッチシステム。
【請求項３】
請求項１に記載のアプリケーションスイッチシステムであって、
前記コントローラは、
前記ネットワーク上に複数の中継装置が存在する場合、前記ネットワークの経路上において接続元のクライアント端末に最も近い位置に配備された中継装置を選択する手段
を更に具備する
アプリケーションスイッチシステム。
【請求項４】
請求項１に記載のアプリケーションスイッチシステムであって、
前記コントローラは、
アプリケーション振り分け判定を行う手段と、
前記複数のサーバのうち振り分け先となるサーバに最も近い位置に配備された中継装置を選択し、前記選択された中継装置を含む経路を選択する手段と、
前記選択された中継装置に対してハンドオフ処理を行う手段
を更に具備する
アプリケーションスイッチシステム。
【請求項５】
請求項１に記載のアプリケーションスイッチシステムであって、
前記コントローラは、
前記複数のクライアント端末のうちの１つのクライアント端末から送信されるパケットの宛先アドレスに基づいて、前記複数のサーバのうち少なくとも１つのサーバを選択する手段と、
前記複数のクライアント端末のうちの１つのクライアント端末と、前記選択された少なくとも１つのサーバとの間をそれぞれ結び、前記中継装置を含むネットワーク経路を選択し、前記選択された経路を前記スイッチ内の経路テーブルに設定する手段と
を更に具備する
アプリケーションスイッチシステム。
【請求項６】
請求項５に記載のアプリケーションスイッチシステムであって、
前記コントローラは、
前記ネットワーク上に複数の中継装置が存在する場合、前記複数のクライアント端末のうちの１つのクライアント端末から前記選択された少なくとも１つのサーバを含む前記複数のサーバまでの共通経路上に存在する複数の中継装置の中から、処理負荷が最も低い中継装置を前記中継装置として選択する手段
を更に具備する
アプリケーションスイッチシステム。
【請求項７】
ネットワーク上に存在する複数のクライアント端末と複数のサーバとの接続を制御するスイッチと、
ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）ヘッダを変換してプロトコル中継を行う中継装置と、
コントローラと
を含み、
前記コントローラは、
前記スイッチ内の転送先を決定する経路テーブルを集中制御する手段と、
前記中継装置の中継処理の制御を行う手段と、
前記複数のクライアント端末のうちの１つのクライアント端末から送信されるパケットの宛先アドレスに基づいて、前記複数のサーバのうち少なくとも１つのサーバを選択する手段と、
前記複数のクライアント端末のうちの１つのクライアント端末と、前記選択された少なくとも１つのサーバとの間をそれぞれ結び、前記中継装置を含むネットワーク経路を選択し、前記選択された経路を前記スイッチ内の経路テーブルに設定する手段と、
前記中継装置がプロトコル中継を行う際に用いられる中継情報を、前記中継装置に設定する手段と、
前記プロトコル中継を行う際に用いられる中継情報として、パケットの宛先アドレスと前記中継装置が持つアドレスとの対応情報を設定するためのアドレス変換テーブルと、
パケットを受信した際に、前記アドレス変換テーブルを参照し、前記受信されたパケットの宛先アドレスと前記中継装置が持つアドレスとを変換する手段と
を具備する
アプリケーションスイッチシステム。
【請求項８】
請求項１乃至７のいずれか一項に記載のアプリケーションスイッチシステムであって、
前記複数のサーバ、前記スイッチ、及び前記中継装置は、コンピュータ上の仮想マシンである
アプリケーションスイッチシステム。
【請求項９】
請求項１乃至８のいずれか一項に記載のアプリケーションスイッチシステムで使用される
コントローラ。
【請求項１０】
スイッチにより、ネットワーク上に存在する複数のクライアント端末と複数のサーバとの接続を制御し、
中継装置により、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）ヘッダを変換してプロトコル中継を行い、
コントローラにより、前記スイッチ内の転送先を決定する経路テーブルを集中制御し、
前記コントローラにより、前記中継装置の中継処理の制御を行い、
前記コントローラにより、クライアントからのコネクションを終端してメッセージを取り出し、メッセージの内容に基づいて、接続要求の宛先アドレスに対応する複数のサーバの中から接続先となる１つのサーバを選択し、
前記コントローラにより、前記複数のクライアント端末のうちの１つのクライアント端末と前記選択されたサーバとの間を結び、前記中継装置を含む経路を選択し、
前記コントローラにより、前記選択された経路を前記スイッチ内の経路テーブルに設定し、
前記コントローラにより、前記中継装置がプロトコル中継を行う際に用いられる中継情報を、前記中継装置に設定し、
前記コントローラにより、前記選択された１つのサーバに対してＴＣＰ接続要求を出して、複数のＴＣＰのパケットの中継に用いられるヘッダ変換情報を前記中継装置にハンドオフする
アプリケーションスイッチ方法。
【請求項１１】
請求項１０に記載のアプリケーションスイッチ方法であって、
前記ネットワーク上に複数の中継装置が存在する場合、前記コントローラにより、前記ネットワークの経路上において接続先となるサーバに最も近い位置に配備された中継装置
を選択する
アプリケーションスイッチ方法。
【請求項１２】
請求項１０に記載のアプリケーションスイッチ方法であって、
前記ネットワーク上に複数の中継装置が存在する場合、前記コントローラにより、前記ネットワークの経路上において接続元のクライアント端末に最も近い位置に配備された中継装置を選択する
アプリケーションスイッチ方法。
【請求項１３】
請求項１０に記載のアプリケーションスイッチ方法であって、
前記コントローラにより、アプリケーション振り分け判定を行い、
前記コントローラにより、前記複数のサーバのうち振り分け先となるサーバに最も近い位置に配備された中継装置を選択し、
前記コントローラにより、前記選択された中継装置を含む経路を選択し、
前記コントローラにより、前記選択された中継装置に対してハンドオフ処理を行う
アプリケーションスイッチ方法。
【請求項１４】
請求項１０に記載のアプリケーションスイッチ方法であって、
前記コントローラにより、前記複数のクライアント端末のうちの１つのクライアント端末から送信されるパケットの宛先アドレスに基づいて、前記複数のサーバのうち少なくとも１つのサーバを選択し、
前記コントローラにより、前記複数のクライアント端末のうちの１つのクライアント端末と、前記選択された少なくとも１つのサーバとの間をそれぞれ結び、前記中継装置を含むネットワーク経路を選択し、前記選択された経路を前記スイッチ内の経路テーブルに設定する
アプリケーションスイッチ方法。
【請求項１５】
請求項１４に記載のアプリケーションスイッチ方法であって、
前記コントローラにより、前記ネットワーク上に複数の中継装置が存在する場合、前記複数のクライアント端末のうちの１つのクライアント端末から前記選択された少なくとも１つのサーバを含む前記複数のサーバまでの共通経路上に存在する複数の中継装置の中から、処理負荷が最も低い中継装置を前記中継装置として選択する
アプリケーションスイッチ方法。
【請求項１６】
スイッチにより、ネットワーク上に存在する複数のクライアント端末と複数のサーバとの接続を制御し、
中継装置により、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）ヘッダを変換してプロトコル中継を行い、
コントローラにより、前記スイッチ内の転送先を決定する経路テーブルを集中制御し、
前記コントローラにより、前記中継装置の中継処理の制御を行い、
前記コントローラにより、前記複数のクライアント端末のうちの１つのクライアント端末から送信されるパケットの宛先アドレスに基づいて、前記複数のサーバのうち少なくとも１つのサーバを選択し、
前記コントローラにより、前記複数のクライアント端末のうちの１つのクライアント端末と、前記選択された少なくとも１つのサーバとの間をそれぞれ結び、前記中継装置を含むネットワーク経路を選択し、前記選択された経路を前記スイッチ内の経路テーブルに設定し、
前記コントローラにより、前記中継装置がプロトコル中継を行う際に用いられる中継情報を、前記中継装置に設定し、
前記コントローラにより、前記プロトコル中継を行う際に用いられる中継情報として、パケットの宛先アドレスと前記中継装置が持つアドレスとの対応情報をアドレス変換テーブルに設定し、
前記コントローラにより、パケットを受信した際に、前記アドレス変換テーブルを参照し、前記受信されたパケットの宛先アドレスと前記中継装置が持つアドレスとを変換する
アプリケーションスイッチ方法。
【請求項１７】
請求項１０乃至１６のいずれか一項に記載のアプリケーションスイッチ方法であって、
前記複数のサーバ、前記スイッチ、及び前記中継装置を、コンピュータ上の仮想マシンのアプリケーションとして実現し、
前記スイッチと前記中継装置との間を、前記コンピュータの内部ネットワークを介して接続する
アプリケーションスイッチ方法。
【請求項１８】
複数のサーバ、スイッチ、及び中継装置を、コンピュータ上の仮想マシンのアプリケーションとして動作させるステップと、
前記スイッチにより、ネットワーク上に存在する複数のクライアント端末と前記複数のサーバとの接続を制御するステップと、
前記中継装置により、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）ヘッダを変換してプロトコル中継を行うステップと、
前記スイッチ内の転送先を決定する経路テーブルを集中制御するステップと、
前記中継装置の中継処理の制御を行うステップと、
コントローラにより、クライアントからのコネクションを終端してメッセージを取り出し、メッセージの内容に基づいて、接続要求の宛先アドレスに対応する複数のサーバの中から接続先となる１つのサーバを選択するステップと、
前記複数のクライアント端末のうちの１つのクライアント端末と前記選択されたサーバとの間を結び、前記中継装置を含む経路を選択するステップと、
前記選択された経路を前記スイッチ内の経路テーブルに設定するステップと、
前記中継装置がプロトコル中継を行う際に用いられる中継情報を、前記中継装置に設定するステップと、
前記選択された１つのサーバに対してＴＣＰ接続要求を出して、複数のＴＣＰのパケットの中継に用いられるヘッダ変換情報を前記中継装置にハンドオフするステップと
をコンピュータに実行させるための
プログラム。
【請求項１９】
請求項１８に記載のプログラムであって、
前記ネットワーク上に複数の中継装置が存在する場合、前記ネットワークの経路上において接続先となるサーバに最も近い位置に配備された中継装置を選択するステップ
を更にコンピュータに実行させるための
プログラム。
【請求項２０】
請求項１８に記載のプログラムであって、
前記ネットワーク上に複数の中継装置が存在する場合、前記ネットワークの経路上において接続元のクライアント端末に最も近い位置に配備された中継装置を選択するステップ
を更にコンピュータに実行させるための
プログラム。
【請求項２１】
請求項１８に記載のプログラムであって、
アプリケーション振り分け判定を行うステップと、
前記複数のサーバのうち振り分け先となるサーバに最も近い位置に配備された中継装置を選択するステップと、
前記選択された中継装置を含む経路を選択するステップと、
前記選択された中継装置に対してハンドオフ処理を行うステップと
を更にコンピュータに実行させるための
プログラム。
【請求項２２】
請求項１８に記載のプログラムであって、
前記コントローラにより、前記複数のクライアント端末のうちの１つのクライアント端末から送信されるパケットの宛先アドレスに基づいて、前記複数のサーバのうち少なくとも１つのサーバを選択するステップと、
前記コントローラにより、前記複数のクライアント端末のうちの１つのクライアント端末と、前記選択された少なくとも１つのサーバとの間をそれぞれ結び、前記中継装置を含むネットワーク経路を選択し、前記選択された経路を前記スイッチ内の経路テーブルに設定するステップと
を更にコンピュータに実行させるための
プログラム。
【請求項２３】
請求項２２に記載のプログラムであって、
前記コントローラにより、前記ネットワーク上に複数の中継装置が存在する場合、前記複数のクライアント端末のうちの１つのクライアント端末から前記選択された少なくとも１つのサーバを含む前記複数のサーバまでの共通経路上に存在する複数の中継装置の中から、処理負荷が最も低い中継装置を前記中継装置として選択するステップ
を更にコンピュータに実行させるための
プログラム。
【請求項２４】
複数のサーバ、スイッチ、及び中継装置を、コンピュータ上の仮想マシンのアプリケーションとして動作させるステップと、
前記スイッチにより、ネットワーク上に存在する複数のクライアント端末と前記複数のサーバとの接続を制御するステップと、
前記中継装置により、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）ヘッダを変換してプロトコル中継を行うステップと、
前記スイッチ内の転送先を決定する経路テーブルを集中制御するステップと、
前記中継装置の中継処理の制御を行うステップと、
コントローラにより、前記複数のクライアント端末のうちの１つのクライアント端末から送信されるパケットの宛先アドレスに基づいて、前記複数のサーバのうち少なくとも１つのサーバを選択するステップと、
前記コントローラにより、前記複数のクライアント端末のうちの１つのクライアント端末と、前記選択された少なくとも１つのサーバとの間をそれぞれ結び、前記中継装置を含むネットワーク経路を選択し、前記選択された経路を前記スイッチ内の経路テーブルに設定するステップと、
前記中継装置がプロトコル中継を行う際に用いられる中継情報を、前記中継装置に設定するステップと、
前記コントローラにより、前記プロトコル中継を行う際に用いられる中継情報として、パケットの宛先アドレスと前記中継装置が持つアドレスとの対応情報をアドレス変換テーブルに設定するステップと、
前記コントローラにより、パケットを受信した際に、前記アドレス変換テーブルを参照し、前記受信されたパケットの宛先アドレスと前記中継装置が持つアドレスとを変換するステップと
をコンピュータに実行させるための
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションスイッチシステムに関し、特にネットワークの経路制御を行うアプリケーションスイッチシステムに関する。
【背景技術】
【０００２】
従来、アプリケーションスイッチにおいて、スイッチ先のサーバが分散配備されている時に、ネットワークの経路が非効率になるという問題があった。【０００３】
特許文献１（米国特許第５９４１９８８号明細書）に、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）スプライシングと呼ばれる二つのＴＣＰセッションの中継手法が開示されている。ＴＣＰスプライシングは、アプリケーションゲートウェイ等のＴＣＰプロキシ装置の高速処理手法であり、ＴＣＰプロキシを行う２つのＴＣＰセッションをパケットレベルの中継処理にショートカットする手法である。【０００４】
また、特許文献２（米国特許第７００００２７号明細書）は、ＴＣＰスプライシングの別の形態によるものである。特許文献２には、バックエンドノードの１つがＴＣＰ終端処理を行い、アプリケーションレベルのリクエストを解釈した上で、どのバックエンドノードに処理を割り振るかを判断して、そのノードにハンドオフする手法が開示されている。バックエンドノードには、プロキシ処理を行うアプリケーションが動作しており、バックエンドノードでの処理の割り振り判定と、フロントエンドノードでのＴＣＰスプライシング処理に分散処理する方式が記載されている。【０００５】
特許文献１に示すようなＴＣＰスプライシングは、アプリケーションスイッチと呼ばれる中継装置で用いられている。クライアントとの間の第一のＴＣＰセッションに対してＴＣＰ終端処理を行い、アプリケーションレベルのメッセージを解釈した上で、次ノードを決定する。例えば、ＨＴＴＰ（Ｈｙｐｅｒ  Ｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）の場合では、ＴＣＰを確立した後のクライアントからサーバへのリクエストメッセージを解釈して、どのようなリソースへのアクセス要求かを判断して、実際のバックエンドサーバへのスイッチや負荷分散処理を行う。そして、振り分け先が確定すると、第二のＴＣＰセッションをバックエンドサーバとの間に確立して、クライアントとの間の第一のＴＣＰセッションと第二のＴＣＰセッションとをパケットレベルで中継処理する。【０００６】
図１は、アプリケーションスイッチを利用したサーバ負荷分散処理を行う従来システムを示したものである。図１に示す従来システムは、クライアント端末１００（１００−ｉ、ｉ＝１〜Ｎ：Ｎは任意の整数）と、スイッチ１０（１０−ｉ、ｉ＝１〜Ｎ）と、アプリケーションスイッチ２０と、サーバ２００（２００−ｉ、ｉ＝１〜Ｎ）を含む。【０００７】
ここでは、クライアント端末１００として、クライアント端末１００−１〜１００−２を示す。スイッチ１０として、スイッチ１０−１〜１０−３を示す。サーバ２００として、サーバ２００−１〜２００−６を示す。なお、サーバ２００−１〜２００−３は、アプリケーションスイッチ２０に接続されており、サーバ２００−４〜２００−６は、スイッチ１０−３に接続されている。【０００８】
図１に示す従来システムでは、クライアント端末１００からのアクセスがスイッチ１０及びアプリケーションスイッチ２０を経由してサーバ２００に接続される際に、アプリケーションスイッチ２０にて、アプリケーションレイヤのメッセージを解釈し、サーバ２００−１〜２００−６の中から実際のアクセス対象となるサーバを選択して、中継接続を行う。【０００９】
図１に示す従来システムにおける課題について説明する。図１に示す従来システムは、典型的には、サーバ２００−１〜２００−３がアプリケーションスイッチ２０に近い所（アプリケーションスイッチ側）に設けられるため、アプリケーションスイッチ２０でスイッチ判定を行った後に、サーバ２００−１〜２００−３のいずれかを選択した場合において、ネットワークトラヒック（通信量）が非効率になることはない。【００１０】
しかしながら、サーバの配備が広域になる場合や、ＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）と呼ばれる仮想マシンの利用によって、サーバの物理位置が移動する場合が考えられる。【００１１】
例えば、図１に示す従来システムにおいて、クライアント端末１００−１からのアクセスがアプリケーションスイッチ２０を経由してサーバ２００−６に接続される場合、ネットワークの経路は、スイッチ１０−１、アプリケーションスイッチ２０、スイッチ１０−１、スイッチ１０−２、スイッチ１０−３、そしてサーバ２００−６となる。【００１２】
このように、図１に示すような従来システムでは、アプリケーションスイッチを利用してスイッチ処理を行うと、ネットワーク経路が非効率になるという課題がある。【００１３】
特許文献２に示される手法は、ＴＣＰスプライシング処理において、アプリケーションスイッチにおける振り分け判断部をバックエンドノードに配備したものである。これにより、アプリケーションスイッチでの判断処理の負荷を分散することができる。しかしながら、この方式では、ＴＣＰスプライシングを行うフロントエンド処理が複数のバックエンドノードへの経路上にある必要があり、サーバが広域に分散した場合に中継処理が非効率になるという課題がある。【００１４】
すなわち、バックエンドノードが広域に分散した場合であっても、クライアントからサーバへのトラヒックは、フロントエンドノードを必ず通過するため、クライアントとサーバのネットワーク上の距離に関係なく経路が固定されてしまうという課題がある。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】米国特許第５９４１９８８号明細書
【特許文献２】米国特許第７００００２７号明細書
【発明の概要】
【００１６】
本発明の目的は、アプリケーション中継処理を効率的に行う方法を提供し、アプリケーションスイッチでの振り分け対象が広域に分散された場合において、単一の中継ノードを経由することなく最適な中継ノードを選択し、効率的なネットワーク収容を実現することを提供することである。
【００１７】
本発明のアプリケーションスイッチシステムは、ネットワーク上に存在する複数のクライアント端末と複数のサーバとの接続を制御するスイッチと、プロトコル中継を行う中継装置と、コントローラとを含む。コントローラは、スイッチ内の転送先を決定する経路テーブルを集中制御する手段と、中継装置の中継処理の制御を行う手段と、複数のサーバのうち接続先となるサーバの選択を行う手段と、複数のクライアント端末のうちの１つのクライアントと選択されたサーバとの間を結び、中継装置を含む経路を選択し、選択された経路をスイッチ内の経路テーブルに設定する手段と、中継装置がプロトコル中継を行う際に用いられる中継情報を、中継装置に設定する手段とを具備する。
【００１８】
また、本発明の他のアプリケーションスイッチシステムは、ネットワーク上に存在する複数のクライアント端末と複数のサーバとの接続を制御するスイッチと、プロトコル中継を行う中継装置と、コントローラとを含む。コントローラは、スイッチ内の転送先を決定する経路テーブルを集中制御する手段と、中継装置の中継処理の制御を行う手段と、複数のサーバのうち接続先の候補となるサーバ群を判定する手段と、複数のクライアント端末のうちの１つのクライアントと接続先候補の各サーバとの間を結び、複数のサーバ群への中継処理を行う中継装置を選択する手段と、中継装置を含む経路を選択し、選択された経路をスイッチ内の経路テーブルに設定する手段と、中継装置がプロトコル中継を行う際に用いられる中継情報を、中継装置に設定する手段とを具備する。
【００１９】
本発明のアプリケーションスイッチ方法では、スイッチにより、ネットワーク上に存在する複数のクライアント端末と複数のサーバとの接続を制御する。次に、中継装置により、プロトコル中継を行う。次に、コントローラにより、スイッチ内の転送先を決定する経路テーブルを集中制御する。次に、コントローラにより、中継装置の中継処理の制御を行う。次に、コントローラにより、複数のサーバのうち接続先となるサーバの選択を行う。次に、コントローラにより、複数のクライアント端末のうちの１つのクライアントと選択されたサーバとの間を結び、中継装置を含む経路を選択する。次に、コントローラにより、選択された経路をスイッチ内の経路テーブルに設定する。次に、コントローラにより、中継装置がプロトコル中継を行う際に用いられる中継情報を、中継装置に設定する。
【００２０】
本発明に係るプログラムを実行することにより、コンピュータは以下の動作を行う。まず、当該コンピュータは、複数のサーバ、スイッチ、及び中継装置を、コンピュータ上の仮想マシンのアプリケーションとして動作させる。また、スイッチにより、ネットワーク上に存在する複数のクライアント端末と複数のサーバとの接続を制御する。また、中継装置により、プロトコル中継を行う。また、スイッチ内の転送先を決定する経路テーブルを集中制御する。また、中継装置の中継処理の制御を行う。また、複数のサーバのうち接続先となるサーバの選択を行う。また、複数のクライアント端末のうちの１つのクライアントと選択されたサーバとの間を結び、中継装置を含む経路を選択する。また、選択された経路をスイッチ内の経路テーブルに設定する。また、中継装置がプロトコル中継を行う際に用いられる中継情報を、中継装置に設定する。なお、本発明に係るプログラムは、記憶媒体や記憶装置に格納可能である。
【００２１】
これにより、アプリケーションスイッチ処理において、スイッチ判定処理を行う装置と中継を行う装置を分離し、任意の位置にＴＣＰの中継ノードを配備することを可能にして、クライアントとサーバ間のネットワーク経路の最適化を実現する。
【図面の簡単な説明】
【００２２】
【図１】アプリケーションスイッチを利用したサーバ負荷分散処理を行う従来システムの例を示す図である。
【図２】本発明の第１実施形態におけるアプリケーションスイッチシステムの構成を示す図である。
【図３】本発明の第１実施形態におけるスイッチの構成を示す図である。
【図４】本発明の第１実施形態における中継装置の構成を示す図である。
【図５】本発明の第１実施形態における変換テーブル内のエントリの例を示す図である。
【図６Ａ】本発明の第１実施形態におけるコントローラの処理を示すフローチャートである。
【図６Ｂ】本発明の第１実施形態におけるコントローラの処理を示すフローチャートである。
【図７】本発明の第２実施形態におけるアプリケーションスイッチシステムの構成を示す図である。
【図８】実施例１におけるアプリケーションスイッチシステムの動作を示すシーケンス図である。
【図９】実施例２におけるアプリケーションスイッチシステムの動作を示すシーケンス図である。
【図１０】本発明の第３実施形態におけるアプリケーションスイッチシステムの構成を示す図である。
【図１１】本発明の第３実施形態における中継装置の構成を示す図である。
【図１２】実施例３におけるアプリケーションスイッチシステムの動作を示すシーケンス図である。
【発明を実施するための形態】
【００２３】
＜第１実施形態＞
以下に、本発明の第１実施形態について添付図面を参照して説明する。
図２に示すように、本発明のアプリケーションスイッチシステムは、クライアント端末１００（１００−ｉ、ｉ＝１〜Ｎ：Ｎは任意の整数）と、スイッチ１０（１０−ｉ、ｉ＝１〜Ｎ）と、中継装置３０と、制御回線５０と、コントローラ６０と、サーバ２００（２００−ｉ、ｉ＝１〜Ｎ）を含む。
【００２４】
クライアント端末１００は、スイッチ１０及び中継装置３０を経由して、サーバ２００に接続する。スイッチ１０及び中継装置３０は、ネットワーク上に存在している。ここでは、クライアント端末１００、スイッチ１０、中継装置３０、及びサーバ２００の個数は異なっているものとする。但し、実際には、クライアント端末１００、スイッチ１０、中継装置３０、及びサーバ２００の個数は同じでも良い。
【００２５】
スイッチ１０は、アプリケーションスイッチである。
【００２６】
中継装置３０は、クライアント端末１００とサーバ２００との間の転送データを、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）スプライシング処理により中継する。
【００２７】
コントローラ６０は、制御回線５０を介して、スイッチ１０及び中継装置３０に接続し、スイッチ１０及び中継装置３０を集中的に管理する。
【００２８】
コントローラ６０は、制御インタフェース６１と、中継制御部６２と、経路制御部６３を備える。
【００２９】
制御インタフェース６１は、制御回線５０を介して、スイッチ１０や、中継装置３０と接続する。
【００３０】
中継制御部６２は、アプリケーション振り分け判定を行う。また、中継制御部６２は、中継装置３０に対する制御（中継制御）を行う。ここでは、中継制御部６２は、中継装置３０に対して、ハンドオフ処理を行う。例えば、中継制御部６２は、中継装置３０に対して、中継開始指示を行う。中継装置３０は、中継開始指示に応じて、中継処理を開始する。
【００３１】
経路制御部６３は、ネットワーク経路を集中管理する。また、経路制御部６３は、接続元のクライアント端末１００からサーバ２００までの経路を計算し、その経路上にある中継装置３０の一つを選択する。ここでは、経路制御部６３は、中継制御部６２がアプリケーション振り分け先を判定した後、振り分け先のサーバに最も近い中継装置３０を選択するとともに、選択された中継装置３０までの経路を設定する。
【００３２】
これにより、コントローラ６０は、広域に分散配備された任意のサーバに対する振り分け選択と、その際の最適なネットワーク経路の選択、中継位置の選択を行うことで、ネットワーク経路の最適化を行う。
【００３３】
クライアント端末１００の例として、ＰＣ（パソコン）、モバイルノートＰＣ、シンクライアント端末、ワークステーション、携帯電話機、カーナビ（カーナビゲーションシステム）、携帯ゲーム機、家庭用ゲーム機、双方向テレビ、デジタルチューナー、デジタルレコーダー、情報家電（ｉｎｆｏｒｍａｔｉｏｎ  ｈｏｍｅ  ａｐｐｌｉａｎｃｅ）、ＯＡ（Ｏｆｆｉｃｅ  Ａｕｔｏｍａｔｉｏｎ）機器等が考えられる。クライアント端末１００は、車両や船舶、航空機等の移動体に搭載されていても良い。但し、実際には、これらの例に限定されない。
【００３４】
スイッチ１０及び中継装置３０が属するネットワーク上の通信回線や、制御回線５０の例として、インターネット、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、無線ＬＡＮ（Ｗｉｒｅｌｅｓｓ  ＬＡＮ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、バックボーン（Ｂａｃｋｂｏｎｅ）、ケーブルテレビ（ＣＡＴＶ）回線、固定電話網、携帯電話網、ＷｉＭＡＸ（ＩＥＥＥ  ８０２．１６ａ）、３Ｇ（３ｒｄ  Ｇｅｎｅｒａｔｉｏｎ）、専用線（ｌｅａｓｅ  ｌｉｎｅ）、ＩｒＤＡ（Ｉｎｆｒａｒｅｄ  Ｄａｔａ  Ａｓｓｏｃｉａｔｉｏｎ）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、シリアル通信回線、データバス等が考えられる。但し、実際には、これらの例に限定されない。
【００３５】
コントローラ６０やサーバ２００の例として、ＰＣ（パソコン）、シンクライアントサーバ、ワークステーション、メインフレーム、スーパーコンピュータ等の計算機が考えられる。但し、実際には、これらの例に限定されない。
【００３６】
クライアント端末１００からサーバ２００へのコネクション接続の際の各装置の機能について、図２に示すようなアプリケーションスイッチシステムにおいて、クライアント端末１００−１から所定のサービスに対して接続する場合を例に説明する。
【００３７】
クライアント端末１００−１は、コントローラ６０に対して、ＴＣＰ接続要求を行う。ここでは、クライアント端末１００−１は、コントローラ６０を宛先としたパケットを送信し、ＴＣＰ接続を試みる。このとき、端末１００−１からみると、コントローラ６０がサーバ２００にみえる。すなわち、端末１００−１は、コントローラ６０をサーバ２００とみなしている。
【００３８】
スイッチ１０−１は、クライアント端末１００−１から送信されたパケットを受信すると、スイッチ１０のフローエントリーに基づいて、転送処理を行う。
【００３９】
スイッチ１０−１は、初期状態でフローエントリーが登録されていない場合、制御回線５０を通じて、クライアント端末１００−１から送信されたパケットをコントローラ６０に送る。
【００４０】
コントローラ６０は、クライアント端末１００−１からのＴＣＰ接続要求に対して、ＴＣＰプロトコルスタックで処理を行う。なお、コントローラ６０も、クライアント端末１００−１宛のパケットを送信する際は、スイッチ１０−１を経由して送信する。
【００４１】
コントローラ６０は、クライアント端末１００−１からの送信データの内容に基づいて、接続すべき（アクセス対象の）サーバ２００を選択する。選択判断としては、サーバ２００の負荷を平滑化する方法や、クライアント端末１００−１にネットワーク的に近いものを選択する方法等がある。
【００４２】
コントローラ６０は、サーバ２００を選択した後、コントローラ６０とサーバ２００の間に第２のＴＣＰコネクションを接続する。
【００４３】
更に、コントローラ６０は、クライアント端末１００−１とサーバ２００間の経路上にある中継装置３０、若しくは、経路に近い位置にある中継装置３０を選択し、第１のＴＣＰ情報及び第２のＴＣＰ情報を使用してスプライシング処理を実行する。これにより、クライアント端末１００−１とサーバ２００間のアクセス処理が、コントローラ６０経由のプロキシ処理から、中継処理を経由するパケット中継処理になる。
【００４４】
図３を参照して、本発明の第１実施形態におけるスイッチ１０の構成について説明する。
スイッチ１０は、スイッチ処理部１１と、フローテーブル１２と、スイッチ制御部１３と、回線１４（１４−ｉ、ｉ＝１〜Ｎ）を備える。
【００４５】
スイッチ処理部１１は、回線１４から入力されたパケットのヘッダ情報を抽出し、フローテーブル１２を参照して、出力回線を決定する。また、スイッチ処理部１１は、回線１４を介して、クライアント端末１００、他のスイッチ１０、中継装置３０、及びサーバ２００に接続する。ここでは、スイッチ処理部１１は、回線１４（１４−ｉ、ｉ＝１〜Ｎ）から入力されたパケットに対し、ヘッダ情報を抽出し、フローテーブル１２を参照して、出力回線を決定する。
【００４６】
フローテーブル１２は、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）ヘッダ、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）ヘッダ、レイヤ４ヘッダから得られる情報をフローの識別情報として登録し、そのフローに対する出力情報を格納するエントリを有する。フローに対する出力情報の例として、出力回線やヘッダ書き換え等のアクション情報が考えられる。ここでは、フローテーブル１２は、ＩＰアドレス、ＴＣＰポート番号にて特定されるフロー情報や、その他のラベル等、フローの識別子となるものに基づいていれば良い。
【００４７】
スイッチ制御部１３は、制御インタフェース６１を介して、コントローラ６０に接続する。このとき、スイッチ制御部１３は、制御回線５０を経由して、制御インタフェース６１に接続する。すなわち、スイッチ制御部１３は、制御回線５０を介して、コントローラ６０からの指示や操作、その他のデータを受け付ける。ここでは、スイッチ制御部１３は、コントローラ６０との間の制御通信を行うとともに、スイッチ１０の内部の制御を行う。コントローラ６０は、スイッチ制御部１３を介して、フローエントリーの登録、削除等の制御を行う。また、スイッチ制御部１３は、フローエントリーにヒットしないパケットについて、制御インタフェースを介してコントローラ６０に送信したり、コントローラ６０からのパケット送信命令により、指定された出力回線への送信処理を行う。
【００４８】
回線１４（１４−ｉ、ｉ＝１〜Ｎ）は、クライアント端末１００、他のスイッチ１０、中継装置３０、及びサーバ２００等に接続される通信回線である。
【００４９】
図４を参照して、本発明の第１実施形態における中継装置３０の構成について説明する。
中継装置３０は、ＴＣＰヘッダ変換処理部３１と、変換テーブル３２と、中継プロトコル処理部３３と、回線３４と、回線３５を備える。
【００５０】
ＴＣＰヘッダ変換処理部３１は、回線３４及び回線３５を介して、外部と接続する。ここでは、ＴＣＰヘッダ変換処理部３１は、回線３４及び回線３５を介して、クライアント端末１００、他のスイッチ１０、中継装置３０、及びサーバ２００に接続する。また、ＴＣＰヘッダ変換処理部３１は、変換テーブル３２に基づいて、回線３４と回線３５の間で送受信されるパケットに対して、ＴＣＰヘッダ変換処理を行う。ここでは、ＴＣＰヘッダ変換処理部３１は、回線３４又は回線３５から受信したパケットに対し、変換テーブル３２を参照し、受信したパケットのヘッダが、変換テーブル３２に記載されているヘッダにヒットした場合は、受信したパケットのヘッダを変換テーブル３２に記載されているヘッダに置き換えるヘッダ変換処理を行う。
【００５１】
変換テーブル３２には、ＴＣＰスプライシング処理に必要な情報が記載されている。ここでは、変換テーブル３２は、エントリとして、入力キーと、出力情報と、ステート情報を有する。ＴＣＰヘッダ変換処理部３１は、変換テーブル３２を参照し、ＩＰアドレス及びＴＣＰポート番号を入力キーとして検索して、ＩＰアドレス及びＴＣＰポート番号の書き換え値と、シーケンス番号の再計算のための補正値を取得する。
【００５２】
中継プロトコル処理部３３は、制御インタフェース６１を介して、コントローラ６０に接続する。このとき、中継プロトコル処理部３３は、制御回線５０を経由して、制御インタフェース６１に接続する。すなわち、中継プロトコル処理部３３は、制御回線５０を介して、コントローラ６０からの指示や操作、その他のデータを受け付ける。ここでは、中継プロトコル処理部３３は、コントローラ６０からのハンドオフ要求命令や、中継開始指示等の中継制御に関するプロトコル処理を行う。このとき、中継プロトコル処理部３３は、ハンドオフ命令に応じて、ＴＣＰスプライシング処理に必要な変換テーブル３２の設定を行う。また、中継プロトコル処理部３３は、中継開始指示に応じて、該当フローに対するスプライシング処理を有効にするとともに、バッファに保留されていたパケットの送信を行う。
【００５３】
回線３４及び回線３５は、クライアント端末１００、他のスイッチ１０、中継装置３０、及びサーバ２００等に接続される通信回線である。
【００５４】
なお、中継装置３０は、スイッチ機能を兼ね備えても良いが、ここでは、特に本発明による中継処理機能を備えたものを中継装置３０と呼び、中継処理機能を備えない回線スイッチをスイッチ１０と呼ぶことで、スイッチ１０と中継装置３０を区別している。
【００５５】
図５を参照して、変換テーブル３２内のエントリの例について説明する。
【００５６】
変換テーブル３２は、入力キーとして、回線番号と、ＩＰ宛先アドレス（ＩＰＤＡ：ＩＰ  Ｄｅｓｔｉｎａｔｉｏｎ  Ａｄｄｒｅｓｓ）と、ＩＰ送信元アドレス（ＩＰＳＡ：ＩＰ  Ｓｏｕｒｃｅ  Ａｄｄｒｅｓｓ）と、ＴＣＰ送信元ポート番号（ＴＣＰＳＰ：ＴＣＰ  Ｓｏｕｒｃｅ  Ｐｏｒｔ）と、ＴＣＰ宛先ポート番号（ＴＣＰＤＰ：ＴＣＰ  Ｄｅｓｔｉｎａｔｉｏｎ  Ｐｏｒｔ）を含む。ＴＣＰヘッダ変換処理部３１は、変換テーブル３２を参照し、受信したパケットのヘッダと、これらの入力キーを照合することで、エントリがあるかどうかの判定を行う。
【００５７】
変換テーブル３２の出力情報には、ヘッダを変換して出力するための情報が記載されている。ここでは、変換テーブル３２は、出力情報として、出力回線番号と、ＩＰ宛先アドレス（ＩＰＤＡ）、ＩＰ送信元アドレス（ＩＰＳＡ）、ＴＣＰ送信元ポート番号（ＴＣＰＳＰ）、ＴＣＰ宛先ポート番号（ＴＣＰＤＰ）と、シーケンス番号の差分値と、ＡＣＫ番号の差分値を含む。ＴＣＰヘッダ変換処理部３１は、変換テーブル３２を参照し、ＩＰ宛先アドレス（ＩＰＤＡ）、ＩＰ送信元アドレス（ＩＰＳＡ）、ＴＣＰ送信元ポート番号（ＴＣＰＳＰ）、及びＴＣＰ宛先ポート番号（ＴＣＰＤＰ）は、出力パケットに付与する。また、シーケンス番号の差分値とＡＣＫ番号の差分値は、ＴＣＰスプライシング処理のために記録されている。
【００５８】
また、変換テーブル３２は、ステート情報として、フロー管理情報を含む。ここでは、ＴＣＰヘッダ変換処理部３１は、変換テーブル３２に、フロー管理情報としてＴＣＰの状態を記録する。
【００５９】
なお、スイッチ１０及び中継装置３０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）上で動作するプログラムとして実現されても良い。また、スイッチ１０及び中継装置３０は、ハードウェア回路として実現されても良い。
【００６０】
図６Ａを参照して、コントローラ６０の処理について説明する。なお、図６Ａでは、コントローラ６０の処理のうち、本発明に関係する箇所のみを示している。
【００６１】
（１）ステップＳ１１
コントローラ６０は、外部からのパケット入力等のトリガにより、イベント処理を起動する。
【００６２】
（２）ステップＳ１２
コントローラ６０は、イベント処理にてイベントの種類を判断する。ここでは、コントローラ６０は、イベントがクライアント端末１００とコントローラ６０との間における第１のＴＣＰコネクション確立イベントであるか否か判断する。
【００６３】
（３）ステップＳ１３
コントローラ６０は、イベントが第１のＴＣＰコネクション確立イベントである場合、中継処理初期化処理を行う。コントローラ６０は、中継処理初期化処理において、第１のＴＣＰコネクションに対する中断設定を行った後、接続先となるサーバ２００との間に第２のＴＣＰコネクションを確立する。また、コントローラ６０は、接続元のクライアント端末１００から接続先となるサーバ２００までの経路を計算し、その経路上にある中継装置３０の一つを選択し、選択された中継装置３０に対して、第１及び第２のＴＣＰコネクション情報に基づいて、ハンドオフ処理要求を送信する。中継処理初期化処理の詳細については後述する。コントローラ６０は、中継処理初期化処理の後、再びイベント処理に戻る。
【００６４】
（４）ステップＳ１４
コントローラ６０は、イベントがハンドオフ処理完了であるか否か判断する。
【００６５】
（５）ステップＳ１５
コントローラ６０は、イベントがハンドオフ処理完了であった場合、中継処理初期化処理において決定した経路上の各スイッチ１０に対して、フローエントリー設定を行う。フローエントリーは、第１及び第２のＴＣＰフロー情報を表している。クライアント端末１００と中継装置３０の間のスイッチ１０には、第１のＴＣＰ情報を設定する。中継装置３０とサーバ２００の間のスイッチ１０には、第２のＴＣＰ情報を設定する。
【００６６】
（６）ステップＳ１６
コントローラ６０は、イベントがフローエントリー設定完了であるか否か判断する。
【００６７】
（７）ステップＳ１７
コントローラ６０は、イベントがフローエントリー設定完了であった場合、中継処理初期化処理で中断設定されたＴＣＰコネクションのパケットを受信していた場合、そのパケットを中継装置３０に向けて送信する。このとき、コントローラ６０は、中断設定されたＴＣＰコネクションのパケットを中継装置３０に送るために、コントローラ６０からスイッチ１０に対してパケット送信を行い、パケット送信処理がフローエントリーを参照することで、中継装置３０に向けたパケット送信が実現できる。
【００６８】
（８）ステップＳ１８
コントローラ６０は、パケット送信と同時、又はその後遅滞無く、中継装置３０に中継開始要求を送信する。
【００６９】
（９）ステップＳ１９
コントローラ６０は、イベントがセッション終了通知であるか否か判断する。
【００７０】
（１０）ステップＳ２０
コントローラ６０は、イベントがセッション終了通知であった場合、中継のために管理していた第１及び第２のＴＣＰに関する管理テーブルを削除する。
【００７１】
図６Ｂを参照して、中継処理初期化処理の詳細について説明する。
【００７２】
（１）ステップＳ２１
コントローラ６０の制御インタフェース６１は、中継処理初期化処理では、クライアント端末１００との間に第１のＴＣＰコネクションを確立した後、クライアント端末１００からデータを読み出す。更に、コントローラ６０は、第１のＴＣＰコネクションに関するコネクション情報（宛先、送信元ＩＰアドレス、宛先、送信元ＴＣＰポート番号、シーケンス番号の初期値）をＴＣＰ処理スタックから読み出す。
【００７３】
（２）ステップＳ２２
コントローラ６０の制御インタフェース６１は、クライアント端末１００からデータを読み出すと、第１のＴＣＰコネクションの終端処理を中断し、以降に受信した同じＴＣＰコネクションのパケットを、受信したままの状態でバッファリングして保持しておく。
【００７４】
（３）ステップＳ２３
コントローラ６０の中継制御部６２は、読み出されたデータの内容をチェックして、設定ポリシーと照合し、接続先となるサーバ２００を決定する。
【００７５】
（４）ステップＳ２４
コントローラ６０の制御インタフェース６１は、決定したサーバ２００（接続先となるサーバ２００）との間に第２のＴＣＰコネクションを確立する。このとき、コントローラ６０は、第２のＴＣＰのコネクション情報をＴＣＰ処理スタックから読み出す。第２のＴＣＰのコネクション情報の例として、宛先、送信元ＩＰアドレス、宛先、送信元ＴＣＰポート番号、シーケンス番号の初期値等が考えられる。更に、コントローラ６０は、第１のＴＣＰコネクションにてクライアント端末１００から読み出されたデータを、第２のＴＣＰコネクションにて接続先となるサーバ２００に送信する。
【００７６】
（５）ステップＳ２５
コントローラ６０の経路制御部６３は、接続元のクライアント端末１００から接続先となるサーバ２００までの経路を計算し、その経路上にある中継装置３０の一つを選択する。中継装置３０の選択方法としては、最もサーバ２００に近い中継装置３０や最もクライアント端末１００に近い中継装置３０、或いは、中継可能なコネクション数に最も余裕のある中継装置３０を選択する方法が考えられる。
【００７７】
（６）ステップＳ２６
コントローラ６０の中継制御部６２は、選択された中継装置３０に対して、第１及び第２のＴＣＰコネクション情報に基づいて、ハンドオフ処理要求を送信する。コントローラ６０は、第１及び第２のコネクション情報の例としては、クライアント端末１００のＩＰアドレス、コントローラ６０のＩＰアドレス、サーバ２００のＩＰアドレス、ＴＣＰコネクションのポート番号、シーケンス番号の差分値、及びＡＣＫ番号の差分値が考えられる。シーケンス番号の差分値、及びＡＣＫ番号の差分値は、シーケンス番号の初期値から求められる。コントローラ６０は、これらのコネクション情報をハンドオフ処理要求として、決定した中継装置３０に対して送信する。コントローラ６０は、ハンドオフ処理要求を送信した後、ハンドオフ処理を完了する。
【００７８】
コントローラ６０からスイッチ１０内のフローテーブル１２を操作する具体的な方式としては、「Ｏｐｅｎｆｌｏｗ」（ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／）や、「ＧＭＰＬＳ」（Ｇｅｎｅｒａｌｉｚｅｄ  Ｍｕｌｔｉ−Ｐｒｏｔｏｃｏｌ  Ｌａｂｅｌ  Ｓｗｉｔｃｈｉｎｇ）、「ＭＩＢ＋ＶＬＡＮ」（Ｍａｎａｇｅｍｅｎｔ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｂａｓｅ  ＋  Ｖｉｒｔｕａｌ  ＬＡＮ）等が挙げられる。
【００７９】
「Ｏｐｅｎｆｌｏｗ」の場合、コントローラ６０内の制御インタフェース６１は、「Ｏｐｅｎｆｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ」に対応する。制御回線５０及びスイッチ制御部１３のコントローラ６０向けインタフェースは、「Ｓｅｃｕｒｅ  Ｃｈａｎｎｅｌ」に対応する。「ＧＭＰＬＳ」の場合、コントローラ６０は、「ＭＩＢ」に該当する。スイッチ１０は、「ＧＭＰＬＳスイッチ」に該当する。スイッチ制御部１３は、「ＧＭＰＬＳスイッチ」内のテーブル管理部に該当する。また、コントローラ６０は、スイッチ１０の「ＭＩＢインタフェース」を用いて、スイッチ１０の「ＶＬＡＮ設定」を操作することもできる。
【００８０】
コントローラ６０内の制御インタフェース６１と、スイッチ１０内のスイッチ制御部１３の間のインタフェースが、「Ｏｐｅｎｆｌｏｗ」、「ＧＭＰＬＳ」、「ＭＩＢ＋ＶＬＡＮ」のいずれに対応している場合においても、本実施形態を適用できる。
【００８１】
＜第２実施形態＞
以下に、本発明の第２実施形態について説明する。
本実施形態では、中継装置３０及びサーバ２００を単独の装置としてではなく、コンピュータ上の仮想マシン（ＶＭ）のアプリケーションとして実現する。サーバ２００上に複数の仮想マシンを動作させ、これらの仮想マシンの一つは、中継機能を実現する。他の仮想マシンは、サーバ機能を実現する。そして、サーバ２００上で、中継機能とサーバ機能との間を仮想マシン間の内部ネットワークにより接続する。
【００８２】
図７を参照すると、本実施形態においては、サーバ２００は、主機能部２１０と、サーバ機能部２２０（２２０−ｉ、ｉ＝１〜Ｎ）と、中継機能部２３０を含む。
【００８３】
主機能部２１０は、ＣＰＵ２１１と、仮想マシンモニタ（ＶＭＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍｏｎｉｔｏｒ）、又は、Ｈｙｐｅｒｖｉｓｏｒ）２１２を含む。主機能部２１０では、ＣＰＵ２１１上に仮想マシンモニタ２１２が動作し、その上で、サーバ機能部２２０−１〜２２０−Ｎ、中継機能部２３０が動作している。ここでは、中継機能部２３０は、中継機能と、スイッチ機能を持つ。
【００８４】
更に、中継機能部２３０とサーバ機能部２２０の間は、通信チャネルで通信可能である。中継機能部２３０は、装置の外部との間にネットワークインタフェースと制御インタフェースを保持する。なお、制御インタフェースとネットワークインタフェースは、物理的に同じ回線を使用しても良い。
【００８５】
本構成では、サーバ２００とスイッチ１０、中継機能部２３０が１つのコンピュータ上で動作することで、中継機能部２３０を最もサーバ２００に近づけた場合の構成となる。中継装置３０を物理的な装置としてネットワーク内に配備した場合では、中継のための変換テーブル３２の位置がネットワークの経路上にあり、その位置が変更できないが、本例に示す配備例では、中継機能部２３０が物理的には、サーバ２００と同じ位置にあり、ネットワーク上に変換テーブル３２が配備されないため、ネットワーク経路を柔軟に選択することができる。また、中継機能部２３０を仮想マシン上に実現することで、中継機能部２３０がサーバ２００と同じ計算機に配備されているにもかかわらず、サーバ２００プリケーションやサーバ２００のプロトコルスタックは、変更が不要であり、ポータビリティが向上するという効果がある。
【００８６】
＜実施例１＞
図８を参照して、図２におけるクライアント端末１００−１からサーバ２００−３に対して接続する場合について説明する。
【００８７】
（１）ステップＳ１０１
クライアント端末１００−１は、サーバ２００が提供するサービスを受けるために、ＴＣＰ接続要求を出す。このとき、スイッチ１０−１の初期状態は、フローエントリーがない状態である。従って、フロー検索でミスヒットとなり、コントローラ６０に対してデータが送られる。また、コントローラ６０は、スイッチ１０−１を介して、このクライアント端末１００−１と通信することができる。ＴＣＰ接続要求では、「３−ｗａｙ  ｈａｎｄｓｈａｋｅ」と呼ばれるシーケンスでコネクションが確立される。
【００８８】
（２）ステップＳ１０２
クライアント端末１００−１は、コネクションが確立すると、リクエストデータをコントローラ６０に送信する。
【００８９】
（３）ステップＳ１０３
コントローラ６０は、データセグメントを正しく受信すると、ＴＣＰプロトコル処理を行い、受け取ったデータのシーケンス番号を示す位置についてのＡＣＫを返す。
【００９０】
（４）ステップＳ１０４
コントローラ６０は、リクエストデータの内容をチェックして、その内容に基づいて、接続するサーバ２００を選択する。例えば、コントローラ６０は、ＨＴＴＰの場合には、ＧＥＴメッセージに含まれるＵＲＩ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｅｒ）を中継制御部６２に含まれるポリシーデータベースと比較することで、どのサーバ２００に接続するかを判定し、判定結果に基づいて、接続するサーバ２００を選択する。ここでは、コントローラ６０は、サーバ２００−３を選択し、選択されたサーバ２００に対して第二のＴＣＰセッションを確立する。
【００９１】
（５）ステップＳ１０５
コントローラ６０は、クライアント端末１００−１から受信して保持していたリクエストデータをサーバ２００−３に対して送信する。このとき、コントローラ６０は、選択されたサーバ２００−３が接続されたエッジとなるスイッチ１０−３を介してデータを送信する。
【００９２】
（６）ステップＳ１０６
サーバ２００−３は、リクエストデータに対してＡＣＫを返すことで、正常受信を通知する。このとき、サーバ２００−３は、スイッチ１０−３においてフローエントリーを検索し、ミスヒットである場合に制御回線を使って、戻りパケットをコントローラ６０に送る。
【００９３】
（７）ステップＳ１０７
コントローラ６０は、サーバ２００−３からＡＣＫを受信すると、ＴＣＰ終端処理を中断し、クライアント端末１００−１から受信するデータがある場合、パケットのままバッファに保持する。
【００９４】
（８）ステップＳ１０８
同様に、コントローラ６０は、サーバ２００−３からＡＣＫを受信すると、ＴＣＰ終端処理を中断し、サーバ２００−３から受信するデータがある場合、パケットのままバッファに保持する。
【００９５】
（９）ステップＳ１０９
次に、コントローラ６０は、経路制御部６３にクライアント端末１００−１からサーバ２００−３までの経路を問い合わせ、ＴＣＰスプライシングを行う中継装置３０を決定する。いま、図２において、コントローラ６０は、クライアント端末１００−１からサーバ２００−３へのアクセスを選択したとし、経路としてスイッチ１０−１、スイッチ１０−２、中継装置３０−１、スイッチ１０−３を取得したとする。ここでは、コントローラ６０は、中継装置３０−１を利用すると決定する。コントローラ６０は、中継装置３０−１に対して、ＴＣＰスプライシングのためのハンドオフ要求を送信する。ハンドオフ要求には、第一及び第二のＴＣＰの情報が含まれる。具体的には、ＴＣＰセッションを特定するための、ＩＰアドレス（宛先、送信元）、ＴＣＰポート番号（宛先、送信元）と第一と第二のＴＣＰにおける初期シーケンス番号の差分情報であり、シーケンス番号の差分情報は、クライアント端末１００−１からサーバ２００−３の方向と、サーバ２００−３からクライアント端末１００−１の方向の二種類がある。
【００９６】
（１０）ステップＳ１１０
中継装置３０−１は、ハンドオフ要求を受信すると、要求に含まれるパラメータを変換テーブル３２に登録する。変換テーブル３２は、入力ヘッダ情報をキーとして登録される。中継装置３０−１は、変換テーブル３２に、クライアント端末１００−１からサーバ２００−３の方向の変換ルールと、サーバ２００−３からクライアント端末１００−１の方向の変換ルールの２種類を登録する。この例を図５に示す。本例では、クライアント端末１００−１のＩＰアドレス「１０．２．１．１」、コントローラ６０のＩＰアドレス「１０．１．１．１」の間に第１のＴＣＰコネクションがある。ＴＣＰの宛先ポート番号は、「８０番」である。送信元ポート番号は、「１５００番」である。サーバ２００−３のＩＰアドレス「１０．１．０．２」とコントローラ６０との間には、第２のＴＣＰコネクションがある。ＴＣＰの宛先ポート番号は、「８０番」である。送信元ポート番号は、「２０００番」である。また、中継装置３０−１は、クライアント端末１００−１からサーバ２００−３の方向に対して第１のＴＣＰから第２のＴＣＰへの変換を行うために、シーケンス番号の値を「−４０００」し、ＡＣＫ番号の値を「＋２０００」する旨を、変換テーブル３２に登録する。なお、検索時に方向に応じて宛先、送信元のアドレス、ポート番号を入れ替えるようにすれば、テーブルのエントリは、１種類で良い。中継装置３０−１は、変換テーブル３２の登録が完了すると、完了通知をコントローラ６０に送信する。
【００９７】
（１１）ステップＳ１１１
コントローラ６０は、クライアント端末１００−１からサーバ２００−３への経路上のスイッチ１０にフローエントリーを登録する。フローエントリーは、入力したパケットのヘッダ情報をキーとして、どのポートに出力するかを決定するものである。ここでは、コントローラ６０は、スイッチ１０−２に、第１のＴＣＰコネクションを転送するためのフローエントリーを設定する。
【００９８】
（１２）ステップＳ１１２
同様に、コントローラ６０は、スイッチ１０−１に、第１のＴＣＰコネクションを転送するためのフローエントリーを設定する。
【００９９】
（１３）ステップＳ１１３
コントローラ６０は、スイッチ１０−３に、第２のＴＣＰコネクションを転送するためのフローエントリーを設定する。
【０１００】
（１４）ステップＳ１１４
コントローラ６０は、フローエントリーが完了した時点で、第１及び第２のＴＣＰコネクションの後続のデータがコントローラ６０に保持されている場合は、後続のデータを、フローエントリーに従って、スイッチ１０−１に転送する。
【０１０１】
（１５）ステップＳ１１５
同様に、コントローラ６０は、後続のデータを、フローエントリーに従って、スイッチ１０−３に転送する。
【０１０２】
（１６）ステップＳ１１６
次に、コントローラ６０は、中継装置３０−１に中継開始要求を送る。
【０１０３】
（１７）ステップＳ１１７
中継装置３０−１は、中継開始要求に応じて、指定されたＴＣＰコネクションについてＴＣＰスプライシング処理を開始する。以降、装置３０−１は、クライアント端末１００−１とサーバ２００−３との間の転送データを、ＴＣＰスプライシング処理により中継する。具体的には、装置３０−１は、ＩＰアドレス、ＴＣＰポート番号の変換と、シーケンス番号、ＡＣＫ番号の変換を行う。装置３０−１は、シーケンス番号、及びＡＣＫ番号に対し、テーブルに記載された差分値を加算する。装置３０−１は、ヘッダ変換を終わると、ＴＣＰシーケンス番号を再計算して補正する。ここでは、サーバ２００−３は、中継装置３０−１を介して、クライアント端末１００−１にデータを転送し、クライアント端末１００−１からＡＣＫを受信する。
【０１０４】
（１８）ステップＳ１１８
また、クライアント端末１００−１は、中継装置３０−１を介して、サーバ２００−３にデータを転送し、サーバ２００−３からＡＣＫを受信する。
【０１０５】
（１９）ステップＳ１１９
更に、サーバ２００−３は、中継装置３０−１を介して、クライアント端末１００−１にデータを転送し、クライアント端末１００−１からＡＣＫを受信する。
【０１０６】
（２０）ステップＳ１２０
中継装置３０−１は、ＴＣＰスプライシング処理を実行している時には、ＴＣＰヘッダに含まれるＦＩＮフラグを監視し、コネクションの終了を判断する。具体的には、中継装置３０−１は、双方向それぞれについて、ＦＩＮとそれに対応するＡＣＫを受信した時に、ＴＣＰ状態が終了になったと判断し、変換テーブル３２を削除するとともに、コントローラ６０にセッション終了を通知する。ここでは、クライアント端末１００−１は、中継装置３０−１を介して、サーバ２００−３にＦＩＮを送信する。
【０１０７】
（２１）ステップＳ１２１
次に、サーバ２００−３は、中継装置３０−１を介して、クライアント端末１００−１にＡＣＫを返す。
【０１０８】
（２２）ステップＳ１２２
更に、サーバ２００−３は、中継装置３０−１を介して、クライアント端末１００−１にＦＩＮを送信する。
【０１０９】
（２３）ステップＳ１２３
クライアント端末１００−１は、中継装置３０−１を介して、サーバ２００−３にＡＣＫを返す。
【０１１０】
（２４）ステップＳ１２４
中継装置３０−１は、コネクションが終了になったと判断した時、コントローラ６０にセッション終了を通知する。
【０１１１】
＜実施例２＞
図９を参照して、図２におけるクライアント端末１００−２からサーバ２００−６に対して接続する場合について説明する。この例では、中継位置がクライアント端末側である。
【０１１２】
この場合、コントローラ６０により求められる経路は、中継装置３０−３、スイッチ１０−４、スイッチ１０−５、スイッチ１０−６となる。経路上にある中継装置３０は、最もクライアント端末１００に近い箇所にある中継装置３０−３のみである。本実施例では、この中継装置３０−３をＴＣＰスプライシング処理に利用する。
【０１１３】
なお、本実施例における構成の場合、始めのコネクション確立のデータは、中継装置３０−３を通ってからスイッチ１０−４に渡り、スイッチ１０−４からコントローラ６０に渡る。そのため、中継装置３０−３やスイッチ１０−４は、変換テーブル３２にミスヒットしたパケットを、廃棄することなく、何もせずに通過させる。
【０１１４】
ステップＳ２０１からステップＳ２２４のほとんどは、図８のステップＳ１０１からステップＳ１２４と同様である。異なる点は、ステップＳ２１４である。ステップＳ２１４において、コントローラ６０は、第１のコネクションに属するクライアント端末１００−２からのパケットを保持していた場合に、そのパケットのヘッダ変換を行うために、スイッチ１０−４ではなく、中継装置３０−３に挿入し、スプライシング処理の後にスイッチ１０−４に向けて送信する機能を持つ。
【０１１５】
（１）ステップＳ２０１
クライアント端末１００−２は、サーバ２００が提供するサービスを受けるために、ＴＣＰ接続要求を出す。このとき、スイッチ１０−４の初期状態は、フローエントリーがない状態である。従って、フロー検索でミスヒットとなり、コントローラ６０に対してデータが送られる。また、コントローラ６０は、スイッチ１０−４を介して、このクライアント端末１００−２と通信することができる。
【０１１６】
（２）ステップＳ２０２
クライアント端末１００−２は、コネクションが確立すると、リクエストデータをコントローラ６０に送信する。
【０１１７】
（３）ステップＳ２０３
コントローラ６０は、データセグメントを正しく受信すると、ＴＣＰプロトコル処理を行い、受け取ったデータのシーケンス番号を示す位置についてのＡＣＫを返す。
【０１１８】
（４）ステップＳ２０４
コントローラ６０は、リクエストデータの内容をチェックして、その内容に基づいて、接続するサーバ２００を選択する。ここでは、コントローラ６０は、サーバ２００−６を選択し、選択されたサーバ２００−６に対して第二のＴＣＰセッションを確立する。
【０１１９】
（５）ステップＳ２０５
コントローラ６０は、クライアント端末１００−２から受信して保持していたリクエストデータをサーバ２００−６に対して送信する。このとき、コントローラ６０は、選択されたサーバ２００−６が接続されたエッジとなるスイッチ１０−６を介してデータを送信する。
【０１２０】
（６）ステップＳ２０６
サーバ２００−６は、リクエストデータに対してＡＣＫを返すことで、正常受信を通知する。このとき、サーバ２００−６は、スイッチ１０−６においてフローエントリーを検索し、ミスヒットである場合に制御回線を使って、戻りパケットをコントローラ６０に送る。
【０１２１】
（７）ステップＳ２０７
コントローラ６０は、サーバ２００−６からＡＣＫを受信すると、ＴＣＰ終端処理を中断し、クライアント端末１００−２から受信するデータがある場合、パケットのままバッファに保持する。
【０１２２】
（８）ステップＳ２０８
同様に、コントローラ６０は、サーバ２００−６からＡＣＫを受信すると、ＴＣＰ終端処理を中断し、サーバ２００−６から受信するデータがある場合、パケットのままバッファに保持する。
【０１２３】
（９）ステップＳ２０９
次に、コントローラ６０は、経路制御部６３にクライアント端末１００−２からサーバ２００−６までの経路を問い合わせ、ＴＣＰスプライシングを行う中継装置３０を決定する。ここでは、コントローラ６０は、中継装置３０−３を利用すると決定する。コントローラ６０は、中継装置３０−３に対して、ＴＣＰスプライシングのためのハンドオフ要求を送信する。ハンドオフ要求には、第一及び第二のＴＣＰの情報が含まれる。具体的には、ＴＣＰセッションを特定するための、ＩＰアドレス（宛先、送信元）、ＴＣＰポート番号（宛先、送信元）と第一と第二のＴＣＰにおける初期シーケンス番号の差分情報であり、シーケンス番号の差分情報は、クライアント端末１００−２からサーバ２００−６の方向と、サーバ２００−６からクライアント端末１００−２の方向の二種類がある。
【０１２４】
（１０）ステップＳ２１０
中継装置３０−３は、ハンドオフ要求を受信すると、要求に含まれるパラメータを変換テーブル３２に登録する。変換テーブル３２は、入力ヘッダ情報をキーとして登録される。中継装置３０−３は、変換テーブル３２に、クライアント端末１００−２からサーバ２００−６の方向の変換ルールと、サーバ２００−６からクライアント端末１００−２の方向の変換ルールの２種類を登録する。中継装置３０−３は、変換テーブル３２の登録が完了すると、完了通知をコントローラ６０に送信する。
【０１２５】
（１１）ステップＳ２１１
コントローラ６０は、クライアント端末１００−２からサーバ２００−６への経路上のスイッチ１０に、フローエントリーを登録する。ここでは、コントローラ６０は、スイッチ１０−４に、第１のＴＣＰコネクションを転送するためのフローエントリーを設定する。
【０１２６】
（１２）ステップＳ２１２
同様に、コントローラ６０は、スイッチ１０−５に、第１のＴＣＰコネクションを転送するためのフローエントリーを設定する。
【０１２７】
（１３）ステップＳ２１３
コントローラ６０は、スイッチ１０−６に、第２のＴＣＰコネクションを転送するためのフローエントリーを設定する。
【０１２８】
（１４）ステップＳ２１４
コントローラ６０は、フローエントリーが完了した時点で、第１及び第２のＴＣＰコネクションの後続のデータがコントローラ６０に保持されている場合は、後続のデータを、フローエントリーに従って、中継装置３０−３に転送する。
【０１２９】
（１５）ステップＳ２１５
同様に、コントローラ６０は、後続のデータを、フローエントリーに従って、スイッチ１０−６に転送する。
【０１３０】
（１６）ステップＳ２１６
次に、コントローラ６０は、中継装置３０−３に中継開始要求を送る。
【０１３１】
（１７）ステップＳ２１７
中継装置３０−３は、中継開始要求に応じて、指定されたＴＣＰコネクションについてＴＣＰスプライシング処理を開始する。以降、装置３０−３は、クライアント端末１００−２とサーバ２００−６との間の転送データを、ＴＣＰスプライシング処理により中継する。具体的には、装置３０−３は、ＩＰアドレス、ＴＣＰポート番号の変換と、シーケンス番号、ＡＣＫ番号の変換を行う。装置３０−３は、シーケンス番号、及びＡＣＫ番号に対し、テーブルに記載された差分値を加算する。装置３０−３は、ヘッダ変換を終わると、ＴＣＰシーケンス番号を再計算して補正する。ここでは、サーバ２００−６は、中継装置３０−３を介して、クライアント端末１００−２にデータを転送し、クライアント端末１００−２からＡＣＫを受信する。
【０１３２】
（１８）ステップＳ２１８
また、クライアント端末１００−２は、中継装置３０−３を介して、サーバ２００−６にデータを転送し、サーバ２００−６からＡＣＫを受信する。
【０１３３】
（１９）ステップＳ２１９
更に、サーバ２００−６は、中継装置３０−３を介して、クライアント端末１００−２にデータを転送し、クライアント端末１００−２からＡＣＫを受信する。
【０１３４】
（２０）ステップＳ２２０
中継装置３０−３は、ＴＣＰスプライシング処理を実行している時には、ＴＣＰヘッダに含まれるＦＩＮフラグを監視し、コネクションの終了を判断する。具体的には、中継装置３０−３は、双方向それぞれについて、ＦＩＮとそれに対応するＡＣＫを受信した時に、ＴＣＰ状態が終了になったと判断し、変換テーブル３２を削除するとともに、コントローラ６０にセッション終了を通知する。ここでは、クライアント端末１００−２は、中継装置３０−３を介して、サーバ２００−６にＦＩＮを送信する。
【０１３５】
（２１）ステップＳ２２１
次に、サーバ２００−６は、中継装置３０−３を介して、クライアント端末１００−２にＡＣＫを返す。
【０１３６】
（２２）ステップＳ２２２
更に、サーバ２００−６は、中継装置３０−３を介して、クライアント端末１００−２にＦＩＮを送信する。
【０１３７】
（２３）ステップＳ２２３
クライアント端末１００−２は、中継装置３０−３を介して、サーバ２００−６にＡＣＫを返す。
【０１３８】
（２４）ステップＳ２２４
中継装置３０−３は、コネクションが終了になったと判断した時、コントローラ６０にセッション終了を通知する。
【０１３９】
＜第３実施形態＞
以下に、本発明の第３実施形態について説明する。
本実施形態では、コントローラで二つのＴＣＰコネクションを確立した後に選択した一つの中継装置へＴＣＰスプライシング処理を行うのではなく、コントローラではＴＣＰコネクションを終端せずに、アプリケーションスイッチ機能を持った中継装置の一つを選択し、選択された中継装置のスイッチ機能にて中継処理を実施する。
【０１４０】
図１０に示すように、本実施形態では、本発明のアプリケーションスイッチシステムは、クライアント１００（１００−ｉ、ｉ＝１〜Ｎ：Ｎは任意の整数）と、スイッチ１０（１０−ｉ、ｉ＝１〜Ｎ）と、中継装置４０（４０−ｉ、ｉ＝１〜Ｎ）と、制御回線５０と、コントローラ６０と、サーバ２００（２００−ｉ、ｉ＝１〜Ｎ）を含む。
【０１４１】
中継装置４０は、スイッチ１０に接続されている。なお、スイッチ１０と中継装置４０は１対１に対応するものではない。例えば、スイッチ１０に中継装置４０が接続されていない場合や、１台のスイッチに複数の中継装置４０が接続されている場合もある。
【０１４２】
図１１に、中継装置４０の構成例を示す。
中継装置４０は、アドレス変換部４１と、アドレス変換テーブル４２と、ＴＣＰ終端部４３と、サーバ選択処理部４４と、回線４５と、回線４６を備える。
【０１４３】
アドレス変換部４１は、回線４５及び回線４６に該当する２本のＴＣＰ回線を介して外部との間で送受信するパケットのヘッダを、必要に応じて、アドレス変換テーブル４２を参照してアドレス変換する。ここでは、アドレス変換部４１は、制御インタフェース６１を介してコントローラ６０に接続されている。アドレス変換部４１は、当該中継装置４０が選択された時、宛先アドレスに複数のサーバ群（サーバ２００）を表す仮想アドレスが付与されているパケットを、回線４５及び回線４６に該当する２本のＴＣＰ回線を介して、クライアント（クライアント端末１００）から受信する。アドレス変換処理部４１は、このアドレスを持つパケットを受信してＴＣＰ終端処理できるように、当該パケットの宛先アドレスを、中継装置４０が受信可能な宛先アドレスに変換する。
【０１４４】
アドレス変換テーブル４２は、このアドレス変換のための変換情報を保持する。アドレス変換テーブル４２は、予め中継装置４０の設定として登録されていても良い。また、アドレス変換テーブル４２は、当該中継装置４０が選択された時に設定されるようにしても良い。
【０１４５】
ＴＣＰ終端部４３は、回線４５及び回線４６に該当する２本のＴＣＰ回線を終端し、ペイロード信号（アプリケーションレイヤの通信メッセージ）を取り出す。ここでは、ＴＣＰ終端部４３は、第１のＴＣＰ終端部４３１と、第２のＴＣＰ終端部４３２を含む。
【０１４６】
サーバ選択処理部４４は、ＴＣＰ終端部４３により取り出されたメッセージの内容に基づいてスイッチする。例えば、サーバ選択処理部４４は、メッセージに含まれるＵＲＩ（Ｕｎｉｆｉｅｄ  Ｒｅｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｌｅｒ）、Ｃｏｏｋｉｅ等のキーワード、文字列等の情報と、サーバの負荷情報等を勘案して、複数のサーバ候補の中から一つの接続先サーバを決定する。
【０１４７】
回線４５と回線４６は、中継装置４０と外部との間を接続する論理的な回線である。
【０１４８】
なお、サーバ、スイッチ、中継処理部は、実施例２の図７で示したように、同一コンピュータ上の仮想マシンとして構成されても良い。この場合は、例えば図１０のスイッチ１０−６、中継装置４０−６、サーバ２００−４、サーバ２００−５、サーバ２００−６が同一コンピュータ上の仮想マシンモニタ上の仮想スイッチ、仮想中継装置、仮想サーバとして実現される。
【０１４９】
＜実施例３＞
図１２を参照して、クライアント端末からサーバに対して接続する場合について説明する。
【０１５０】
ここでは、サーバ２００−１、サーバ２００−２、サーバ２００−４、サーバ２００−５の４台のサーバを、スイッチ先のサーバとする。また、これら４台のサーバを仮想的に表すアドレスを、「ＶＩＰ１」とする。
【０１５１】
（１）ステップＳ３０１
クライアント端末１００−１は、「ＶＩＰ１」宛に通信を開始する。
【０１５２】
（２）ステップＳ３０２
スイッチ１０−１は、クライアント端末１００−１からパケットを受信すると、フローテーブル１２を参照し、当該パケットがフローエントリーにヒットしない場合、当該パケットを、制御回線５０を介してコントローラ６０に送信する。
【０１５３】
（３）ステップＳ３０３
コントローラ６０は、当該パケットの宛先が「ＶＩＰ１」であることを認識すると、「ＶＩＰ１」に対応付けられているサーバを検索する。コントローラ６０は、該当するサーバがサーバ２００−１、サーバ２００−２、サーバ２００−４、サーバ２００−５の４台であることを取得すると、クライアント端末１００−１からこれら４台のサーバまでの経路をトポロジー情報を参照して決定する。
【０１５４】
このとき、コントローラ６０は、全てのサーバへの接続が同じ経路を通ることで実現できる経路を共通経路と定義し、共通経路上のスイッチに接続されている中継装置を求める。本例では、共通経路とは、スイッチ１０−１とスイッチ１０−２を通る経路、或いはスイッチ１０−１とスイッチ１０−５を通る経路である。なお、コントローラ６０は、サーバ２００−１及びサーバ２００−２へはスイッチ１０−３を経由して到達可能であり、サーバ２００−４及びサーバ２００−５へはスイッチ１０−６を介して到達可能であるが、これらは共通経路上にないものとみなす。従って、共通経路上のスイッチに接続されている中継装置は、中継装置４０−１、中継装置４０−２、中継装置４０−５の３台である。
【０１５５】
（４）ステップＳ３０４
次に、コントローラ６０は、中継装置４０−１、中継装置４０−２、中継装置４０−５の３台のうちから１台を選択する。選択方法としては、これら３台の中継装置の負荷を監視しておいて、最も低負荷な中継装置を選択する方法がある。また、処理中のコネクション数を計測しておいて、その数が最も少ない中継装置を選択する方法がある。コントローラ６０は、このようにして候補の中から１つの中継装置を選択する。ここでは、例として中継装置４０−２を選択したとする。この場合、可能な共通経路は、スイッチ１０−１とスイッチ１０−２を通る経路になる。
【０１５６】
（５）ステップＳ３０５
コントローラ６０は、クライアント端末１００−１から中継装置４０−２までの通信路の設定を行うために、クライアント端末１００−１から中継装置４０−２の間にあるスイッチ１０−１及びスイッチ１０−２に対してフローエントリーを設定する。
【０１５７】
フローエントリーは、クライアント端末１００−１から「ＶＩＰ１」を宛先として送信され、コントローラ６０に転送されたパケットのヘッダ情報に基づいている。ここでは、フローエントリーは、送信元、宛先のＭＡＣアドレス、ＩＰアドレス、レイヤ４のヘッダ情報に基づいており、各スイッチ内のフローテーブル１２に設定される。レイヤ４のヘッダ情報の例として、ＴＣＰやＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）のポート番号が考えられる。
【０１５８】
また、図１２のシーケンス図には図示していないが、コントローラ６０は、中継装置４０−２のアドレス変換テーブル４２に対して、「ＶＩＰ１」を宛先とするパケットを受信できるように設定する。中継装置４０−２が持つアドレスをＩＰ−４０−２とすると、コントローラ６０は、宛先を「ＶＩＰ１」からＩＰ−４０−２に変換する設定を、制御インタフェース６１を介してアドレス変換テーブル４２に設定する。
【０１５９】
（６）ステップＳ３０６
コントローラ６０は、スイッチ１０−１から転送されたパケットをスイッチ１０−１、若しくはスイッチ１０−２に送信する。図１２では、コントローラ６０からスイッチ１０−１にパケットを送信する場合を示している。
【０１６０】
（７）ステップＳ３０７
スイッチ１０−１は、コントローラ６０から送信されたパケットを、フローエントリーに従い、スイッチ１０−２へ転送する。スイッチ１０−２は、当該パケットを、中継装置４０−２に送信する。
【０１６１】
（８）ステップＳ３０８
中継装置４０−２は、当該パケットを受信すると、クライアント端末１００−１との間で「Ｆａｓｔ  Ｐａｔｈ」転送による通信を開始する。これ以降は、クライアント端末１００−１と中継装置４０−２の間で「Ｆａｓｔ  Ｐａｔｈ」転送による通信が行われる。
【０１６２】
（９）ステップＳ３０９
中継装置４０−２は、レイヤ４を終端し、メッセージ情報に基づいて、スイッチ先を判断する。レイヤ４のプロトコルの例としては、ＴＣＰやＵＤＰがある。本例では、スイッチ先は、サーバ２００−１、サーバ２００−２、サーバ２００−４、サーバ２００−５のいずれかである。「ＶＩＰ１」とこれら４つのサーバとの対応関係を示す情報は、中継装置４０−２の内部に予め設定しておくか、コントローラ６０から、スイッチ判定よりも前のタイミングで通知しておく。これにより、中継装置４０−２は、適切な宛先サーバを選択する。メッセージ内容に基づいて宛先サーバを選択する方法としては、アプリケーション負荷分散装置で知られているような、キーワードと選択のポリシー、ならびにサーバの負荷情報に基づいて選択する方法がある。ここで、中継装置４０−２が、宛先サーバとして２００−５を選んだとする。中継装置４０−２は、サーバ２００−５を宛先とする新規のコネクション接続要求を出す。中継装置４０−２は、このパケットを、スイッチ１０−２に送る。
【０１６３】
また、この接続要求のパケットの宛先は、サーバ２００−５であり、送信元アドレスは、中継装置４０−２が持つアドレス（ＩＰ−４０−２）になる。ここで、必要に応じて、アドレス変換処理部４１は、送信元アドレスをクライアントのアドレスに変換することも可能である。この場合、サーバ選択処理部４４は、第１のＴＣＰ終端部４３１で得られたクライアントのアドレス情報をアドレス変換テーブルに登録することで、第２のＴＣＰ終端部４３２から送信されるパケットの送信元アドレスをクライアント端末１００−１のものに置き換える。
【０１６４】
（１０）ステップＳ３１０
スイッチ１０−２は、このパケットを受信すると、コントローラ６０に転送する。コントローラ６０は、中継装置４０−２からサーバ２００−５までの転送経路を設定する。具体的には、コントローラ６０は、中継装置４０−２からサーバ２００−５までの経路を計算し、その経路を構成するスイッチにフローエントリーを設定する。
【０１６５】
（１１）ステップＳ３１１
本例では、コントローラ６０は、経路の一つとして、スイッチ１０−２、及びスイッチ１０−６を通過する経路を選択したとする。コントローラ６０は、各スイッチ（スイッチ１０−２、及びスイッチ１０−６）に対してフローエントリーを設定する。
【０１６６】
（１２）ステップＳ３１２
更に、コントローラ６０は、保持していたパケットをスイッチ１０−２、若しくはスイッチ１０−３に対して送信する。本例では、コントローラ６０が、保持していたパケットをスイッチ１０−２に送信する場合を示した。
【０１６７】
（１３）ステップＳ３１３
スイッチ１０−２は、送信されてきたパケットを、フローエントリーに従い、スイッチ１０−６を経由してサーバ２００−５に送る。
【０１６８】
（１４）ステップＳ３１４
サーバ２００−５は、送信されてきたパケットを受信する。これにより、中継装置４０−２は、サーバ２００−５との間に転送経路を設定し、クライアント端末１００−１からの要求を中継し、サーバ２００−５との間でアプリケーションの処理を行う。
【０１６９】
以上により、クライアント端末１００−１から「ＶＩＰ１」で表されるサーバ群への中継処理が実現できる。
【０１７０】
以上の説明では、仮想アドレスが「ＶＩＰ１」であるとして、宛先としてのサーバ２００−１、サーバ２００−２、サーバ２００−４、サーバ２００−５が「ＶＩＰ１」に含まれるとして説明した。仮想アドレスとサーバ群の対応関係を示す情報は、複数持つことができる。例えば、仮想アドレスが「ＶＩＰ２」になれば、選択された中継装置４０では、「ＶＩＰ２」宛のパケットを受信処理できるようにアドレス変換テーブル４２を設定し、サーバ選択処理部４４にＶＩＰ２とサーバとの対応を登録しておけば良い。このように、複数の仮想アドレスに対応するアプリケーションスイッチング処理が複数の中継装置の中から選択された中継装置で処理することができる。
【０１７１】
本発明のアプリケーションスイッチシステムは、複数のクライアント端末と複数のサーバとの接続を制御するアプリケーションスイッチシステムであって、１つ以上のスイッチと、プロトコル中継を行う１つ以上の中継装置と、コントローラを備える。スイッチは、アプリケーションスイッチである。コントローラは、スイッチ内の転送先を決定する経路テーブルを集中制御する手段と、中継装置の中継処理の制御を行う手段と、接続先のサーバ選択を行う手段と、クライアントと選択したサーバとの間を結び、１つの中継装置を含む経路を選択し、選択された経路をスイッチ内の経路テーブルに設定する手段と、中継装置がプロトコル中継を行う際に必要となる中継情報を中継装置に設定する手段を備えることを特徴とする。
【０１７２】
また、本発明の他のアプリケーションスイッチシステムは、ネットワーク上に存在する複数のクライアント端末と複数のサーバとの接続を制御するスイッチと、プロトコル中継を行う中継装置と、コントローラとを含む。コントローラは、スイッチ内の転送先を決定する経路テーブルを集中制御する手段と、中継装置の中継処理の制御を行う手段と、選択されたクライアントから送信されるパケットの宛先アドレスに基づいて、複数のサーバのうち少なくとも１つのサーバを選択し、複数のクライアント端末のうちの１つのクライアントと、選択された少なくとも１つのサーバとの間をそれぞれ結び、中継装置を含むネットワーク経路を選択し、選択された経路をスイッチ内の経路テーブルに設定する手段と、中継装置がプロトコル中継を行う際に用いられる中継情報を、中継装置に設定する手段とを備えることを特徴とする。
【０１７３】
コントローラは、中継装置として、複数の中継装置が存在する場合に、ネットワークの経路上においてサーバに最も近い位置に配備されたものを選択することを特徴とする。
【０１７４】
また、コントローラは、ネットワーク上に複数の中継装置が存在する場合、クライアント端末から複数のサーバまでの共通経路上に存在する２以上の中継装置の中から、中継装置の処理負荷が最も低い中継装置を選択することを特徴とする。
【０１７５】
或いは、コントローラは、中継装置として、複数の中継装置が存在する場合に、ネットワークの経路上においてクライアントに最も近い位置に配備されたものを選択することを特徴とする。
【０１７６】
或いは、コントローラは、中継対象のプロトコルがＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）のとき、クライアントからのコネクションを終端してメッセージを取り出し、メッセージの内容に基づいて、接続要求の宛先アドレスに対応する複数のサーバの中から接続先となる１つのサーバを選択し、選択したサーバに対してＴＣＰ接続要求を出して、二つのＴＣＰの中継に必要なヘッダ変換情報を中継装置にハンドオフすることを特徴とする。
【０１７７】
或いは、コントローラは、中継制御部に設定するプロトコル中継を行う際に用いられる中継情報として、パケットの宛先アドレスと中継装置が備えるアドレスとの対応情報をアドレス変換テーブル、若しくはフィルタに設定し、中継制御部が該当パケットを受信処理可能とすることを特徴とする。
【０１７８】
中継装置は、中継対象のプロトコルがＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）の時、中継するパケットのＴＣＰヘッダの変換を行うことを特徴とする。
【０１７９】
また、中継装置は、中継対象のプロトコルがＴＣＰの時、中継するパケットのＴＣＰの終端手段を備える。中継装置は、終端したメッセージの内容に基づいて複数のサーバから１つのサーバを選択する。更に、中継装置は、中継装置と選択したサーバとの間でＴＣＰコネクションを確立し、メッセージ中継することを特徴とする。
【０１８０】
或いは、中継装置は、仮想マシン上で動作するサーバと同一のコンピュータ上のサーバとは異なる仮想マシン上のプログラムとして動作し、プロトコル中継を行い、同一コンピュータ上で中継装置とサーバが通信することを特徴とする。
【０１８１】
以上のように、本発明は、ネットワークトラヒック（通信量）のデータ処理を行う際に、アプリケーションレベルゲートウェイ、プロキシ等の中継処理を広域に分散配備するアプリケーションスイッチシステムに関する。
【０１８２】
本発明のアプリケーションスイッチシステムでは、アプリケーション振り分け判定を行う中継制御手段と、ネットワーク経路を集中管理する経路制御手段と、ネットワーク上に分散配備された１つ以上の中継装置を用いることで、アプリケーションスイッチ処理における中継位置の最適な選択を行うことを特徴とする。
【０１８３】
具体的には、中継制御手段が、アプリケーション振り分け先を判定した後、振り分け先のサーバに最も近い中継装置を選択する。また、経路制御手段が、選択された中継装置までの経路を設定し、中継装置に対してハンドオフ処理を行う。これにより、広域に分散配備された任意のサーバに対する振り分け選択と、その際の最適なネットワーク経路の選択、中継位置の選択を行うことで、ネットワーク経路の最適化を行う。
【０１８４】
すなわち、本発明では、アプリケーションスイッチの判定を行うコントローラとＴＣＰスプライシングによる中継処理を行う中継装置を分離し、分散配備した中継装置のうち、ネットワーク経路を効率良く収容するために最適な中継装置を利用してＴＣＰ中継処理を行う。
【０１８５】
本発明によれば、アプリケーションスイッチ処理において、スイッチ判定処理手段と中継位置を分離し、また、ネットワークの経路制御処理と連携させることで、任意の位置にＴＣＰの中継ノードを配備することが可能になり、クライアントとサーバ間のネットワーク経路の最適化を実現する。
【０１８６】
また、本発明のアプリケーションスイッチシステムでは、中継制御手段が、アプリケーション振り分け先の候補を判定し、クライアント端末から振り分け先への共通経路上に存在する複数の中継装置から１つの中継装置を選択し、経路制御手段が中継パケットを前記選択した中継装置への経路設定を行い、中継装置では受信したパケットの宛先判定処理を行い、アプリケーションスイッチを行うことで、分散配備された複数のアプリケーションスイッチに対して予め処理割り当てを決めることなく、最適な位置に存在するスイッチを選択し、ネットワーク経路の最適化を実現する。
【０１８７】
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【０１８８】
なお、本出願は、日本出願番号２００９−０２３１１２及び日本出願番号２００９−１４００８２に基づく優先権を主張するものであり、日本出願番号２００９−０２３１１２及び日本出願番号２００９−１４００８２における開示内容は引用により本出願に組み込まれる。
【図１】
0005561173.tif 000002
【図２】
0005561173.tif 000003
【図３】
0005561173.tif 000004
【図４】
0005561173.tif 000005
【図５】
0005561173.tif 000006
【図６Ａ】
0005561173.tif 000007
【図６Ｂ】
0005561173.tif 000008
【図７】
0005561173.tif 000009
【図８】
0005561173.tif 000010
【図９】
0005561173.tif 000011
【図１０】
0005561173.tif 000012
【図１１】
0005561173.tif 000013
【図１２】
0005561173.tif 000014