(57)【要約】  種々の実施形態が、ネットワークのコネクション単位の状態を必要とすることなくＳＤＮフロー配信を提供するための方法および装置を提供する。特に、ＳＤＮフロー配信は、ネットワーク要素中に、ターゲットサーバのセットにトラフィックフローをマッピングすることができるコントローラを提供することによって、パケットの転送パス内のそれらのネットワーク要素で実現される。
2016521090.tif 000002
【特許請求の範囲】
【請求項１】
インパスフロー配信を提供するための装置であって、
複数の仮想マシンと、
複数のルールを含むルール部、およびサーバリスト部を含むデータストレージであって、複数のルールの少なくともサブセットが、サーバリスト部に基づいて複数の仮想マシンのうちの１つまたは複数にパケットフローをマッピングする、データストレージと、
複数の仮想マシンおよびデータストレージに通信可能に接続されたプロセッサであって、
エッジルータからパケットを受信し、
パケットに基づいて複数のルールから１つのルールを決定し、
ルールおよびサーバリスト部に基づいて仮想マシンを決定し、
仮想マシンに基づいてパケットの宛先アドレスを変更し、
仮想マシンにパケットを転送するように構成されたプロセッサとを含む、装置。
【請求項２】
装置が、複数のホストのネットワーク中の第１のホストであり、仮想マシンが、第２のホストをホストとする第２の複数の仮想マシンのメンバーであり、第２のホストが、複数のホストのメンバーであり、複数のルールの少なくとも第２のサブセットが、サーバリスト部に基づいて第２の複数の仮想マシンのうちの１つまたは複数にパケットフローをマッピングする、請求項１に記載の装置。
【請求項３】
データストレージが、サーバインデックス値の配列を含むハッシュ配列部をさらに含み、
サーバリスト部が、サーバアドレスのセットを含み、
仮想マシンの決定が、ルールに基づいて決定されたサーバインデックスを使用してサーバアドレスのセットから仮想マシンを選択するようにプロセッサをさらに構成することにさらに基づき、
サーバインデックス値の配列が、サーバインデックスを含む、請求項１に記載の装置。
【請求項４】
パケットがパケットフローを開始すると決定するように、プロセッサがさらに構成され、
パケットの宛先アドレスの変更が、パケットがパケットフローを開始するという決定に基づく、請求項１に記載の装置。
【請求項５】
パケットがパケットフローを開始するという決定が、パケット中のＳＹＮフラグに基づく、請求項４に記載の装置。
【請求項６】
プロセッサが、
エッジルータから第２のパケットを受信し、第２のパケットが、仮想マシンを識別するサーバ値を含み、
サーバ値に基づいて第２のパケットの宛先アドレスを変更し、
仮想マシンに第２のパケットを転送するように、さらに構成された、請求項１に記載の装置。
【請求項７】
データストレージが、履歴部をさらに含み、プロセッサが、
エッジルータから第３のパケットを受信し、
第３のパケットが再送信であると決定し、
第３のパケットが再送信であり第３のパケットであるという決定に基づいて、履歴部から以前のサーバ値を取得し、
以前のサーバ値に基づいて第３のパケットの宛先アドレスを変更し、
仮想マシンに第３のパケットを転送するように、さらに構成された、請求項６に記載の装置。
【請求項８】
インパスフロー配信を提供するための方法であって、
データストレージに通信可能に接続されたプロセッサにおいて、エッジルータからパケットを受信するステップであって、データストレージが、複数のルールを含むルール部、およびサーバリスト部を含み、複数のルールの少なくともサブセットが、サーバリスト部に基づいて、仮想マシンにパケットフローをマッピングする、受信するステップと、
データストレージと協働するプロセッサによって、パケットに基づいて複数のルールからルールを決定するステップと、
データストレージと協働するプロセッサによって、ルールおよびサーバリスト部に基づいて、仮想マシンを決定するステップと、
データストレージと協働するプロセッサによって、仮想マシンに基づいてパケットの宛先アドレスを変更するステップと、
データストレージと協働するプロセッサによって、仮想サーバにパケットを転送するステップとを含む、方法。
【請求項９】
データストレージと協働するプロセッサによって、パケットがパケットフローを開始すると決定するステップをさらに含み、
パケットの宛先アドレスの変更が、パケットがパケットフローを開始するという決定に基づく、請求項８に記載の方法。
【請求項１０】
データストレージと協働するプロセッサによって、エッジルータから第２のパケットを受信するステップであって、第２のパケットが仮想マシンを識別するサーバ値を含む、受信するステップと、
データストレージと協働するプロセッサによって、サーバインデックス値の配列中の対応するサーバインデックス値が、トリガ値であると決定するステップと、
データストレージと協働するプロセッサによって、対応するサーバインデックス値をサーバ値にセットするステップと、
データストレージと協働するプロセッサによって、サーバ値に基づいて第２のパケットの宛先アドレスを変更するステップと、
データストレージと協働するプロセッサによって、仮想マシンに第２のパケットを転送するステップとをさらに含む、請求項９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、ソフトウェア定義型ネットワークフロー配信（ｓｏｆｔｗａｒｅ  ｄｅｆｉｎｅｄ  ｎｅｔｗｏｒｋ  ｆｌｏｗ  ｄｉｓｔｒｉｂｕｔｉｏｎ）を提供するための方法および装置に関する。
【背景技術】
【０００２】
このセクションは、本発明の理解をより容易にするのに役立つことができる態様を導入するものである。したがって、このセクションの記述は、この観点で読まれるべきであり、先行技術であるかまたはそうでないかについての承認と理解されるべきではない。
【０００３】
いくつかの知られているソフトウェア定義型ネットワーク（ＳＤＮ）フロー配信システムソリューションでは、専用デバイスが、負荷均衡化を通じてフロー配信を実施するロードバランサとして構成される。
【発明の概要】
【課題を解決するための手段】
【０００４】
種々の例示的実施形態のいくつかの態様の強調および導入を意図した以下の概要では、いくつか簡略化され得るが、こうした簡略化は、本発明の範囲を限定するものではない。当業者が作成し、本発明の概念を使用することを可能にするのに十分な好ましい例示的実施形態の詳細な説明が、後のセクションで続く。
【０００５】
種々の実施形態が、ネットワークのコネクション単位の状態を必要とすることなくＳＤＮフロー配信を提供するための方法および装置を提供する。特に、ＳＤＮフロー配信は、ネットワーク要素中に、ターゲットサーバのセットにトラフィックフローをマッピングすることができるコントローラを提供することによって、パケットの転送パス内のそれらのネットワーク要素で実現される。
【０００６】
第１の実施形態では、装置が、インパスフロー配信を提供するために提供される。装置は、複数の仮想マシンと、データストレージと、複数の仮想マシンおよびデータストレージに通信可能に接続されたプロセッサとを含む。データストレージは、複数のルールを含むルール部、およびサーバのリスト部を含む。複数のルールの少なくともサブセットが、サーバリスト部に基づいて複数の仮想マシンのうちの１つまたは複数にパケットフローをマッピングする。そのプロセッサは、エッジルータからパケットを受信し、パケットに基づいて、複数のルールから１つのルールを決定し、ルールおよびサーバリスト部に基づいて、仮想マシンを決定し、仮想マシンに基づいて、パケットの宛先アドレスを変更し、仮想マシンにパケットを転送するようにプログラムされる。
【０００７】
第２の実施形態では、方法が、データストレージに通信可能に接続されたプロセッサによって、インパスフロー配信を提供するために提供される。データストレージが、複数のルールを含むルール部、およびサーバリスト部を含む。複数のルールの少なくともサブセットが、サーバリスト部に基づいて、仮想マシンにパケットフローをマッピングする。その方法は、エッジルータからパケットを受信するステップと、パケットに基づいて複数のルールからルールを決定するステップと、ルールおよびサーバリスト部に基づいて、仮想マシンを決定するステップと、仮想マシンに基づいてパケットの宛先アドレスを変更するステップと、仮想サーバにパケットを転送するステップとを含む。
【０００８】
第３の実施形態では、一時的でないコンピュータ可読記憶媒体が、命令を記憶するために提供され、この命令が、コンピュータによって実行されるときそのコンピュータに方法を実施させる。その方法は：
１９．命令が、コンピュータによって実行されるときそのコンピュータに方法を実施させるような命令を記憶する一時的でないコンピュータ可読記憶媒体であって、方法が、エッジルータからパケットを受信するステップであって、データストレージが、複数のルールを含むルール部、およびサーバリスト部を含み、複数のルールの少なくともサブセットが、サーバリスト部に基づいて仮想マシンにパケットフローをマッピングする、受信するステップと、パケットに基づいて、複数のルールから１つのルールを決定するステップと、ルールおよびサーバリスト部に基づいて仮想マシンを決定するステップと、仮想マシンに基づいてパケットの宛先アドレスを変更するステップと、仮想サーバにそのパケットを転送するステップとを含む、一時的でないコンピュータ可読記憶媒体を含む。
【０００９】
先の実施形態のうちのいくつかでは、装置が、複数のホストのネットワーク中の第１のホストであり、仮想マシンが、第２のホストをホストとする第２の複数の仮想マシンのメンバーであり、第２のホストが、複数のホストのメンバーであり、複数のルールの少なくとも第２のサブセットが、サーバリスト部に基づいて第２の複数の仮想マシンのうちの１つまたは複数にパケットフローをマッピングする。
【００１０】
先の実施形態のうちのいくつかでは、宛先アドレスが、ＭＡＣアドレスである。
【００１１】
先の実施形態のうちのいくつかでは、ルールが、配信部を含み、その配信部が、配信アクションを指定する。
【００１２】
先の実施形態のうちのいくつかでは、データストレージが、サーバインデックス値の配列を含むハッシュ配列部をさらに含み、サーバリスト部が、サーバアドレスのセットを含む。その場合、仮想マシンの決定が、ルールに基づいて決定されたサーバインデックスを使用してサーバアドレスのセットから仮想マシンを選択するようにプロセッサをさらにプログラムすることにさらに基づく。その場合、サーバインデックス値の配列が、サーバインデックスを含む。
【００１３】
先の実施形態のうちのいくつかでは、パケットがパケットフローを開始すると決定するように、プロセッサがさらにプログラムされる。その場合、パケットの宛先アドレスの変更は、パケットがパケットフローを開始するという決定に基づく。
【００１４】
先の実施形態のうちのいくつかでは、パケットがパケットフローを開始するという決定が、パケット中のＳＹＮフラグに基づく。
【００１５】
先の実施形態のうちのいくつかでは、プロセッサが、エッジルータから第２のパケットを受信し、第２のパケットが、仮想マシンを識別するサーバ値を含み、サーバ値に基づいて第２のパケットの宛先アドレスを変更し、仮想マシンに第２のパケットを転送するように、さらにプログラムされる。
【００１６】
先の実施形態のうちのいくつかでは、サーバ値が、第２のパケットのＴＣＰ  ＡＣＫフィールドにある。
【００１７】
先の実施形態のうちのいくつかでは、サーバ値が、サーバインデックス値であり、プロセッサが、サーバインデックス値およびサーバリスト部に基づいて仮想マシンを決定するようにさらにプログラムされる。
【００１８】
先の実施形態のうちのいくつかでは、データストレージが、履歴部をさらに含み、プロセッサが、エッジルータから第３のパケットを受信し、第３のパケットが再送信であると決定し、第３のパケットが再送信であり第３のパケットであるという決定に基づいて、履歴部から以前のサーバ値を取得し、以前のサーバ値に基づいて第３のパケットの宛先アドレスを変更し、仮想マシンに第３のパケットを転送するようにさらにプログラムされる。
【００１９】
先の実施形態のうちのいくつかでは、プロセッサが、エッジルータから第２のパケットを受信し、第２のパケットが、仮想マシンを識別するサーバ値を含み、サーバインデックス値の配列中の対応するサーバインデックス値がトリガ値であると決定し、対応するサーバインデックス値をサーバ値にセットし、サーバ値に基づいて第２のパケットの宛先アドレスを変更し、仮想マシンに第２のパケットを転送するようにさらに構成される。
【００２０】
先の実施形態のうちのいくつかでは、仮想マシンを決定するステップが、ルールに基づいて決定されたサーバインデックスを使用して、サーバアドレスのセットから仮想マシンを選択することにさらに基づく。その場合、サーバインデックス値の配列は、サーバインデックスを含む。
【００２１】
先の実施形態のうちのいくつかでは、方法が、パケットがパケットフローを開始すると決定するステップを含む。その場合、パケットの宛先アドレスの変更は、パケットがパケットフローを開始するという決定に基づく。
【００２２】
先の実施形態のうちのいくつかでは、方法が、エッジルータから第２のパケットを受信するステップであって、第２のパケットが仮想マシンを識別するサーバ値を含む、受信するステップと、サーバ値に基づいて第２のパケットの宛先アドレスを変更するステップと、仮想マシンに第２のパケットを転送するステップとをさらに含む。
【００２３】
先の実施形態のうちのいくつかでは、方法が、エッジルータから第２のパケットを受信するステップであって、第２のパケットが仮想マシンを識別するサーバ値を含む、受信するステップと、サーバインデックス値の配列中の対応するサーバインデックス値がトリガ値であると決定するステップと、対応するサーバインデックス値をサーバ値にセットするステップと、サーバ値に基づいて第２のパケットの宛先アドレスを変更するステップと、仮想マシンに第２のパケットを転送するステップとをさらに含む。
【００２４】
先の実施形態のうちのいくつかでは、データストレージが、履歴部をさらに含み、方法が、仮想マシンに関連する履歴サーバインデックス値を決定するステップと、履歴サーバインデックス値を履歴部に記憶するステップと、エッジルータから第２のパケットを受信するステップであって、第２のパケットがサーバ値を含む、受信するステップと、第２のパケットに基づいて複数のルールから第２のルールを決定するステップと、ルールおよびサーバリスト部に基づいて第２のサーバインデックス値を決定するステップと、サーバ値が第２のサーバインデックス値に対応しないという決定に基づいて履歴サーバインデックス値を取得するステップと、履歴サーバインデックス値に基づいて第２のパケットの宛先アドレスを変更するステップと、第２のパケットを転送するステップとをさらに含む。
【００２５】
種々の実施形態について、添付の図面に示す。
【図面の簡単な説明】
【００２６】
【図１】ＳＤＮフロー配信を提供するためのＳＤＮフロー配信システム１００の一実施形態を示す図である。
【図２】図１のｖＲＳ１４０のうちの１つの一実施形態であるｖＲＳ２４０を概略的に示す図である。
【図３】コントローラ（例えば、図２のコントローラ２０５）がＴＣＰフロー配信を提供する方法３００の一実施形態を示す流れ図である。
【図４】ＴＣＰ負荷分散を実行するための方法３００の一実施形態を示す例示的メッセージフローを示す図である。
【図５】図１のｖＲＳ１４０のうちの１つなどの種々の装置５００の一実施形態を概略的に示す図である。
【発明を実施するための形態】
【００２７】
理解を容易にするために、実質的に同じもしくは類似の構造、または実質的に同じもしくは類似の機能を有する要素を示すように、同一の参照番号を使用した。
【００２８】
説明および図面は、単に本発明の原理を示す。したがって、本明細書では明白に説明し示さないが、当業者には、本発明の原理を実施し、その範囲に含まれる種々の構成を考案することができることが、理解されよう。さらに、本明細書に挙げた全ての例は、主に、本発明の原理および本技術を進めるために発明者により寄与される概念を読者が理解する際に支援する教示的目的のためだけに特別に意図したものであり、こうした具体的に挙げた例および条件に限定しないと解釈されるべきである。さらに、本明細書で説明する種々の実施形態は、いくつかの実施形態が新たな実施形態を形成するために１つまたは複数の他の実施形態と組み合わせられ得るように、必ずしも互いに排他的ではない。
【００２９】
本明細書で使用される用語「または」は、非排他的であり、または別段の指示がない限り（例えば、「または他の」もしくは「または別法では」）非排他的であることを言う。さらに、本明細書で使用される要素間の関係を説明するのに使用される語句は、直接的関係を含み、または別段の指示がない限り介在する要素の存在を含むように広く解釈されるべきである。例えば、要素が、別の要素に「接続される」または「結合される」と言うとき、その要素は、他の要素に直接接続もしくは結合されてよく、または介在する要素が存在してもよい。対照的に、要素が、別の要素に「直接接続される」または「直接結合される」と言うとき、介在する要素は存在しない。同様に、「間の」「隣接した」などの語句は、同じ様式で解釈されるべきである。
【００３０】
種々の実施形態が、ネットワークのコネクション単位の状態を必要とすることなくＳＤＮフロー配信を提供するための方法および装置を提供する。特に、ＳＤＮフロー配信は、ネットワーク要素中に、ターゲットサーバのセットにトラフィックフローをマッピングすることができるコントローラを提供することによって、パケットの転送パス内のそれらのネットワーク要素で実現される。
【００３１】
有利なのは、コントローラを用いてパケットの転送パスにネットワーク要素を構成することによって、障害に対して回復力のある（例えば、単一障害点（ＳＰＤＦ）が作られない）、またクライアントトラフィック負荷の変化に伴ってスケール調整する（例えば、高速弾力性を提供する）、ＳＤＮフロー配信が達成され得ることである。
【００３２】
図１に、ＳＤＮフロー配信を提供するためのＳＤＮフロー配信システム１００の一実施形態を示す。ＳＤＮフロー配信システム１００は、通信パスをわたって確立される通信フローを通じて、１つまたは複数のホストであるホスト１５０−１からホスト１５０−ｎ（集合的にホスト１５０）に存在する１つまたは複数のアプリケーション（明瞭化のため示さず）にアクセスする、１つまたは複数のクライアント１１０−１から１１０−ｎ（集合的にクライアント１１０）を含む。通信パスは、リンク１１５−１から１１５−ｎ（集合的にリンク１１５）のうちの適切な１つ、ネットワーク１２０−１、エッジルータ１３０−１から１３０−ｎ（集合的にエッジルータ１３０）のうちの適切な１つ、およびネットワーク１２０−２を通るオーバレイトンネル１３５−１から１３５−ｎ（集合的にオーバレイトンネル１３５）のうちの適切な１つを含む。
【００３３】
本明細書で定義する「フロー」は、（ｉ）送信元ＩＰ、（ｉｉ）送信元ポート、（ｉｉｉ）宛先ＩＰ、（ｉｖ）宛先ポート、（ｖ）プロトコル；または（ｖｉ）他、などの共通の特性を有する２つまたはそれより多くのパケットとして広く解釈される。
【００３４】
いくつかの実施形態では、フローが、同じ５−タプル＜ｓｒｃ．ｉｐ，ｓｒｃ．ｐｏｒｔ，ｄｓｔ．ｉｐ，ｄｓｔ．ｐｏｒｔ，ｐｒｏｔｏｃｏｌ＞を共有する２つ以上のパケットである。
【００３５】
クライアント１１０は、１つまたは複数のリンク１１５を介してネットワーク１２０−１をわたって情報（例えばパケット）を送信または受信することができる任意のタイプの通信デバイスを含むことができる。例えば、通信デバイスが、シンクライアント、スマートフォン（例えば、クライアント１１０−ｎ）、パーソナルコンピュータまたはラップトップコンピュータ（例えば、クライアント１１０−１）、サーバ、ネットワークデバイス、タブレット、テレビジョンセットトップボックス、メディアプレーヤー他とすることができる。通信デバイスは、処理または記憶などのタスクの一部を実施するために例示的システム内の他の資源に依存することができ、またはタスクを独立的に実施することができる。２つのクライアントについてここに示すが、システム１００は、より少ないまたはより多いクライアントを含み得ることが理解されるべきである。さらに、いずれの時点におけるクライアント数も、動作中クライアントが種々の回数でシステムに加算または減算されるので、動的でありうる。
【００３６】
リンク１１５およびオーバレイトンネル１３５は、ワイヤレス通信（例えば、ＬＴＥ、ＧＳＭ（登録商標）、ＣＤＭＡ、Ｂｌｕｅｔｏｏｔｈ（登録商標））、ＷＬＡＮ通信（例えば、ＷｉＦｉ）、パケットネットワーク通信（例えば、ＩＰ）、広帯域通信（例えば、ＤＯＣＳＩＳおよびＤＳＬ）、ストレージ通信（例えば、ファイバチャネル、ｉＳＣＳＩ）などの１つまたは複数の通信チャネルにわたる通信をサポートする。単一のコネクションとして示すが、通信チャネル１１５およびオーバレイトンネル１３５は、任意の個数の通信チャネルまたはその組合せとすることができることが理解されよう。
【００３７】
チャネル１４５−１からチャネル１４５−ｎのチャネル（集合的にチャネル１４５）は、ホスト１５０のそれぞれの間の通信パスを示し、任意の適した通信パスを含むと広く解釈されるべきである。例えば、チャネルは、先に説明したリンクまたは内部通信チャネルとすることができる。チャネル１４５−１を参照すると、ホスト１５０−１およびホスト１５０−２が同じ装置に存在する場合、内部通信チャネルは、ホスト１５０−１とホスト１５０−２との間で情報を渡すようにプログラムされた、内部プロセッサおよびメモリとすることができる。
【００３８】
ネットワーク１２０−１および１２０−２は、任意の個数のアクセスおよびエッジノードおよびネットワークデバイス、ならびに任意の個数および構成のリンクを含む。さらに、ネットワーク１２０−１および１２０−２は、任意の組合せおよび任意の個数のワイヤレスまたはワイヤラインネットワークを含むことができ、これらには、ＬＴＥ、ＧＳＭ、ＣＤＭＡ、ローカルエリアネットワーク（ＬＡＮ）、ワイヤレスローカルエリアネットワーク（ＷＬＡＮ）、広域ネットワーク（ＷＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）他が含まれ得ることが理解されるべきである。さらに、ネットワーク１２０−１および１２０−２は、２つの分離したネットワークとして示すが、１つのネットワークの全てまたは一部を共有することができることが理解されるべきである。例えば、ネットワーク１２０−２は、ネットワーク１２０−１内に存在し得る。
【００３９】
エッジルータ１３０は、１つまたは複数のクライアント１１０とホスト１５０との間のトラフィックをルーティングすることができる装置である。特に、エッジルータ１３０は、ホスト１５０のうちの特定の１つにクライアントパケットをルーティングするためにオーバレイトンネル１３５のうちの１つを選択する。２つのエッジルータについてここに示すが、システム１００は、より少ないまたはより多いエッジルータを含むことができることが理解されるべきである。エッジルータ１３０−１と同様に、示されるエッジルータ１３０−ｎは、１つまたは複数のオーバレイトンネル（明瞭化のために示さず）を介してホストのセット（例えばホスト１５０）にパケットをルーティングするように構成され得ることがさらに理解されるべきである。
【００４０】
選択ホスト１５０のそれぞれが、１つまたは複数の仮想ルータまたはスイッチｖＲＳ１４０−１から１４０−ｎ（集合的にｖＲＳ１４０）、および１つまたは複数の仮想マシンＶＭ１６０−１−１からＶＭ１６０−Ｎ−Ｙ（集合的に仮想マシン１６０）を含む。例えば、図に示すように、ホスト１５０−１は、ｖＲＳ１４０−１および仮想マシンＶＭ１６０−１−１からＶＭ１６０−１−Ｘを含む。
【００４１】
ｖＲＳ１４０は、インパスフロー配信のためのコントローラを設ける。特に、ｖＲＳは、トラフィックフローから、仮想マシン１６０または別の物理サーバもしくは仮想サーバのうちの１つなどのターゲットサーバ（明瞭化のために示さず）へ、パケットをマッピングするマッチングルールを用いて構成される。別のホストに存在するターゲットサーバに対しては、パケットが１つまたは複数のチャネル１４５を介してターゲットサーバに向けられ得る。
【００４２】
本明細書で定義する「インパスフロー配信」は、フロー配信が通信パス内に通常存在するコンポーネントによって決定されることを必要とするものと解釈される。例えば、エッジルータ１３０およびホスト１５０が、クライアントリクエストの通信パス内にある。対照的に、ネットワーク１２０−２に通信可能に接続された分離マネージャに、またはホスト１５０とエッジルータ１３０の一つの間に配置された専用の負荷バランサに、フロー配信の決定をオフロードすることは、インパスフロー配信ではない。
【００４３】
エッジルータ１３０のいくつかの実施形態では、１つまたは複数のエッジルータ１３０が、仮想負荷分散装置のＩＰアドレスに行くことになる、また任意選択で１つまたは複数のポート（例えば、ウェブトラフィック用のポート８０）に制限された、ＴＣＰパケットにＥＣＭＰ（Ｅｑｕａｌ  Ｃｏｓｔ  Ｍｕｌｔｉ  Ｐａｔｈ：等価コストマルチパス）ルーティングを実施する。これらの実施形態のいくつかでは、オーバレイトンネル１３５のうちの１つの選択が、送信元ＩＰおよび任意選択で受信したパケットのポートのハッシュ処理を行うことによって達成される。
【００４４】
いくつかの実施形態では、ｖＲＳ１４０が、特定の負荷バランサＩＰ：ポート宛先へのＴＣＰトラフィック用のマッチングルール、およびターゲットサーバのセットにこうしたフローを（例えば、ハッシュ処理を通じて）マッピングするためのテーブル、とともに構成される。これらのいくつかの実施形態では、ターゲットサーバが、受信ホストに対してローカルであるように構成される。
【００４５】
いくつかの実施形態では、ｖＲＳ１４０が、Ｓサーバアドレスまたはポートのリストにマッピングする、提供可能なＮサーバインデックス値の配列を含む。これらの実施形態のいくつかでは、ＯｐｅｎＦｌｏｗが、適合する場合、着信パケット用に（例えばｓｒｃ  ＩＰおよびｓｒｃポートに基づいて）ハッシュインデックス値を計算し、サーバおよび任意選択で配列インデックスを使用することによって決定されるポートにパケットを転送する、「配信（ｄｉｓｔｒｉｂｕｔｅ）」アクションを含むように拡張される。
【００４６】
１つまたは複数のｖＲＳ１４０の機能性の全てまたは一部は、１つまたは複数のエッジルータ１３０内に含まれ得ることが理解されるべきである。
【００４７】
図２に、図１のｖＲＳ１４０のうちの１つの一実施形態であるｖＲＳ２４０を概略的に示す。ｖＲＳ２４０は、データストレージルール２１０、ハッシュ配列２２０およびサーバリスト２３０に通信可能に接続されたコントローラ２０５を含み、トラフィックフローイン２６０上で受信されるトラフィックフローに属するパケットを、トラフィックフローアウト２８０をわたって１つまたは複数の適したサーバに配信するように構成される。
【００４８】
ルール２１０には、フロートラフィック（例えばＴＣＰトラフィック）用のマッチングルールが提供される。特に、トラフィックフローイン２６０をわたって受信したトラフィックフローにルールが適合すると決定された場合、その受信したトラフィックフローに配信すると決定される。配信の決定は、ハッシュ配列２２０からハッシュ配列を、およびサーバリスト２３０からサーバリストを、（例えば、ハッシュ処理を通じて）ターゲットサーバの１セットに受信したパケットをマッピングするために使用することを含む。
【００４９】
ルール２１０、ハッシュ配列２２０およびサーバリスト２３０を３つの分離したデータ記憶として示すが、ルール２１０、ハッシュ配列２２０およびサーバリスト２３０のストレージは、任意の適した構成（例えば、２つまたはそれより多くのルール２１０、ハッシュ配列２２０およびサーバリスト２３０が、物理ストレージもしくは仮想ストレージ、またはメモリ空間を共有することができる）を含むことができることが理解されるべきである。さらに、ルール２１０、ハッシュ配列２２０およびサーバリスト２３０は、テーブル、データベース他を含む任意の適したフォーマットで維持され得る。
【００５０】
一例では、装置（例えば、図２のｖＲＳ２４０）のルール、ハッシュ配列およびサーバリストのストレージが構成され、ルール２１０がＸルールのセットを含み、ハッシュ配列２２０が、Ａサーバインデックス値のＸ配列のセット（例えばそれぞれＮビットの、例えば最大１６サーバに対してＮ＝４）を含み、サーバリスト２３０が、以下で与えられるような、サーバ配列＝サーバ（Ａ，Ｂ，Ｃ，Ｄ）用のＹサーバアドレス（またはポート）リスト（それぞれ最長２Ｎ）のセットを含む。
【００５１】
ルール２１０：
１．ｄｓｔ．ｉｐ＝＝１．２．３．４およびｄｓｔ．ｐｏｒｔ＝＝８０をもつ全てのパケットに対して、ハッシュ配列Ａ１を使用して、ｄｓｔ．ｉｐをリストＬ１からサーバアドレスにセット
２．ｄｓｔ．ｉｐ＝＝１．２．３．５およびｄｓｔ．ｐｏｒｔ＝＝８０をもつ全てのパケットに対して、ハッシュ配列Ａ２を使用して、ｄｓｔ．ｍａｃをリストＬ２からサーバアドレスにセット
ハッシュ配列２２０：
１．Ａ１＝［０，１，２，３，０，１，２，３］
／／（全ての４サーバに対して、平等に２５％の配信。有利なのは、サーバインデックスが１つの値につき２ビットを使用して示され得ることである。）
２．Ａ２＝［０，０，０，０，０，０，１，１］
／／（２サーバ間で、７５％／２５％の配信）
サーバリスト２３０：
１．Ｌ１＝［１０．２０．３０．４０，１０．２０．３０．４１，１０．２０．３０．４２，１０．２０．３０．４３］
／／（サーバ［Ａ，Ｂ，Ｃ，Ｄ］用のＩＰｖ４アドレスを含む）
２．Ｌ２＝［１１：２２：３３：４４：５５：６６，１１：２２：３３：４４：５５：６７］
／／（ＭＡＣアドレスを含む）
【００５２】
例についてさらに進めると、宛先ＩＰ＝「１．２．３．４」、宛先ポート＝８０をもつパケットが受信されると仮定する。ルール２１０を参照すると、ルール（１）が、宛先ＩＰおよびポートに適合し、したがって、受信したパケットのフロー配信をマッピングするために、ルール１が選択される。ハッシュアクションが、送信元ＩＰ＋送信元ポートのハッシュ処理を含み、結果として生じるハッシュが、インデックス＝「２」（例えば、「１２３４」％８）にマッピングする「１２３４」の値を有する。ルール（１）を使用すると、サーバインデックス＝２（すなわち、Ａ１［２］）がターゲットサーバＣ（すなわち、Ｌ１（２））に対応する。
【００５３】
ルール（１）を再び参照すると、次いでｄｓｔ．ｉｐが、サーバ「Ｃ」にセットされるはずであり、パケットは、ターゲットサーバ「Ｃ」に転送される。
【００５４】
これらの実施形態のいくつかでは、プロトコルが、ハッシュ配列「Ａ」の特定の配列およびサーバリスト「Ｓ」の特定の配列を参照する「配信（ｄｉｓｔｒｉｂｕｔｅ）」アクションを含むように拡張される。配信アクションは、ハッシュ処理用にどのフィールドを含むべきか（例えば、ｓｒｃ  ｉｐアドレスをハッシュする、ｓｒｃ  ｉｐ＋ポートをハッシュするなど）についての指令、マッチングパケットに加えるべき変更の指令（例えば、宛先ＩＰアドレス、ＭＡＣアドレスを置き換える）も包含することができる。
【００５５】
例えば、式中、（＊）は、ワイルドカードマッチングを表し、ルールは以下であり得る：
ｐｒｏｔｏｃｏｌ＝ＴＣＰ、ｓｒｃ  ＩＰ＝＊、ｓｒｃ  ｐｏｒｔ＝＊、ｄｓｔ  ＩＰ＝１．２．３．４、ｄｓｔ  ｐｏｒｔ＝８０
＝＞ａｃｔｉｏｎ＝ｄｉｓｔｒｉｂｕｔｅ（ｈａｓｈ＝ｓｒｃ  ＩＰ＋ｓｒｃ  ｐｏｒｔ、ａｒｒａｙ＝ａ、ｓｅｒｖｅｒｌｉｓｔ＝ｌ、ｍｏｄｉｆｙ＝ｄｓｔ  ＩＰ）。
【００５６】
これらの実施形態のいくつかでは、着信パケットがルールのフィルタ部に適合（例えば、ｐｒｏｔｏｃｏｌ＝ＴＣＰ、ｓｒｃ  ＩＰ＝＊、ｓｒｃ  ｐｏｒｔ＝＊、ｄｓｔ  ＩＰ＝１．２．３．４，およびｄｓｔ  ｐｏｒｔ＝８０）するとき、ルールのアクション部（例えば、ａｃｔｉｏｎ＝ｄｉｓｔｒｉｂｕｔｅ（ｈａｓｈ＝ｓｒｃ  ＩＰ＋ｓｒｃ  ｐｏｒｔ、ｈａｓｈ  ａｒｒａｙ＝ａ、ｓｅｒｖｅｒｌｉｓｔ＝ｌ、ｍｏｄｉｆｙ＝ｄｓｔ  ＩＰ）が実施される。先の例では、「配信（ｄｉｓｔｒｉｂｕｔｅ）」アクションが実施される。特に、例のアクション部は、サーバインデックス「ｉ」を決定する際に使用されるハッシュ値「ｈ」を決定するためにコントローラが「ｓｒｃ  ＩＰ＝＋ｓｒｃ  ｐｏｒｔ」にハッシュ計算を実施するように指令する。いくつかの実施形態では、サーバインデックス「ｉ」が、ｉ：＝ａ［ｈ％Ａ］（すなわち、配列ａのインデックス（ｈ％Ａ）のサーバインデックスであり、式中Ａは、Ａのエントリ数、「％」は、モジュロを示す）を使用することによって決定される。サーバＳは、Ｓ：＝ｓ［ｉ］を使用することによってサーバインデックスから決定され得る。最後に、パケットの宛先ＩＰは、ルールで指定されるように変更され、パケットは、従来型のスイッチング技術を使用して所与のサーバに転送される。サーバＳは、等化なアルゴリズム、「Ｓ：＝ｓ［ａ［ｈ％Ａ］］」を使用することによって直接決定され得ることが理解されるべきである。
【００５７】
いくつかの実施形態では、ルールが、次の指令のうち１つまたは複数を含む：
１．パケットを変更する（例えば、宛先ＩＰをサーバのＩＰに置き換える）ための指令。
２．ハッシュ処理の際に使用されるフィールド（例えば、ｓｒｃ  ＩＰ＋ｓｒｃ  ｐｏｒｔ）に対する指令。
３．使用する配列インデックスまたはサーバリストに対する指令。
【００５８】
いくつかの実施形態では、配信アクションは、別々の量のフロートラフィックを別々のサーバに向けるために、サーバの重みを使用することを含む。
【００５９】
いくつかの実施形態では、ハッシュ配列２２０またはサーバリスト２３０が、受信した負荷情報に基づいて定期的に更新される（例えば、サーバの重みが、負荷を補償するように調整される）。
【００６０】
いくつかの実施形態では、受信した負荷情報に基づいたサーバインデックスの配列（例えば、より少ない負荷／より速く応答するサーバに比較的多くのトラフィックを送る）は、例えば、毎回のＸコネクションまたはＴ秒ごとの後にリクエストする。
【００６１】
いくつかの実施形態では、装置が、変更されたＯｐｅｎＳｗｉｔｃｈコンプライアントスイッチである。
【００６２】
いくつかの実施形態では、ＯｐｅｎＦｌｏｗの変更により、コントローラが、「配信（ｄｉｓｔｒｉｂｕｔｅ）」アクションと適合するフロー用のＳＹＮパケットまたはＳＹＮ＋ＡＣＫパケットが転送されるべきであると指定できる。これらの実施形態のいくつかでは、サーバが、カスタムＴＣＰオプションをＳＹＮに挿入し、負荷情報を返す。いくつかの実施形態では、コントローラが、負荷情報およびサーバの応答時間に基づいてトラフィックの配信を更新する。
【００６３】
いくつかの実施形態では、ＯｐｅｎＦｌｏｗの変更により、コントローラが、「配信（ｄｉｓｔｒｉｂｕｔｅ）」アクション用に作られたルール用にキープアライブフィルタリングを可能にすることができる。
【００６４】
いくつかの実施形態では、受信したパケットが、ハッシュ処理アクションの際に使用されるサーバインデックス値を含む。これらの実施形態のいくつかでは、サーバインデックス値が、ＴＣＰ  ＡＣＫフィールドの上位ｎビットに置かれる。
【００６５】
いくつかの実施形態では、ＯｐｅｎＦｌｏｗの変更により、スイッチ（例えば、図１のｖＲＳ１４０−１）またはコントローラ（例えば、図１のｖＲＳ１４０−１またはエッジルータ１３０−１（例えばコントローラの機能性がエッジルータ内に含まれる場合））が、着信パケットに基づいて（例えばフェイルオーバのシナリオをサポートするために）サーバインデックス配列のコンテンツを再構築できるようになる。
【００６６】
いくつかの実施形態では、コントローラが、セカンダリスイッチ（例えば、図１のｖＲＳ１４０−２）に、サーバインデックスの初期配列およびプライマリスイッチ（例えば、図１のｖＲＳ１４０−１）と同じサーバのリストを提供する。スイッチ障害から復旧するための、またはホットスタンドバイとして使用するための通知があると、サーバインデックスが、「ｔｒｉｇｇｅｒ（トリガ）」にセットされる。プライマリスイッチが故障すると、トラフィックはセカンダリスイッチにリダイレクトされ、パケットが既存のコネクションからコントローラへ通知する。コントローラは、パケットから（例えば、ＡＣＫフィールドから）サーバインデックス値を取り出し、パケットハッシュ値に基づいて、この値を用いて配列エントリを更新し、対応するサーバにパケットを転送するようにセカンダリスイッチに命令する。セカンダリスイッチに到着するそのフロー用のその後のパケット、または同じバケットにハッシュ処理を行ういずれかの他のフローは、介入なしに適切なサーバに自動的に転送される。このプロセスは、サーバインデックス配列中の全てのエントリに、特別な「ｔｒｉｇｇｅｒ」値以外の値がポピュレートされるまで、または、コントローラが、いずれかの残りの「ｔｒｉｇｇｅｒ」値をリアルサーバのインデックスに置き換えることによってサーバインデックス配列を更新する固定時間間隔の後まで継続する。
【００６７】
いくつかの実施形態では、スイッチが、サーバインデックス配列ごとのＸの以前のコンテンツの履歴を維持する。コネクションを確立する際に使用された元のサーバインデックス値を含むパケットを受信すると、スイッチがこのサーバインデックス値をそのサーバインデックス配列の値と比較する。適合しない（例えば、ＴＣＰコネクションが開始してから配列のコンテンツが変更されたため）場合、スイッチは、以前のＸ値のいずれかが適合したかどうかを決定するために履歴を検索し、もしそうならば、識別されたサーバにパケットを転送する。有利なのは、新たな、誤ったサーバに転送することによってコネクションを切断する代わりに適正なサーバに転送することによって、コネクション状態が維持され、ＲＳＴが、新たなサーバによって送信される必要がないことである。いくつかの実施形態では、履歴（サーバインデックス配列エントリごと）が、Ｎ−ｂｉｔビットマスクであり、それぞれのビットが、その特定のハッシュバケットの１つのポイントで使用されるサーバインデックス値を示す。いくつかの実施形態では、サーバインデックス値ｖを含むハッシュｈをもつ着信パケットの「ｈｉｓｔｏｒｙ  ｃｈｅｃｋ（履歴チェック）」が、（１＜＜ｖ）＆ｉｎｄｅｘ＿ａｒｒａｙ［ｈ］．ｈｉｓｔｏｒｙ＿ｍａｓｋである。有利なのは、「ｈｉｓｔｏｒｙ  ｃｈｅｃｋ」が、ハードウェアで効率的に実施される単一のオペレーションとなり得ることである。
【００６８】
有利なのは、ネットワーク要素およびコントローラに維持される状態情報がフローインスタンスから独立しているので、ルールテーブルの制限されたサイズによって引き起こされるスケーラビリティの制限が、低減され得ることである。したがって、ＯｐｅｎＦｌｏｗコントローラおよびｖＲＳ対が、増大するトラフィックフローをサポートすることができる。さらに、負荷分散用に維持されるルール数が、少なく（例えば、各ｖＲＳのターゲットＴＣＰポートごとに各指令に１つ）、フロー数から独立しているので、ルールテーブル空間は、他の機能向けにリザーブされ得る。さらに、動的状態が関与しないので、フェイルオーバは簡略化され、ハッシュ配列２２０およびサーバリスト２３０に必要なストレージの量が、制限され、一定であるので、データは、永続的ストレージ中でプログラムされ、またはネットワークをわたって非常に迅速に通信することができ、既存のフローを破壊することなく新たなｖＲＳインスタンスまたはターゲットサーバの追加が可能である。
【００６９】
図３に、コントローラ（例えば、図２のコントローラ２０５）がＴＣＰフロー配信を提供するための方法３００の一実施形態を示すフローチャートを示す。方法は、ステップ３０５で開始し、エッジルータ（例えば、図１の１つまたは複数のエッジルータ１３０）から受信したパケットが、負荷均衡化基準を満足するかどうかを決定するステップ（ステップ３１０）を含む。満足しない場合、方法はステップ３９０に進む。パケットが負荷均衡化基準を満足する場合、方法は、任意選択でＳＹＮフラグ用にＴＣＰフラグをチェックするステップ（ステップ３３０）を含む。ＳＹＮフィールドがセットされている場合は、方法は、ステップ３４０に進み、そうでない場合、宛先ＩＰアドレスが、ＡＣＫに基づいて更新される（ステップ３６０）。方法は、任意選択で、パケットが再送信であるかどうかを決定するステップ（ステップ３４０）と、パケットが再送信である場合、キャッシュされている選択に基づいてサーバを選択するステップ（ステップ３５０）を含む。パケットが再送信でない、または、パケットが再送信であるかどうかを決定するチェックが実施されない場合、サーバは、配信ポリシーに基づいて選択される（ステップ３７０）。ステップ３５０およびステップ３７０は、ステップ３８０に進み、パケットの宛先ＩＰアドレスは、サーバＩＰアドレスに基づいてセットされ（ステップ３８０）、次いで、パケットは宛先ＩＰアドレスに基づいて転送され（ステップ３９０）、方法が終了する（ステップ３９５）。
【００７０】
方法３００では、ステップ３１０が、エッジルータ（例えば、図１の１つまたは複数のエッジルータ１３０）から受信したパケットが、負荷均衡化基準を満足するかどうか決定するステップ（ステップ３１０）を含む。負荷均衡化基準は、例えばパケットプロトコル（例えばＴＣＰまたはＵＤＰ）、パケット送信元もしくは宛先ＩＰアドレス、またはパケット送信元もしくは宛先ポートなどの、任意の適したパケット特性を含むことができる。いくつかの実施形態では、パケットが、ＴＣＰパケットであり、提供された負荷バランサＩＰ：ポート対と適合するとき、負荷均衡化基準を満足する。パケットが、負荷均衡化基準を満足する場合、方法は、ステップ３３０に進み、そうでない場合、方法は、ステップ３９０に進む。
【００７１】
方法３００は、任意選択で、ステップ３３０およびステップ３６０を含む。ステップ３３０は、ＳＹＮフラグがセットされているかどうかをチェックするステップを含む。ＳＹＮフラグがセットされている場合、方法はステップ３４０に進み、そうでない場合、方法はステップ３６０に進む。ステップ３６０では、宛先ＩＰアドレスがＡＣＫフィールドに基づいてセットされる。ＳＹＮフラグとして示すが、開始側からのフローの第１のパケットとしてパケットを識別する任意の適したインジケータが使用され得ることが理解されるべきである。さらに、任意の適したフィールドが、ＩＰアドレス情報を搬送するために使用されてもよく、ＡＣＫフィールドが、適したフィールドのほんの一例であることが理解されるべきである。
【００７２】
有利なのは、非ＳＹＮパケット用にＬＳ−ＴＣＰを使用することによって、構成の変更が行われる（例えば、ＶＭを追加、削除または移動する）とき既存のフローが破壊されないことである。
【００７３】
方法３００では、ステップ３４０が、パケットが知られている方法による再送信であるかどうか決定するステップを含む。パケットが再送信である場合、方法はステップ３５０に進み、そうでない場合、方法はステップ３７０に進む。
【００７４】
方法３００では、ステップ３５０が、キャッシュされている選択に基づいてサーバを選択するステップを含む。特に、方法を実施する装置が、最近のサーバ選択のキャッシュを検索し、サーバが以前の送信に使用されたと決定する。
【００７５】
方法３００では、ステップ３７０が、配信ポリシーに基づいてサーバを選択するステップを含む。特にサーバは、図２で説明した決定のルールに基づいて選択される。
【００７６】
方法３００では、ステップ３８０が、選択されたサーバに基づいて宛先ＩＰアドレスをセットするステップを含む。いくつかの実施形態では、宛先ＩＰアドレスが、選択されたサーバのＩＰアドレスにセットされる。他の実施形態では、宛先ＩＰアドレスが、選択されたサーバのＩＰアドレスのサブセットに基づいてセットされる。これらの実施形態のいくつかでは、宛先ＩＰアドレスが、（式１）に従ってセットされる。
【００７７】
ｓｅｔ  ＩＰＤＥＳＴ［２４：３１］：＝ＩＰＳｅｌｅｃｔｅｄＳｅｒｖｅｒ［２４：３１］      （式１）
【００７８】
方法３００では、ステップ３９０が、宛先ＩＰアドレスに基づいて従来型のパケットスイッチングを実施するステップを含む。
【００７９】
ステップ３６０のいくつかの実施形態では、宛先ＩＰアドレスが、ルックアップに基づいてセットされる。これらの実施形態のいくつかでは、ＴＣＰ  ＡＣＫフィールドなどのフィールドの一部が、選択されたサーバのＩＰアドレス（完全なＩＰアドレスまたはそのサブセット）を識別するサーバインデックスを含む。これらの実施形態のいくつかでは、ＴＣＰ  ＡＣＫフィールドが、サーバを含むサーバリスト配列を識別する配列インデックスをさらに含む。いくつかの実施形態では、サーバインデックス、および任意選択で配列インデックスが、サーバのＩＰアドレス（例えば、ＩＰＳｅｌｅｃｔｅｄＳｅｒｖｅｒ＝ｓｅｒｖｅｒ＿ｌｉｓｔｓ［ａｒｒａｙ  ｉｎｄｅｘ］［ｓｅｒｖｅｒ  ｉｎｄｅｘ］）を取得するために使用される。これらの実施形態のいくつかでは、テーブルが、（例えば、フェイルオーバ前のプライマリサーバによって）更新され得る。
【００８０】
ステップ３６０のいくつかの実施形態では、宛先ＩＰアドレスが、ＴＣＰ  ＡＣＫフィールドの１つまたは複数のビットに基づいてセットされる。これらの実施形態のいくつかでは、ＴＣＰ  ＡＣＫフィールドの上位「ｎ」ビットがセットされる。これらの実施形態のいくつかでは、宛先ＩＰアドレスが、（式２）に従ってセットされる。
【００８１】
ｓｅｔ  ＩＰＤＥＳＴ［２４：３１］：＝ＡＣＫ［０：７］      （式２）
【００８２】
ステップ３３０およびステップ３６０のいくつかの実施形態では、サーバインデックスが、サーバによってサーバからパケットに挿入される。これらの実施形態のいくつかでは、挿入が、ＴＣＰスタックを変更することによって達成される。
【００８３】
ステップ３３０およびステップ３６０のいくつかの実施形態では、サーバインデックスが、ｖＲＳによってサーバからパケットに挿入される。有利なのは、変更が、サーバで行われる必要がなく、ただしコネクション単位の状態を維持されなければならなく、パケットが変更されることが必要とされ得るので、サーバは認識されないパケットが原因でコネクションを破壊することがないことである。
【００８４】
いくつかの実施形態では、ＴＣＰのキープアライブのステートレスフィルタリングが、フロー構成（すなわち、負荷バランサアプリケーションごとの有効／無効にするためのルール中のフラグ）に応じてｖＲＳで実施される。
【００８５】
いくつかの実施形態では、ＤＤｏＳ緩和アルゴリズムが、例えば、（短い）キャッシュ時間間隔内でクライアントｓｒｃ  ＩＰごとの１コネクションのみを可能にすること、一定のＩＰ送信元アドレスもしくはレンジをブラックリスト化すること、またはトラフィックパターンの傾向分析を実施することによって、ｖＲＳで実施される。これらの実施形態のいくつかでは、トリガが、トラフィックスパイクに対処するために、付加的なＶＭを自動的にインスタンス化するように実施され得る。
【００８６】
ステップ３６０およびステップ３８０の変更ＩＰ宛先ヘッダとして主に示すが、いくつかの実施形態は、ＩＰ宛先ヘッダを変更する代わりにまたはそれに加えて、変更したレイヤ２宛先アドレス（ＭＡＣ）を使用することができることが理解されるべきである。有利なのは、レイヤ２宛先アドレスを使用することによって、ＴＣＰ／ＩＰヘッダチェックサムが更新される必要がなく、戻り方向での宛先ＩＰアドレスを再書込みをする必要がないように、サーバは、仮想負荷バランサＩＰと同じＩＰアドレスを使用することができる。
【００８７】
図４に、ＴＣＰ負荷分散を実施するための方法３００の一実施形態を示す例示的なメッセージフローを示す。メッセージフローは、ＤＣルータ（例えば、図１のエッジルータ１３０−１）、ならびにＶＲＳ１およびＶＲＳ２とラベル付けされた１つもしくは複数の物理ルータ／スイッチまたは仮想ルータ／スイッチ（例えば、図１の１つもしくは複数のｖＲＳ１４０）を介して、クライアント（例えば、図１のクライアント１１０−１）と仮想マシン（例えば、図１のＶＭ１６０−１−１）との間のエンドツーエンドメッセージフローである。
【００８８】
ＳＹＮフラグが、開始側からのフローの第１のパケットを示し、ＳＹＮ＋ＡＣＫフラグが、応答側からのフローの第１のパケットを示すことが理解されるべきである。
【００８９】
いくつかの実施形態では、選択されたターゲットサーバがローカルでない場合、第１のｖＲＳ（例えばＶＲＳ１）は、第２のｖＲＳ（例えばＶＲＳ２）に全てのＴＣＰパケットを（宛先ＩＰを変更した後で）転送しなければならない。次いで、第２のｖＲＳは、受信したＴＣＰパケットで標準のスイッチングを実施することができる。いくつかの実施形態では、戻り方向に流れるパケットが、エッジルータに直接転送され得る（結果として非対称ルーティング／スイッチングとなる）。
【００９０】
主に、特定のシーケンスで示し説明するが、方法３００に示すステップは、任意の適したシーケンスで実施され得ることが理解されるべきである。さらに、１つのステップによって識別されるステップは、そのシーケンスの１つまたは複数の他のステップで実施されてもよく、または１つのステップより多くの共通のアクションが、一回だけ実施されてもよい。
【００９１】
先に説明した種々の方法のステップは、プログラムされたコンピュータによって実施され得ることが理解されるべきである。本明細書では、いくつかの実施形態が、プログラム記憶デバイス、たとえば、機械またはコンピュータ読み出し可能であり、命令の機械実行可能またはコンピュータ実行可能プログラムを符号化するデータ記憶媒体を包含するようにも意図されており、前記命令が、前記先に説明した方法のいくつかまたは全てのステップを実施する。プログラムストレージデバイスは、例えば、デジタルメモリ、磁気ディスクおよび磁気テープなどの磁気記憶媒体、ハードドライブ、または光学的可読データ記憶媒体とすることができる。実施形態は、先に説明した方法の前記ステップを実施するようにプログラムされたコンピュータを扱うものでもある。
【００９２】
図５に、図１のｖＲＳ１４０のうちの１つなどの種々の装置５００の一実施形態を概略的に示す。装置５００は、プロセッサ５１０と、データストレージ５１１と、任意選択でＩ／Ｏインターフェース５３０とを含む。
【００９３】
プロセッサ５１０が、装置５００のオペレーションを制御する。プロセッサ５１０が、データストレージ５１１と協働する。
【００９４】
データストレージ５１１は、プロセッサ５１０によって実行可能なプログラム５２０を記憶する。データストレージ５１１は、任意選択で、図２のルール２１０、ハッシュ配列２２０、サーバリスト２３０などのプログラムデータを適宜記憶することもできる。
【００９５】
プロセッサ実行可能なプログラム５２０は、Ｉ／Ｏインターフェースプログラム５２１または負荷分散プログラム５２３を含むことができる。プロセッサ５１０は、プロセッサ実行可能なプログラム５２０と協働する。
【００９６】
Ｉ／Ｏインターフェース５３０は、先に説明した図１のオーバレイトンネル１３５またはチャネル１４５をわたる通信をサポートするために、プロセッサ５１０およびＩ／Ｏインターフェースプログラム５２１と協働する。Ｉ／Ｏインターフェースプログラム５２１は、先に説明した図３のステップ３１０またはステップ３９０のうち１つまたは複数を適宜実施する。
【００９７】
負荷分散マネージャプログラム５２３は、先に説明した図３の方法３００の１つまたは複数のステップを適宜実施する。
【００９８】
いくつかの実施形態では、プロセッサ５１０が、プロセッサ／ＣＰＵコアなどの資源を含むことができ、Ｉ／Ｏインターフェース５３０は、任意の適したネットワークインターフェースを含むことができ、または、データストレージ５１１が、メモリもしくはストレージデバイスを含むことができる。さらに、装置５００は、１つまたは複数のサーバ、またプロセッサ、メモリ、ネットワークインターフェースまたはストレージデバイスなどのコンポーネントからなるブレードなどの任意の適した物理的ハードウェア構成とすることができる。いくつかの実施形態では、装置５００が、互いに遠隔にあるクラウドネットワーク資源を含むことができる。
【００９９】
いくつかの実施形態では、装置５００が、１つまたは複数の仮想マシンとすることができる。これらの実施形態のいくつかでは、１つまたは複数の仮想マシンは、異なるマシンからのコンポーネントを含むことができ、または地理的に分散され得る。例えば、データストレージ５１１およびプロセッサ５１０が、２つの異なる物理マシン中にあってもよい。
【０１００】
プロセッサ実行可能プログラム５２０がプロセッサ５１０で実施されるとき、プログラムコードセグメントは、論理回路を指定するのに類似した動作を行う独自のデバイスを提供するようにプロセッサと結合する。
【０１０１】
例えば、プログラムおよび論理がデータストレージ内に記憶され、メモリがプロセッサに通信可能に接続された実施形態に関して本明細書で示し説明したが、こうした情報は、任意の他の適した方式で（例えば、任意の適した個数のメモリ、ストレージまたはデータベースを使用して）、任意の適した構成のデバイスに通信可能に接続された任意の適したメモリ、ストレージまたはデータベースの構成を使用して、メモリ、ストレージまたは内部もしくは外部のデータベースの任意の適した組合せで情報を記憶し、あるいはアクセス可能な任意の適したいくつかの外部メモリ、ストレージまたはデータベースを使用して、記憶され得ることが理解されるべきである。こういうものとして、本明細書で言う用語、データストレージは、メモリ、ストレージおよびデータベースの全ての適した組合せを包含することになる。
【０１０２】
説明および図面は、単に本発明の原理を示す。したがって、本明細書では明示的に説明し示さないが、本発明の原理を実施し、その趣旨および範囲に含まれる、種々の構成を考案することができることが、当業者には理解されよう。さらに、本明細書で挙げた全ての例は、主に、当技術を進めるために本発明者によって寄与される本発明の原理および概念を、理解する際に読者を支援するために、教示の目的のためだけに明白にするものであり、こうした具体的に挙げた例および条件に限定されないと解釈されるべきである。さらに本発明の原理、態様および実施形態を挙げる本明細書の全ての記述、ならびにその具体例は、その均等物を包含するものである。
【０１０３】
図面に示す種々の要素の機能は、「プロセッサ」としてラベル付けされた任意の機能ブロックを含め、専用のハードウェアならびに適切なソフトウェアに関連するソフトウェアを実行することができるハードウェアの使用を通じて提供され得る。機能は、プロセッサによって提供されるとき、単一の専用プロセッサ、単一の共用プロセッサ、または複数の個々のプロセッサ、これらのいくつかは共用され得るが、これらのプロセッサによって提供され得る。さらに、用語「プロセッサ」または「コントローラ」の明示的使用は、ソフトウェアを実行することができるハードウェアを排他的に言うものと解釈されるべきでなく、限定しないが、暗黙に、デジタル信号プロセッサ（ＤＳＰ）ハードウェア、ネットワークプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、ソフトウェアを記憶するための読出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、および不揮発性ストレージを含むことができる。他のハードウェア、従来型のまたはカスタムのハードウェアも含まれ得る。同様に、図面に示すいずれのスイッチも、単に概念的なものである。これらの機能は、プログラム論理のオペレーションにより、専用論理により、プログラム制御と専用論理の相互作用により、または手動でも、遂行されてよく、特定の技術は、文脈からより具体的に理解されるように実施者によって選択され得る。
【０１０４】
本明細書のいずれのブロック図も、本発明の原理を実施する例証のための回路の概念的視点を示すことが理解されるべきである。同様に、いずれの流れ図、フローダイアグラム、状態遷移図、疑似コードなども、種々のプロセスを示し、これらのプロセスは、コンピュータ可読媒体中で実質的に示され、またコンピュータまたはプロセッサによって、このコンピュータまたはプロセッサが明示的に示されようとなかろうと実行され得る。
【図１】
2016521090.tif 000003
【図２】
2016521090.tif 000004
【図３】
2016521090.tif 000005
【図４】
2016521090.tif 000006
【図５】
2016521090.tif 000007
【国際調査報告】
2016521090.tif 000008
2016521090.tif 000009