(57)【要約】  管理仮想ネットワークを実装するシステム及び方法を開示する。方法は、基礎となるネットワークの第１のノードの第１のネットワークインタフェースに到着するネットワークパケットを受信する段階と、第１のネットワークインタフェースの識別子と少なくとも１つのパケットとを決定エンジンに送信する段階と、複数の仮想ネットワークデバイスを含む仮想ネットワークトポロジーの横断についての決定エンジンによるシミュレーションに基づいてパケットを処理すべきやりかたを決定する段階とを備え、決定エンジンは、複数の仮想ネットワークデバイスについて仮想デバイス構成と仮想ネットワークトポロジーとを格納する基礎となるネットワークからアクセス可能な共有データベースと通信して、方法はさらに、シミュレーションに基づいてパケットを処理する段階を備える。【選択図】図５
2014529926.tif 000002
【特許請求の範囲】
【請求項１】
基礎となるネットワークの第１のノードの第１のネットワークインタフェースに到着するネットワークパケットを受信する段階と、
少なくとも前記パケットと前記第１のネットワークインタフェースの識別子とを決定エンジンに送信する段階と、
複数の仮想ネットワークデバイスを含む仮想ネットワークトポロジーの横断の、前記決定エンジンによるシミュレーションに基づいて前記パケットを処理すべきやりかたを決定する段階であって、前記決定エンジンは、前記複数の仮想ネットワークデバイスのための仮想デバイス構成と前記仮想ネットワークトポロジーとを格納する、前記基礎となるネットワークからアクセス可能な共有データベースと通信する、段階と、
前記シミュレーションに基づいて前記パケットを処理する段階と
を備える、コンピューティング方法。
【請求項２】
各ノードが、前記決定エンジンを実行して、前記シミュレーションを実行して、前記ノードに到着するパケットを処理すべきやりかたを決定する段階を備える、請求項１に記載の方法。
【請求項３】
前記パケットを処理すべきやりかたを決定する段階は、
前記パケットに対する前記決定エンジンによる前記シミュレーションの結果に関連付けられているパケットプロトコルヘッダ・パターンを決定する段階を含み、
前記方法はさらに、
前記パケットプロトコルヘッダ・パターンと前記パケットの前記シミュレーションの前記結果とを格納する段階と、
前記第１のノードで第２のパケットを受信する段階と、
前記第２のパケットを前記パケットプロトコルヘッダ・パターンと比較する段階と、
前記第２のパケットが前記パケットプロトコルヘッダ・パターンに一致している場合、前記パケットの前記シミュレーションについて格納されている前記結果を取得することで前記第２のパケットを処理すべきやりかたを決定する段階と、
前記パケットについての、前記決定エンジンによる前記シミュレーションについての取得された前記結果に基づいて前記第２のパケットを処理する段階と
を備える、請求項１に記載のコンピューティング方法。
【請求項４】
前記パケットは、複数のフィールドを含むプロトコルヘッダを含み、
前記パケットプロトコルヘッダ・パターンを決定する段階は、
前記決定エンジンによる、前記複数の仮想ネットワークデバイスを含む前記仮想ネットワークトポロジーの前記横断の前記シミュレーション中に読み出された前記プロトコルヘッダの前記複数のフィールドのそれぞれを特定する段階を含む、請求項３に記載の方法。
【請求項５】
前記パケットプロトコルヘッダは、前記決定エンジンによる前記シミュレーション中に読み出されなかった前記プロトコルヘッダのフィールドについてのワイルドカードを含む、請求項４に記載の方法。
【請求項６】
前記パケットはプロトコルヘッダを含み、
前記シミュレーションはさらに、前記パケットが仮想ネットワークデバイスから発行されるときの前記パケットのプロトコルヘッダに対する修正を決定することを含み、
前記パケットの処理は、決定された前記修正を前記パケットのプロトコルヘッダに適用することを含む、請求項１に記載の方法。
【請求項７】
さらに、前記パケットを処理すべきやりかたを決定する段階は、
前記パケットが、前記第１のネットワークノードの第２のネットワークインタフェースから発行されるべきであると決定する段階を含み、
前記パケットの処理は、前記パケットを前記第２のインタフェースから発行する段階を含む、請求項１に記載のコンピューティング方法。
【請求項８】
さらに、前記パケットを処理すべきやりかたを決定する段階は、
前記パケットが、前記基礎となるネットワークの第２のノードの第２のネットワークインタフェースから発行されるべきであると決定することを含み、
前記パケットの処理は、前記パケットを前記基礎となるネットワークの前記第２のノードに配信して、前記パケットを前記第２のインタフェースから発行することを含む、請求項１に記載のコンピューティング方法。
【請求項９】
さらに、前記パケットを処理すべきやりかたを決定する段階は、
前記基礎となるネットワークの前記第２のノードに配信する前に、前記パケットのプロトコルヘッダを修正すべきやりかたを決定する段階を含む、請求項８に記載のコンピューティング方法。
【請求項１０】
前記パケットの処理は、前記パケットを前記第１のノードから前記第２のノードに、トンネルキーを含むトンネリングプロトコルパケットのペイロードとして転送することを含み、
前記トンネルキーは、前記第２のネットワークインタフェースのグローバル識別子をエンコードする、請求項８に記載のコンピューティング方法。
【請求項１１】
さらに、前記第２のノードで前記決定エンジンを呼び出すことなく、前記第２のネットワークインタフェースから前記パケットを発行する段階を備える、請求項１０に記載の方法。
【請求項１２】
前記パケットがインタフェースセット識別子に対応しているネットワークインタフェースセットから発行されるべきであると決定する段階をさらに備え、
前記ネットワークインタフェースセットの少なくとも一部は、第２のノードに位置しており、
前記パケットの処理は、
前記第１のノードにローカルな前記ネットワークインタフェースセットの各ネットワークインタフェースに前記パケットを配信することと、前記パケットを、前記第１のノードから前記第２のノードに、トンネリングプロトコルパケットの前記ペイロードとして、前記インタフェースセット識別子をエンコードするトンネルキーを利用して転送することとを含む、請求項１に記載のコンピューティング方法。
【請求項１３】
前記基礎となるネットワークはマルチキャストをサポートしており、
前記方法はさらに、
各インタフェースセット識別子をマルチキャストアドレスにマッピングする段階と、
前記基礎となるネットワークの各ノードについて、前記ノードの少なくとも１つのネットワークインタフェースが属す前記インタフェースセット識別子のそれぞれについてのマルチキャスト・サブスクリプションを維持する段階と、
前記パケットを前記トンネリングプロトコルパケットの前記ペイロードとして少なくとも前記第２のノードにマルチキャストする段階と、
各ノードについて、当該ノードにローカルなインタフェースセットに対応している任意のネットワークインタフェースから前記パケットを発行する段階と
を備える、請求項１０に記載のコンピューティング方法。
【請求項１４】
前記基礎となるネットワークは、マルチキャストをサポートしておらず、
前記方法はさらに、
前記ネットワークインタフェースセットに属すローカルネットワークインタフェースを有する基礎となるネットワークノードのセットを決定する段階と、
前記第１のノードから前記基礎となるネットワークノードのセットの各ノードに前記パケットを転送する段階と、
各ノードについて、当該ノードにローカルなインタフェースセットに対応している任意のネットワークインタフェースから前記パケットを発行する段階と
を備える、請求項１０に記載のコンピューティング方法。
【請求項１５】
複数のノードを有する基礎となるネットワークからアクセス可能な共有データベースを維持する段階であって、前記共有データベースは、複数の仮想ネットワークデバイスの仮想デバイス構成及び仮想ネットワークトポロジーを格納している、段階と、
前記基礎となるネットワークの第１のノードの第１のネットワークインタフェースに到着するネットワークパケットを受信する段階と、
前記複数の仮想ネットワークデバイスを含む前記仮想ネットワークトポロジーの前記パケットの横断のシミュレーションに基づいて前記ネットワークパケットを処理するアクションを決定する段階と
を備えるコンピューティング方法。
【請求項１６】
前記複数の仮想ネットワークデバイスを含む前記仮想ネットワークトポロジーの前記パケットの横断の前記シミュレーションを実行するための決定エンジンを提供する段階をさらに備え、
前記決定エンジンは、各それぞれのノードで受信したパケットの前記シミュレーションを実行するべく、前記複数のノードのそれぞれに動作可能である、請求項１５に記載の方法。
【請求項１７】
前記仮想ネットワークトポロジーは、前記複数の仮想ネットワークデバイスに対応している複数の仮想ポートを含み、
各仮想ポートは、前記基礎となるネットワークのノードのネットワークインタフェースに関連付けられた外向きポート、または、仮想ネットワークデバイス間の仮想リンクに関連付けられた内向きポートのうちの１つに対応している、請求項１５に記載の方法。
【請求項１８】
仮想ネットワークトポロジーおよび仮想デバイス構成を格納する前記共有データベースは、
前記仮想ポートの外向きポートまたは内向きポートのいずれかとしての識別情報を含む、前記複数の仮想ポートのそれぞれのための構成と、
前記複数の仮想ポートに関連付けられている前記複数のネットワークデバイスのそれぞれのための構成と、
前記基礎となるネットワークノードの識別子に対するネットワークインタフェースの識別子のマッピングと、
ネットワークノードの基礎となる対応するネットワークインタフェースに対する外向きポートのマッピングと、
各デバイスの内向きポートそれぞれの、仮想リンクにより接続される別のデバイスのピア内向きポートに対するマッピングと
を含む、請求項１７に記載の方法。
【請求項１９】
前記仮想ネットワークトポロジー及び仮想デバイス構成の少なくとも一部を、前記基礎となるネットワークの前記ノードにキャッシュする段階と、
前記共有データベースが修正されたときに、キャッシュされている前記仮想ネットワークトポロジー及び前記仮想デバイス構成を更新する段階と
をさらに備える、請求項１５に記載の方法。
【請求項２０】
仮想デバイスへのパケットの到着のシミュレーション時に、前記シミュレーションを実行している前記ノードの前記仮想デバイスの構成をロードする段階をさらに備える、請求項１５に記載の方法。
【請求項２１】
前記第１のネットワークインタフェースを、対応する仮想ポートにマッピングして、前記ポート及び前記ポートに関連付けられている前記ネットワークデバイスの構成を取得する段階と、
前記ポートに関連付けられている前記ネットワークデバイスのシミュレーションに基づいて前記ネットワークパケットを処理する前記アクションを決定する段階と
をさらに備える、請求項１５に記載の方法。
【請求項２２】
前記アクションは、
前記ネットワークデバイスの内部状態を修正すること、
前記パケットをドロップすること、
前記パケットのプロトコルヘッダを修正すること、
前記パケットを、前記ネットワークデバイスの１以上の仮想ポートから発行すること、
別のパケットを、前記ネットワークデバイスの１以上の仮想ポートから発行すること
のうち１以上を含む、請求項２１に記載の方法。
【請求項２３】
前記アクションは、前記ネットワークデバイスの第２の仮想ポートから前記パケットを発行することであり、
前記第２の仮想ポートは内向きポートであり、
前記方法はさらに、
前記第２の仮想ポートのピア内向きポートを決定して、前記ピア内向きポート及び前記ピア内向きポートに関連付けられているネットワークデバイスの構成を取得する段階と、
前記ピア内向きポートに関連付けられている前記ネットワークデバイスのシミュレーションに基づいて前記ネットワークパケットを処理する前記アクションを決定する段階と
を備える、請求項２１に記載の方法。
【請求項２４】
前記アクションは、１以上の外向き仮想ポートから前記パケットを発行することであり、
前記方法はさらに、
各外向き仮想ポートを、対応するネットワークインタフェース、及び、前記基礎となるネットワークのノードにマッピングする段階と、
前記パケットを、前記対応するネットワークインタフェースのそれぞれから発行する段階と
を備える、請求項２１に記載の方法。
【請求項２５】
前記パケットは、複数のフィールドを含むプロトコルヘッダを含み、
前記方法はさらに、
前記仮想ネットワークトポロジー及び前記複数の仮想ネットワークデバイスの前記シミュレーション中に読み出された前記プロトコルヘッダの前記フィールドのそれぞれを特定することにより、パケットプロトコルヘッダ・パターンを決定する段階と、
前記パケットのシミュレーション結果に関連付けられている前記パケットプロトコルヘッダ・パターンを格納する段階と
を備える、請求項１５に記載の方法。
【請求項２６】
後続するパケットを、格納されている前記パケットプロトコルヘッダ・パターンに一致させる段階と、
格納されている前記シミュレーション結果を取得することにより、前記後続するパケットを処理するアクションを決定する段階と
をさらに備える、請求項２５に記載の方法。
【請求項２７】
前記仮想ネットワークトポロジーまたは仮想デバイス構成が変更されると、格納されている前記パケットプロトコルヘッダ・パターン及び対応し格納されている前記シミュレーション結果を無効化する段階をさらに備える、請求項２５に記載の方法。
【請求項２８】
前記シミュレーション中に横断された、横断された仮想デバイスのセットを決定して、前記横断された仮想デバイスのセットを、前記シミュレーションのために、格納されている前記パケットプロトコルヘッダ・パターン、及び、対応し格納されている前記シミュレーション結果の１つと関連付ける段階と、
前記横断されたセットの前記仮想デバイスの１つの前記構成の変更を検知する段階と、
前記変更が検知された前記仮想デバイスを含む各横断されたセットに関連付けられている、対応し格納されている前記シミュレーション結果、及び、格納されている前記パケットプロトコルヘッダ・パターンを無効化する段階と
をさらに備える、請求項２７に記載の方法。
【請求項２９】
前記シミュレーションはさらに、
前記基礎となるネットワークの１以上のノードのネットワークインタフェースにマッピングされている１以上の外向きポート、及び、それぞれが仮想ルータの内向きポートに接続されている１以上の内向きポートを有するＭＡＣ学習ブリッジをシミュレーションする段階を備える、請求項１７に記載の方法。
【請求項３０】
前記共有データベースに各ＭＡＣ学習ブリッジのためのＭＡＣ学習テーブルを維持する段階をさらに備える、請求項２９に記載の方法。
【請求項３１】
特定のＭＡＣ学習ブリッジのための前記ＭＡＣ学習テーブルのキャッシュされたコピーを、ネットワークインタフェースが前記特定のＭＡＣ学習ブリッジにマッピングされている前記基礎となるネットワークの各ノードの上に維持する段階をさらに備える、請求項３０に記載の方法。
【請求項３２】
特定のＭＡＣ学習ブリッジのための前記ＭＡＣ学習テーブルのキャッシュされたコピーを、前記ＭＡＣ学習ブリッジをシミュレーションする各仮想デバイスの上に維持する段階をさらに備える、請求項３０に記載の方法。
【請求項３３】
前記ＭＡＣ学習テーブルを、既知のＭＡＣポートエントリで予めポピュレートする段階をさらに備える、請求項３０に記載の方法。
【請求項３４】
前記ＭＡＣ学習ブリッジをシミュレーションする段階はさらに、
前記仮想ブリッジの到着仮想ポートでユニキャストソースＭＡＣアドレスを有するＥｔｈｅｒｎｅｔ（登録商標）フレームを受信する段階と、
前記仮想ブリッジの前記到着仮想ポートに前記ＭＡＣアドレスを関連付けるべく、前記ＭＡＣ学習テーブルを更新する段階と
を含む、請求項２９に記載の方法。
【請求項３５】
前記ＭＡＣ学習ブリッジをシミュレーションする段階はさらに、
前記仮想ブリッジの到着仮想ポートでユニキャストデスティネーションＭＡＣアドレスを有するＥｔｈｅｒｎｅｔ（登録商標）フレームを受信する段階と、
前記ＭＡＣアドレスが前記ＭＡＣ学習テーブルにある場合、前記ＭＡＣ学習テーブルで前記ＭＡＣアドレスに関連付けられている前記仮想ブリッジの前記仮想ポートから前記フレームを発行する段階と、
前記ＭＡＣアドレスが前記ＭＡＣ学習テーブルにない場合、前記到着仮想ポートを除く前記仮想ブリッジの全ての仮想ポートから前記フレームを発行する段階と
を含む、請求項２９に記載の方法。
【請求項３６】
前記ＭＡＣ学習ブリッジをシミュレーションする段階はさらに、
前記仮想ブリッジの到着仮想ポートでマルチキャストまたはブロードキャストデスティネーションＭＡＣアドレスを有するＥｔｈｅｒｎｅｔ（登録商標）フレームを受信する段階と、
前記到着仮想ポートを除く前記仮想ブリッジの全ての仮想ポートから前記フレームを発行する段階と
を含む、請求項２９に記載の方法。
【請求項３７】
ＡＲＰキャッシュを、前記共有データベースに、前記仮想ブリッジの構成の一部として維持する段階をさらに備える、請求項２９に記載の方法。
【請求項３８】
ＩＰパケットを特定して、カプセル化するＥｔｈｅｒｎｅｔ（登録商標）フレームのソースＩＰアドレス及びソースＭＡＣアドレスを抽出して、前記仮想ブリッジの前記ＡＲＰキャッシュを更新して、特定された前記ＩＰアドレスと前記ＭＡＣアドレスとを関連付ける段階をさらに備える、請求項３７に記載の方法。
【請求項３９】
前記シミュレーションはさらに、
前記基礎となるネットワークの１以上のノードのネットワークインタフェースにマッピングされた外向きポートと、仮想ルータまたは仮想ブリッジの内向きポートに接続された１以上の内向きポートとを有するルータをシミュレーションすることを含む、請求項１７に記載の方法。
【請求項４０】
前記ルータは、ＩＰｖ４ルータである、請求項３９に記載の方法。
【請求項４１】
ＡＲＰキャッシュと転送テーブルとを、前記共有データベースに、前記ルータの構成の一部として維持する段階をさらに備える、請求項３９に記載の方法。
【請求項４２】
ネットワークインタフェースが前記ルータの前記外向きポートの１つにマッピングされている前記基礎となるネットワークの各ノードに前記ＡＲＰキャッシュのキャッシュされたコピーを維持する段階をさらに備える、請求項４１に記載の方法。
【請求項４３】
前記ルータをシミュレーションする前に、既知のエントリで前記ＡＲＰキャッシュを予めポピュレートする段階をさらに備える、請求項４１に記載の方法。
【請求項４４】
パケットのソース及びデスティネーションネットワーク（Ｌ３）アドレスが分かっている場合に、最もよく一致するルートを決定するべく、前記ルータの転送テーブルを照会する段階をさらに備える、請求項４１に記載の方法。
【請求項４５】
前記シミュレーションはさらに、
少なくとも１つの仮想デバイスの入力フィルタ及び出力フィルタの少なくとも１つをシミュレーションすることをさらに含み、
各フィルタは、特定の条件に一致するパケットに適用するフィルタリングルールを含む、請求項１５に記載の方法。
【請求項４６】
前記共有データベースに、各仮想デバイスのための前記フィルタリングルールを維持する段階をさらに備える、請求項４５に記載の方法。
【請求項４７】
前記パケットのフロー接続状態に一致する条件をもつフィルタリングルールをシミュレーションする段階であって、各シミュレーションされるデバイスによって、フローごとの接続状態が独立して監視され、フローごとの接続状態の値は、前記パケットのトランスポート（Ｌ４）プロトコルに依存する、段階をさらに備える、請求項４５に記載の方法。
【請求項４８】
前記接続状態がパケットのシミュレーションに利用されているか否かの決定に基づいて、前記フローごとの接続状態を前記共有データベースに選択的に書き込む段階をさらに備える、請求項４７に記載の方法。
【請求項４９】
前記フローごとの接続状態は、前記シミュレーション中にシミュレーションされている各仮想デバイスの間で共有される、請求項４７に記載の方法。
【請求項５０】
各フローに固有のフローの署名を決定する段階と、
デバイス及びフローごとの接続状態を、特定のフローの前記フローの署名に関連づけて、前記共有データベースに格納する段階と
をさらに備える、請求項４７に記載の方法。
【請求項５１】
前記フローの署名は、シミュレーションされるデバイスのデバイス識別子、パケットのＬ３ヘッダソースフィールド、Ｌ３ヘッダデスティネーションフィールド、Ｌ４プロトコルタイプ、Ｌ４ヘッダソースフィールド、及び、Ｌ４ヘッダデスティネーションフィールドを含む、請求項５０に記載の方法。
【請求項５２】
各フローに固有の逆方向のフローの署名を決定する段階と、
デバイス及びフローごとの接続状態を、特定のフローの前記逆方向のフローの署名に関連づけて、前記共有データベースに格納する段階と
をさらに備える、請求項５０に記載の方法。
【請求項５３】
前記逆方向のフローの署名は、シミュレーションされるデバイスのデバイス識別子、パケットのＬ３ヘッダデスティネーションフィールド、Ｌ３ヘッダソースフィールド、Ｌ４プロトコルタイプ、Ｌ４ヘッダデスティネーションフィールド、及び、Ｌ４ヘッダデソースフィールドを含む、請求項５２に記載の方法。
【請求項５４】
前記特定のフローが終了すると、前記フローの署名及び前記逆方向のフローの署名に関連付けられている前記接続状態を除去する段階をさらに備える、請求項５０に記載の方法。
【請求項５５】
前記シミュレーションはさらに、
仮想デバイスが実行する、ネットワーク（Ｌ３）アドレス変換及びトランスポート（Ｌ４）アドレス変換のうち少なくとも１つをシミュレーションすることをさらに含む、請求項１５に記載の方法。
【請求項５６】
前記共有データベースに、前記ネットワークアドレス変換を、各仮想デバイスについて維持する段階をさらに備える、請求項５５に記載の方法。
【請求項５７】
前記共有データベースに、逆ネットワークアドレス変換を、各仮想デバイスについて維持する段階をさらに備える、
請求項５６に記載の方法。
【請求項５８】
前記パケットがネットワークアドレス変換ルール条件に一致しているかを決定して、前記ルール条件が満たされている場合に、前記ネットワークアドレス変換に従って、前記パケットネットワークプロトコルヘッダを修正する段階をさらに備える、請求項５５に記載の方法。
【請求項５９】
順方向のフローの署名及び戻りのフローの署名の両方によって調節された前記共有データベースに、各順方向のフローについての変換の選択を格納する段階をさらに備える、請求項５５に記載の方法。
【請求項６０】
前記ネットワーク（Ｌ３）アドレス変換及び前記トランスポート（Ｌ４）アドレス変換の変換選択に関連付けられている、順方向のフローのキーを決定する段階と、
前記共有データベースを照会して、矛盾する変換が前に格納されたかを決定する段階と、
矛盾する変換が特定された場合には、前記ネットワーク（Ｌ３）アドレス変換及び前記トランスポート（Ｌ４）アドレス変換のための別の変換選択を選択する段階と
をさらに備える、請求項５９に記載の方法。
【請求項６１】
前記変換が変換ターゲットの選択を許可するときに、ネットワーク（Ｌ３）アドレス及びトランスポート（Ｌ４）アドレスのアドレス変換ターゲットを決定する段階と、
前記共有データベースから、前記アドレス変換ターゲットが、前に格納した変換と矛盾するかを決定する段階と、
前記変換ターゲットの前記選択から、前記ネットワーク（Ｌ３）アドレス及び前記トランスポート（Ｌ４）アドレスの新たなアドレス変換ターゲットを決定する段階と
をさらに備える、請求項５５に記載の方法。
【請求項６２】
前記共有データベースにフローのためのネットワークアドレス変換を格納して、前記ネットワークアドレス変換を、順方向のフローの署名及び逆方向のフローの署名の両方によって調節する段階をさらに備える、請求項５５に記載の方法。
【請求項６３】
前記フローに対応するパケットを転送する前に、前記フローの前記ネットワークアドレス変換が前記共有データベースに格納されるまで待つ段階をさらに備える、請求項５９に記載の方法。（注釈：変換をどのようにするかの選択肢がある場合にレース条件を回避して、ルールが格納される前に別のパケットが到達しないようにするため）
【請求項６４】
仮想ポートに関連付けて、前記共有データベースに、ＤＨＣＰリソース定義を格納する段階であって、前記ＤＨＣＰリソース定義は、対応する値と動的なＩＰアドレスプールとを有するオプションのセットを有するＤＨＣＰ構成を含む、段階と、
前記共有データベースに、外向きポートのＤＨＣＰリソースへのマッピングを格納する段階と、
ＤＨＣＰリソースにマッピングされた仮想ポートに到着したＤＨＣＰパケットを特定する段階と、
前記動的なＩＰアドレスプールからＩＰアドレスを割り当てる段階と、
割り当てられた前記ＩＰアドレスを含むＤＨＣＰ応答メッセージを発行する段階と
をさらに備える、請求項１５に記載の方法。
【請求項６５】
フローエントリーを削除するための、ステートフル接続トラッキングの方法であって、
フロー構成可能なスイッチをもつエッジノードでシーケンス番号をもつＦＩＮパケットを受信する段階と、
前記フロー構成可能なスイッチの前記パケットに対応するフロールールを特定する段階と、
削除するために前記フロールールを特定して、特定した前記フロールールを分散状態に通信する段階と、
前記パケットを、対応する前記フロールールに基づいて通信する段階と
を備える、方法。
【請求項６６】
前記フロールールは、ＴＣＰ接続のインバウンドフローに対応している、請求項６５に記載の方法。
【請求項６７】
前記フロールールは、ＴＣＰ接続のアウトバウンドフローに対応している、請求項６５に記載の方法。
【請求項６８】
前記ＦＩＮパケットに対応するＡＣＫパケットを受信すると、特定した前記フロールールを削除する段階をさらに備える、請求項６５に記載の方法。
【請求項６９】
特定した前記フロールールに対応している、前記分散状態に格納されている反対方向のフロールールを特定する段階と、
削除するために前記反対方向のフロールールを特定する段階と
をさらに備える、請求項６５に記載の方法。
【請求項７０】
前記ＦＩＮパケットに対応するＡＣＫパケットを受信すると、特定した前記フロールールと前記反対方向のフロールールとを削除する段階をさらに備える、請求項６９に記載の方法。
【請求項７１】
コンピューティングシステムであって、
基礎となるネットワークが相互接続する複数のノードであって、各ノードが１以上のネットワークインタフェースを含む、前記複数のノードと、
前記複数のノードで動作する複数の仮想デバイスであって、各仮想デバイスは、複数の仮想ポートを有し、各仮想ポートは、前記基礎となるネットワークの前記複数のノードの前記１以上のネットワークインタフェースの１つに関連付けられた外向きポート、または、仮想ネットワークデバイス間の仮想リンクに関連付けられた内向きポートのうちの１つに対応している、前記複数の仮想デバイスと、
前記複数の仮想ポート及び前記複数の仮想デバイスの構成を含む仮想ネットワークトポロジーを格納する共有データベースと、
最初の仮想デバイスから最後の仮想デバイスへの、前記仮想ネットワークトポロジーのネットワークパケットの横断をシミュレーションして、前記最後の仮想デバイスから発行される前記パケットに一致するように前記ネットワークパケットに適用されるプロトコルヘッダ修正を決定して、決定された前記プロトコルヘッダ修正を、前記プロトコルヘッダ修正に関連付けられているパケットプロトコルヘッダ・パターンに一致する後続するパケットに適用する決定エンジンと
を備えるコンピューティングシステム。
【請求項７２】
前記決定エンジンはさらに、ＭＡＣ学習ブリッジをシミュレーションして、前記共有データベースの各ＭＡＣ学習ブリッジのＭＡＣ学習テーブルを更新する、請求項７１に記載のコンピューティングシステム。
【請求項７３】
前記決定エンジンはさらに、ＩＰパケットを特定して、カプセル化するＥｔｈｅｒｎｅｔ（登録商標）フレームのソースＩＰアドレス及びソースＭＡＣアドレスを抽出して、前記仮想ブリッジの前記ＡＲＰキャッシュを更新して、特定された前記ＩＰアドレスと前記ＭＡＣアドレスとを関連付ける、請求項７１に記載のコンピューティングシステム。
【請求項７４】
前記決定エンジンはさらに、少なくとも１つの仮想デバイスの入力フィルタ及び出力フィルタの少なくとも１つをシミュレーションして、各フィルタは、特定の条件に一致するパケットに適用するフィルタリングルールを含む、請求項７１に記載のコンピューティングシステム。
【請求項７５】
前記決定エンジンはさらに、前記複数の仮想デバイスの少なくとも１つのネットワークアドレス変換をシミュレーションして、前記共有データベースの順方向のフロー及び逆方向のフローの両方のネットワークアドレス変換を格納する、請求項７１に記載のコンピューティングシステム。
【請求項７６】
前記コントローラはさらに、ＤＨＣＰリソースからＩＰアドレスを動的に割り当て、割り当てた前記ＩＰアドレスを前記共有データベースに格納する、請求項７１に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示はネットワーキングに関し、より詳しくは、仮想ネットワークを実装及び管理するシステム及び方法に関する。
【背景技術】
【０００２】
クラウドベースのコンピューティングが始まってから、サービスプロバイダの新たな需要が生まれた。サービスプロバイダは、クライアントそれぞれに対して、物理的なネットワークから切り離して、ホストを追加したりトポロジーを変更したりする機能を備えた仮想ネットワークを提供しようと考えている。ネットワークの仮想化によって、サービスプロバイダは、仮想ルータ及び仮想スイッチを、ハードウェアを変更せずに変更することで変更可能な、クライアント構成可能なネットワークトポロジーを作成することができる。さらに仮想ルータを利用することで、クライアントデータを隔離して、セキュリティ及び従量式課金を行うことができる。これらの特徴の一部は、専用ハードウェアで提供することもできるが、高くつく。既存のネットワークに仮想ネットワークを重ねることができ、仮想ネットワークのトポロジーを、基礎となるネットワークとは独立して変更することができるツールに対する需要は依然としてある。
【発明の概要】
【０００３】
ここに、物理的なネットワークに重ねる仮想ネットワークを利用したパケットルーティングを促すシステム及び方法を開示する。様々な実施形態で、本開示は、ＯＳＩモデルの複数のレイヤ（Ｌ２（レイヤ２、つまりリンクレイヤ）、Ｌ３（レイヤ３、つまりネットワークレイヤ）、及びＬ４（レイヤ４、つまりトランスポートレイヤ））のネットワークエレメントのフレキシブルなインターコネクトを提供する。ネットワークエレメントは、仮想Ｌ２スイッチとＬ３ルータとインターコネクトしてよい。仮想Ｌ２ネットワークのパケットは、トンネリングを利用して、既存のＬ３ネットワークを変更せずに、該Ｌ３ネットワークでトランスポートすることができる。様々なトンネリング法（たとえば、GRE, Ethernet（登録商標） over IP, VXLan, MPLS over IP、または、CAPWAP）を利用することができる。仮想Ｌ３ルータによってルーティングされるインターネットプロトコル（ＩＰ）パケットは、既存のＬ３ネットワークを変更せずに、該既存のＬ３ネットワークでトランスポートすることができる。
【０００４】
一実施形態では、仮想Ｌ２スイッチと仮想Ｌ３ルータとは、これらが接続するエレメントからは、物理的なＬ２スイッチと物理的なＬ３ルータとであるように見えるが、物理的なＬ２及びＬ３ネットワークエレメントを利用して実装することはできない。それぞれが、任意の数のネットワークエレメントに仮想的に接続された任意の数の仮想ネットワークエレメント（スイッチまたはルータ）が存在していてよい。１つの構成においては、各仮想Ｌ２スイッチが、任意の数の他のＬ３ルータに接続されていてよい１つの仮想Ｌ３ルータに接続されている。
【０００５】
システムの仮想Ｌ２スイッチ及び仮想Ｌ３ルータは、地理的距離に関わらず、多数のネットワークエレメントを接続することができる。システムは、物理的エレメントまたは仮想的エレメントを接続して、たとえば、サーバコンピュータ上でエミュレーションされている仮想マシンを、インターネットに接続されている物理的なルータに接続することができる。
【０００６】
複数の仮想ルータ及びスイッチを備える仮想ネットワークを作成及び管理する方法及びシステムが提供される。方法及びシステムはさらに、後で詳述するように、Ｌ３／Ｌ４ファイアウォールサービス、ソース、及び／または、デスティネーションネットワークアドレス変換サービス、及び、ロード・バランシングを提供することができる。ここには、基礎となるネットワークの第１のノードでパケットを受信する第２のノードに第１のノードからパケットをルーティングして、仮想ルーティングテーブルにアクセスして仮想ネットワークのトポロジーのパケットの次のホッピングを決定して、次のホッピングは、内向きの（論理）ポートまたは外向きの（実体）ポートであり、次のホッピングがネットワークの第２のノードの外向きポートであると決定されるまで、後続する仮想ルーティングテーブルに順次アクセスを続け、パケットを、第２のノードの外向きポートへと、基礎となるネットワークを介して送信する方法を開示する。仮想ルーティングテーブルにアクセスしてパケットの次のホッピングを決定する段階は、さらに、各仮想ルーティングテーブルのルックアップを実行する段階を含み、ルックアップテーブルは、パケットの次のホッピングデータを含んでいてよい。
一実施形態では、ネットワークの第１のノードが、外部ネットワークにアクセスするよう構成されており、ネットワークの第２のノードが、仮想マシンをホストするよう構成されている。方法は、さらに、仮想ネットワークの少なくとも１つのホッピングにつき、パケットに対してルーティング前の修正及び／またはルーティング後の修正を行う段階を含む。一実施形態では、パケットの次のホッピングは、ソースアドレス及び／またはデスティネーションアドレスから決定される。加えて、ルーティング前の処理及びルーティング後のプロセスは、ソースアドレス、ソースポート、デスティネーションアドレス、及び／または、デスティネーションポートを利用して、パケットの所望の修正または変換を決定してよい。方法はさらに、基礎となるネットワークの複数のノードに、分散された状態で、少なくとも１つの仮想ルーティングテーブルを格納する段階を含んでよい。様々な実施形態で、基礎となるネットワークはEthernet（登録商標）ネットワーク、プライベートＩＰネットワーク、パブリックＩＰネットワーク、または、ノード間の接続を提供するその他のネットワークを含んでよい。
【０００７】
さらに、パケットをルーティングする方法は、第１のノードでフローのパケットを受信する段階と、フローテーブルにアクセスして、パケットが既存のフロールールに一致しないと決定する段階と、パケットを決定エンジンに送信する段階と、複数のノードがアクセス可能な共有データベースに格納されている仮想ネットワークトポロジーにアクセスする段階と、パケットのフロールールを作成する段階と、フロールールをフローテーブルに送信する段階とを備える方法が開示される。フロールールを作成する段階は、さらに、ネットワークテナントが構築する仮想トポロジーに基づいてネットワークのパケットのルーティングシーケンスを決定する段階を含んでよい。
【０００８】
さらに、フロー設定可能なスイッチをもつエッジノードのシーケンス番号をもつＦＩＮパケットを受信する段階と、フロー設定可能なスイッチのパケットに対応するフロールールを特定する段階と、削除するフロールールを特定して、共有データベースに、分散された状態に、特定されたフロールールを送信する段階と、対応するフロールールに基づいてパケットを通信する段階とを備える、フローエントリを削除するためのステートフル（stateful）接続トラッキング方法が開示される。実施形態では、システムは、ＴＣＰ接続ステートマシンをシミュレーションして、その状態を共有データベースに維持する手段を提供する。
【０００９】
実施形態では、フローは、ＴＣＰ接続のインバウンドフロー及びアウトバウンドフローであってよい。方法はさらに、ＦＩＮパケットに対応するＡＣＫパケットを受信すると、特定されたフローを削除する段階を含んでよい。一実施形態では、方法はさらに、特定されたフローに対応して、分散された状態で格納されている反対方向のフローを特定する段階と、反対方向のフローを削除するものと特定する段階と、ＦＩＮパケットに対応するＡＣＫパケットを受信すると、特定されたフローと反対方向のフローとを削除する段階とを備える。
【００１０】
別の実施形態では、デスティネーションネットワークアドレス変換を実行する方法が、第１のノードで第１のパケットを受信する段階であって、第１のパケットがデスティネーションアドレスを有する、段階と、第１のパケットに対応している第１のフロールールを作成する段階であって、第１のフロールールは、仮想ネットワークトポロジーの複数の仮想デバイスを横断するパケットに行われる修正の累積を含む、段階と、第１のパケットに第１のフロールールを適用する段階と、第１のパケットを受けて、第２のノードで第２のパケットを受信する段階であって、第２のパケットはソースアドレスを有する、段階と、第２のパケットに対応している第２のフロールールを作成する段階と、分散されている状態から第１のフローにアクセスして、第２のパケットのソースアドレスにデスティネーションネットワークアドレス変換を適用する段階と、を備える。方法はさらに、第１のパケットを転送する前に、第１のフロールールが分散された状態で格納されるまで待って、第１のフロールールが分散された状態に格納されるまで、第２のパケットが受信されないようにする段階を備える。一実施形態では、第１のパケット及び第２のパケットが、ＴＣＰ接続に対応している。別の実施形態では、方法がさらに、基礎となるネットワークリソースのロード・バランシングを行うロード・バランシング・アルゴリズムを適用する段階を備える。
【図面の簡単な説明】
【００１１】
【図１】フローを無効化する方法の一実施形態を示す。
【００１２】
【図２】ＭＡＣを学習する方法の一実施形態を示す。
【００１３】
【図３】ＭＡＣを学習しない方法の一実施形態を示す。
【００１４】
【図４】接続をトラッキングする方法の一実施形態を示す。
【００１５】
【図５】ＶＰＮ管理のためのシステムを物理的に示す。
【００１６】
【図６】ＶＰＮ管理のための別のシステムを物理的に示す。
【００１７】
【図７】サービスプロバイダのＩＰ構成に、インターネット等の一般的なネットワークに、または該一般的なネットワークから、パケットをルーティングするシステムが利用するサーバコンピュータの一例を示す。
【００１８】
【図８】物理的なネットワークの一例を示す。
【００１９】
【図９】図８の物理的なネットワークに重ねることができる仮想ネットワークの一例を示す。
【００２０】
【図１０】仮想ルータからなる仮想トポロジーでパケットをルーティングするエッジコネクタで実行されるプロセスを示す。
【００２１】
【図１１】仮想ルータ及び仮想スイッチからなる仮想トポロジーでパケットをスイッチ及びルーティングするエッジコネクタで実行されるプロセスを示す。
【００２２】
【図１２】図１１のプロセスの続きである。
【００２３】
【図１３】仮想ネットワークの一実施形態を示す。
【００２４】
【図１４】物理的なネットワークに重ねられる図１３の仮想ネットワークを示す。
【発明を実施するための形態】
【００２５】
概して図１から図１４を参照して、開示するシステム及び方法の実施形態は、仮想ネットワークを実装及び管理し、ソフトウェアが定義するネットワークソリューションを提供することができるコンピューティングシステムに関している。開示されているシステム及び方法は、ネットワークを仮想化して、クラウドコンピューティングシステムの効果を向上させつつ、物理的なネットワークの複雑性及び関連するメンテナンスコストを低減させることができるソフトウェア・アブストラクション・レイヤを提供する。
【００２６】
様々な実施形態では、基礎となるネットワークの第１のノードの第１のネットワークインタフェースに到着するパケットを受信することを含む、コンピューティング方法が開示される。第１のネットワークインタフェースは、第１のノード上のハードウェアまたはソフトウェアに実装されてよい。決定エンジンを呼び出して、パケットの処理法を決定することができる。一態様では、パケット及びパケットがネットワークに到着したネットワークインタフェースの識別情報（identification）を、決定エンジンに送って、処理を促す。決定エンジンは、パケットが、パケットが遭遇する複数の仮想ネットワークデバイスそれぞれを含む仮想ネットワークトポロジーを横断する方法をシミュレーションしてよい。パケットが仮想ネットワーク経由でデバイス間を通過する方法をシミュレーションすることに加えて、決定エンジンは、さらに、仮想デバイスそれぞれがパケットに影響を与える（たとえばパケットプロトコルヘッダを修正することにより）方法をシミュレーションしてよい。シミュレーション結果に基づいて、システムは、決定された修正のそれぞれまたは修正の累積を適用するパケットを処理して、パケットがネットワークのノードの１つのネットワーインタフェースから発行されるようにしてよく、パケットを発行する特定のネットワークインタフェースは、決定エンジンのシミュレーション中に決定されたものである。
【００２７】
仮想ネットワークトポロジーによるそれぞれのステップにおいて、決定エンジンは、パケットを一連のデバイスで処理することができる方法を決定する。一例として、決定エンジンは、パケットをドロップ（drop）したり無視したりすると決定してよい。パケットが、システムが、処理ができなくなった通信またはフローに関連付けられているときに、パケットがドロップされる。他の例としては、仮想デバイスが、受信したタイプのパケットを処理するための十分な命令を持たないために、パケットがドロップされてもよい。こうしなければ、デバイスは、あるパケットを特定のデスティネーションにルーティングできなくなることが想定される。パケットの送信者に、パケットがデスティネーションに到達できなかったことを警告するためのエラーメッセージまたはその他の応答を提供することができる。
【００２８】
多くのパケットについて、決定エンジンは、パケットを、第２のネットワークインタフェースに対応している仮想ポートから発行すべきであると決定する。第２のネットワークインタフェースは、パケットのデスティネーション及びマッピングをホストする仮想ポートに応じて、第１のノードまたは基礎となるネットワークの第２もしくは別のノードにあってよい。パケットが第２のノードの第２のネットワークインタフェースに配信される場合、決定エンジンは、パケットを処理する方法を決定して、次に、パケットを基礎となるネットワークによって第２のノードに配信して、第２のネットワークインタフェースによって発行させる。
【００２９】
複数の実施形態では、パケットのプロトコルヘッダが、第２のネットワークインタフェースに配信される前に修正されてよい。プロトコルヘッダの修正は、後でより詳しく説明するように、ネットワークアドレス変換、トンネリング、ＶＰＮ、または他の特徴を提供してよい。
【００３０】
一実施形態では、方法が、基礎となるネットワークのノードのノードアドレスに対するノード識別子のマップを維持することを含む。ノード識別子は、基礎となるネットワークにパケットをルーティングするために、個々のノードを区別するために利用することができる。第１のノードから第２のノードにパケットを配信するために、パケットは、トンネリングプロトコルパケットのペイロード（たとえばEthernet（登録商標）+IP+GRE等）として転送されてよい。実施形態では、トンネリングプロトコルパケットは、第２のネットワークインタフェースのグローバル識別子をエンコードするトンネリングキーを有してよい。グローバル識別子は、各ネットワークインタフェースが一意に識別可能なように、ネットワーク内で一意であってよい。これに対して、ローカル識別子は、ノード内、または、ネットワークのサブセット内で利用することができ、これにより、ネットワークのサブセット内でポートまたはインタフェースを一意に識別することができる。トンネリングプロトコルパケットを第２のノードで受信する場合、元のパケットを含むペイロードをトンネリングキーとともに抽出する。次に、トンネリングキーがデコードされ、第２のネットワークインタフェースから発行されるパケットと第２の仮想ネットワークインタフェース識別子とを決定してよい。このようにして、システムは、決定エンジンを利用して、システムを横断する際にパケットを処理する方法を決定して、さらに、決定がなされると、パケットを効果的にトランスポートすることができる。
【００３１】
他の実施形態では、決定エンジンが、パケットをネットワークインタフェースのあるセットから発行されるべきであると決定する。ネットワークインタフェースのあるセットから発行されることは、マルチキャストまたはブロードキャストのアプリケーションでは必要だろう。パケットを発行すべきネットワークインタフェースは、ネットワークの１つのノードにローカルであっても、または、２以上のノードに分散されてもよい。いずれの場合においても、システムは、パケットが、インタフェースのセットの識別子に対応しているネットワークインタフェースのセットから発行されるべきであると判断した。パケットは次に、第１のノードに対してローカルであるそのセット内の各ネットワークインタフェースにパケットを配信することで、処理される。パケットは、さらに、第１のノードから第２のノードへと、トンネルによって、修正とともに転送される。パケットは、インタフェースのセットの識別子をエンコードするトンネルキーを利用してトンネリングプロトコルパケットのペイロードとして転送されてもよい。
トンネリングパケットが、第２のノードで受信される場合、トンネルキーはデコードされて、インタフェースのセットの識別子、及び、そのセットに含まれる、第２のノードに対してローカルなネットワークインタフェースで発行されるパケットを決定する。一定のインタフェースのセットの識別子に関連付けられているネットワークインタフェースのセットは、システムの各ノードがアクセス可能な共有データベースに格納されてよい。したがって、ノードが未知のインタフェースのセットの識別子を受信する場合、ノードは、共有データベースにアクセスして、どのネットワークインタフェースが識別されたセットに含まれているかを決定する。さらに、ノードは、ノードにローカルなインタフェースのセットの識別子に対するネットワークインタフェースのマッピングを格納またはキャッシュしてよい。しかし、インタフェースのセットの識別子が変更されると、ローカルにキャッシュされたデータが無効化され、ノードが共有データベースにアクセスして、インタフェースの、インタフェースのセットに対する、現在の、または更新後のマッピングを取得することができる。実施形態では、仮想ネットワークインタフェースが、１を超える数のインタフェースのセットに属していてよい。
【００３２】
基礎となるネットワークがマルチキャスト（たとえばＩＰマルチキャスト）をサポートしているアプリケーションでは、各インタフェースのセットの識別子が、マルチキャストアドレスにマッピングされてよく、基礎となるネットワークの各ノードが、そのノードにマッピングされている仮想ネットワークインタフェースのうちの少なくとも１つが属するインタフェースのセットの識別子のそれぞれについてのマルチキャストのサブスクリプションを維持することができる。次にパケットは、第２のノードまたはそれ以上のノードに対して、トンネリングプロトコルパケットのペイロードとしてマルチキャストされてよい。次に、各ノードは、そのノードにローカルなセットのインタフェースに対応しているいずれかのネットワークインタフェースからパケットを発行する。様々な実施形態において、インタフェースセット識別子はマルチキャストアドレスに一意にマッピングされる。
【００３３】
基礎となるネットワークがマルチキャストをサポートしていない場合、決定エンジンは、パケットが送信される先のネットワークインタフェースのセットに属するローカルネットワークインタフェースを有する基礎をなすネットワークノードのセットを決定する。次に、前述したように、パケットは、第１のノードから基礎となるネットワークノードのセットの各ノードまで、トンネリングプロトコルパケットで転送される。次に、各ノードは、特定されたセットに関連付けられた対応するネットワークインタフェースにパケットを発行する。
【００３４】
決定エンジンは、仮想ネットワークトポロジーを横断するそのパケットのシミュレーションに基づいて、当該パケットの処理方法を決定する。多くの用途では、複数のパケットは、フローとフロー内の各パケットとして関連付けられ、フロー内の各パケットは同じ方法で処理されてよい（たとえばＴＣＰ接続の一方向のすべてのパケット）。
実施形態では、フローの第１のパケットを受信すると、システムは、そのフローのパケットを処理する方法を決定する決定エンジンを呼び出す。次に、決定エンジンは、そのフローの後続のパケットを処理するためのアクションまたはルールを格納することができる。格納されたアクションやルールは、ルールが一定のフローのパケットを処理するためのシステムのすべてのノードが利用できるように、共有データベースに格納されていてよい。あるいはルールがローカルに格納されてもよい。
【００３５】
実施形態では、決定エンジンの出力は、決定エンジンの出力が第１のパケットと同じでありうる他のパケットと一致させるために使用することができるパケットプロトコルヘッダ・パターンを含む。換言すれば、パケットプロトコルヘッダ・パターンは、第１のパケットに対して決定されたアクションまたはルールを適用することによって、同一の方法で処理されるパケットを特定するために使用することができる。実施形態では、決定エンジンの出力は、パケットが処理される方法を決定するために行ったシミュレーションの結果である。パケットプロトコルヘッダ・パターンと第１のパケットのためのシミュレーションの結果とが格納される。第２のパケットを受信すると、TCPシーケンス番号等の、パケット毎に変化するフィールドを無視しつつ、第２のパケットのヘッダを、パケットのプロトコルヘッダ・パターンと比較する。第２のパケットがパターンに一致する場合、第２のパケットが同じフローの一部とみなされ、第１のパケットのシミュレーションについて予め格納された結果を取得し、第２のパケットに適用する。シミュレーションの結果は、格納された共有データベース、ローカル・キャッシュまたはフローのパケットに適用されるルールを保持するのに適した他の任意のメモリから取り出すことができる。
実施形態では、決定エンジンは、フロー内の２番目及びそれ以降のパケットにフローのルールを適用してもよい。しかしながら、他の実施形態では、フローのルールを決定するための第１のパケットに関するシミュレーション、及び、パケットに対するこれらルールの適用は、システムの速度又は効率を改善するために分割することができる。
【００３６】
具体的なシミュレーション結果のキャッシュや格納がシステムによって決定されてもよい。例えば、決定エンジンは、どのシミュレーションの結果がキャッシュされるべきか、ほのめかすことができる。これに関連して、ほのめかしは、特定の結果が、効率及び利用可能な格納容量など他の考慮材料に従って格納されるべきであるとの勧告を含んでよい。一例において、システムは、使用頻度の低いフローのシミュレーション結果を格納しない、と選択することもできる。決定エンジンはまた、どの結果またはシミュレーション結果が実際にキャッシュされ、または、どの結果がキャッシュされる結果から無効化または追い出された（invalidated or evicted）か、を通知されてよい。キャッシュされた結果は、さまざまな理由で無効にされ得る。一例では、結果は、新規またはより頻繁に使用されるフローのための格納スペースを設けるために、追い出されてよい。システムのパフォーマンスは、格納されるフロールールの数が増えると落ちる場合があるので、一部の実施形態では、格納されるフロールールの数を制限して、作業の効率及び速度を増加させることができる。
【００３７】
時がたつと、仮想ネットワークトポロジー及び／または仮想デバイスの構成は、変更される可能性がある。こうなると、以前に行われたシミュレーション結果は、もはや一つ以上の以前に確立されたフローのための後続のパケットに適用されるべき適切なルールを反映しない。したがって、システムは、キャッシュされているシミュレーション結果の変更を検知してこれに応答するために、共有データベース、決定エンジン、及びその他のコンポーネントとの間で通信することができる。一例では、決定エンジンは、いつでも共有データベースに格納されているグローバルな状態に反映されているように、特定のキャッシュされたエントリを、構成の変化に基づいて削除するよう要求する場合がある。キャッシュされたエントリが削除され、削除されたフローに対応する次のパケットを受信すると、決定エンジンが呼び出され、シミュレーションを、そのフローのパケットを処理する方法を決定するために再計算する。次いで、見直されたシミュレーション結果が、フローに関連付けられたパケット・プロトコルヘッダ・パターンに一致する後続のパケットに格納され、適用され得る。
【００３８】
システムは、パケットのシミュレーション中に特定のフローについてパケットプロトコルヘッダ・パターンを決定することができる。実施形態では、パケットは、複数のフィールドを有するプロトコルヘッダを含み、パターンは、決定エンジンによるシミュレーション中に読み出される各フィールドを特定することによって決定される。このようにして、仮想ネットワークトポロジーを横断するときに読み出される各フィールド（複数の仮想ネットワークデバイスが読み出すフィールドを含む）を特定する。読み出される各フィールドは、パターンの一部として含まれてもよい。これとは対照的に、読み取られないために、パケット処理には影響しないフィールドは、ワイルドカードとして指定することができる。
【００３９】
さらに別の実施形態では、第１のパケットは、基礎となるネットワークの第２のノードで受信され、第２のノードは、第１のパケットと同じトンネルキーを有する他のパケットを特定するために使用できるプロトコルヘッダ・パターンを生成する。第２のノードは、パケットのプロトコルヘッダ・パターンと一致する第２のパケットを識別するために、プロトコルヘッダ・パターンを使用し、第１のパケットが発行されたのと同じローカルネットワークインタフェースから第２の（及びその後の）パケットを発行する。このように、第２のノードは第２のパケットを発行するポートを決定するプロセスを合理化し、システムの効率を向上させる。実施形態では、ノード上のフロープログラマブルスイッチは、トンネルキーと組み合わせて、プロトコルヘッダ・パターンに依存してもよいし、第１のパケットと同様に処理される後続のパケットを特定するトンネルキーだけに依存してもよい。
【００４０】
別の実施形態では、決定エンジンは、第１のパケットのためのシミュレーションを判定する間、基本システムに対して、1つ以上の追加のパケットを、ネットワークインタフェースまたはネットワークインタフェースのセットから生成することを要求することができる。実施形態では、追加のパケットは、ネットワークのポートの振る舞いを決定するために必要とされてもよい。追加のパケットを要求することによって、決定エンジンは、シミュレーションプロセスを支援するための、ネットワークの部分に関する追加情報を得てもよい。追加パケットの各々は、本明細書に記載のように実質的に処理することができ、または、決定エンジンが、ネットワークに関する必要な情報を作成するために必要な異なる処理が施されていてもよい。
【００４１】
別の実施形態では、計算方法は、複数のノードを有する基礎となるネットワークからアクセス可能な共有データベースを維持することを含む。共有データベースは、仮想ネットワークトポロジー及び仮想デバイス構成を複数の仮想ネットワークデバイスのために格納する。ネットワークパケットは、基礎となるネットワークの第１のノードの第１のネットワークインタフェースに到着する。この方法はさらに、仮想ネットワークデバイスを複数含む仮想ネットワークトポロジーのパケットの横断のシミュレーションに基づいて、ネットワークパケットを処理するためのアクションを決定することを含む。実施形態では、アクションは、基礎となるネットワークのノードで受信されたパケットを処理するように動作可能なフロープログラマブルスイッチで動作可能なフロールールである。
【００４２】
仮想ネットワークトポロジーのパケットの横断のシミュレーションは、例えば前述した決定エンジン等の、決定エンジンによって実行され得る。決定エンジンは、各ノードで受信されたパケットに対して、シミュレーションを実行するために複数のノードの各々に動作可能であってもよい。あるいは、決定エンジンは、シミュレーションが要求されるパケットを受信するノードの各々と通信する別のノード上で動作することができる。
【００４３】
仮想ネットワークトポロジーは、複数の仮想ネットワークデバイスに対応する複数の仮想ポートを備えている。各仮想ネットワークデバイスは、1つまたは複数の仮想ポートを有する。仮想ポートは、基礎となるネットワークのノードのネットワークインタフェースに関連付けられた外向きのポート、または仮想ネットワークデバイス間の仮想リンクに関連付けられた内向きのポートのいずれであってもよい。仮想リンクは、仮想ポート間の論理的な接続を表し、仮想ケーブルとも呼ばれる場合もある。
【００４４】
共有データベースは、仮想ネットワークトポロジー及び仮想ポートの構成を含む仮想デバイス構成を格納する。実施形態では、共有データベースは、外部ポート又は内向きポートの一方として、仮想ポートの識別情報を含む、複数の仮想ポートのそれぞれの構成、複数の仮想ポートに関する複数の仮想ネットワークデバイスのそれぞれの構成、基礎となるネットワークノードの識別子に対するネットワークインタフェース識別子のマッピング、基礎となるネットワークノードの対応するネットワークインタフェースに対する外向きのポートの双方向マッピング、及び、各デバイスの各内向きポートの、仮想リンクにより接続される別のデバイスのピア内向きポートに対するマッピング、のうち、１以上を含んでよい。ここで使用されているピア内向きポートは、論理的な接続による所与の仮想ポートに接続された仮想ポートである。内向きのポートは、単一のピアを持っており、したがって、それぞれの内向きの仮想ポートは、それが接続されている内向き仮想ポートのピアである。
【００４５】
仮想ポートの構成は、システムの所望の構成に応じて構成可能であり、システムの利用者は、仮想ポートを定義することもできる。外向き仮想ポートに出入りするパケットが仮想ネットワークに出入りする。これに対して、内向き仮想ポートに出入りするパケットは、ネットワーク内に残る。このように、仮想ポートは、ポートを通過する際に、パケットが仮想ネットワークから出るか仮想ネットワークに入るかに応じて外向きまたは内向きと特徴付けることができる。
【００４６】
一実施形態では、決定エンジンは、第１のノード上でローカルに動作し、仮想ネットワークトポロジーとデバイス構成とを含む共有データベースと通信する。共有データベースは、トポロジー及びデバイス構成情報の正式なまたはマスターコピーを含んでもよい。効率を改善するために、仮想ネットワークトポロジー及び仮想デバイスの構成情報の少なくとも一部は、個々のノードにローカルにキャッシュすることができる。共有データベースが変更されると、キャッシュされたデータが更新されてもよい。一実施形態では、あるノードが使用するトポロジーやデバイス構成の部分だけを、ノードにキャッシュする。仮想デバイスにおけるパケットの到着のシミュレーションにおいて、システムは、シミュレーションを実行するノードに共有データベースから仮想デバイスの構成をロードしてもよいし、ノード上での将来の使用のためにデバイス構成をキャッシュしてもよい。
【００４７】
計算方法の実施形態はまた、対応する仮想ポートに、第１のノードの第１のネットワークインタフェースをマッピングし、仮想ポートの構成及び仮想ポートに関連付けられているデバイスを共有データベースから取得する。ネットワークパケットを処理するためのアクションは、仮想ポートに関連付けられているデバイスのシミュレーションに基づいて決定される。決定されたアクションは、ネットワークデバイスの内部状態を修正すること、パケットをドロップすること、パケットのプロトコルヘッダを変更すること、ネットワークデバイスの１つまたは複数の仮想ポートからパケットを発行すること、及び、ネットワークデバイスの１以上の仮想ポートから別のパケットを発行すること、のうち1つまたは複数を含んでよい。実施形態では、ネットワークデバイスの１つまたは複数の仮想ポートからパケットを発行することは、外向きポートまたは内向きポートからパケットを発行することを含んでよい。
【００４８】
パケットを処理する方法を決定する際には、決定エンジンは、内向き仮想ポートで接続された複数の仮想デバイスを横断することができる。一実施形態では、決定エンジンは、第２の仮想ポートのためのピア内向きポートを決定し、ピア内向きポート及びピア内向きポートが配置されているネットワークデバイスの設定を取得する。決定エンジンは、パケットが処理される方法を決定するために、ピア内向きポートに関連付けられたネットワークデバイスの動作をシミュレーションすることができる。このように、決定エンジンは、所与のパケット又はフローが処理される方法を決定するために、任意の数の仮想ネットワークデバイスを含む、仮想ネットワークトポロジーによって経路をシミュレーションすることができる。
【００４９】
決定したアクションが、パケットを１以上の外向き仮想ポートから発行する場合、システムは、対応するネットワークインタフェースと、基礎となるネットワークのノードとにそれぞれ外向きの仮想ポートをマッピングして、対応するネットワークインタフェースのそれぞれからパケットを発行する。
【００５０】
決定エンジンが、パケットが横断する最後の仮想デバイスをシミュレーションするまで、本明細書に記載のシミュレーション処理を繰り返す。決定エンジンは、パケットに、及び、パケットのプロトコルヘッダ・パターンと一致する後続のパケットに適用されるシミュレーション結果またはアクションを提供する。シミュレーション結果またはアクションは、パケットが、仮想ネットワークトポロジーの横断を介して適用される全ての変更に基づいて、最後の仮想デバイスによって発行されるであろうように、ヘッダの構成に一致するパケットのプロトコルヘッダを変更するパケットの変更の累積を含む。このように、決定エンジンは、シミュレーションにより、パケットに必要な修正を行い、パケットがネットワークを介して効率的に修正されルーティングされるようにする。
【００５１】
前述のように、パケットは、複数のフィールドを持つプロトコルヘッダを含んでいる。システムは、決定されたアクションまたはフロールールが、シミュレーション結果に基づいて適用されるパケットを特定するために使用されるパケットプロトコルヘッダ・パターンを決定する。一実施形態では、システムは、仮想ネットワークトポロジー及び仮想ネットワークデバイスのシミュレーション中に読み取られたプロトコルヘッダのフィールドの各々を識別することによって、パケットのプロトコルヘッダ・パターンを決定する。このようにして、決定フロールールが名前の方法で処理されるべきパケットに適用され得るように、ネットワークを通過中に依拠しているプロトコルヘッダのフィールドが特定される。依拠されていないプロトコルヘッダのフィールドは、ワイルドカードとして扱われ、又は、決定されたパターンへ、後続のパケットのプロトコルヘッダを一致させる処理における考慮から除外することができる。パケットプロトコルヘッダ・パターン及び対応するシミュレーション結果はノードに格納されてもよい。実施形態では、パターンとそれに対応するシミュレーション結果とを、ノードに到着する後続のパケットを処理するように構成されたフロー設定可能なスイッチで使用するためのフロールールとして格納する。パケットが、フロールールが作成されていないノードに到着すると、システムは、パケットのためのシミュレーションを実行するために、決定エンジンを呼び出すことができる。
【００５２】
決定エンジンによって生成されるシミュレーション結果は、シミュレーション中に横断されるこれらの仮想デバイスについては少なくとも、仮想ネットワークトポロジーと仮想デバイス構成とに依存している。トポロジーまたはデバイスの構成が変更されたときに、パケットに適用される以前に決定されたシミュレーション結果と、対応するアクションは、もはや正確でないかもしれない。このような変化に適応するために、仮想ネットワークトポロジーまたは仮想デバイス構成の変更時に、システムは、格納されたパケットのプロトコルヘッダ・パターン及び対応する格納されたシミュレーションの結果を無効にするように構成されている。一実施形態では、システムは変化を検知すると、すべての格納されたパターンとシミュレーション結果とを無効にする。他の実施形態では、変更された仮想デバイスに依存している格納された結果だけを無効にする。一例では、シミュレーション中に横断した横断された仮想デバイスのセットは、決定エンジンによってシミュレーション中に決定される。横断された仮想デバイスのセットは、パケットプロトコルヘッダ及び／またはシミュレーション結果と関連している。仮想デバイスの構成に変更が検知されると、変更された仮想デバイスを含む任意の横断したセットに関連付けられて格納されたシミュレーション結果は、無効化されてもよい。
このようにして、システムは、所与の仮想デバイスの変化に基づいて、どのフロールールを無効にされるべきかを効率的に決定した。仮想デバイス構成の変化に基づいて、横断された仮想デバイスのセットを決定する方法及び無効化フローが、図１に示されている。他の実施形態では、キャッシュが、スペースが限られたリソースである場合には、フローが無効化または追い出されてもよい。例えば、システムはローカルに（第１のノードに）基礎となるシステムによってキャッシュされているすべての決定エンジンをトラッキングして、決定が最後に一致したとき（最後にパケットが決定のパターンに一致して、決定のアクションがそのパケットに適用されたとき）をトラッキングしてよい。その後、システムはすべての決定の「最後に一致した」時間を照会し、最も長い時間使用されていない決定を追い出してよい。最後に一致した時間の照会は、指定された頻度で、または、必要に応じて行って、指定されたサイズ未満の格納された決定のキャッシュのサイズを維持するようにしてよい。このシステムはまた、「最近」作成されたランダムな決定を削除してもよい。最近作成されたランダムな決定を削除することは、最近の決定の大半が、短命のパケットフロー（長寿のフローの割合が比較的高い、より古くから生き残っている決定に比べて）のためのものである場合に効率的だろう。フローを無効化するためのプロセスは、所望のパラメータ内にノードに格納されたデータのキャッシュを管理するために、個別に、または組み合わせて使用できる。システムはまた、格納されたキャッシュへ追加される新たな決定に相関している、判定エンジンの新規の呼び出しの速度に基づいて、無効化または追い出しの速度を調整することができる。
【００５３】
システムはさらに、キャッシュされている決定を、更新された仮想デバイス構成と一貫させるべく収束するよう、トラフィックを補正するための中断が最小限且つ効率になるように構成されている。キャッシュされた決定の収束は、以前に格納されたフローの精度に基づく無効化または追い出しとして特徴づけることができる。本明細書で使用する、開始仮想ネットワーク構成にいくつか変更を加えたものに対する「一貫性の決定」とは、同じ入力パケット及び入力インタフェースを有する決定エンジンの新規の呼び出しによって再度到達できるものであってよい。対照的に、一貫性の決定とは、仮想ネットワークデバイスの新たな構成による同じ入力があった場合には決定エンジンが行うことができない決定のことである。一実施形態では、時間Ｔに対して、時間Ｔ前にキャッシュされた全ての決定が時間Ｔまたはその後の仮想ネットワーク構成の状態に一致している境界期間Ｐが存在している。
決定を収束するために、システムは、その決定についてシミュレーションされたデバイスがローカルにキャッシュしている決定と（これらは、パケットが横断した仮想デバイスのことを表す）決定が行われた（キャッシュされた）時間とをインデックス化する。その後、システムは、時間Ｔで受信した第１の仮想デバイスの構成の更新のための仮想デバイス構成のローカル更新を受信して、所定の時間待ち、時間Ｔの前に作成されキャッシュされた決定数が、既に空間ベースの追い出しによって低減されているようにして、第１の仮想デバイスをシミュレーションする必要のある決定のセットをもつ時間Ｔの前に作成／キャッシュされた決定のセットと交差するようにする。結果セット内の決定は、同じ入力（及び現在の構成）で決定エンジンを再起動することによって検証される必要がある。変更されたすべての決定は、古い決定を無効化して、更新された、現在の構成に基づく新たなシミュレーション結果を、フローに一致する後続のパケットで利用するためにインストール／キャッシュする。
【００５４】
別の態様として、現在開示される計算方法及びシステムは、１以上のＭＡＣ学習ブリッジをシミュレーションすることを含み、ここで各ブリッジの外向きのポートは、基礎となるネットワークの１以上のノードのインタフェースにマッピングされ、ブリッジの各内向きポートは、仮想ルータの内向きポートに接続されている。計算方法は、共有データベースのブリッジのＭＡＣ学習テーブルの正式なコピーを維持することを含む。ＭＡＣ学習テーブルは、動的フィルタリングデータベース、ＭＡＣが到達することができるポートに対するＭＡＣアドレスのマップとしても知られており、このＭＡＣには、正確に構成されたネットワークのある時点でブリッジのポートの１つのみを介して到達することができる。この方法はさらに、ブリッジの外向きポートのいずれかにマッピングするインタフェースを有している全てのノードの、及び、そのブリッジのパケットの横断をシミュレーションした全てのノードの、ブリッジのＭＡＣ学習テーブルのキャッシュされたコピーを維持する。ＭＡＣ学習テーブルのキャッシュされたコピーは、正式なコピーが変更された場合、更新されてよい。
【００５５】
一実施形態では、決定エンジンの呼び出しによって、Ｅｔｈｅｒｎｅｔ（登録商標）ブリッジの第１のポートに到達するＥｔｈｅｒｎｅｔ（登録商標）フレームのシミュレーションが行われ、システムは、前の決定エンジンの呼び出しがそれをロードしていない場合、Ｅｔｈｅｒｎｅｔ（登録商標）ブリッジの状態をロードする。受信Ｅｔｈｅｒｎｅｔ（登録商標）フレームはユニキャストデスティネーションＭＡＣアドレスを有していてもよい。実施形態では、方法はさらに、デスティネーションＭＡＣがユニキャストアドレスであることを検知し、 ＭＡＣ学習テーブル内にそのＭＡＣのエントリがあるか否かを決定することを含む。ＭＡＣ学習テーブルが、ブリッジの第２のポートにＭＡＣをマッピングするエントリを含む場合、システムは、シミュレーションされたブリッジが第２のポートからそのフレームを発行する、と決定する。ＭＡＣ学習テーブルが、そのＭＡＣのエントリを含まない場合、システムは、シミュレーションされたブリッジは、到着を受け取ったもの以外のすべてのポートからフレームを発行する、と決定する。
【００５６】
別の実施形態では、受信Ｅｔｈｅｒｎｅｔ（登録商標）フレームは、フレームが複数のポートから発行されるべきであることを示すマルチキャストまたはブロードキャストMACを持っている。コンピューティング方法の実施形態は、デスティネーションMACがマルチキャストまたはブロードキャストアドレスであることを検知し、シミュレーションされたブリッジは、到着したものを受け取ったポート以外のすべてのポートからそのようなフレームを発行することを決定することをさらに含んでよい。さらに別の実施形態では、受信Ｅｔｈｅｒｎｅｔ（登録商標）フレームは、ユニキャストソースMACアドレスを有する。MAC学習テーブルにこのMAC用のエントリがない場合、システムは、到着ポートにこのMACをマッピングするエントリを追加する。次に、システムは、呼び出しが生じたノードにローカルなＭＡＣ学習テーブルエントリのレファレンスカウントを開始するが、このカウントは、同じソースＭＡＣアドレスのフレームを同じポートに到達させる決定をキャッシュした数に基づいている。
決定エンジンは、そのポートに到達する同じソースMACをもつすべてのパケットを見るわけではないので、このようなキャッシュされた決定のレファレンスカウントが役立つ場合もあるだろう。したがって、そのようなキャッシュされた決定の数がゼロに達したとき、このソースMAC及び到着ポートのMAC学習テーブルエントリが有効期限切れに（又は有効期限が切れるように設定）されてもよい。ブリッジのＭＡＣ学習テーブルのキャッシュされているコピーを有するすべてのノードにおいて（ブリッジの外側ポートにマッピングされているインタフェースをもつから、または、ブリッジを最近シミュレーションしたから、という理由で）、システムは、テーブルに対する更新を学習して、そのＭＡＣのエントリがＭＡＣ学習テーブルにないということに基づいているキャッシュされた決定を追い出す（これらのフロー／パケットを、今では、全てのブリッジのポートに溢れさせるのではなく、エントリのポートに配信することができることから）。
【００５７】
他の実施形態では、 MAC学習テーブルには、既にMACアドレスのエントリがあり、マッピングされたポートは、現在の受信フレームの到着ポートと同じである。その後、システムは、MAC学習テーブルエントリが存在しており、修正する必要はないことを検知する。システムは、決定エンジンのこの呼び出しがキャッシュされた決定となった場合、ローカルのレファレンスカウントをインクリメントすることができる。あるいは、 MAC学習テーブルが既にMACアドレスのエントリを有していてもよいが、マッピングされたポートは、現在の受信フレームの到着ポートとは異なっていてもよい。その後、システムは、MAC学習テーブルから前のエントリを削除し、フレームの到着ポートとMACアドレスとを関連付け、MAC学習テーブルに新しいエントリを追加する。前のエントリのマッピングされたポートに対応しているインタフェースを所有しているノードで、システムは、エントリの削除について学習し、今は不正確な情報に基づいているという理由でそのエントリをレファレンスカウントするすべての決定を追い出す。ブリッジのＭＡＣ学習テーブルのキャッシュされているコピーを有するすべてのノードにおいて（ブリッジの外側ポートに対応しているインタフェースをもつから、または、ブリッジを最近シミュレーションしたから、という理由で）、テーブルに対する更新を学習して、それらが今は不正確な情報に基づいていることから、そのＭＡＣの前のＭＡＣ学習テーブルエントリに基づいていたキャッシュされている決定すべてを追い出す。図２にＭＡＣを学習する方法を示し、図３にＭＡＣを学習しない方法を示す。
【００５８】
別の実施形態では、ブリッジの各ポートから到達可能なMACアドレスが事前に分かっている場合、Ｅｔｈｅｒｎｅｔ（登録商標）ブリッジであふれたパケットを削減する方法が提供される。たとえば、仮想ブリッジの外向きポートの１つにマッピングされているノードのネットワークインタフェースのいずれかに接続されている（attached）ゲストＶＭの場合、ＭＡＣアドレスは事前にわかっており、ＭＡＣ学習テーブルを、既知のＭＡＣポートエントリで予めポピュレートすることができるようになっている。
【００５９】
別の態様では、計算方法は、ARP要求を傍受またはこれに応答することによって、IPネットワーク上であふれたパケットを減少させた。この方法は、共有データベースに格納されたARPキャッシュでブリッジの状態を増強することを含む。ARPキャッシュは、ユニキャストMACアドレスへのユニキャストIPアドレスのマップを含む。MAC学習テーブルと同じように、ブリッジのARPキャッシュは、内向きポートを経由してブリッジに接続されているルータに対応するエントリが予めポピュレートされてよい。各エントリは、ブリッジの内向きポートのいずれかを調べ、ピアポートの構成を取得し、ピアポートのMAC及びIPアドレスを抽出することにより決定することができる。この方法はまた、事前に分かっているその他のエントリでブリッジのＡＲＰを予めポピュレートすることを含んでよい（ゲスト仮想マシンが、ユーザによってまたはシステムによって自動でＭＡＣ及びＩＰアドレスを割り当てられているクラウド管理フレームワークのように）。この方法はまた、 IPパケットを認識し、包括（encapsulating）Ｅｔｈｅｒｎｅｔ（登録商標）フレームのソースMACアドレスとソースIPアドレスとを抽出し、したがって、 IP- MACの対応関係を推定し、 ARPキャッシュへの適切なエントリを追加することを含むことができる。
【００６０】
さらに別の実施形態は、各ルータの外向きポートが基礎となるネットワークの１以上のノードのインタフェースにマッピングされており、ルータの各内向きポートが、別の仮想ルータまたは仮想ブリッジの内向きポートに接続されている、１以上のＩＰｖ４ルータをシミュレーションする方法である。方法は、共有データベースにルータのＡＲＰキャッシュの正式なコピーを維持しており（ユニキャストＩＰアドレスからユニキャストＭＡＣアドレスのマップ）、全てのルータの内向きポートのピアポートの(IPv4, MAC)というアドレスの対でＡＲＰキャッシュを予めロードして、ルータの転送テーブルの正式なコピー（もっとも一致度の高いＩＰｖ４デスティネーションプリフィックス及び一致するソースプリフィックスをもつルールを選ぶことに基づいて、パケットを発行すべきルータポートを決定するルータ／ルートのセット）を、共有データベースに維持して、ルータの外向きポートの１つにマッピングするインタフェースをもつすべてのノードと、そのルータのパケットの横断を最近シミュレーションした全てのノードに、そのルータのＡＲＰキャッシュと転送テーブルのキャッシュされているコピーを維持することを含む。
あるノードが、あるルータをシミュレーションする必要があった少なくとも１つのキャッシュされているエンジンの決定をもつ場合、そのルータは、そのノードで最近シミュレーションされている。この方法はまた、共有データベースの正式なコピーが変更された場合、ARPキャッシュのキャッシュされたコピー及び転送テーブルを更新することを含んでよい。前の決定エンジンの呼び出しがすでにそれをロードしていなければIPv4ルータのパケットの到着をシミュレーションすると、ルータの状態は、このノードにロードすることができる。
【００６１】
決定エンジンもIPv4ルータの第1のポートに到着するIPv4パケットをシミュレーションすることができる。受信IPv4パケットのデスティネーションアドレスは、ルータのポートのいずれかに等しくてよい。その後、システムは、パケットが、ルータのポートのいずれかにアドレス指定されていることを検知し、そのプロトコルが認識されていないか、未処理の場合は、ルータがパケットをドロップすることを決定し、パケットがping（ICMPエコー）要求であるかどうかを検知し、その場合にはルータのポートから第１のパケットのIPv4ソースアドレスへのping応答パケットを生成し、決定エンジンのシミュレーション論理を呼び出して、ポートから仮想ネットワークを通るping応答の経路を決定するものと判断する。シミュレーション論理が、ping応答が（任意のデバイスの）特定の外向きポートの仮想ネットワークを終了することを決定した場合、システムはそのポートを、それに対応するインタフェースと、基礎となるネットワークノードとにマッピングして、呼び出し元のシステムに、ping応答パケットをそのインタフェースから発行するよう要求する。あるいは、受信IPv4パケットのデスティネーションアドレスは、ルータのポートのアドレスのいずれかでなくてもよく、その場合、システムは、パケットのソースとデスティネーションのIPv4アドレスが分かっている場合、一番よく一致する経路を決定するために、ルータの転送テーブルを照会する。
一致するルートが見つからない場合、システムは、第１のパケットを受信すると、対象ルータがパケットをドロップして、ＩＣＭＰエラー（ルート到着不可能等）で応答して、決定エンジンのシミュレーション論理を呼び出して、ポートから仮想ネットワークのＩＣＭＰエラーが辿る経路を決定する。シミュレーション論理がICMPエラーは、特定の外向きポートで仮想ネットワークを終了することを決定した場合、システムはそれに対応するインタフェースと、基礎となるネットワークノードにそのポートをマッピングし、呼び出し元のシステムに、そのインタフェースからのICMPエラーパケットを発行することを要求する。同様に、一致するルートが、デスティネーションが管理上禁止されていると指定している場合、ICMPエラーパケットを生成することができる。
【００６２】
シミュレーションが、最も一致するルートが、パケットがルータポート（例えば次のホッピングポート）を経由して転送されるように指定していると判断した場合は、システムは、次のホッピングポートのMACに、パケットのソースＥｔｈｅｒｎｅｔ（登録商標）アドレスを変更することができる。ルートの次のホッピングゲートウェイがnullの場合（デスティネーションアドレスが次のホッピングポートと同じL3サブネット上にあることを意味する）、システムは、パケットのＩＰｖ４デスティネーションに対応するＭＡＣのローカルＡＲＰキャッシュを照会して、そのＭＡＣのパケットのデスティネーションＥｔｈｅｒｎｅｔ（登録商標）アドレスを変更する。ルートの次のホッピングゲートウェイがnullでない場合（パケットが、デスティネーションに到達する前に、少なくとももう１つのルータを通過するように転送されなければならないことを意味する）、システムは、ゲートウェイのＩＰｖ４アドレスに対応しているＭＡＣがないかローカルＡＲＰキャッシュに照会して、そのＭＡＣのパケットのデスティネーションＥｔｈｅｒｎｅｔ（登録商標）アドレスを変更する。システムはさらに、（以前に横断した仮想デバイスのシミュレーション後に変更された可能性がある）第１のパケットを受信すると、対象ルータが、説明するようにさらにパケットを変更し、次のホッピングポートからそれを発行する、と決定することができる。
【００６３】
次のホッピングポートが外向きポートである場合などに、ARPキャッシュが照会IPv4アドレスのエントリを含まない場合、システムは、所望のIPv4アドレスのARP要求パケットを生成することを含む方法を実装することができ、現在の時間に設定されている最後に送信された時間を注釈付けされた、(IPv4, null-MAC)対を、共有データベースに追加して、最後のＡＲＰ要求がそのＩＰｖ４について送信されたときを示す。この方法は、さらに、その対応するインタフェースと、基礎となるネットワークノードとに外向きの次のホッピングポートをマッピングして、呼び出し元のシステムに、そのインタフェースからARP要求を発行するよう要求し、定期的にARP要求パケットが、そのインタフェースから発行されるよう要求を繰り返すことを含むことができる。実施形態では、 ARP要求は、仮想ネットワークに入った他のパケットと同様に基本システムが配信するので、おそらくは別のノードにトンネルによって配信される。この方法は、タイムアウトが発生するまで継続し、第１のパケットに応答して、ＩＣＭＰルートが到達不能である旨のエラーメッセージを生成してもよい。あるいは、方法は、所望のＩＰｖ４アドレス用の（IPv4, MAC）エントリを含む、ＡＲＰキャッシュのローカルコピーの更新が受信されるまで続けられ、次いで、パケットのデスティネーションＥｔｈｅｒｎｅｔ（登録商標）アドレスをそのエントリのＭＡＣに変更して、シミュレーションされたルータが、説明したようにパケットを修正して、それを次のホッピングポートに発行すると決定することを含む。実施形態では、 ARP応答は、ARP要求が別のノード上のインタフェースにマッピングされているポートから発行された場合は、第１のパケットを処理するものとは別のノードで受信される。このように、決定エンジンは、直接ARP応答を受信するのではなく、ARPキャッシュを介してARPエントリを知ることができる。タイムアウトが発生し、 ARPキャッシュ・エントリが見つからない場合、前述のように、システムは、ルート到達不能ICMPエラーで応答することができる
【００６４】
別の実施形態では、決定エンジンを呼び出すと、ＡＲＰ要求パケットのシミュレーションを行い、ＩＰｖ４ルータの第１のポートに到着する。この場合、ＡＲＰの対象プロトコルアドレス（「ＴＰＡ」）が到着／第１のポートのＩＰｖ４アドレスである。システムは次に、到着ポートのＭＡＣアドレスに設定されたソースハードウェアアドレス（「ＳＨＡ」）を含むＡＲＰ応答パケットを生成して、決定エンジンのシミュレーション論理を呼び出して、ＡＲＰ応答が通る第１のパケットの到着ポートから仮想ネットワークへの経路を決定する。ARP応答も、前述した応答同様に発行され得る。あるいは、決定エンジンシミュレーションは、シミュレーションされたルータが、 ARP要求パケットをドロップすると決定してもよい。
【００６５】
他の実施形態では、決定エンジンの呼び出しによって、IPv4ルータの第１のポートに到着したARP応答パケットのシミュレーションが行われる。システムは、 ARP応答がルータによって生成されたARP要求に応答したものかどうかを検知することができる。一実施形態では、システムはMAC自体がnullである場合でも、一番最後に送信された時間で注釈をつけられたARPキャッシュ内の（IPv4アドレス、 MAC）エントリが存在することをチェックする。エントリがない場合、システムは、ルータがサービス拒否攻撃をブロックするために、このような未承諾ARP応答をドロップすることを決定する。あるいは、システムは、ソースハードウェアアドレス、 MACアドレス、及びソース・プロトコル・アドレス、 IPv4アドレスを、ARP応答から抽出してARPキャッシュを更新する。ARPキャッシュは、ローカルに、及び、（IPv4、MAC）エントリで、共有データベース内で更新することができる。
【００６６】
別の態様では、本開示のコンピューティングシステムは、仮想デバイスの出入りするフィルタのシミュレーションを含む方法を実行するよう構成され、フィルタは、ジャンプルールを介して相互参照することができるリストに編成される個々のフィルタリングルールを含む。この方法は、パケットのＬ２−Ｌ４ネットワークプロトコルのいずれかまたは全てのフィールドを読み出し、論理を適用することができる条件を特定することと、パケットが条件に一致したときに、実行するアクションとを特定することとを含んでよい（たとえばさらなる処理のためのDROP, ACCEPT）。
【００６７】
一実施形態では、方法が、さらに、共有データベースにおける各デバイスの出入りフィルタのフィルタリングルールを維持することと、最近デバイスをシミュレーションしたノードのいずれかのデバイスのフィルタリングルールのローカルコピーを維持することと、ルールの正式なコピーが共有データベース内で変更されるときに、デバイスのフィルタリングルールのローカルコピーを更新することと、及び／または、デバイスのフィルタが修正されたとき、デバイスのシミュレーションが必要であったローカルにキャッシュされたフロー転送の決定を再度有効化することとを含む。方法はさらに、フローごとの接続状態で一致するフィルタリングルールをシミュレーションすることを含んでよく、このフローごとの接続状態は、各シミュレーションされているデバイスによって独立してトラッキングされ、接続状態の値のセットは、パケットのトランスポート（Ｌ４）プロトコルに依存している。一実施形態では、システムは、デバイス及びフローごとの接続状態を格納するために中央データベースの専用スペースをもつことと、デバイスのシミュレーションが開始されると、パケットのフローの署名を利用して中央データベースを照会して、接続状態を取得することとを含む方法を実行するよう構成されている。一実施形態では、フローの署名は、これらフィールドを以下の順序（シミュレーションされたデバイスのデバイスＩＤ、パケットのＬ３ヘッダの（たとえばＩＰ）ソースフィールド、Ｌ３デスティネーションフィールド、Ｌ４プロトコルタイプ（たとえばＴＣＰ）、Ｌ４ヘッダのソースフィールド、Ｌ４のヘッダデスティネーションフィールド）で追加することで計算される。接続状態が中央データベースで見つからない場合には、パケットは、接続状態が暗黙的にこのパケットのネットワークプロトコルの状態セットの「開始」値である新たなフローを構成する。この方法はまた、このデバイスのフィルタリングルールにより一致させるための接続状態の値を露呈させることができる。
デバイスのシミュレーションを終了する前に、シミュレーションが、デバイスがパケットを転送することを決定した場合、接続状態を、このパケットのネットワークプロトコルについての接続状態の値のセットの遷移ルールに従ってこのパケットのフローの署名及びこのパケットの戻りフローの署名について設定する。上記と同様の実施形態では、パケットの戻りフローの署名はこの順序でこれらの値を追加することによって計算される：順序とはつまり、シミュレーションされたデバイスのデバイスＩＤ、パケットのL3ヘッダのデスティネーションフィールド、 L3ソースフィールド、 L4プロトコルタイプ、 L4ヘッダのデスティネーションフィールド、及びL4ヘッダーソースフィールドである。順方向のフローの署名及び戻りフローの署名はさらに、所与の用途において有用であり得る追加のフィールドを使用して定義することができる。順方向のフローのキャッシュされた決定の有効期限が切れると、システムはそのフロー及び戻りフロー両方に関する接続状態の除去をスケジュールすることもできる。更に説明を続けると、接続をトラッキングする方法の一実施形態が図４に示されている。
【００６８】
一実施形態では、方法がさらに、パケットのフローの接続状態で一致するシミュレーションフィルタリングルールを含み、このフローごとの接続状態は、全てのシミュレーションされるデバイス間で共有され、接続状態セットは、パケットのトランスポート（Ｌ４）プロトコルに依存している。このようにして、デバイスのネットワークでとられる経路とは独立して、接続状態をフローの特性としてみることができる。この結果、決定エンジンに対する１つの呼び出しでシミュレーションされる全てのデバイスが、パケットのフロー及び戻りフローの接続状態において同意して、決定エンジンに対する２つの異なる呼び出しでシミュレーションされた任意の２つのデバイスが、戻りフローが、順方向のフローが発行された同じデバイスの仮想ネットワークに入る、戻りフローパケットがパブリック（つまりグローバル固有）Ｌ３アドレスを有している、のうちの少なくとも１つが真である場合に、これらの接続状態で同意する。
実施形態では、共有データベースが、フローごとの接続状態を格納するための専用スペースを含んでいる。仮想ネットワークのパケットの横断のシミュレーションが開始されると、共有データベースは、パケットのフローの署名を利用して照会されてよい。L3ソース/デスティネーションの少なくとも一つがパブリック（すなわちグローバルに一意）でない場合、フローの署名は、第１のシミュレーションされたデバイスのデバイスIDに依存し得る。
フローの署名は、パケットのL3ヘッダの（例えば、IP）ソースフィールド、L3デスティネーションフィールド、L4プロトコルタイプ（例えば、TCP ）、L4ヘッダのソースフィールド、及びL4ヘッダデスティネーションフィールドに依存していてよい。接続状態が中央データベースに見つからない場合には、パケットは、接続状態が暗黙的にこのパケットのネットワークプロトコルの状態のセットの開始値である新たなフローを構成している。任意のシミュレーションされたデバイスのフィルタリングルールが一致する接続状態の値を次に露呈することができる。仮想ネットワークのパケットの横断のシミュレーションを終了する前に、シミュレーションが、パケットがある仮想ポートから最終的に発行されると決定する場合、接続状態が、このパケットのネットワークプロトコルについての接続状態値のセットについての遷移ルールに従って、このパケットのフローの署名及びこのパケットの戻りフローの署名について設定される。接続状態は、レース条件（race condition）を避けるために、パケットをトンネリング／転送する前に（及び、決定を戻す前に）共有データベースに書き込まれ、ここで、共有データベースへの接続状態の書き込みが完了する前に、戻りフローからのパケットがシミュレーションされ、接続状態に対する照会がトリガされる。パケットのリターンフローの署名は、同様の方法で計算することができる。上述したように、順方向のフローのキャッシュされた決定が期限切れになると、そのフローと戻りフローとに関連付けられている接続状態両方のスケジュール除去が行われる。
【００６９】
別の態様では、方法が、この状態がパケットのシミュレーションによってまたは戻りパケットのシミュレーションによって利用されないとき、あるシミュレーションされたデバイスのフィルタリングルールがその状態を読み出す必要が生じるまで、そのパケットのフローの接続状態の照会を遅らせることによりシミュレーション時間を短くして、戻りパケットのための可能性のある経路が、戻りフローの接続状態を読み出す必要があるフィルタリングルールをシミュレーションすることを含むかを決定し、結果が否定的な場合には、順方向の及び戻りのフロー接続状態両方を共有データベースに書き込む処理を省く。実施形態では、接続状態が共有データベースに維持され、これにより、同じフローからのパケットが、後で第２のノードのインタフェースに到着し、第２のノードの決定エンジンが、そのフローを処理する方法についての同じ決定に到達するようにする（仮想ネットワークの構成が変更されていない場合）。これは、外部のルーティング決定により、基礎となるネットワークの１つを超えるノードのインタフェースにそのパケットが到達するときに、フローの整合性を維持するために必要である。これらのルーティング決定は、ノードのインタフェースの知覚された、または現実の到達不可能性に関していても、いなくてもよい。
【００７０】
また他の実施形態では、システムが、仮想デバイスについての、ネットワーク（つまりＬ３）及びトランスポート（Ｌ４）のアドレス変換のシミュレーションを実行するよう構成されている。同様に、システムは、ネットワークの逆変換及び仮想デバイスのプロトコルアドレスをシミュレーションするよう構成されている。これらプロセスは、「ＮＡＴ」と称される集合体であってよい。様々な実施形態では、個々のＮＡＴルールが、フィルタリングルールの後にあっても、前にあっても、そのなかに介在していてもよく、パケットのＬ２−Ｌ４ネットワークプロトコルヘッダの任意または全てのフィールドを読み出したりそれに論理を適用したりする条件を特定して、パケットが条件を満たすと、どのようにＬ３及びＬ４フィールドを変換または逆変換すべきかを特定して、及び／または、変換が生じると実行されるアクションを特定してよい（たとえば、デバイスによるさらなる処理の場合にはＡＣＣＥＰＴ、ルールセットのＣＯＮＴＩＮＵＥ処理）。方法はさらに、共有データベースの各デバイスの出入りフィルタの変換ルールを維持し、デバイスを最近シミュレーションした任意のノードのデバイスの変換ルールのローカルコピーを維持し、ルールの正式なコピーが共有データベースで変更された場合には、デバイスの変換ルールのローカルコピーを更新してよい。デバイスのシミュレーション中に、パケット処理がＮＡＴルールに達すると、方法は、パケット（おそらくは既に前のデバイスまたはルールによって修正されている）がルールの条件を満たしているかを決定して、決定結果が肯定的な場合には、ルールが指定する変換または逆変換に従ってパケットを修正する。次に、そのデバイスの変換が修正されたとき、デバイスのシミュレーションを必要としたローカルにキャッシュされているフローの転送の決定を再度有効にする（revalidate）ことを含んでよい。
【００７１】
別の態様では、システムが、ステートフルデスティネーションＮＡＴをサポートする物理的に分散された仮想デバイスを実装して、この中では、一部のＮＡＴルールによって、Ｌ３及びＬ４デスティネーションアドレスのための変換対象の選択を可能として、変換対象間で選択を行うためのポリシーを指定する。実施形態では、システムは、順方向及び戻りフローの署名両方について調節された（key）、共有データベースの各順方向のフローについての変換選択を格納してよい。順方向のフローの署名は、これらの値を、仮想デバイスのＩＤ、パケットのＬ３ソースアドレス、Ｌ３デスティネーションアドレス、Ｌ４プロトコル番号、Ｌ４ソースアドレス、Ｌ４デスティネーションアドレスの順序で含んでよい。
戻りフローの署名は、これらの値を、仮想デバイスのＩＤ、変換が選んだＬ３アドレス、パケットのＬ３ソースアドレス、Ｌ４プロトコル番号、変換が選択したＬ４アドレス、パケットのＬ４ソースアドレスの順序で含んでよい。格納された変換は、パケットの元のＬ３及びＬ４デスティネーションアドレス及びその変換について選択されたＬ３及びＬ４デスティネーションアドレスをエンコードしてよい。方法はさらに、デバイスのシミュレーション中に、パケット処理がこのようなＮＡＴルール（ソースアドレスの選択を可能とするもの）に到達して、ルールの条件を満たすと、転送フローの署名について上述したキーを構成して、共有データベースに照会を行い、前の決定エンジンの実行によって（ローカルまたは一部の遠隔の基礎となるネットワークノードで）変換が既に格納されたか（したがい、変換されたアドレスの選択が既に行われたか）を判断することを含む。このような格納されている変換が共有データベースに見つかる場合には、パケットのＬ３及びＬ４ソースアドレスを、選択されたＬ３及びＬ４アドレスに修正してから、シミュレーションを続ける。
格納されている変換が共有データベースに見つからない場合には、指定されたポリシーに従って選択を行い、この選択に従ってパケットのＬ３及びＬ４デスティネーションアドレスを修正して、変換の選択を、前に説明した共有データベースに格納してから、シミュレーションを続ける。デバイスのシミュレーション中に、パケット処理が選択を逆にすると指定する逆変換ルールに到達したり、パケットがルールの条件を満たしたりした場合には、そのパケットが変換された順方向のフローの戻りパケットであると想定した場合、戻りフローの署名に対応するキーを構成し、共有データベースに照会を行い、その戻りフローに変換が格納されているかを決定する。戻りフローの署名は、これらの値を、仮想デバイスのＩＤ、パケットのＬ３ソースアドレス、Ｌ３デスティネーションアドレス、Ｌ４プロトコル番号、Ｌ４デスティネーションアドレス、及びＬ４ソースアドレスの順序で含んでよい。この格納されている変換がデータベースに見つかる場合には、パケットＬ３及びＬ４ソースアドレスを格納されている変換の元のＬ３及びＬ４アドレスに修正することで、このパケットに逆に適用してから、シミュレーションを続ける。このような格納されている変換が共有データベースに見つからない場合には、パケットが変換された順方向のフローの戻りパケットであるという想定が不正確であったことになるので、逆変換を適用する必要がなく、したがって、逆ルールの条件が満たされなかったかのようにシミュレーションを続ける。このようにして、システム及び方法によって、共有データベースの変換を格納して、レース条件を処理して、仮想デバイスが、正確に振る舞い、正確に機能しているハードウェアデバイスから区別不可能であるようにするが、ハードウェアデバイスと比べて、仮想デバイスの利用可能性が向上する。
【００７２】
別の態様では、いくつかのNATルールはL3とL4のソースアドレスの変換のターゲットの選択を可能にし、その選択を行うためのポリシーを指定する。実施形態では、システムは、順方向及び戻りフローの署名両方により調節された（key）、共有データベースの各順方向のフローについての変換選択を格納してよい。格納されている変換は、パケットの元のＬ３及びＬ４ソースアドレス並びに変換について選択されたＬ３及びＬ４ソースアドレスをエンコードする。デバイスのシミュレーション中にもしもパケット処理がこのようなＮＡＴルール（デスティネーションアドレスの選択を可能とするもの）に到達して、ルールの条件を満たすと、転送フローの署名について上述したキーを構成して、共有データベースに照会を行い、（ローカルまたは一部の遠隔の基礎となるネットワークノードにおける）前の決定エンジンの実行によって変換が既に格納されたか（したがい、変換されたアドレスの選択が既に行われたか）を判断することを含む。このような格納されている変換が共有データベースに見つかる場合には、パケットのＬ３及びＬ４デスティネーションアドレスを、選択されたＬ３及びＬ４アドレスに修正してから、シミュレーションを続ける。格納されている変換が共有データベースに見つからない場合には、指定されたポリシーに従って選択を行い、この選択に従って戻りフローの署名を構築して、このキーによって変換が格納されないようにして、キーに対してデータベースが一致するものを返さなくなるまで、選択とデータベースのチェックとを繰り返してから、最終的な選択に従ってパケットのＬ３及びＬ４ソースフィールドを修正して、前に記載したように共有データベースに変換の選択を格納して、シミュレーションを続ける。
データベースにおける戻りフローキーのチェックは、正確を期して、戻りフローをルーティングする際の曖昧さを避けるために利用することができる。デバイスのシミュレーション中に、パケット処理が選択を逆にすると指定する逆変換ルールに到達したり、パケットがルールの条件を満たしたりした場合には、そのパケットが変換された順方向のフローの戻りパケットであると想定した場合、戻りフローの署名に対応するキーを構成し、共有データベースに照会を行い、その戻りフローに変換が格納されているかを決定する。この格納されている変換がデータベースに見つかる場合には、パケットＬ３及びＬ４デスティネーションアドレスを、格納されている元のＬ３及びＬ４アドレスに修正することでこのパケットに格納されている変換を逆に適用してから、シミュレーションを続ける。このような格納されている変換が共有データベースに見つからない場合には、パケットが変換された順方向のフローの戻りパケットであるという想定が不正確であったことになるので、逆変換を適用する必要がなく、したがって、逆ルールの条件が満たされなかったかのようにシミュレーションを続ける。
【００７３】
また別の態様として、既にデータベースにあるＬ３及びＬ４アドレス変換を選択する複数の試みは、Ｌ３及びＬ４アドレスレンジを、個々のノードによって保存することができるブロックに分割することで低減させることができる。変換のためにＬ３及びＬ４アドレスを選択するとき、ノードは、自身のブロックに未使用のアドレスの組み合わせがあるかをチローカルにチェックし、さもなくば新たなブロックを維持する。しばしばこうすることで、データベースに対する１つの往復通信になる。ノードが新たなブロックを維持できず、新たな変換に利用可能な未使用のＬ３及びＬ４アドレスの組み合わせがない場合には、ルールが指定する制約の範囲内のランダムなＬ３及びＬ４のアドレスの組み合わせを利用しようと試みる。
【００７４】
実施形態では、ルーティングプロトコルが、接続及びネットワークの安定性を構築して保つためのグローバルな効果の面が設計、研究される、という意味において、グローバルに動作する。しかしいずれか１つのルータは、直近のピアとのルータプロトコルの説明のみを維持する必要がある。組織は、様々な理由から近隣のネットワークとルーティングプロトコルセッションを作動させてよい。たとえば、近隣に対して、特定のアドレスブロックについての自身のネットワークへの最良の経路を示してよく、自身の転送の決定を、外部ネットワーク条件に基づいて調節することができる。これらのルーティングセッションは、本質的にステートフルであるが、これは、説明が接続のないプロトコル（たとえばＵＤＰ）に反して接続で（たとえばＴＣＰ）維持されてよいため、及び、パケットの転送先を決定するためにルータが利用する状態を交換することが目的であるためである。実施形態では、システムは機器モデルを利用してルーティングプロトコルを実装する。機器モデルでは、Ｌ２アイソレーションを、下層（underlay）で実行されている仮想ネットワークのセットのために提供する。ルーティングプロトコルの場合には、ルーティングプロトコルが特定の論理であり、仮想デバイス自身がトラフィックのソース及びデスティネーションであるものであるために、機器モデルが有用であってよい。一実施形態では、Ｌ３ルータ全体を機器に搭載する代わりに、機器の、仮想ポートと一部の外部ピアとの間にルーティングプロトコルのみを搭載する。このようにすることで、システムが、故障により多い耐性を持つようになり、機器が唯一の故障点であるかは関係がなくても、複数のポートにおいてピアの間に複数のセッションを許可することで、ルーティングプロトコルはこれを考慮に入れることができる。
【００７５】
システムはさらに、所望のルーティングプロトコル及びピアセッションのための構成パラメータを、ルータがそのピアとの間でセッションを構築する仮想ポートの構成の一部として格納することを含む方法を実装することで、仮想ＩＰｖ４ルータのルーティングプロトコル（たとえばBGP, iBGP, OSPF）をサポートするよう構成されていてよい。この情報は共有データベースに格納されてよい。方法はさらに、共有データベースにルーティングプロトコルセッションの構成をもつ所望のアドバタイズされたルートを格納することを含んでよく、基礎となるネットワークノードが、ルーティングプロトコルセッションの構成をもつ仮想ポートにマッピングするパブリックインタフェースをもつとき、ノードは、ローカルに、コンテナ（たとえばＶＭ）にルーティングプロトコルデーモンを起動する。コンテナは、ホストに「プライベートな」インタフェースを取得して、ノードは、ルーティングプロトコルセッションからのパケット、及び、オプションとして、数個の他のフロー（たとえばＡＲＰ及びＩＣＭＰ）が、コンテナとピアとの間を、決定エンジンをバイパスして流れるように、転送決定を設定する。
方法はさらに、ポートにルーティングプロトコルセッション構成を含み、これは、ピアパケットが、対応する基礎となるノードインタフェースに到着することを示唆している。同様に、仮想ルータポートからピアへのセッションパケットは、対応する基礎となるノードインタフェースを介して発行される必要がある。しかし、ピアから仮想ネットワークへのネットワークトラフィックも同じインタフェースに到着して、仮想ルータの転送テーブルがピアを介して進む必要があると示す仮想ネットワークからのトラフィックが、同じインタフェースから発行されている必要がある。全ての通常のフロー（非ルーティングプロトコルフロー）の第１のパケットは、決定エンジン呼び出しになる。この代わりに、ルーティングプロトコルフローのパケットは、決定エンジンをバイパスする。
パブリックインタフェースに到達するものは、プライベートインタフェースから直接発行され、この逆もまた然りである。ノードは、さらに、コンテナを調査する（そのルーティングプロトコルセッションについての仮想ポートのアドバタイズされたルートをプッシュして、コンテナで実行されているルーティングプロトコルデーモンによって学習されるルート（つまりピアがアドバタイズするルート）を見るために）。ノードは、ピアがアドバタイズするルートを処理（たとえば累積）して、出力ポートを、ルーティングプロトコルセッション構成をもつ仮想ポートのＩＤに設定した後で、仮想ルータの転送テーブルにこれらを追加する。コンテナ及びセッションが失敗すると、ノードは、転送テーブルに追加するはずだったこれらの全てのルートを除去する。結果は、ピアがルータのポートを、通常の（エンドホストの）トラフィック及びルーティングプロトコルセッショントラフィックを送受信するものとして知覚する。ルーティングプロトコルセッショントラフィックは、ポートごとに構成され、仮想ＩＰｖ４ルータは、１以上のピアをもつ構成されたルーティングプロトコルセッションをもつ１を超える数のポートを有していてよい。これらの仮想ポートを、異なる基礎となるネットワークノードのインタフェースにマッピングすることで、仮想ルータは、物理ルータ等の単一の故障点ではなくなる。これにより、前利用可能であったシステムと比べてこのシステムの故障に対する耐性が増す。
【００７６】
また別の態様では、システムは、仮想プライベートネットワーク（「ＶＰＮ」）を実装または模倣する方法を提供する。一実施形態では、仮想デバイスを、インターネットの異なる部分の遠隔ネットワークにリンクする方法が提供され、この方法は、仮想デバイスに、遠隔ネットワークとの間で、あたかも物理的に接続されており、そのリンクがセキュアでプライベートであるかのように、パケットを交換させる。このようにすることで、アウトサイダが、リンクのトラフィックを見ることができず、リンクにトラフィックを投入することができなくなる。方法はさらに、仮想Ｌ２及びＬ３デバイスポート構成を、共有データベースに格納されているＶＰＮ構成オブジェクトの識別子で注釈をつけるよう構成することを含んでよい。ＶＰＮ構成は、特定の基礎となるネットワークノードに割り当てられてよく、または、基礎となるネットワークノードが、ＶＰＮ構成でロックを取得するよう競合することができ、この場合ＶＰＮ構成でのロックの取得が、ロックオーナが対応するＶＰＮリンクを管理する責任があることを示す。後者の場合には、ノードが失敗することで、そのノードの施錠がなくなるので、ノードがまだ生きている場合にはそのノードのＶＰＮリンクが解体することになる。したがって別のノードによるＶＰＮリンクの取得は可能である。ＶＰＮ構成は、プライベートポート識別子を含んでよい。プライベートポートは、遠隔ネットワークにリンクされるべきデバイス上の仮想ポートを特定する。ＶＰＮが割り当てられる基礎となるネットワークノードは、ローカルに論理ネットワークインタフェースを作成して、これをプライベートポート識別子にマッピングする。そして、コンテナ内にＶＰＮ管理デーモン（たとえばＯｐｅｎ  ＶＰＮ）を起動して、コンテナを新たに作成されたインタフェースにリンクさせる。
ノードがそのインタフェースを介して発行した（つまり仮想ネットワークがプライベートポートから発行した）トラフィックは、ゆえに、ＶＰＮ管理デーモンに到着して、ＶＰＮ管理デーモンが、これを暗号化して、遠隔のサイトに転送する。ＶＰＮ構成が、コンテナ内のＶＰＮ管理デーモンが暗号化されたトラフィックを、基礎となるネットワークノード自身のネットワーキングを介して遠隔のサイトに転送すべきであると指定している場合には、コンテナ内のＶＰＮ管理デーモンは、ＶＰＮクライアントとして動作すべきである（というのも、基礎となるネットワークノードはパブリックＩＰｖ４アドレスを有していないことがあるからである）。ＶＰＮ構成はしたがって、ローカルデーモンが接続すべき遠隔のＶＰＮ管理デーモンのパブリックＩＰアドレスを特定する。
別の態様として、基礎となるネットワークノードすべてが、インターネットに直接アクセスを有する必要はなく、したがって、暗号化されたＶＰＮトラフィックは、仮想ネットワークに再度入り、アップリンクがインターネットに接続されている仮想デバイス（たとえばＢＧＰイネーブルポートを有するＬ３エッジルータ）にトンネリングされる。一実施形態では、ＶＰＮ構成がパブリックポートを特定して、これは、インターネットにパケットを（直接または間接に）転送することができる仮想デバイスの仮想ポートを特定している。ＶＰＮ構成はさらに、ローカルＶＰＮデーモンが、特定のＩＰｖ４アドレス及びＴＣＰ（またはＵＤＰ）ポートのサーバとして、または、ＴＣＰまたはＵＤＰポートの遠隔ＩＰｖ４アドレスに接続するクライアントとして動作すべきかを特定する。ＶＰＮを割り当てられるノードは、ローカルな論理ネットワークインタフェースを作成して、これをパブリック仮想ポートにマッピングして、これをＶＰＮ管理デーモンコンテナに接続する。ＶＰＮデーモンは、その暗号化され／トンネリングされたトラフィックを、そのインタフェースから送信するよう構成されており、暗号化されたトラフィックを、そのインタフェースから遠隔サイトから受信する。
【００７７】
また別の態様では、システムが、仮想ネットワークにＤＨＣＰ機能を提供し、仮想ネットワークにアクセスを有するホスト（物理または仮想）を構成することができる。このようにして、いずれのＤＨＣＰサーバも不要となり、１つのＬ２ドメインでシミュレーションする必要もなくなる。ＤＨＣＰ構成が、Ｌ２ドメインから抽象化され（abstracted）、単に仮想ポートに関連付けることができるリソースとして定義される。ＤＨＣＰ発見または要求メッセージが仮想ポートに到着するとき（つまり、仮想デバイスの外部ポートに対応しているインタフェースに到着するとき）、システムのネットワークシミュレーション決定エンジンは、ポートの構成をチェックして、関連するＤＨＣＰ構成があるかを判断する。ある場合には、決定エンジンが関連するＤＨＣＰ構成を利用して、これらメッセージに対して応答（ＤＨＣＰがそれぞれ提供及び応答する）して、ノードに対して、これらのパケットを、要求が到着したインタフェースから発行するよう命令する。この代わりに、決定エンジンは、仮想ポートに到着するいずれかの他のネットワークパケットについて、ネットワークのパケットの横断をシミュレーションする。
この点に関して、ＤＨＣＰは、ＵＤＰがトランスポートする別のプロトコルであり、これが、ＩＰ上で実行されるＬ４である。この方法によって、ＤＨＣＰリソースが、ネットワークトポロジーとは独立して設計され、より詳しくは、Ｌ２ドメインから独立して設計される。したがってＤＨＣＰリソースは、ユーザの要求に応じて、任意のポートのセットで共有されてよい。実施形態では、システムは、共有データベースにＤＨＣＰリソースを格納する。
【００７８】
一実施形態では、ＤＨＣＰリソースが提供される。ＤＨＣＰリソースは、対応する値をもつオプションのセットが定義するＤＨＣＰ構成を含む。ＤＨＣＰリソースはさらに、動的なＩＰアドレスプールを含み、ＩＰｖ４アドレス割り当てに対して静的なＭＡＣアドレスのセットを潜在的に含む。ＤＨＣＰリソースのコンポーネントは、束にされて、任意の仮想デバイスの外部ポートに関連付けられてよい。システムは、ＤＨＣＰリソース定義を共有データベースに格納することと、外部仮想ポートを共有データベースのＤＨＣＰリソースマッピングに格納することと、決定エンジンを利用して、仮想ポートに到着するＤＨＣＰパケットを特定することと、仮想ポートをＤＨＣＰリソースにマッピングしたかを決定することとを含む方法で、ＤＨＣＰリソースを利用することができる。仮想ポートがＤＨＣＰリソースにマッピングされない場合、前に説明した方法を利用して、パケットを処理する方法を決定する。仮想ポートがＤＨＣＰリソースにマッピングされる場合、ＤＨＣＰリソースの定義を利用して、ＤＨＣＰプロトコルに従って、及び、送信者のＭＡＣアドレスに従って、論理応答を構成する。送信者がＩＰｖ４アドレスを要求する場合、システムはさらに、送信者のＭＡＣアドレスについて静的な割り当てが存在するかをチェックして、そのＩＰｖ４アドレスを、提供されたＩＰアドレスとして戻す。
送信者がＩＰｖ４アドレスを要求しており、ＤＨＣＰリソースが静的なＩＰｖ４アドレス割り当てを含まない場合には、システムは、リソースが、動的に割り当てられたＩＰｖ４アドレスプールを定義するかをチェックする。定義しており、プールに保存されているアドレスが存在している場合には、アドレスの１つを、クライアント（ＭＡＣアドレスにより特定される）の代わりに保存して、要求を受信した外部ポートを介して発行されるべきＤＨＣＰ応答メッセージを構築する。ＤＨＣＰリソースで定義された動的に割り当て可能なプールからのＩＰｖ４アドレスの保持（reservation）は、共有データベースに格納され、衝突または再利用を防ぐことができる。この保持には、クライアント要求によって更新可能なリースが含まれる。リースが更新されるとき、リースの期限が切れるときを、決定エンジンによって更新して、定義された期間の間、リースを維持してよい。
【００７９】
別の実施形態では、システムは、表示の状態の転送（representational state transfer）を実装する（ＲＥＳＴ  ＡＰＩとも称される）。システム及びシステムのテナントによってＲＥＳＴ  ＡＰＩが利用されて、仮想ネットワークトポロジーを含む仮想ネットワークが調査、監視、及び修正される。実施形態では、ＲＥＳＴ  ＡＰＩが、役割ベースのアクセス制御を提供して、仮想トポロジーの各部分の所有権を認識する。ＲＥＳＴ  ＡＰＩはさらに、１以上のテナントの役割及び機能を認識していてもよい。一例では、テナントは、自身の仮想スイッチ及びルータを作成して、ＲＥＳＴ  ＡＰＩを利用して全ての側面を管理してよい。一部の場合には（たとえばＩａｓＳクラウド等において）、他のテナントにリースすることができるグローバルＩＰアドレスのプールを有しているサービスプロバイダテナント等のテナントが存在していてよい。これらシステムでは、サービスプロバイダテナントが、内向きポートを作成して、別のテナントに、上述したようなそのポートにリンクする機能を授けてもよい。
【００８０】
例示するために、ここに開示する方法の１以上を実装するよう構成されたシステムの実施形態を図１３及び図１４に示す。図５を参照すると、ＶＰＮアプリケーションとともに利用されるよう構成されたシステムが物理的に示されている。ＶＰＮサーバ５１を有する遠隔サイト５０は、インターネット５２経由で、基礎となるネットワーク５３と通信する。一実施形態では、ＶＰＮサーバ５１が、Ｏｐｅｎ  ＶＰＮサーバであってよい。基礎となるネットワークは、プライベートＩＰネットワークであってよい。ホスト５４は、基礎となるネットワークに接続されたノードであってよく、ネットワークインタフェース５５を含む。ネットワークインタフェース５５は、トンネルポート５６に接続されている。トンネルポート５６は、ＧＲＥトンネリングその他の上述したトンネリング法を利用してよい。ネットワークインタフェース５５は、さらに、コンテナ内のＶＰＮクライアント５７と、暗号化されたトンネル６２で通信してよい。ＶＰＮクライアントはＯｐｅｎ  ＶＰＮクライアントであってよい。コンテナ内のＶＰＮクライアント５７は、フロープログラマブルスイッチ５８と、仮想ネットワークトラフィック５９を介して通信する。フロー制御可能なスイッチ５８は、さらに、共有データベース６１と通信する決定エンジン６０と通信する。本開示における方法の１以上を適用することで、システムは、ホストのネットワークを利用してＶＰＮ管理デーモンを提供して、遠隔サイトのＶＰＮサーバに到達する。
【００８１】
図６を参照すると、ＶＰＮアプリケーションとともに利用されるシステムの別の実施形態を物理的に示す。ＶＰＮサーバ７１を有する遠隔サイト７０は、インターネット７２を介して、第１のホスト７３のネットワークインタフェース７４と通信する。第１のホスト７３は、フロープログラマブルスイッチ７６と通信する決定エンジン７８を含む。フロープログラマブルスイッチ７６は、トンネルポート７７を介してネットワークインタフェース７５と通信する。第１のホスト７３のネットワークインタフェースは、基礎となるネットワーク７９に接続される。基礎となるネットワークはさらに、第２のホスト８０のネットワークインタフェース８１に接続されている。一実施形態では、基礎となるネットワーク７９は、パブリックインターネットとは隔離されたプライベートネットワークである。第２のホスト８０はさらに、トンネルポート８２を介してネットワークインタフェース８１と通信するフロー設定可能スイッチ８３を含む。フロープログラマブルスイッチ８３はさらに、コンテナ内のＶＰＮクライアント８５及び決定エンジン８４と通信する。決定エンジン８４はさらに、共有データベース８６と通信して、共有データベースが、システムのための分散状態情報を提供するようにする。本開示による方法の１以上を適用することで、システムは、仮想ネットワークのアップリンクを利用してクラウドコンピューティング環境にＶＰＮ管理デーモンを提供して、遠隔サイトのＶＰＮサーバに到達する。
【００８２】
また別の実施形態では、基礎となるネットワークに重ねられた仮想ネットワークを利用してパケットルーティングを促すシステム及び方法を開示する。実施形態では、基礎となるネットワークが物理ネットワークであるが、他の実施形態では、基礎となるネットワークが仮想または論理ネットワークであってよい。明瞭化するために、基礎となるネットワークは、物理ネットワークに関して説明されるが、１以上の仮想ネットワークは互いに重ねられてよく、それぞれが次に重ねられる仮想ネットワークの基礎となるネットワークを提供してよい。
【００８３】
本開示のシステムは、複数のノードと相互接続するネットワークを含んでよい。ネットワークのノードは、サーバ、ルータ、または、ネットワークと通信する他のコンピューティングデバイス等の物理コンポーネントに対応していてよい。各デバイスが、１以上のノードをサポートしていてよい。別の実施形態では、ノードが、論理または仮想デバイスを表していてよい。ネットワークは、サービスプロバイダが維持するプライベートネットワークであってよく、ここでサービスプロバイダは、ネットワーク機能を複数のテナントに販売、リース、または提供してよい。ネットワークは、エッジノード等の、パブリックネットワークに接続を提供する１以上のノードを有していてよい。一例では、ネットワークは、複数のインターネットに面しているノード（Internet facing nodes）を含み、インターネットとネットワークとの間に複数の入出力通信経路を提供する。インターネットに面しているノードは、インターネット接続されたルータであってよい。別の例では、ネットワークが、テナント仮想マシンをホストするよう構成された複数のノードを含む。テナントの仮想マシンをホストするノードは、ホストサーバまたは、１以上のテナント仮想マシンを作動するために必要なリソースを有する他のデバイスであってよい。一部の実装例では、ノードが、１つのテナントからの複数の仮想マシンをホストしてよい。別の実施形態では、ノードが、それぞれ異なるテナントが所有する複数の仮想マシンをホストしてよい。また別の実施形態では、ノードが、テナント仮想マシンをホストする、及び、ネットワークにインターネット接続（Internet connectively）を提供する、という両方の機能を提供してよい。
【００８４】
様々な実施形態において、パケットを第１のノードから第２のノードにルーティングする方法が開示されている。方法は、ネットワークの第1のノードにおいてパケットを受信することを含む。この方法はさらに、パケットが仮想ネットワークを横断する方法をシミュレーションするために、決定エンジンを呼び出すことを含む。シミュレーションは、仮想ルーティングテーブルにアクセスして、パケットの次のホッピングを決定することを含んでよく、次のホッピングは、内向きポート（論理ポートとも称される）または外向きポート（実体ポートと称される場合もある）であり、シミュレーションは、次のホッピングが、ネットワークの第２のノードの外向きポートであると決定されるまで、後続する仮想ルーティングテーブルに対して順次アクセスし続けることを含んでよい。決定エンジンがパケットを処理する方法を決定した後、パケットは、第２のノードの外向きポートに、基礎となるネットワークを介して送信されてもよい。実施形態では、基礎となるネットワークは、複数のノード間に接続を提供する、Ｅｔｈｅｒｎｅｔ（登録商標）ネットワーク、プライベートまたはパブリックIPネットワーク、または他のネットワークであってよい。
【００８５】
一実施形態では、ネットワークの各ノードがエッジコネクタを含む。各エッジコネクタは、同じ物理ホストまたはノードで実行される決定エンジン及びフロー設定可能スイッチのインスタンスを含む。一実施形態では、フロー設定可能スイッチは、Ｏｐｅｎ  ｖＳｗｉｔｃｈ等のソフトウェアを含んでよい。決定エンジンは、１以上の仮想Ｌ２スイッチ及び仮想Ｌ３ルータをシミュレーションしてよい。エッジコネクタは、物理インタフェース、仮想インタフェース、またはこれらの両方であってよい。仮想インタフェースは、たとえば、ＴＡＰインタフェースまたはカーネルレベルの仮想インタフェース等のインタフェースである。物理インタフェースは、たとえば物理ネットワークインタフェースカード（ＮＩＣ）である。
【００８６】
フロー設定可能なスイッチは、フロールールに一致するすべてのパケットにアクションリストを適用するソフトウェアコンポーネントである。アクションリストには、どのパケットがフローに一致しているかを特定するフロー・マッチが関連付けられている。一部の実施形態では、フロー・マッチは、パケットのプロトコルヘッダ・パターンによって指定することができる。フロー・マッチは、例えば、ソース及びデスティネーションポート、ソース及びデスティネーションアドレス、MACアドレスを含むパケットデータの1つ又は複数の部分に基づくことができる。フロー・マッチは、パケットデータ、または、ソースもしくはデスティネーションアドレスの一部等のパケットデータのサブセットの組み合わせに基づくことができる。フロールールは、フロー・マッチとアクションリストとを少なくとも含むことができ、「フロー」と称されてよい。２つのフロー（１つがインバウンドで１つがアウトバウンド）が、接続を形成する。概して、２つのフロー（インバウンドフローとアウトバウンドフロー）が、ネットワーク外のクライアントと、テナントの仮想マシンその他の、ネットワーク内に提供されるサービスとの間の通信についての接続を形成する。 1つ又は複数のフローのルールによって表される各フローは、共有データベース内に維持される分散状態に格納されてよい。一実施形態では、各フローは、分散状態へのアクセスを必要とする他のすべてのノードによってアクセス可能なネットワークのノード上に維持された分散状態に格納される。格納されたフローは、そのフロー・マッチで、またはフロールールに関連する他の基準によってインデックスを付けられてよい。
【００８７】
一実施形態では、接続の一方向への第１のパケットのために作られたルーティング決定をキャッシュするフローテーブルを維持することができる。フローテーブルは、フロー設定可能スイッチ内に維持される。ネットワークは、外部ネットワークへの複数の可能なアクセスポイントを有してよく、接続は、同じ仮想ルートのインバウンドをアウトバウンドとして利用する必要はない。それぞれ異なるインバウンド及びアウトバウンドルートを可能とすることによって、ネットワークのある部分に障害が出た場合に、システムの故障に対する耐性を増すことができる。それぞれ異なるインバウンド及びアウトバウンドルートを可能とすることによって、さらには、ネットワークの別の経路間のロードを均衡させることによって（balancing loads）ネットワークリソースの利用率を高めることもできる
【００８８】
ネットワークはまた、ネットワークのノード間でパケットをルーティングおよびスイッチするための転送エレメントを含んでいる場合がある。転送エレメントは、 L2スイッチ、 L3ルータ、又はL2スイッチとL3ルータとの組み合わせ、のいずれであってもよい。転送エレメントは、物理的または仮想のいずれであってもよく、ネットワークは、物理及び仮想転送エレメントの組合せを含むこともできる。仮想転送エレメントは、ソフトウェアで実現することができるが、物理的な転送エレメントは、ハードウェアコンポーネントである。一実施形態では、仮想転送エレメントは、テーブルを使用して実施される。例えば、決定エンジンが、ネットワークに対して確立された仮想トポロジーに従ってパケットのルーティングとスイッチングとをシミュレーションするために使用されてもよい。
【００８９】
ネットワークでは、仮想ルータは、仮想ネットワークグラフによって説明することができる仮想ネットワークトポロジーを構築するために他の仮想ルータに接続されてよい。各仮想ルータは、仮想ポートを複数持っている場合があり、ここで各仮想ポートは内向き（論理）ポートまたは外向き（実体）ポートのいずれかである。例えば、各仮想ルータは、仮想ルーティング・テーブルを含むことができ、ポートの仮想ルータによりルーティングされたパケットの次のホッピングを決定するために、内向きポートは、仮想ルーティングテーブル内のルックアップを実行することによって特定することができる。各ルックアップが別の仮想ルータのピアの内向きポートまたは外向きポートにつながることができ、これにより、決定エンジンは、複数の仮想ルータを有する仮想トポロジーの横断をシミュレーションすることができる。一実施形態では、外向きポートは、例えば、トンネルポート等のフロー設定可能なスイッチのポートに対応していてよい。いくつかの実施形態では、外向きポートは、インターネット接続を提供する、ノードの位置に対応していてよい。別の実施形態では、外向きポートは、ネットワーク内で動作する仮想マシンの場所に対応することができる。内向きポートおよび外向きポートの両方について、共有構成ツリーの仮想ポートの静的構成は、明示的に、ポートのタイプ（つまり、内向きまたは外向き）を含み、内向きポートの場合には、仮想リンクの他端（つまりピアの内向きポート）のユニバーサル固有識別子（「port_uuid」）を含む。加えて、仮想ルータは自身のIPアドレスを有していてもよい。さらに、各仮想ルータは、例えば、ボーダーゲートウェイプロトコル（「"BGP"」）及び／または、内部ゲートウェイ・プロトコル（「"IGP"」）などのプロトコルをサポートすることができる。
【００９０】
別の実施形態では、エッジコネクタが、仮想ルータのポートではないトンネルポートを有してよい。トンネルポートを利用して、１つのエッジコネクタをネットワークにより別のエッジコネクタに接続することができる。たとえば、あるエッジコネクタのフロー設定可能なスイッチを、別のエッジコネクタのフロー設定可能なスイッチに、トンネルポートによって接続することができる。一実施形態では、パケットが、別のエッジコネクタの仮想マシンについての１つのエッジコネクタに到着してよい。パケットが別のエッジコネクタの外向きポート用である場合には、該エッジコネクタに対してトンネル経由で送信される。エッジコネクタ及びエッジコネクタをトンネルにマッピングするテーブルに、ポートをマッピングするテーブルが、分散状態で維持される。したがってエッジコネクタは、選択された（ローカルではない）ポートに基づいて、どのトンネルを介して、パケットを送信するかを決定してよい。別の実施形態では、外向きポートのエッジコネクタへのマッピング、及び、エッジコネクタのトンネルへのマッピングは、別のノードに維持されてよく、エッジコネクタは、別のノードと通信して、パケットについての適切なトンネルを決定してよい。
【００９１】
一実施形態では、各ノードのエッジコネクタが、共有データベースに格納されていてよい分散状態にアクセスを有してよい。分散状態は、エッジコネクタによって維持、共有される。分散状態は、たとえば、構成ツリーその他の仮想及び／または物理ネットワークトポロジーに関するデータを含んでよい。一実施形態では、分散状態が、Zookeeperおよびmemcacheを利用して実装されてよい。別の実施形態では、分散状態の一部が構成ツリーであるが、別の構造（たとえばハッシュテーブル、n-aryツリー）を考慮に入れてもよい。構成ツリーその他の共有データは、適宜、エッジコネクタによって（たとえば決定エンジンによって）アクセスされてよい。
用語「クライアント」は、本明細書では、たとえば仮想マシンのサービスにアクセスするために、システム内にホストされているサーバに接続しようと試みているWebブラウザなどの外部ネットワーククライアントを示すために用いられる。用語「テナント」は、サービスプロバイダのクライアントを示すために用いられる。テナントは、システム内の物理マシンで動作する１以上の仮想マシンその他のサービスを有してよく、これら仮想マシンとクライアントとの間で、ロード・バランシングまたはネットワークアドレス変換（「ＮＡＴ」）ルールを動的に構築しようと望んでよい。
【００９２】
図７を参照すると、サーバ１０１が、NIC A 111及びNIC B 112という２つのネットワークインタフェースカードを用いて例示されている。例として、一部のノードが、インターネットクライアントに対しており、インターネット接続をネットワークに提供するエッジノードとして指定されてよい。他のノードは、テナント仮想マシンまたはネットワーク内のその他のサービスをホストするよう構成されたホストノードとして設計されてよい。例として、エッジノード及びホストノードは、対称なアーキテクチャとして示すことができるが、様々な実施形態においては、様々なアーキテクチャをシステムの様々なノードについて利用することができる。インターネットに面しているエッジノード及び仮想マシンホストノードとして説明されてはいるが、システムは、ネットワークの処理を促すことが望ましいデータ格納デバイス及びサポートサーバを含む、中間ノードを含んでもよい。図７では、ＮＩＣ  Ａ１１１が、インターネット１５１に対する接続を有しており、ＮＩＣ  Ｂ１１２が、内部プロバイダ構成１５２（基礎となるネットワーク）に対する接続を有している。内部プロバイダ構成１５２は、プライベートＩＰネットワーク、その他の、ノード間にＩＰ接続を提供するネットワークプロバイダであってよい。
【００９３】
システムは、物理ネットワーク上に重ねられる仮想ネットワークの特徴の多くを実装するソフトウェアコンポーネントを含む。ソフトウェアコンポーネントの動作を説明するために、選択された処理について、パケット受信の後のアクションを説明する。
【００９４】
一実施形態では、ＳＹＮパケットが受信され、ＴＣＰ接続を構築する。ＳＹＮパケットは、ＮＩＣ  Ａ１１１上でインターネット１５１から受信される。パケットは、切り替えのためのフロー設定可能スイッチ１６１でエッジコネクタによって受信される。フロー設定可能スイッチ１６１は、パケットに関するデータを、フローテーブル１６２に格納されているフロールールに一致させることで、フロールールを特定しようと試みる。一致したデータは、たとえば、ソース及びデスティネーションポート、ネットワークアドレス、ＭＡＣアドレス、またはその他のパットに関連するデータを含んでよい。ＳＹＮパケットは通常、フローにおける第１のパケットであるので、フロー設定可能スイッチ１６１は、フローテーブル１６２における第１のパケットに対応しているエントリを見つけない。
フローテーブルの対応するエントリを見つけないことに応じて、フロー設定可能スイッチ１６１は、関数呼び出しを決定エンジン１６５に行い、パケットを決定エンジンに通信する。パケットは、フロー設定可能スイッチのポートに到着してよく、フロー設定可能スイッチは、受信ポートのＩＤを、パケットとともに決定エンジンに通信してよい。フロープログラマブルスイッチ及び決定エンジンの機能は、明瞭性を期すために別個に説明されるが、ソフトウェアコンポーネントが適宜統合されてよいことは明らかである。または、コンポーネントの機能が維持できれば、各コンポーネントが分割されたり、他のコンポーネントと組み合わせられたりしてよい。一実施形態では、決定エンジンは、フロー設定可能スイッチ１６１に、ＯｐｅｎＦｌｏｗプロトコルを介して通信を行い、フロー設定可能スイッチの受信ポートのＩＤを仮想ポートＩＤ（「ｖｐｏｒｔ」）に変換する。または、このマッピングが、受信ポートのＩＤの代わりに、ＭＡＣアドレスまたは８０２.１ｘ証明書に基づいていてよい。パケットのルーティングの残りは、そのＬ３情報に依存していてよい。決定エンジン１６５は、パケットのルートを、仮想ネットワークトポロジーを介してシミュレーションする論理を有する。一実施形態では、フローがフローテーブル１６２に作成されると、そのフローが同じフローの後続するパケットに適用されるために、接続の第１のパケットのみが、決定エンジンに対する呼び出しを行ってよい。
【００９５】
新たなフローに関するフロールールに作成するために、一実施形態では、決定エンジンが、そのパケットをどのように処理及び転送するかを示すアクションリストを構築して、それを、フローテーブルのフロールールに挿入する。そのフローについての基準に一致する後続するパケットは、適用されるアクションリストを有しており、これは、一定のポートに対するパケットのルーティングが含まれてよい。パケットが、別のサーバ上で実行されている別のエッジコネクタ用である場合、トンネルポートを介して他のエッジコネクタにルーティングされてよい。トンネルポートは、基礎となるネットワークのエッジコネクタまたはノードを接続してよく、エッジコネクタ間でパケットを転送するために利用される。この代わりに、パケットが別のエッジコネクタ上の仮想ポート用に意図されている場合、そのエッジコネクタにトンネルを介して送信される。一実施形態ではトンネルプロトコルはGRE+IPである。このトンネリングプロトコルは、サーバ１０１上の１つのフロー設定可能スイッチ１６１に、別のサーバ（不図示）の上の別のフロー設定可能スイッチ（不図示）と、内部プロバイダ構成１５２を介して通信させることを可能とする。図８は、プロバイダの内部Ｌ３ネットワーク構成２０２によって接続される複数のホスト２１０、２２１、２２２それぞれの上の複数のエッジコネクタ２０３、２０４、２０５の物理的な相互接続を示している。例として、仮想マシン２１１及び２１２がホスト２２１上で動作して、仮想マシン２１３及び２１４は、ホスト２２２上で動作する。管理コンソール２０６がさらに、内部ネットワーク構成２０２に接続されていてよく、これが基礎となるネットワークを形成する。図９は、この物理ネットワークに重ねられる仮想トポロジーを示す。トンネリングプロトコルは、構成に、プロバイダ構成１５２のハードウェアを修正することなく、パケットをフロー設定可能スイッチ間でルーティングさせる。実際のパケットがＩＰ（Ｉ３）を（Ｅｔｈｅｒｎｅｔ（登録商標）（Ｌ２）に反して）移動するために、ネットワークはスケール可能であり、Ｅｔｈｅｒｎｅｔ（登録商標）通信で適用されうる距離の限定によって限定されることがないだろう。トンネルのエンドポイントは、エッジコネクタのフロー設定可能スイッチのポートであるが、トンネルポートは、外向きポートと別の処理を受ける。トンネルパケットヘッダのＩＰ部分によって、パケットが正確なホストに到達することができ、次に、ヘッダのＧＲＥ部分が、パケットを正しいトンネルポートに到達させる。ヘッダのまた別のキーが、デスティネーションの外向きポートを特定する役割を果たし、受信エッジコネクタは、パケットを正確なローカルポートにルーティングすることができる。
【００９６】
図８を参照すると、３つのエッジコネクタ２０３、２０４、及び２０５を含むネットワークが示されており、各エッジコネクタは、ホストに存在している。上述した例の続きとして、パケットが物理ネットワークインタフェースカード（ＮＩＣ）上のエッジコネクタ２０３で、インターネット１５１から、インターネット接続されたルータ２０１経由で受信され、パケットは、仮想マシン２１１用である、と仮定する。このパケットはフローの第１のパケットであることを想起すると、フローテーブルのパケットに対応するフロールールは存在しない。対応するフローエントリがフローテーブルに存在しないので、決定エンジンが呼び出される。決定エンジンは、パケットがフロー設定可能スイッチによって受信されたポートに基づいて仮想ポート（ｖｐｏｒｔ）を決定する（おそらくはＭＡＣアドレス及び８０２.１ｘ証明書によって）。この場合のｖｐｏｒｔは、ＮＩＣに対応している外向き（実体）ポート及びフロー設定可能スイッチのポートである。決定エンジンは、ｖｐｏｒｔを利用して、どの仮想ルータまたは仮想スイッチにポートが接続されているかを決定する。上述したように、仮想ルータは、決定エンジンがアクセス可能なテーブルが実装し、分散した状態で維持することができる。ひとたび決定エンジンが、どの仮想ルータが外向きポートに接続されているかを判断すると、決定エンジンは、対応する仮想ルータテーブルのデスティネーションＩＰアドレスを特定することで、一致するルートを選択する。一実施形態では、決定エンジンは、いくつかのルートまたはいくつかの同じコストのルートから、ロード・バランシング・アルゴリズムを用いて、１つのルートを選択する。
【００９７】
別の実施形態では、決定エンジンが仮想ルータテーブルにアクセスして、ＩＰアドレスをルックアップする場合、プレルーティング及びポストルーティングプロセスを適用してよい。プレルーティングプロセスは、ネットワークアドレス変換（「 NAT 」）を実行するために、ソース及びデスティネーションＩＰアドレス及びソース及びデスティネーションポートを含むパケットを変更することができる。ルーティング方法は、ソース及びデスティネーションＩＰアドレスを抽出して、仮想ルータに対応している仮想ルーティングテーブルでＩＰアドレスをルックアップして、デスティネーション（１を超える数のルートが見つかった場合）を選択して、パケットを、ルートエントリに対応しているポートに転送することを含んでよい。パケットの転送は、一致するルートの次のホッピングが内向き（論理）ポートか外向き（実体）ポートかに依存している。仮想ルータは、テーブルとして実装されてよく、２つの仮想ルータの間のルーティングは、連続した仮想ルータテーブルのルックアップを含む。一実施形態では、グローバルルーティングテーブルは、各仮想L3ルータ用に維持される。グローバルルーティングテーブルは、共有データベースに分散状態で格納することができる。あるいは、グローバルルーティングテーブルは、選択されたエッジコネクタに格納されてもよい。別の実施形態では、グローバルルーティングテーブルは、各エッジコネクタで維持され、エッジコネクタは、ネットワーク内の各他のエッジコネクタにグローバルルーティングテーブルを維持し更新するために協働する。
【００９８】
図９を参照すると、図８の物理ネットワークのように、基礎となるネットワークに重ねることができる仮想トポロジーが図示されている。一例では、パケットが、仮想Ｌ３ルータ３０１に関する外向きポートに到着してよく、そのデスティネーションＩＰアドレスがＶＭ２１１のＩＰアドレスである。決定エンジンは、ｖｐｏｒｔが接続されているのがどの仮想ルータであるかを決定するために、パケットが到着したｖｐｏｒｔを利用するが、この場合には、これが仮想Ｌ３ルータ３０１である。一実施形態では、仮想Ｌ３ルータ３０１が、プロバイダルータであってよく、ネットワークを運営しているサービスプロバイダにより作成、及び、管理されていてよい。
決定エンジンは次に、パケットに関するＩＰアドレスを利用して、パケットの出力ポートを決定する。出力ポートがローカルな外向きポートである場合には、フローがフロー設定可能スイッチに構築されており、パケットが、ローカルな外向きポートへルーティングされる。外向きポートがローカルではない場合には、パケットが、ｖｐｏｒｔに従ってトンネルポートへとルーティングされて、テーブル及びホストをホストして、ポートテーブルをトンネリングする。ポートが別のルータまたはスイッチの内向きポートである場合には、外向きポートが特定されるまで、同じルックアッププロセスを繰り返す。図９の説明を続けると、仮想ルータ３０１のテーブルのルックアップは、仮想ルータ３０２に対応する内向きポートを戻してよい。ルックアップとの組み合わせの後で、または組み合わせ中に、適宜、ポストルーティングプロセスをパケットに適用してよい。ルックアップが、このインスタンスの仮想Ｌ３ルータ３０２の、別の仮想ルータに対応している内向きポートを戻すときには、決定エンジンは、仮想ルータ３０２について同じプロセスを繰り返してよい。仮想ルータ３０２は、たとえば、テナントの仮想マシンである仮想マシン２１１及び２１２の間でトラフィックをルーティングするための、テナントによって作成された仮想ルータであってよい。テナントの仮想マシンは、同じホストにあってよく、または、ネットワーク内の異なるホストに位置していてもよい。テナントは、サービスプロバイダからネットワークリソースをリースして、サービスプロバイダが構築するルールに則ったネットワークの容量内の、任意の数の仮想マシンまたは他のサービスを運営してよい。
決定エンジンは、仮想Ｌ３ルータ３０２に関するプレルーティングを含んでよく、仮想ルーティングテーブルのＩＰアドレスをルックアップして、次のホップ及びポストルーティングを決定してよいシミュレーションを実行する。この例では、次のホッピングは、仮想マシン２１１であり、エッジコネクタ２０３とは異なるエッジコネクタによってホストされている。仮想ルータ３０２のための仮想ルータテーブルは、テナントまたはサービスプロバイダによって構成されるＶＭ２１１に対応したｖｐｏｒｔを提供する。一実施形態では、サービスプロバイダが、ネットワークのそれぞれ異なるノード間でテナント仮想マシンを動かして、機器利用を管理したり、ネットワークにおける物理コンポーネントのメンテナンスまたは補修中の動作を維持したりしてよい。決定エンジンは次に、分散状態に維持されているポート位置辞書の出力ｖｐｏｒｔの物理位置をルックアップする。スイッチが転送するすべてのパケットはＬ２パケットなので、ＭＡＣアドレスのためのＬ２パケットのスペースが存在する。しかし、トンネルポートは、２つのフロー設定可能スイッチの間にあるので、ＭＡＣアドレスはアプリケーションによっては不要な場合がある。より詳しくは、一定の実施形態では、実際のＭＡＣアドレスを転送する必要がない（これは、出力エッジコネクタが、自身のローカル情報に基づいて、ＡＲＰを用いて次のホッピングＭＡＣを決定することで、ＭＡＣアドレスを構築することができるからである）。
この代わりに、デスティネーションのｖｐｏｒｔ（この場合にはＶＭ２１１）が、ＭＡＣアドレスのためのスペースにエンコードされる。次にパケットが、デスティネーションとしてエッジノードのＩＰアドレスで、GRE+IPにラップ（wrap）される。今、パケットがＬ３ネットワークを介してルーティングされる準備ができた。図７を参照すると、プレルーティング及びポストルーティング及びルーティングデスティネーションを含むアクションリストをフローテーブル１６２にインストールしてよく、このフローの全ての将来のパケットに一致させ、パケットをトンネリングプロトコルを介して、オペレーティングシステムルータ１１３によって送り出し、ＮＩＣ  Ｂ１１２へと送信する。パケットは、いずれの他のＩＰパケットもそうされるように、ＮＩＣ  Ｂ１１２を出た後、エッジコネクタ２０４のデスティネーションＩＰアドレスで、内部プロバイダ構成１５２でルーティングされる。
【００９９】
パケットがエッジコネクタ２０４により受信されると、フロープログラマブルスイッチのトンネルポートに対応しているトンネルで受信される。パケットはトンネルポートで受信されるので、エッジコネクタは、このパケットを、外向きポートに入ってくるパケットとは異なるように処理してよい。パケットはここでも、このフローで受信される最初のパケットであり、エッジコネクタ２０４は、決定エンジンを呼び出す。一実施形態では、トンネルキーは、デスティネーションvport idを符号化する。決定エンジンは、 MACアドレス及び仮想マシン211のローカルポート番号を決定するために、 vport idを使用してもよい。いくつかの例では、決定エンジンは、VM211のMACアドレスを決定するために、ARP要求を開始することができる。代替的に、MACアドレスがARPテーブル内にキャッシュされてもよい。ARPテーブル（MACのIP）は、仮想ルータのポートごとに維持されている。ARPテーブルは、共有データベースに格納されて分散状態で共有することができる。決定エンジンが、VM211のvportを決定した後、システムは、このフローの将来のパケットをルーティングするために、フローテーブルにフローをインストールすることができる。パケットは、VM211に対応するフロー設定可能なスイッチのポートにルーティングされてもよい。ＶＭ２１１は、ホスト２２１で実行されるローカル仮想マシンであり、これは、エッジコネクタ２０５をホストもしており、決定エンジンは、依然として、デスティネーションＭＡＣアドレスを見つけるために、デスティネーションＩＰアドレスを利用してよい。このように、システムは、VMが別のルータまたはスイッチに対してローカルか標準的なポートかを抽象化（abstract）して、さらに、システムの柔軟性を提供する。
【０１００】
フローが構築されると、同じ接続の後続するインバウンドのパケットが、エッジコネクタ２０３及び２０４のフローテーブルのフローと一致して、決定エンジンを呼び出さずに、これらのマシンのフロー設定可能スイッチによって修正及び転送される。このプロセスは、所望のデスティネーションへシステムからの接続のインバウンドフローを構築する。
【０１０１】
仮想マシン211が同じ接続で応答すると、それが送る第１のパケットが、反対方向に対応するフローを確立するようにシステムをトリガする。新しいフローが確立されると、決定エンジンは、フローが以前に反対方向に確立されたかどうかを決定するために、分散状態にアクセスすることができる。この分散状態は、 NATなどの他のプロセスの実装を容易にし、さらに、後述するようにシステムに、終わった接続をクリーンアップさせる。他の実施形態では、異なる物理コンポーネント上にホストされる仮想マシンが、同じ仮想ルータに接続することができる。
【０１０２】
図１０を参照すると、上述した方法の一実施形態を実行するエッジコネクタで実行されるプロセスの高レベル概略図が示されている。一実施形態では、エッジコネクタが、外部ネットワーク（たとえばインターネット）からパケットを受信する少なくとも１つのＣＰＵをもつ物理マシンの上で実行され、ここでは、パケットが、システムのテナントに関連するＩＰアドレスにアドレス指定されている。テナントＩＰアドレスが、システム内の１以上のホスト上で実行されているテナント仮想マシンに割り当てられていてよい。一実施形態では、テナント仮想マシンに関連付けられているＩＰアドレスは、テナントまたはサービスプロバイダが、仮想マシンをシステムの異なるホストに移動させた場合であっても、一定にとどまってよい。一実施形態では、システムは、１つのアップリンクの複数のＩＰアドレスを、それぞれ別のエッジコネクタ及びそれぞれ異なるテナント仮想マシンにルーティングさせることにより、複数のテナントに、１つのサービスプロバイダのアップリンクを共有させる。エッジコネクタがステップ４１０でパケットを受信すると、ステップ４１２で複数のデータを抽出する（これらに限定はされないが、ソース及びデスティネーションアドレス及びソース及びデスティネーションポート）。データを抽出した後で、エッジコネクタは、フローテーブルの複数のデータをルックアップして（ステップ４１４）、フローが既に構築されたかを判断する（ステップ４１６）。フローの一例は、ＴＣＰ接続の１つの方向である（インバウンド及びアウトバウンドフローの組み合わせで、１つのＴＣＰ接続が形成される）。フローが既に存在している場合には、フローアクションリストがパケットに適用され、パケットが、ステップ４１８で、フローアクションリストが示すフロー設定可能スイッチのポートに転送される。
【０１０３】
フローが存在しない場合には、これが、ノードが受信するフローの第１のパケットであり、エッジコネクタは、ステップ４１７で、どの仮想ポートにパケットが到着したかを、たとえばＭＡＣアドレス、ソース及びデスティネーションアドレス、または、ソース及びデスティネーションポートに基づいて決定する必要がある。エッジコネクタが仮想ポートＩＤを決定すると、エッジコネクタは、そのポートが接続されているのはどの仮想転送エレメントかを決定することができる。
図１０の実施形態では、仮想転送エレメントが仮想ルータであるが、他の仮想転送エレメント（たとえば仮想スイッチ）を、後述のシステムでは適宜利用することもできる。エッジコネクタがＶＦＥを決定すると、エッジコネクタは、ステップ４２０で別のルックアップを実行する。ルックアップは、一連の仮想転送エレメントで、デスティネーションＩＰアドレスをルックアップすることで実行される。仮想転送エレメントは、仮想ルータと仮想スイッチ（仮想ルーティングテーブルを含む）の任意の組み合わせを含んでよく、転送されるパケットに対して適切な経路を決定してよい。ステップ４２０に示す実施形態では、決定エンジンは、第１の仮想転送エレメントのパケットのデスティネーションを決定する。第１の仮想転送エレメントは、仮想ルータであってよく、この場合には、戻されるデスティネーションは、外向きポートまたは内向きポートであってよい。
上述したように、内向きポートは、第２の仮想ルータの別の内向きポートと対になっており、第２の仮想ルータは別のルーティングテーブルを持つ。内向きポートが戻される場合には、決定エンジンは、ステップ４２０で、第２の仮想ルータのルーティングテーブルでデスティネーションアドレスをルックアップして、外向きポートが返されるまで続ける。一実施形態では、各テナントが、該テナントが処理するすべてのパケットをルーティングするよう構成されている１つの仮想ルータを有してよい。他の実施形態では、いくつかのテナントが複数の仮想ルータ、仮想スイッチ、または、仮想ネットワークトポロジーのテナントの部分を定義する、その他の仮想転送エレメントを有してよい。決定エンジンはさらに、各仮想ルーティングテーブルからパケットに実行される一連のアクションを構築する。各ルーティングステップは、さらに、アクションリストに加えられ、フロールールに組み込まれ、フローに一致するパケットに適用される、プレルーティングまたはポストルーティング処理を有していてよい。
【０１０４】
外向きポートが戻されると（ステップ４２４）、エッジコネクタが、外向きポートがローカルかを決定する（ステップ４２６）。ポートがローカルである場合には、アクションをアクションリストに追加して（ステップ４３０）、パケットをローカル外向きポートにルーティングする。様々な実施形態では、ローカル外向きポートが、ネットワークインタフェースカードまたは仮想マシンであってよい。フロールールをフローテーブルに追加して（ステップ４３０）、パケットに適用する（ステップ４１８）。外向きポートがローカルではない場合には、ポートは異なるエッジコネクタにある。一実施形態では、エッジコネクタは、トンネルポート（たとえばGRE_IPトンネルポート）によって接続されていてよい。ステップ４３２で、エッジコネクタは、仮想ポートにアクセスして、テーブルをトンネリングして、外向きポートをトンネルポートにマッピングしようと試みる。テーブルマッピングをトンネリングするための対応するエントリが仮想ポートにない場合には、パケットをドロップして、ＩＣＭＰパケットを送信するアクションをアクションリストに追加して（ステップ４３４）、フロールールをフローテーブルに追加して（ステップ４３０）、フロールールをパケットに適用する（ステップ４１８）。
【０１０５】
外向きポートが、テーブルをトンネリングするための外向きポートにある場合には、パケットをそのトンネルに出力するアクションをアクションリストに追加して（ステップ４３６）、フローをフローテーブルに追加して（ステップ４３０）、アクションリストをパケットに適用する（ステップ４１８）。
【０１０６】
一実施形態では、システムは、フロー設定可能スイッチデータパスにアクションリスト及びフロールールをインストールし、フロー設定可能スイッチは、アクションリストを、フロールールに一致した後続するパケットに適用する（ステップ４１６に示されている）。上述したように、アクションリストの一部は、パケットが送信されるのはフロー設定可能スイッチのどのポートであるかを含む。エッジコネクタは、IPテーブルをホストするためのポートでポートを検索し、IPアドレスにパケットを送信する。その後、フローテーブルにアクションリストを格納する。一致する複数のデータを有している全ての後続するパケットは、それらに適用される同じアクションのセットを有しており、これにより、同じＩＰアドレスにルーティングされる。
【０１０７】
仮想ルータのデスティネーションアドレスを識別するプロセスの間に、フローがルーティング不可能であったり、ブラックホールであったり、拒絶ルートに一致していたりする場合もあり、この時点で、パケットがドロップされたり、ＩＣＭＰパケットが戻されたりする。この実施形態では、フローは、フローのルールに一致するすべてのパケットをドロップするように作成することができる。このように、システムは、サービスプロバイダまたはテナントによって確立されたルールに従って、ルーティング不可能なパケットを処理したり、不要なデータを選択的にスクリーニングしたりするよう構成することができる。
【０１０８】
また別の実施形態では、テナントＶＭをホストしているエッジコネクタが、複数のＩＰアドレス及び内部構成ネットワークに接続されている複数のＮＩＣを有していてよい。この場合には、インターネットに面しているエッジコネクタが、エッジコネクタをホストしているＶＭに対する複数の経路のうち１つを選択することができる。さらに、複数のＩＰアドレスを有しエッジコネクタをホストするＶＭが、エッジコネクタを特定するための固有のＩＤを有していてよく、決定エンジンのルーティングフローが、たとえばロード・バランシング・アルゴリズムを利用して、またはランダムに、エッジコネクタをホストするＶＭのＩＰアドレスの１つを選択することができる。
【０１０９】
システムの別の実施形態は、ＩＰアドレス以外のエッジノードの識別子を利用してよい。たとえば、ネットワーク構成は、回路ベースであってもよいし（たとえばマルチプロトコルラベルスイッチ（ＭＰＬＳ））、エッジコネクタ間に専用回路を有する別のカスタムＯｐｅｎＦｌｏｗコントローラであってもよい。この実施形態では、回路は、エッジノード上のフロー設定可能スイッチの間のＧＲＥトンネルを置き換えてもよい。
【０１１０】
別の実施形態では、システムが、ルーティングステージの前後のプレルーティング及びポストルーティングステージを提供する。プレルーティング及びポストルーティングを利用して、ネットワークアドレス変換（ＮＡＴ）、ロード・バランシング、または他のＬ３／Ｌ４特徴部を実装してよい。一実施形態では、プレルーティングステージがフローのデスティネーションを変更してよく（たとえばネットワークアドレス変換におけるようなもの）、アウトバウンドルーティングがフローのソース（ここでも、一例としてネットワークアドレス変換）を変更してよい。１つの接続（たとえばＴＣＰ接続におけるようなもの）を含む順方向及び逆方向のフローの署名によって実行されるマッピングを調整するために、接続変換を大きなタイムアウトとともに分散状態で格納してよい。これらの変換はさらに、接続トラッキングによってクリーンに閉ざされた接続が検知されたときに積極的にクリーンアップされてよい。
【０１１１】
本システムの一実施形態では、ＮＡＴが、プレルーティング及びポストルーティング変換を利用して実装される。フローのセットアップにおいて、ＮＡＴのプレルーティングステージは、フローが前に反対方向に（インバウンド対アウトバウンド）分散状態で構築されているかどうかを判断し、そうであれば、前に作成されたマップを新たなフローについて逆にする。フロールールは、全てのノードがアクセス可能な分散状態システムに格納されているので、新たなフローを異なるノードに作成するときに、反対方向のフローが前に作成されていたかを決定することができる。
反対方向のフローが分散状態でない場合には、決定エンジンは新たな変換を作成して、この変換マップを、新たなフローに関連付けられている分散状態で格納する。インバウンドフローについては、または、第１の構築されているフローについては、アドレス変換を、ルーティングステップの前にデスティネーションアドレスに適用してよく、ルーティングステップは、変換されたＩＰアドレスに基づいてルーティングしてよい。アウトバウンドフローでは、または接続の第２のフローでは、ルーティング後にＮＡＴを実行して、ソースアドレスを外部のプライベートではないＩＰアドレスに変換してよい。逆方向のフローの最初のパケットが対応するエッジコネクタで受信されたときに変換情報がアクセス可能となるよう、変換情報は、フローの最初のパケットを転送する前に、フロールールに関連付けられた分散状態に格納されてよい。
【０１１２】
別の実施形態では、デスティネーションネットワークアドレス変換（ＤＮＡＴ）を利用して、公表されているＩＰアドレスをプライベートネットワークアドレスに変換して、プライベートネットワークでホストされているサービスを汎用インターネットに露呈させてよい。一部の実施形態では、非武装地帯（ＤＭＺ:demilitarized zone）を汎用インターネットとプライベートネットワークとの間に提供してよい。ＤＮＡＴプロセスでは、入ってくるフローについてのプレルーティングステージ中に、デスティネーションアドレスを変換してよく、且つ、対応する外に出ていくフローにおいて、ソースアドレスをポストルーティングステージ中に変換してよい。一実装例では、デスティネーションアドレスが、いくつかの可能性のあるサーバの１つであってよく、デスティネーションサーバは、ロード・バランシング・アルゴリズム（たとえばランダムアルゴリズムまたはラウンドロビンアルゴリズム）によって選択されてよい。
【０１１３】
ソースネットワークアドレス変換（ SNAT ）では、プライベートLAN上の複数のクライアントが同じパブリックIPアドレスを共有する場合がある。外部ネットワークへのテナントの仮想マシンからの接続などのアウトバウンド接続に関連付けられたソースアドレスは、アウトバウンドフローで同じIPアドレスに変換することができる。対応するインバウンドフローでは、パケットのデスティネーションIPアドレスは、例えば、ポート番号及びソースIPアドレスに基づいて、対応するプライベートIPアドレスに変換することができる。
【０１１４】
別の実施形態では、システムが、プライベートローカルエリアネットワークのためのＡＲＰのなりすまし（ARP spoofing）を提供するよう構成されていてよい。システムは、他の１つのホストが彼らのためのＡＲＰを行うときに当該ホストになりすますことで、ゲートウェイ／ブロードキャストアドレスを消費することなく、仮想マシンゲスト等の１つのネットワークホストに、仮想ルータポートに接続させることができる。従来のＥｔｈｅｒｎｅｔ（登録商標）ベースの設計では、これにより、少なくとも／３０アドレスレンジ（a /30 address range）を消費することになり、これには、ゲストのアドレス、ゲートウェイアドレス、及びブロードキャストアドレス、これに加えて１つの未使用のアドレスが含まれる。
【０１１５】
消費されるＩＰアドレスの数を低減させる１つの方法として、ルータの各ポートを、ＭＡＣアドレス、ネットワークプレフィックス（nw_prefix）、及び、ポートに接続されている１つのホストが存在しているかを示すフラグで構成してよい。使用されるゲートウェイアドレスは、nw_prefixレンジの最初のアドレスであってよい。単一のホストフラグが設定されていない場合には、ルータは、その標準的な動作ルールに従って、ポートへの、または、ポートからのトラフィックを処理することができる。単一のホストフラグが設定されている場合には、nw_prefixのアドレス部分が、そのポートの単一のネットワークホストのアドレスを特定している。ルータのダウンストリームポートは、これらが、設定されている単一のホストフラグをもつ設定されていない単一のホストフラグをもつ重ならないnw_prefixesを含むよう構成されていてよく、これは、これらのnw_prefixesが特定する同一のアドレスレンジを共有してよい。多くの実施形態では、単一のホスト及び単一ではないホストポートが使用するアドレスレンジが重ならない。
【０１１６】
IPパケットが、単一ホストフラグが設定されたポート間で送信される場合、ルータは生存時間（「TTL」）のチェックまたはデクリメント、L2スイッチのエミュレートを行うことなく、IPパケットを転送することができる。ＡＲＰ要求が、単一のホストフラグが別の単一のホストポートに関連付けられているアドレスについて設定されているポートから受信される場合には、ルータはＡＲＰに応答して、ターゲットになりすます。この結果、そのローカルセグメントだと考えるものの外部のホストにトラフィックを送信したいと望む単一のホストが、ゲートウェイアドレスについてＡＲＰを行い、ルータの通常の振る舞いが、そのポートのＭＡＣを返し、ホストが次にそのＩＰパケットを送信する。トラフィックを、そのローカルセグメントの一部と考えるホストに送信したと望む単一のホストは、そのホストに直接ＡＲＰする。ルータは、そのアドレスの単一のホストポートを有している場合、そのＡＲＰに応答し、この場合に、ホストは、そのＩＰパケットを送信する。単一のホストのフラグを立てられているポートの上にないホストの振る舞いは変更されなくてよい。
【０１１７】
システムの別の実施形態では、ステートフル接続トラッキングを利用して、接続の生存サイクルをトラッキングして、これら接続に関連付けられているデータが、一定のイベント（たとえば接続の終了）においてクリーンアップされるようにしてよい。クリーンアップされるべきデータには、接続がきちんと遮断されているときに、分散状態に格納されているデータ（たとえばステートフルＮＡＴ及びＬＢマッピング等）を含む様々な接続状態データを含んでよい。接続がきちんと遮断されていない場合には（たとえばいずれかの側でクラッシュが生じたり切断が生じたりしている場合）、大きな構成可能なタイムアウトの後に、接続状態を期限切れにしてよい。接続は、ＴＣＰ接続であってよく、順方向のフローと戻りフローという２つのフローからなる。ＴＣＰの場合には、システムは、接続状態を決定するべく、ＴＣＰ接続ステートマシンをシミュレーションする。
【０１１８】
また別の実施形態では、システムは、接続の順方向のフローとは異なるノードが処理する接続の戻りフローを提供する。このタイプの接続は、分割フロー（split flow）と称され、順方向のフロー及び逆方向のフローが異なる決定エンジンによって処理されることに特徴がある。一実施形態では、システムは、順方向のフロー及び逆方向のフローを見ている決定エンジンに、それぞれの側の閉鎖を通信させることによって、分割フローをサポートする。たとえば、順方向のフローのＦＩＮを処理する決定エンジンは、戻りフローを処理する決定エンジンに対して、ＦＩＮのＡＣＫに一致するアクションをインストールするよう通知し、この逆もまた然りである。決定エンジンは、接続の両側が閉ざされ、閉鎖された接続に関するデータをクリーニングすることができるときを特定することができるよう協力する。決定エンジン間のこの通信は、分散状態システムの共有状態によって生じてよい。加えて、分散状態システムは、接続の両側の閉鎖等の一定の条件を特定してよく、通信のフローそれぞれを処理する決定エンジンに通知を行ってよい。
【０１１９】
別の実施形態では、エッジノードまたはエッジコネクタがフローのセットアップを処理するとき、順方向であろうと逆方向であろうと（トラッキングすべき接続の一部である）（ＴＣＰ接続であるか、ステートフルトラッキングが必要であるか（たとえば接続がＮＡＴされているか）に基づいて）、エッジコネクタが、ＴＣＰ  ＦＩＮビットについてチェックを行うアクションを追加して、ＦＩＮパケットを出力する。ＦＩＮパケットを受信すると、逆方向のフローを処理する決定エンジンが、ＦＩＮのＡＣＫをチェックするアクションをインストールしてよい。ＦＩＮのＡＣＫがシステムから見える場合には、接続は半分開いているととらえられ、ＡＣＫ以外のデータは予期されない。データが半分開いた接続によって受信されると、システムは、システムが予期しない状況を経験したことを示すエラーを生成してよい。
【０１２０】
決定エンジンが新たなフローを受信するときには、ＴＣＰ  ＦＩＮ及びＲＳＴフラグについてチェックするルールをインストールする。システムがＲＳＴパケットを受信する場合には、ピアがＲＳＴパケットを受信すると接続が終了されるから、接続のフロールールを、短いタイムアウトを有するよう修正する。システムがＦＩＮパケットを受信する場合には、戻りフローのアクションリストに、ＦＩＮパケットのシーケンス番号である受領承認されたシーケンス番号と一致するアクションを挿入する。システムが、ＦＩＮを受領承認するパケットを取得する場合、これは閉じられた接続の側をマークしている。両側が閉じている場合には、接続のフロールールを、短いタイムアウトを有するように修正する。一部の例では、ＦＩＮのＡＣＫがドロップされてよく、この場合には、閉じる側が、ＦＩＮパケットを同じシーケンス番号で再送信する。フロールールが期限切れになる場合には、システムは、接続が閉じられ、ＮＡＴトラッキング等の追加の状態データをクリーンアップすることができる、と特定する。
【０１２１】
本開示におけるシステム及び方法の別の実施形態では、仮想スイッチが、追加の仮想転送エレメントとして提供される。システムは、各仮想Ｌ２スイッチの一部であるエッジコネクタのポート間にＬ２パケットを送信してよい。このようにして、システムは、物理スイッチに接続されているＮＩＣの間にパケットを送信する物理Ｌ２スイッチの動作をシミュレーションしてよい。システムはさらに、パケットＬ３パケットを、上述したように仮想ルータを使用して送信してよい。フローをセットアップするときには、受信ｖｐｏｒｔ  ＵＵＩＤを、入力ポートまたはＭＡＣアドレスのマッピングから特定する。このｖｐｏｒｔ  ＵＵＩＤに基づいて、ｖｐｏｒｔが属する仮想デバイスを決定する。仮想デバイスのタイプに基づいて（スイッチまたはルータ）、パケットはルーティング（上述したように）またはスイッチされる。
つまり、パケットがＬ３パケットである場合には、上述した仮想ルータプロセスに従って処理される。または、パケットがＬ２パケットであり、図５及び図６に示すように仮想スイッチによって処理される。図５及び図６に示すプロセスは、図１０に示すプロセスに実質的に類似している。ＶＦＥがステップ４１７で決定されると、エッジコネクタは、ＶＦＥが、仮想ルータまたは仮想スイッチであるかを決定する。ＶＦＥが仮想ルータである場合には、処理は、図１０に示すように続けられる。ＶＦＥが仮想スイッチである場合には、処理はポイントＡで続けられ（５２０）、図１２に示すポイントＡ（５２０）に接続される。図１２に示すように、ＶＦＥが仮想スイッチである場合には、エッジコネクタは、デスティネーションＭＡＣアドレスが、ブロードキャストアドレスまたはユニキャストＭＡＣアドレスであるかを決定する（ステップ６１０）。ＭＡＣアドレスがブロードキャストアドレスである場合には、パケットは、仮想スイッチに接続されている各ポートに送信される（ステップ６２０）。パケットごとに考えると、ステップは、ステップ４２６から始まる図１０のプロセスに等しくてよい。ＶＦＥのメンバーである各外向きポートについて、パケットは、ローカルｖｐｏｒｔまたはその外向きポートに対応しているトンネルポートに送信される。
【０１２２】
パケットがブロードキャストパケットではない場合には（たとえばユニキャストパケット）、たとえばｖｐｏｒｔ  ｔａｂｌｅへのＭＡＣからデスティネーションＭＡＣをルックアップすることで、デスティネーションＭＡＣを決定する（ステップ６３０）。対応するエントリが存在しない場合には（ステップ６４０でテストされる）、ドロップアクションをアクションリストに追加する（ステップ６５０）。そして処理は図１１のポイントＢに進み、ここではルールがフローテーブル（４３０）に追加され、アクションがパケット（４１８）に適用される。
【０１２３】
ＭＡＣに、ステップ６４０のｖｐｏｒｔ  ｔａｂｌｅへの対応するｖｐｏｒｔがある場合には、処理が図１１のポイントＣに続き、処理は、前に説明したようにステップ４２６に進む。
【０１２４】
図７及び図８を参照すると、本開示のシステム及び方法の別の実施形態が示されている。図１３に示すように、仮想ネットワークトポロジーは、外部ネットワーク（たとえば汎用インターネット９０２）への複数の接続９０１を有するプロバイダ仮想ルータ９００を含む。この構成においては、仮想ネットワークには、外部ネットワークへの複数の接続経路が提供されており、これによりシステムに柔軟性及び冗長性が提供されている。プロバイダ仮想ルータ９００は、複数のエッジノードに対応している複数の外向きポートを有してよく、ここでは、エッジノードが、外部ネットワークにアクセスを提供する物理コンポーネントである。
一実施形態では、エッジノードは、ルータまたはサーバに面しているインターネットであってよい。仮想ネットワークトポロジーも、複数のテナント仮想ルータを含んでよい。一構成では、各テナント仮想ルータが、テナント仮想データセンタに関連付けられていてよい。図１３に示すように、第１のテナント仮想データセンタ９０３が複数の第１のテナント仮想マシン９０５と通信する第１のテナント仮想ルータ９０４を含んでよい。第１のテナント仮想マシン９０５は、さらに、テナント仮想スイッチ９０６と通信してよく、これは、図示されている仮想Ｅｔｈｅｒｎｅｔ（登録商標）スイッチであってよい。第１のテナント仮想マシン９０５は、ネットワークの、１つ、または、１つを超える数のサーバまたはホストノードに存在していてよい。
【０１２５】
さらに図１３に示すように、仮想ネットワークトポロジーが、第２のテナント仮想データセンタ９０７を有してよく、これは、プロバイダ仮想ルータ９００と通信する第２のテナント仮想ルータ９１０及び複数の第２のテナント仮想マシン９０９を含んでいる。複数の第２のテナント仮想マシン９０９は、さらに、第２のテナント仮想スイッチ９０８と通信してもよく、これは、図示した仮想Ｅｔｈｅｒｎｅｔ（登録商標）スイッチであってよい。
【０１２６】
仮想ルータはさらに、各テナントが望むロード・バランシング、ＤＨＣＰ、及び／または、ネットワークアドレス変換等の追加機能を実行してよい。１つの仮想ルータだけが各テナントについて図示されているが、他の実施形態では、テナントは複数の仮想ルータを利用して、テナント固有の仮想ネットワークトポロジーを作成してもよい。テナント固有の仮想ネットワークトポロジーは、所望の構成のテナント仮想マシンの組織を提供し、または、同じテナントが制御する仮想マシン間に隔離を提供してもよく、たとえばテナントが、複数の離散した機能またはビジネスプロセスをホストするためにネットワークを利用することができる。
【０１２７】
別の実施形態では、テナントの仮想ルータは遠隔のテナントオフィスやその他の場所への安全なアクセスを提供することができる。図示する第２のテナント仮想ルータ９１０は、第２のテナントオフィス９１３の第２のテナントＶＰＮルータ９１１と第２のテナントオフィスのネットワーク９１２とに接続を提供する。このようにして、各テナントは、自身の仮想データセンタの構成を定義することができる。サービスプロバイダは、従って、本開示のシステム及び方法を利用して、物理ネットワーク上の多数のテナントのカスタマイズ可能なソリューションを提供することができる。
【０１２８】
図１４を参照すると、図１３に示す仮想ネットワークトポロジーが、物理ネットワークに重ねられて示されている。物理ネットワークは、インターネット９０２等の外部ネットワークにアクセスするよう構成されている複数のエッジノード９２０を含んでよい。物理ネットワークはさらに、仮想マシンをホストするよう構成されている複数のホストノード９２１を含んでよい。ネットワーク９２２は、複数のエッジノード９２０と複数のホストノード９２１とを相互接続してよく、データパケットをシステム全体にトランスポートするよう適合されていてよい。一実施形態では、ネットワークはプライベートＩＰネットワークであってよい。エッジノード９２０及びホストノード９２１は対称なアーキテクチャを有していてよい。一実施形態では、エッジノード９２０及びホストノード９２１は、クラウドコンピューティングシステムで動作するよう構成されている汎用サーバである。
別の実施形態では、エッジノード９２０が、専用のインターネットに面するルータである。また別の実施形態では、サーバその他のコンピューティングデバイスは、両方とも、同じネットワークのエッジノード及びホストノードとして機能してよい。システムはさらに、ネットワークを介して、エッジノードのそれぞれ及びホストノードのそれぞれと通信する分散状態システムを含む。分散状態システムは、仮想ネットワークトポロジーに関連付けられたデータを格納してよく、共有データベースに格納されてよい。システムは、ノードそれぞれで動作するソフトウェアコンポーネントを含んでよく、プロバイダの仮想ルータ及びテナント仮想ルータのそれぞれを含む仮想ネットワークトポロジーを実装することができる。新たなルートを構成するとき、ノードそれぞれで動作するソフトウェアコンポーネントは、分散状態システムと通信して、分散状態が、システムの仮想ネットワークトポロジー及びフロールールの包括的なマッピングを維持するようにする。他の例では、分散状態システムが分割され、複数の分散状態を、仮想ネットワークの選択された部分について維持するようにする。
【０１２９】
図１４に示すように、仮想ネットワークトポロジーが物理ネットワークに重ねられる。プロバイダ仮想ルータは、エッジノード９２０それぞれと関連付けられている外向きポートを有してよい。プロバイダの仮想ルータ９００の外向きポートは、インターネットサービスプロバイダに対して１以上のアクセスポイントにマッピングを行って、システムと外部ネットワーク（たとえばインターネット）との間の複数の接続を提供してよい。プロバイダ仮想ルータ９００は、さらに、テナントの仮想ルータの対応するピアの内向きポートへの仮想リンクを定義する内部ポートを有してよい。図示されているように、システムの各仮想リンクのスループットを選択してよい。たとえばサービスプロバイダは、第１のテナント仮想ルータ９０４には５０Ｍｂｐｓの仮想リンクを提供し、第２のテナント仮想ルータ９１０には１０Ｍｂｐｓの仮想リンクを提供してよい。仮想リンクは構成可能なので、第２のテナントが、自身の仮想データセンタについてより大きなスループットを購入することを希望する場合、サービスプロバイダは、ハードウェアを修正することなく、利用可能なスループットを修正することができる。
【０１３０】
図示の実施形態では、各ホストノード９２０は、第１のテナントに関連する１つの仮想マシンおよび第２のテナントに関連する１つの仮想マシンをホストしている。仮想ネットワークトポロジーを使用して、サービスプロバイダは、物理的なネットワークハードウェアの再構成なしで利用可能なホストノード間のテナントの仮想マシンを再割り当てすることができる。分散状態のシステムに格納されている仮想ネットワークトポロジーは、システムを動的に再構成することができる。
【０１３１】
別の実施形態では、複数のテナント仮想ルータのそれぞれが、少なくとも１つのパブリックＩＰアドエスを露呈するよう構成されていてよく、複数のエッジノードの１以上により外部ネットワークにアクセスするよう構成されていてよい。各テナント仮想データセンタに、複数のエッジノードにより外部ネットワークにアクセスさせるようにすることで、１つのエッジノードの失敗によって、ネットワークで動作しているテナントのサービスの利用可能性が妨げられる可能性が低くなる。
【０１３２】
ここで利用される「キャッシュ」その他の変形は、データがキャッシュとして明示的に指定されるメモリに格納されるかに関わらず、一時的なデータストレージの全ての形態のことを示す。
【０１３３】
ある実施形態について記載したが、精神及び範囲を逸脱することなく、様々な変更を行い、均等物で置き換えることができる。加えて、多くの修正を行って、精神及び範囲を逸脱せずに特定の状況または材料を本開示の教示に適合させることができる。
【図１】
2014529926.tif 000003
【図２】
2014529926.tif 000004
【図３】
2014529926.tif 000005
【図４】
2014529926.tif 000006
【図５】
2014529926.tif 000007
【図６】
2014529926.tif 000008
【図７】
2014529926.tif 000009
【図８】
2014529926.tif 000010
【図９】
2014529926.tif 000011
【図１０】
2014529926.tif 000012
【図１１】
2014529926.tif 000013
【図１２】
2014529926.tif 000014
【図１３】
2014529926.tif 000015
【図１４】
2014529926.tif 000016
【手続補正書】
【提出日】平成26年4月1日(2014.4.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピューティングシステムであって、
基礎となるネットワークで相互接続する複数のノードであって、各ノードが１以上のネットワークインタフェースを含む、前記複数のノードと、
前記複数のノードで動作する複数の仮想デバイスであって、各仮想デバイスは、複数の仮想ポートを有し、各仮想ポートは、前記基礎となるネットワークの前記複数のノードの前記１以上のネットワークインタフェースの１つに関連付けられた外向きポート、または、仮想ネットワークデバイス間の仮想リンクに関連付けられた内向きポートのうちの１つに対応している、前記複数の仮想デバイスと、
前記複数の仮想ポート及び前記複数の仮想デバイスの構成を含む仮想ネットワークトポロジーを格納する共有データベースと、
最初の仮想デバイスから最後の仮想デバイスへの、前記仮想ネットワークトポロジーのネットワークパケットの横断をシミュレーションして、前記最後の仮想デバイスから発行される前記パケットに一致するように前記ネットワークパケットに適用されるプロトコルヘッダ修正を決定して、決定された前記プロトコルヘッダ修正を、前記プロトコルヘッダ修正に関連付けられているパケットプロトコルヘッダ・パターンに一致する後続するパケットに適用する決定エンジンと
を備えるコンピューティングシステム。
【請求項２】
前記決定エンジンはさらに、ＭＡＣ学習ブリッジをシミュレーションして、前記共有データベースの各ＭＡＣ学習ブリッジのＭＡＣ学習テーブルを更新する、請求項１に記載のコンピューティングシステム。
【請求項３】
前記決定エンジンはさらに、ＩＰパケットを特定して、カプセル化するＥｔｈｅｒｎｅｔ（登録商標）フレームのソースＩＰアドレスおよびソースＭＡＣアドレスを抽出して、仮想ブリッジのＡＲＰキャッシュを更新して、特定された前記ＩＰアドレスと前記ＭＡＣアドレスとを関連付ける、請求項１または２に記載のコンピューティングシステム。
【請求項４】
前記決定エンジンはさらに、少なくとも１つの仮想デバイスの入力フィルタ及び出力フィルタの少なくとも１つをシミュレーションして、各フィルタは、特定の条件に一致するパケットに適用するフィルタリングルールを含む、請求項１から３の何れか１項に記載のコンピューティングシステム。
【請求項５】
前記決定エンジンはさらに、前記複数の仮想デバイスの少なくとも１つのネットワークアドレス変換をシミュレーションして、前記共有データベースの順方向のフロー及び逆方向のフローの両方のネットワークアドレス変換を格納する、請求項１から４の何れか１項に記載のコンピューティングシステム。
【請求項６】
前記決定エンジンはさらに、ＤＨＣＰリソースからＩＰアドレスを動的に割り当て、割り当てた前記ＩＰアドレスを前記共有データベースに格納する、請求項１から５の何れか１項に記載のコンピューティングシステム。
【請求項７】
基礎となるネットワークの第１のノードの第１のネットワークインタフェースに到着するネットワークパケットを受信する段階であって、前記基礎となるネットワークが、複数の相互接続されたノードを含む、段階と、
少なくとも前記パケットと前記第１のネットワークインタフェースの識別子とを決定エンジンに送信する段階と、
複数の仮想ネットワークデバイスを含む仮想ネットワークトポロジーの横断の、前記決定エンジンによるシミュレーションに基づいて前記パケットを処理するやりかたを決定する段階であって、前記決定エンジンは、前記複数の仮想ネットワークデバイスのための仮想デバイス構成と前記仮想ネットワークトポロジーとを格納する、前記基礎となるネットワークからアクセス可能な共有データベースと通信する、段階と、
前記シミュレーションに基づいて前記パケットを処理する段階と
を備える、コンピューティング方法。
【請求項８】
前記基礎となるネットワークの各ノードが、前記決定エンジンを実行して、前記シミュレーションを実行して、前記ノードに到着するパケットを処理するやりかたを決定する段階を備える、請求項７に記載のコンピューティング方法。
【請求項９】
前記パケットを処理するやりかたを決定する段階は、
前記パケットに対する前記決定エンジンによる前記シミュレーションの結果に関連付けられているパケットプロトコルヘッダ・パターンを決定する段階を含み、
前記方法はさらに、
前記パケットプロトコルヘッダ・パターンと前記パケットの前記シミュレーションの前記結果とを格納する段階と、
前記基礎となるネットワークの前記第１のノードで第２のパケットを受信する段階と、
前記第２のパケットを前記パケットプロトコルヘッダ・パターンと比較する段階と、
前記第２のパケットが前記パケットプロトコルヘッダ・パターンに一致している場合、前記パケットの前記シミュレーションについて格納されている前記結果を取得することで前記第２のパケットを処理するやりかたを決定する段階と、
前記パケットについての、前記決定エンジンによる前記シミュレーションについての取得された前記結果に基づいて前記第２のパケットを処理する段階と
を備える、請求項７または８に記載のコンピューティング方法。
【請求項１０】
前記パケットは、複数のフィールドを含むプロトコルヘッダを含み、
前記パケットプロトコルヘッダ・パターンを決定する段階は、
前記決定エンジンによる、前記複数の仮想ネットワークデバイスを含む前記仮想ネットワークトポロジーの前記横断の前記シミュレーション中に読み出された前記プロトコルヘッダの前記複数のフィールドのそれぞれを特定する段階を含む、請求項９に記載のコンピューティング方法。
【請求項１１】
前記パケットプロトコルヘッダは、前記決定エンジンによる前記シミュレーション中に読み出されなかった前記プロトコルヘッダのフィールドについてのワイルドカードを含む、請求項１０に記載のコンピューティング方法。
【請求項１２】
前記パケットはプロトコルヘッダを含み、
前記シミュレーションはさらに、前記パケットが仮想ネットワークデバイスから発行されるときの前記パケットのプロトコルヘッダに対する修正を決定することを含み、
前記パケットの処理は、決定された前記修正を前記パケットのプロトコルヘッダに適用することを含む、請求項７から１１の何れか１項に記載のコンピューティング方法。
【請求項１３】
さらに、前記パケットを処理するやりかたを決定する段階は、
前記パケットが、前記基礎となるネットワークの前記第１のノードの第２のネットワークインタフェースから発行されるべきであると決定する段階を含み、
前記パケットの処理は、前記パケットを前記第２のネットワークインタフェースから発行する段階を含む、請求項７から１２の何れか１項に記載のコンピューティング方法。
【請求項１４】
さらに、前記パケットを処理するやりかたを決定する段階は、
前記パケットが、前記基礎となるネットワークの第２のノードの第２のネットワークインタフェースから発行されるべきであると決定することを含み、
前記パケットの処理は、前記パケットを前記基礎となるネットワークの前記第２のノードに配信して、前記パケットを前記第２のネットワークインタフェースから発行することを含む、請求項７から１３の何れか１項に記載のコンピューティング方法。
【請求項１５】
さらに、前記パケットを処理するやりかたを決定する段階は、
前記基礎となるネットワークの前記第２のノードに配信する前に、前記パケットのプロトコルヘッダを修正するやりかたを決定する段階を含む、請求項１４に記載のコンピューティング方法。
【請求項１６】
前記パケットの処理は、前記パケットを前記第１のノードから前記第２のノードに、トンネルキーを含むトンネリングプロトコルパケットのペイロードとして転送することを含み、
前記トンネルキーは、前記第２のネットワークインタフェースのグローバル識別子をエンコードする、請求項１４または１５に記載のコンピューティング方法。
【請求項１７】
さらに、前記基礎となるネットワークの前記第２のノードで前記決定エンジンを呼び出すことなく、前記第２のネットワークインタフェースから前記パケットを発行する段階を備える、請求項１６に記載のコンピューティング方法。
【請求項１８】
前記パケットがインタフェースセット識別子に対応しているネットワークインタフェースセットから発行されるべきであると決定する段階をさらに備え、
前記ネットワークインタフェースセットの少なくとも一部は、前記基礎となるネットワークの第２のノードに位置しており、
前記パケットの処理は、
前記第１のノードにローカルな前記ネットワークインタフェースセットの各ネットワークインタフェースに前記パケットを配信することと、前記パケットを、前記第１のノードから前記第２のノードに、トンネリングプロトコルパケットのペイロードとして、前記インタフェースセット識別子をエンコードするトンネルキーを利用して転送することとを含む、請求項７から１７の何れか１項に記載のコンピューティング方法。
【請求項１９】
前記基礎となるネットワークはマルチキャストをサポートしており、
前記方法はさらに、
各インタフェースセット識別子をマルチキャストアドレスにマッピングする段階と、
前記基礎となるネットワークの各ノードについて、前記ノードの少なくとも１つのネットワークインタフェースが属す前記インタフェースセット識別子のそれぞれについてのマルチキャスト・サブスクリプションを維持する段階と、
前記パケットを前記トンネリングプロトコルパケットの前記ペイロードとして少なくとも前記第２のノードにマルチキャストする段階と、
各ノードについて、当該ノードにローカルなインタフェースセットに対応している任意のネットワークインタフェースから前記パケットを発行する段階と
を備える、請求項１６に記載のコンピューティング方法。
【請求項２０】
前記基礎となるネットワークは、マルチキャストをサポートしておらず、
前記方法はさらに、
前記ネットワークインタフェースセットに属すローカルネットワークインタフェースを有する基礎となるネットワークノードのセットを決定する段階と、
前記第１のノードから前記基礎となるネットワークノードのセットの各ノードに前記パケットを転送する段階と、
各ノードについて、当該ノードにローカルなインタフェースセットに対応している任意のネットワークインタフェースから前記パケットを発行する段階と
を備える、請求項１８に記載のコンピューティング方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１３３
【補正方法】変更
【補正の内容】
【０１３３】
ある実施形態について記載したが、精神及び範囲を逸脱することなく、様々な変更を行い、均等物で置き換えることができる。加えて、多くの修正を行って、精神及び範囲を逸脱せずに特定の状況または材料を本開示の教示に適合させることができる。
本発明の例を下記の各項目として示す。
[項目１]
基礎となるネットワークの第１のノードの第１のネットワークインタフェースに到着するネットワークパケットを受信する段階と、
少なくとも前記パケットと前記第１のネットワークインタフェースの識別子とを決定エンジンに送信する段階と、
複数の仮想ネットワークデバイスを含む仮想ネットワークトポロジーの横断の、前記決定エンジンによるシミュレーションに基づいて前記パケットを処理すべきやりかたを決定する段階であって、前記決定エンジンは、前記複数の仮想ネットワークデバイスのための仮想デバイス構成と前記仮想ネットワークトポロジーとを格納する、前記基礎となるネットワークからアクセス可能な共有データベースと通信する、段階と、
前記シミュレーションに基づいて前記パケットを処理する段階と
を備える、コンピューティング方法。
[項目２]
各ノードが、前記決定エンジンを実行して、前記シミュレーションを実行して、前記ノードに到着するパケットを処理すべきやりかたを決定する段階を備える、項目１に記載の方法。
[項目３]
前記パケットを処理すべきやりかたを決定する段階は、
前記パケットに対する前記決定エンジンによる前記シミュレーションの結果に関連付けられているパケットプロトコルヘッダ・パターンを決定する段階を含み、
前記方法はさらに、
前記パケットプロトコルヘッダ・パターンと前記パケットの前記シミュレーションの前記結果とを格納する段階と、
前記第１のノードで第２のパケットを受信する段階と、
前記第２のパケットを前記パケットプロトコルヘッダ・パターンと比較する段階と、
前記第２のパケットが前記パケットプロトコルヘッダ・パターンに一致している場合、前記パケットの前記シミュレーションについて格納されている前記結果を取得することで前記第２のパケットを処理すべきやりかたを決定する段階と、
前記パケットについての、前記決定エンジンによる前記シミュレーションについての取得された前記結果に基づいて前記第２のパケットを処理する段階と
を備える、項目１に記載のコンピューティング方法。
[項目４]
前記パケットは、複数のフィールドを含むプロトコルヘッダを含み、
前記パケットプロトコルヘッダ・パターンを決定する段階は、
前記決定エンジンによる、前記複数の仮想ネットワークデバイスを含む前記仮想ネットワークトポロジーの前記横断の前記シミュレーション中に読み出された前記プロトコルヘッダの前記複数のフィールドのそれぞれを特定する段階を含む、項目３に記載の方法。
[項目５]
前記パケットプロトコルヘッダは、前記決定エンジンによる前記シミュレーション中に読み出されなかった前記プロトコルヘッダのフィールドについてのワイルドカードを含む、項目４に記載の方法。
[項目６]
前記パケットはプロトコルヘッダを含み、
前記シミュレーションはさらに、前記パケットが仮想ネットワークデバイスから発行されるときの前記パケットのプロトコルヘッダに対する修正を決定することを含み、
前記パケットの処理は、決定された前記修正を前記パケットのプロトコルヘッダに適用することを含む、項目１に記載の方法。
[項目７]
さらに、前記パケットを処理すべきやりかたを決定する段階は、
前記パケットが、前記第１のネットワークノードの第２のネットワークインタフェースから発行されるべきであると決定する段階を含み、
前記パケットの処理は、前記パケットを前記第２のインタフェースから発行する段階を含む、項目１に記載のコンピューティング方法。
[項目８]
さらに、前記パケットを処理すべきやりかたを決定する段階は、
前記パケットが、前記基礎となるネットワークの第２のノードの第２のネットワークインタフェースから発行されるべきであると決定することを含み、
前記パケットの処理は、前記パケットを前記基礎となるネットワークの前記第２のノードに配信して、前記パケットを前記第２のインタフェースから発行することを含む、項目１に記載のコンピューティング方法。
[項目９]
さらに、前記パケットを処理すべきやりかたを決定する段階は、
前記基礎となるネットワークの前記第２のノードに配信する前に、前記パケットのプロトコルヘッダを修正すべきやりかたを決定する段階を含む、項目８に記載のコンピューティング方法。
[項目１０]
前記パケットの処理は、前記パケットを前記第１のノードから前記第２のノードに、トンネルキーを含むトンネリングプロトコルパケットのペイロードとして転送することを含み、
前記トンネルキーは、前記第２のネットワークインタフェースのグローバル識別子をエンコードする、項目８に記載のコンピューティング方法。
[項目１１]
さらに、前記第２のノードで前記決定エンジンを呼び出すことなく、前記第２のネットワークインタフェースから前記パケットを発行する段階を備える、項目１０に記載の方法。
[項目１２]
前記パケットがインタフェースセット識別子に対応しているネットワークインタフェースセットから発行されるべきであると決定する段階をさらに備え、
前記ネットワークインタフェースセットの少なくとも一部は、第２のノードに位置しており、
前記パケットの処理は、
前記第１のノードにローカルな前記ネットワークインタフェースセットの各ネットワークインタフェースに前記パケットを配信することと、前記パケットを、前記第１のノードから前記第２のノードに、トンネリングプロトコルパケットの前記ペイロードとして、前記インタフェースセット識別子をエンコードするトンネルキーを利用して転送することとを含む、項目１に記載のコンピューティング方法。
[項目１３]
前記基礎となるネットワークはマルチキャストをサポートしており、
前記方法はさらに、
各インタフェースセット識別子をマルチキャストアドレスにマッピングする段階と、
前記基礎となるネットワークの各ノードについて、前記ノードの少なくとも１つのネットワークインタフェースが属す前記インタフェースセット識別子のそれぞれについてのマルチキャスト・サブスクリプションを維持する段階と、
前記パケットを前記トンネリングプロトコルパケットの前記ペイロードとして少なくとも前記第２のノードにマルチキャストする段階と、
各ノードについて、当該ノードにローカルなインタフェースセットに対応している任意のネットワークインタフェースから前記パケットを発行する段階と
を備える、項目１０に記載のコンピューティング方法。
[項目１４]
前記基礎となるネットワークは、マルチキャストをサポートしておらず、
前記方法はさらに、
前記ネットワークインタフェースセットに属すローカルネットワークインタフェースを有する基礎となるネットワークノードのセットを決定する段階と、
前記第１のノードから前記基礎となるネットワークノードのセットの各ノードに前記パケットを転送する段階と、
各ノードについて、当該ノードにローカルなインタフェースセットに対応している任意のネットワークインタフェースから前記パケットを発行する段階と
を備える、項目１０に記載のコンピューティング方法。
[項目１５]
複数のノードを有する基礎となるネットワークからアクセス可能な共有データベースを維持する段階であって、前記共有データベースは、複数の仮想ネットワークデバイスの仮想デバイス構成及び仮想ネットワークトポロジーを格納している、段階と、
前記基礎となるネットワークの第１のノードの第１のネットワークインタフェースに到着するネットワークパケットを受信する段階と、
前記複数の仮想ネットワークデバイスを含む前記仮想ネットワークトポロジーの前記パケットの横断のシミュレーションに基づいて前記ネットワークパケットを処理するアクションを決定する段階と
を備えるコンピューティング方法。
[項目１６]
前記複数の仮想ネットワークデバイスを含む前記仮想ネットワークトポロジーの前記パケットの横断の前記シミュレーションを実行するための決定エンジンを提供する段階をさらに備え、
前記決定エンジンは、各それぞれのノードで受信したパケットの前記シミュレーションを実行するべく、前記複数のノードのそれぞれに動作可能である、項目１５に記載の方法。
[項目１７]
前記仮想ネットワークトポロジーは、前記複数の仮想ネットワークデバイスに対応している複数の仮想ポートを含み、
各仮想ポートは、前記基礎となるネットワークのノードのネットワークインタフェースに関連付けられた外向きポート、または、仮想ネットワークデバイス間の仮想リンクに関連付けられた内向きポートのうちの１つに対応している、項目１５に記載の方法。
[項目１８]
仮想ネットワークトポロジーおよび仮想デバイス構成を格納する前記共有データベースは、
前記仮想ポートの外向きポートまたは内向きポートのいずれかとしての識別情報を含む、前記複数の仮想ポートのそれぞれのための構成と、
前記複数の仮想ポートに関連付けられている前記複数のネットワークデバイスのそれぞれのための構成と、
前記基礎となるネットワークノードの識別子に対するネットワークインタフェースの識別子のマッピングと、
ネットワークノードの基礎となる対応するネットワークインタフェースに対する外向きポートのマッピングと、
各デバイスの内向きポートそれぞれの、仮想リンクにより接続される別のデバイスのピア内向きポートに対するマッピングと
を含む、項目１７に記載の方法。
[項目１９]
前記仮想ネットワークトポロジー及び仮想デバイス構成の少なくとも一部を、前記基礎となるネットワークの前記ノードにキャッシュする段階と、
前記共有データベースが修正されたときに、キャッシュされている前記仮想ネットワークトポロジー及び前記仮想デバイス構成を更新する段階と
をさらに備える、項目１５に記載の方法。
[項目２０]
仮想デバイスへのパケットの到着のシミュレーション時に、前記シミュレーションを実行している前記ノードの前記仮想デバイスの構成をロードする段階をさらに備える、項目１５に記載の方法。
[項目２１]
前記第１のネットワークインタフェースを、対応する仮想ポートにマッピングして、前記ポート及び前記ポートに関連付けられている前記ネットワークデバイスの構成を取得する段階と、
前記ポートに関連付けられている前記ネットワークデバイスのシミュレーションに基づいて前記ネットワークパケットを処理する前記アクションを決定する段階と
をさらに備える、項目１５に記載の方法。
[項目２２]
前記アクションは、
前記ネットワークデバイスの内部状態を修正すること、
前記パケットをドロップすること、
前記パケットのプロトコルヘッダを修正すること、
前記パケットを、前記ネットワークデバイスの１以上の仮想ポートから発行すること、
別のパケットを、前記ネットワークデバイスの１以上の仮想ポートから発行すること
のうち１以上を含む、項目２１に記載の方法。
[項目２３]
前記アクションは、前記ネットワークデバイスの第２の仮想ポートから前記パケットを発行することであり、
前記第２の仮想ポートは内向きポートであり、
前記方法はさらに、
前記第２の仮想ポートのピア内向きポートを決定して、前記ピア内向きポート及び前記ピア内向きポートに関連付けられているネットワークデバイスの構成を取得する段階と、
前記ピア内向きポートに関連付けられている前記ネットワークデバイスのシミュレーションに基づいて前記ネットワークパケットを処理する前記アクションを決定する段階と
を備える、項目２１に記載の方法。
[項目２４]
前記アクションは、１以上の外向き仮想ポートから前記パケットを発行することであり、
前記方法はさらに、
各外向き仮想ポートを、対応するネットワークインタフェース、及び、前記基礎となるネットワークのノードにマッピングする段階と、
前記パケットを、前記対応するネットワークインタフェースのそれぞれから発行する段階と
を備える、項目２１に記載の方法。
[項目２５]
前記パケットは、複数のフィールドを含むプロトコルヘッダを含み、
前記方法はさらに、
前記仮想ネットワークトポロジー及び前記複数の仮想ネットワークデバイスの前記シミュレーション中に読み出された前記プロトコルヘッダの前記フィールドのそれぞれを特定することにより、パケットプロトコルヘッダ・パターンを決定する段階と、
前記パケットのシミュレーション結果に関連付けられている前記パケットプロトコルヘッダ・パターンを格納する段階と
を備える、項目１５に記載の方法。
[項目２６]
後続するパケットを、格納されている前記パケットプロトコルヘッダ・パターンに一致させる段階と、
格納されている前記シミュレーション結果を取得することにより、前記後続するパケットを処理するアクションを決定する段階と
をさらに備える、項目２５に記載の方法。
[項目２７]
前記仮想ネットワークトポロジーまたは仮想デバイス構成が変更されると、格納されている前記パケットプロトコルヘッダ・パターン及び対応し格納されている前記シミュレーション結果を無効化する段階をさらに備える、項目２５に記載の方法。
[項目２８]
前記シミュレーション中に横断された、横断された仮想デバイスのセットを決定して、前記横断された仮想デバイスのセットを、前記シミュレーションのために、格納されている前記パケットプロトコルヘッダ・パターン、及び、対応し格納されている前記シミュレーション結果の１つと関連付ける段階と、
前記横断されたセットの前記仮想デバイスの１つの前記構成の変更を検知する段階と、
前記変更が検知された前記仮想デバイスを含む各横断されたセットに関連付けられている、対応し格納されている前記シミュレーション結果、及び、格納されている前記パケットプロトコルヘッダ・パターンを無効化する段階と
をさらに備える、項目２７に記載の方法。
[項目２９]
前記シミュレーションはさらに、
前記基礎となるネットワークの１以上のノードのネットワークインタフェースにマッピングされている１以上の外向きポート、及び、それぞれが仮想ルータの内向きポートに接続されている１以上の内向きポートを有するＭＡＣ学習ブリッジをシミュレーションする段階を備える、項目１７に記載の方法。
[項目３０]
前記共有データベースに各ＭＡＣ学習ブリッジのためのＭＡＣ学習テーブルを維持する段階をさらに備える、項目２９に記載の方法。
[項目３１]
特定のＭＡＣ学習ブリッジのための前記ＭＡＣ学習テーブルのキャッシュされたコピーを、ネットワークインタフェースが前記特定のＭＡＣ学習ブリッジにマッピングされている前記基礎となるネットワークの各ノードの上に維持する段階をさらに備える、項目３０に記載の方法。
[項目３２]
特定のＭＡＣ学習ブリッジのための前記ＭＡＣ学習テーブルのキャッシュされたコピーを、前記ＭＡＣ学習ブリッジをシミュレーションする各仮想デバイスの上に維持する段階をさらに備える、項目３０に記載の方法。
[項目３３]
前記ＭＡＣ学習テーブルを、既知のＭＡＣポートエントリで予めポピュレートする段階をさらに備える、項目３０に記載の方法。
[項目３４]
前記ＭＡＣ学習ブリッジをシミュレーションする段階はさらに、
前記仮想ブリッジの到着仮想ポートでユニキャストソースＭＡＣアドレスを有するＥｔｈｅｒｎｅｔ（登録商標）フレームを受信する段階と、
前記仮想ブリッジの前記到着仮想ポートに前記ＭＡＣアドレスを関連付けるべく、前記ＭＡＣ学習テーブルを更新する段階と
を含む、項目２９に記載の方法。
[項目３５]
前記ＭＡＣ学習ブリッジをシミュレーションする段階はさらに、
前記仮想ブリッジの到着仮想ポートでユニキャストデスティネーションＭＡＣアドレスを有するＥｔｈｅｒｎｅｔ（登録商標）フレームを受信する段階と、
前記ＭＡＣアドレスが前記ＭＡＣ学習テーブルにある場合、前記ＭＡＣ学習テーブルで前記ＭＡＣアドレスに関連付けられている前記仮想ブリッジの前記仮想ポートから前記フレームを発行する段階と、
前記ＭＡＣアドレスが前記ＭＡＣ学習テーブルにない場合、前記到着仮想ポートを除く前記仮想ブリッジの全ての仮想ポートから前記フレームを発行する段階と
を含む、項目２９に記載の方法。
[項目３６]
前記ＭＡＣ学習ブリッジをシミュレーションする段階はさらに、
前記仮想ブリッジの到着仮想ポートでマルチキャストまたはブロードキャストデスティネーションＭＡＣアドレスを有するＥｔｈｅｒｎｅｔ（登録商標）フレームを受信する段階と、
前記到着仮想ポートを除く前記仮想ブリッジの全ての仮想ポートから前記フレームを発行する段階と
を含む、項目２９に記載の方法。
[項目３７]
ＡＲＰキャッシュを、前記共有データベースに、前記仮想ブリッジの構成の一部として維持する段階をさらに備える、項目２９に記載の方法。
[項目３８]
ＩＰパケットを特定して、カプセル化するＥｔｈｅｒｎｅｔ（登録商標）フレームのソースＩＰアドレス及びソースＭＡＣアドレスを抽出して、前記仮想ブリッジの前記ＡＲＰキャッシュを更新して、特定された前記ＩＰアドレスと前記ＭＡＣアドレスとを関連付ける段階をさらに備える、項目３７に記載の方法。
[項目３９]
前記シミュレーションはさらに、
前記基礎となるネットワークの１以上のノードのネットワークインタフェースにマッピングされた外向きポートと、仮想ルータまたは仮想ブリッジの内向きポートに接続された１以上の内向きポートとを有するルータをシミュレーションすることを含む、項目１７に記載の方法。
[項目４０]
前記ルータは、ＩＰｖ４ルータである、項目３９に記載の方法。
[項目４１]
ＡＲＰキャッシュと転送テーブルとを、前記共有データベースに、前記ルータの構成の一部として維持する段階をさらに備える、項目３９に記載の方法。
[項目４２]
ネットワークインタフェースが前記ルータの前記外向きポートの１つにマッピングされている前記基礎となるネットワークの各ノードに前記ＡＲＰキャッシュのキャッシュされたコピーを維持する段階をさらに備える、項目４１に記載の方法。
[項目４３]
前記ルータをシミュレーションする前に、既知のエントリで前記ＡＲＰキャッシュを予めポピュレートする段階をさらに備える、項目４１に記載の方法。
[項目４４]
パケットのソース及びデスティネーションネットワーク（Ｌ３）アドレスが分かっている場合に、最もよく一致するルートを決定するべく、前記ルータの転送テーブルを照会する段階をさらに備える、項目４１に記載の方法。
[項目４５]
前記シミュレーションはさらに、
少なくとも１つの仮想デバイスの入力フィルタ及び出力フィルタの少なくとも１つをシミュレーションすることをさらに含み、
各フィルタは、特定の条件に一致するパケットに適用するフィルタリングルールを含む、項目１５に記載の方法。
[項目４６]
前記共有データベースに、各仮想デバイスのための前記フィルタリングルールを維持する段階をさらに備える、項目４５に記載の方法。
[項目４７]
前記パケットのフロー接続状態に一致する条件をもつフィルタリングルールをシミュレーションする段階であって、各シミュレーションされるデバイスによって、フローごとの接続状態が独立して監視され、フローごとの接続状態の値は、前記パケットのトランスポート（Ｌ４）プロトコルに依存する、段階をさらに備える、項目４５に記載の方法。
[項目４８]
前記接続状態がパケットのシミュレーションに利用されているか否かの決定に基づいて、前記フローごとの接続状態を前記共有データベースに選択的に書き込む段階をさらに備える、項目４７に記載の方法。
[項目４９]
前記フローごとの接続状態は、前記シミュレーション中にシミュレーションされている各仮想デバイスの間で共有される、項目４７に記載の方法。
[項目５０]
各フローに固有のフローの署名を決定する段階と、
デバイス及びフローごとの接続状態を、特定のフローの前記フローの署名に関連づけて、前記共有データベースに格納する段階と
をさらに備える、項目４７に記載の方法。
[項目５１]
前記フローの署名は、シミュレーションされるデバイスのデバイス識別子、パケットのＬ３ヘッダソースフィールド、Ｌ３ヘッダデスティネーションフィールド、Ｌ４プロトコルタイプ、Ｌ４ヘッダソースフィールド、及び、Ｌ４ヘッダデスティネーションフィールドを含む、項目５０に記載の方法。
[項目５２]
各フローに固有の逆方向のフローの署名を決定する段階と、
デバイス及びフローごとの接続状態を、特定のフローの前記逆方向のフローの署名に関連づけて、前記共有データベースに格納する段階と
をさらに備える、項目５０に記載の方法。
[項目５３]
前記逆方向のフローの署名は、シミュレーションされるデバイスのデバイス識別子、パケットのＬ３ヘッダデスティネーションフィールド、Ｌ３ヘッダソースフィールド、Ｌ４プロトコルタイプ、Ｌ４ヘッダデスティネーションフィールド、及び、Ｌ４ヘッダデソースフィールドを含む、項目５２に記載の方法。
[項目５４]
前記特定のフローが終了すると、前記フローの署名及び前記逆方向のフローの署名に関連付けられている前記接続状態を除去する段階をさらに備える、項目５０に記載の方法。
[項目５５]
前記シミュレーションはさらに、
仮想デバイスが実行する、ネットワーク（Ｌ３）アドレス変換及びトランスポート（Ｌ４）アドレス変換のうち少なくとも１つをシミュレーションすることをさらに含む、項目１５に記載の方法。
[項目５６]
前記共有データベースに、前記ネットワークアドレス変換を、各仮想デバイスについて維持する段階をさらに備える、項目５５に記載の方法。
[項目５７]
前記共有データベースに、逆ネットワークアドレス変換を、各仮想デバイスについて維持する段階をさらに備える、
項目５６に記載の方法。
[項目５８]
前記パケットがネットワークアドレス変換ルール条件に一致しているかを決定して、前記ルール条件が満たされている場合に、前記ネットワークアドレス変換に従って、前記パケットネットワークプロトコルヘッダを修正する段階をさらに備える、項目５５に記載の方法。
[項目５９]
順方向のフローの署名及び戻りのフローの署名の両方によって調節された前記共有データベースに、各順方向のフローについての変換の選択を格納する段階をさらに備える、項目５５に記載の方法。
[項目６０]
前記ネットワーク（Ｌ３）アドレス変換及び前記トランスポート（Ｌ４）アドレス変換の変換選択に関連付けられている、順方向のフローのキーを決定する段階と、
前記共有データベースを照会して、矛盾する変換が前に格納されたかを決定する段階と、
矛盾する変換が特定された場合には、前記ネットワーク（Ｌ３）アドレス変換及び前記トランスポート（Ｌ４）アドレス変換のための別の変換選択を選択する段階と
をさらに備える、項目５９に記載の方法。
[項目６１]
前記変換が変換ターゲットの選択を許可するときに、ネットワーク（Ｌ３）アドレス及びトランスポート（Ｌ４）アドレスのアドレス変換ターゲットを決定する段階と、
前記共有データベースから、前記アドレス変換ターゲットが、前に格納した変換と矛盾するかを決定する段階と、
前記変換ターゲットの前記選択から、前記ネットワーク（Ｌ３）アドレス及び前記トランスポート（Ｌ４）アドレスの新たなアドレス変換ターゲットを決定する段階と
をさらに備える、項目５５に記載の方法。
[項目６２]
前記共有データベースにフローのためのネットワークアドレス変換を格納して、前記ネットワークアドレス変換を、順方向のフローの署名及び逆方向のフローの署名の両方によって調節する段階をさらに備える、項目５５に記載の方法。
[項目６３]
前記フローに対応するパケットを転送する前に、前記フローの前記ネットワークアドレス変換が前記共有データベースに格納されるまで待つ段階をさらに備える、項目５９に記載の方法。（注釈：変換をどのようにするかの選択肢がある場合にレース条件を回避して、ルールが格納される前に別のパケットが到達しないようにするため）
[項目６４]
仮想ポートに関連付けて、前記共有データベースに、ＤＨＣＰリソース定義を格納する段階であって、前記ＤＨＣＰリソース定義は、対応する値と動的なＩＰアドレスプールとを有するオプションのセットを有するＤＨＣＰ構成を含む、段階と、
前記共有データベースに、外向きポートのＤＨＣＰリソースへのマッピングを格納する段階と、
ＤＨＣＰリソースにマッピングされた仮想ポートに到着したＤＨＣＰパケットを特定する段階と、
前記動的なＩＰアドレスプールからＩＰアドレスを割り当てる段階と、
割り当てられた前記ＩＰアドレスを含むＤＨＣＰ応答メッセージを発行する段階と
をさらに備える、項目１５に記載の方法。
[項目６５]
フローエントリーを削除するための、ステートフル接続トラッキングの方法であって、
フロー構成可能なスイッチをもつエッジノードでシーケンス番号をもつＦＩＮパケットを受信する段階と、
前記フロー構成可能なスイッチの前記パケットに対応するフロールールを特定する段階と、
削除するために前記フロールールを特定して、特定した前記フロールールを分散状態に通信する段階と、
前記パケットを、対応する前記フロールールに基づいて通信する段階と
を備える、方法。
[項目６６]
前記フロールールは、ＴＣＰ接続のインバウンドフローに対応している、項目６５に記載の方法。
[項目６７]
前記フロールールは、ＴＣＰ接続のアウトバウンドフローに対応している、項目６５に記載の方法。
[項目６８]
前記ＦＩＮパケットに対応するＡＣＫパケットを受信すると、特定した前記フロールールを削除する段階をさらに備える、項目６５に記載の方法。
[項目６９]
特定した前記フロールールに対応している、前記分散状態に格納されている反対方向のフロールールを特定する段階と、
削除するために前記反対方向のフロールールを特定する段階と
をさらに備える、項目６５に記載の方法。
[項目７０]
前記ＦＩＮパケットに対応するＡＣＫパケットを受信すると、特定した前記フロールールと前記反対方向のフロールールとを削除する段階をさらに備える、項目６９に記載の方法。
[項目７１]
コンピューティングシステムであって、
基礎となるネットワークが相互接続する複数のノードであって、各ノードが１以上のネットワークインタフェースを含む、前記複数のノードと、
前記複数のノードで動作する複数の仮想デバイスであって、各仮想デバイスは、複数の仮想ポートを有し、各仮想ポートは、前記基礎となるネットワークの前記複数のノードの前記１以上のネットワークインタフェースの１つに関連付けられた外向きポート、または、仮想ネットワークデバイス間の仮想リンクに関連付けられた内向きポートのうちの１つに対応している、前記複数の仮想デバイスと、
前記複数の仮想ポート及び前記複数の仮想デバイスの構成を含む仮想ネットワークトポロジーを格納する共有データベースと、
最初の仮想デバイスから最後の仮想デバイスへの、前記仮想ネットワークトポロジーのネットワークパケットの横断をシミュレーションして、前記最後の仮想デバイスから発行される前記パケットに一致するように前記ネットワークパケットに適用されるプロトコルヘッダ修正を決定して、決定された前記プロトコルヘッダ修正を、前記プロトコルヘッダ修正に関連付けられているパケットプロトコルヘッダ・パターンに一致する後続するパケットに適用する決定エンジンと
を備えるコンピューティングシステム。
[項目７２]
前記決定エンジンはさらに、ＭＡＣ学習ブリッジをシミュレーションして、前記共有データベースの各ＭＡＣ学習ブリッジのＭＡＣ学習テーブルを更新する、項目７１に記載のコンピューティングシステム。
[項目７３]
前記決定エンジンはさらに、ＩＰパケットを特定して、カプセル化するＥｔｈｅｒｎｅｔ（登録商標）フレームのソースＩＰアドレス及びソースＭＡＣアドレスを抽出して、前記仮想ブリッジの前記ＡＲＰキャッシュを更新して、特定された前記ＩＰアドレスと前記ＭＡＣアドレスとを関連付ける、項目７１に記載のコンピューティングシステム。
[項目７４]
前記決定エンジンはさらに、少なくとも１つの仮想デバイスの入力フィルタ及び出力フィルタの少なくとも１つをシミュレーションして、各フィルタは、特定の条件に一致するパケットに適用するフィルタリングルールを含む、項目７１に記載のコンピューティングシステム。
[項目７５]
前記決定エンジンはさらに、前記複数の仮想デバイスの少なくとも１つのネットワークアドレス変換をシミュレーションして、前記共有データベースの順方向のフロー及び逆方向のフローの両方のネットワークアドレス変換を格納する、項目７１に記載のコンピューティングシステム。
[項目７６]
前記コントローラはさらに、ＤＨＣＰリソースからＩＰアドレスを動的に割り当て、割り当てた前記ＩＰアドレスを前記共有データベースに格納する、項目７１に記載のコンピューティングシステム。
【国際調査報告】
2014529926.tif 000017
2014529926.tif 000018
2014529926.tif 000019