(57)【要約】      （修正有）【課題】複数のコンピューティングノードを含むソフトウェアクラスタスイッチのモジュール式転送テーブル拡張性のための技術を提供する。【解決手段】複数のコンピューティングノードの各々は、ソフトウェアクラスタスイッチの入口コンピューティングノードにおいて受信されたネットワークパケットのフロー識別子に基づいて、そのネットワークパケットに関する出口コンピューティングノードを判別するためのグローバル分割テーブル（ＧＰＴ）を含む。ＧＰＴは、フロー識別子に適用されたハッシュ関数の結果に対応するセットマッピングインデックスと、ハッシュ関数ファミリのうち、入口コンピューティングノードがネットワークパケットを転送する出口コンピューティングノードに対応するノード識別子をもたらす出力を提供するハッシュ関数を識別するハッシュ関数インデックスと、を含む。【選択図】図３
2016149757.tif 000002
【特許請求の範囲】
【請求項１】
モジュール式転送テーブル拡張性のためのソフトウェアクラスタスイッチのコンピューティングノードであって、
複数のバケットを含むセットマッピングテーブルを管理するルーティングテーブル管理モジュールであって、各バケットは、当該コンピューティングノードにより受信されるネットワークパケットに対応するフロー識別子を記憶する１以上のエントリを含み、各バケットは、グループに割り当てられ、各グループは、２以上のバケットを含む、ルーティングテーブル管理モジュールと、
前記ソフトウェアクラスタスイッチの次のコンピューティングノードのノード識別子を判別するために使用可能な複数のエントリを含むグローバル分割テーブル（ＧＰＴ）を管理するグローバル分割テーブル管理モジュールと、
ネットワークパケットを受信したことに応じて、該ネットワークパケットのフロー識別子に基づいて、該ネットワークパケットに関する前記次のコンピューティングノードを判別し、第２のハッシュ関数を前記フロー識別子に適用して、前記次のコンピューティングノードを識別するノード識別子を生成するために、前記ＧＰＴに対してルックアップを実行するＧＰＴルックアップモジュールであって、前記ＧＰＴに対して前記ルックアップを実行することは、（ｉ）第１のハッシュ関数を前記フロー識別子に適用して、前記セットマッピングテーブルのグループを識別するセットマッピングインデックスを生成し、（ｉｉ）前記セットマッピングインデックスを前記ＧＰＴと比較して、第２のハッシュ関数を判別することを含み、前記次のコンピューティングノードは、間接コンピューティングノード又は出口コンピューティングノードの一方を含む、ＧＰＴルックアップモジュールと、
前記ネットワークパケットを前記次のコンピューティングノードに送信するネットワーク通信モジュールと、
を備えたコンピューティングノード。
【請求項２】
前記ネットワーク通信モジュールは、さらに、別のコンピューティングノードからネットワークパケットを受信し、前記ネットワーク通信モジュールは、さらに、前記別のコンピューティングノードからの前記ネットワークパケットが、前記別のコンピューティングノードが入口コンピューティングノード又は間接ノードの一方であるというインジケーションを含むかどうかを判定する、請求項１記載のコンピューティングノード。
【請求項３】
前記別のコンピューティングノードが間接ノードであるという判定に応じて、当該コンピューティングノードの出力ポートを判別するために、転送テーブルのローカル部分において前記フロー識別子のルックアップを実行する転送テーブル管理モジュールであって、前記転送テーブルの前記ローカル部分は、当該コンピューティングノードの出力ポートに基づく、転送テーブルエントリのサブセットを含む、転送テーブル管理モジュール
をさらに備えた、請求項２記載のコンピューティングノード。
【請求項４】
前記ネットワーク通信モジュールは、さらに、前記転送テーブルの前記ローカル部分における前記フロー識別子の前記ルックアップが成功したという判定に応じて、前記出力ポートを介して、前記ネットワークパケットをターゲットコンピューティングデバイスに送信する、請求項３記載のコンピューティングノード。
【請求項５】
別のコンピューティングノードが出口ノードであるという判定に応じて、当該コンピューティングノードの出力ポートを判別するために、転送テーブルのローカル部分において前記フロー識別子のルックアップを実行する転送テーブル管理モジュールであって、前記転送テーブルの前記ローカル部分は、当該コンピューティングノードの出力ポートに基づく、転送テーブルエントリのサブセットを含む、転送テーブル管理モジュールと、
前記転送テーブルの前記ローカル部分における前記フロー識別子の前記ルックアップが成功しなかったという判定に応じて、前記出口コンピューティングノードを判別するために、ルーティングテーブルにおいて前記フロー識別子のルックアップを実行するルーティングテーブルルックアップモジュールであって、前記ルーティングテーブルは、前記フロー識別子に関する前記出口コンピューティングノードを識別する、ルーティングテーブルルックアップモジュールと、
をさらに備え、
前記ネットワーク通信モジュールは、さらに、前記ネットワークパケットを前記出口コンピューティングノードに送信する、請求項１記載のコンピューティングノード。
【請求項６】
前記セットマッピングインデックスを前記ＧＰＴと比較して、前記第２のハッシュ関数を判別することは、（ｉ）前記セットマッピングインデックスに応じて、前記ＧＰＴの前記エントリに対してルックアップを実行し、（ｉｉ）該ルックアップの結果として、ハッシュ関数ファミリのうちのハッシュ関数を識別するハッシュ関数インデックスを取得することを含み、前記ハッシュ関数ファミリは、複数のハッシュ関数を含む、請求項１記載のコンピューティングノード。
【請求項７】
（ｉ）前記ネットワークパケットの前記フロー識別子を、当該コンピューティングノードのルーティングテーブルに追加するリクエストを受信し、（ｉｉ）前記リクエストを受信したことに応じて、前記フロー識別子を、当該コンピューティングノードの前記ルーティングテーブルに追加し、（ｉｉｉ）ハッシュ関数を前記フロー識別子に適用して、前記フロー識別子を記憶するための、前記セットマッピングテーブルのバケットを識別し、（ｉｖ）前記フロー識別子を、該バケット内のエントリに追加し、（ｖ）グループを該エントリに割り当て、（ｖｉ）前記ＧＰＴ内の該エントリに割り当てられた前記グループに対応する前記ハッシュ関数インデックスをアップデートする、ルーティングテーブル管理モジュール
をさらに備えた、請求項６記載のコンピューティングノード。
【請求項８】
前記ルーティングテーブル管理モジュールは、さらに、前記ソフトウェアクラスタスイッチの他のコンピューティングノードに対してアップデート通知をブロードキャストし、前記アップデート通知は、前記ＧＰＴに対する前記アップデートのインジケーションを提供する、請求項７記載のコンピューティングノード。
【請求項９】
前記ハッシュ関数インデックスをアップデートすることは、前記ハッシュ関数ファミリから、前記ネットワークパケットに関する前記出口コンピューティングノードのノードインデックスに対応する出力をもたらすハッシュ関数を識別することを含む、請求項７記載のコンピューティングノード。
【請求項１０】
前記ハッシュ関数ファミリから前記ハッシュ関数を識別することは、前記フロー識別子と同じグループに割り当てられた、前記セットマッピングテーブルの前記エントリの各々について、適用されたハッシュ関数が、前記出口コンピューティングノードに対応するノードインデックスに対応する出力をもたらすまで、前記ハッシュ関数ファミリの各ハッシュ関数を、前記フロー識別子と同じグループに割り当てられた、前記セットマッピングテーブルの各エントリに適用することを含む、請求項９記載のコンピューティングノード。
【請求項１１】
前記ネットワークパケットの前記フロー識別子を判別することは、前記の受信されたネットワークパケットに含まれる、前記の受信されたネットワークパケットのターゲットを示す宛先アドレスと、前記の受信されたネットワークパケットに含まれる、前記の受信されたネットワークパケットのターゲットを示す５タプルフロー識別子と、のうちの少なくとも１つを判別することを含む、請求項１記載のコンピューティングノード。
【請求項１２】
前記ソフトウェアクラスタスイッチの前記出口コンピューティングノードに対応する前記ノード識別子を判別することは、前記フロー識別子にマッピングされている出力ポートを有することに基づいて、転送テーブルエントリのサブセットを記憶している、前記ソフトウェアクラスタスイッチのコンピューティングノードとして識別される出口コンピューティングノードを判別することを含む、請求項１記載のコンピューティングノード。
【請求項１３】
ソフトウェアクラスタスイッチのモジュール式転送テーブル拡張性のための方法であって、
コンピューティングノードにより、複数のバケットを含むセットマッピングテーブルを管理するステップであって、各バケットは、前記コンピューティングノードにより受信されるネットワークパケットに対応するフロー識別子を記憶する１以上のエントリを含み、各バケットは、グループに割り当てられ、各グループは、２以上のバケットを含む、ステップと、
前記コンピューティングノードにより、前記ソフトウェアクラスタスイッチの次のコンピューティングノードのノード識別子を判別するために使用可能な複数のエントリを含むグローバル分割テーブル（ＧＰＴ）を管理するステップと、
前記コンピューティングノードにより、ネットワークパケットを受信したことに応じて、該ネットワークパケットのフロー識別子に基づいて、該ネットワークパケットに関する前記次のコンピューティングノードを判別するために、前記ＧＰＴに対してルックアップを実行するステップであって、前記ＧＰＴに対して前記ルックアップを実行することは、（ｉ）第１のハッシュ関数を前記フロー識別子に適用して、前記セットマッピングテーブルのグループを識別するセットマッピングインデックスを生成し、（ｉｉ）前記セットマッピングインデックスを前記ＧＰＴと比較して、第２のハッシュ関数を判別することを含む、ステップと、
前記第２のハッシュ関数を前記フロー識別子に適用して、前記次のコンピューティングノードを識別するノード識別子を生成するステップであって、前記次のコンピューティングノードは、間接コンピューティングノード又は出口コンピューティングノードの一方を含む、ステップと、
前記コンピューティングノードにより、前記ネットワークパケットを前記次のコンピューティングノードに送信するステップと、
を含む方法。
【請求項１４】
前記コンピューティングノードにより、別のコンピューティングノードからネットワークパケットを受信するステップと、
前記コンピューティングノードにより、前記別のコンピューティングノードからの前記ネットワークパケットが、前記別のコンピューティングノードが入口コンピューティングノード又は間接ノードの一方であるというインジケーションを含むかどうかを判定するステップと、
をさらに含む、請求項１３記載の方法。
【請求項１５】
前記コンピューティングノードにより、前記別のコンピューティングノードが間接ノードであるという判定に応じて、前記コンピューティングノードの出力ポートを判別するために、転送テーブルのローカル部分において前記フロー識別子のルックアップを実行するステップであって、前記転送テーブルの前記ローカル部分は、前記コンピューティングノードの出力ポートに基づく、転送テーブルエントリのサブセットを含む、ステップ
をさらに含む、請求項１４記載の方法。
【請求項１６】
前記コンピューティングノードにより、前記転送テーブルの前記ローカル部分における前記フロー識別子の前記ルックアップが成功したという判定に応じて、前記出力ポートを介して、前記ネットワークパケットをターゲットコンピューティングデバイスに送信するステップ
をさらに含む、請求項１５記載の方法。
【請求項１７】
前記コンピューティングノードにより、別のコンピューティングノードが出口ノードであるという判定に応じて、前記コンピューティングノードの出力ポートを判別するために、転送テーブルのローカル部分において前記フロー識別子のルックアップを実行するステップであって、前記転送テーブルの前記ローカル部分は、前記コンピューティングノードの出力ポートに基づく、転送テーブルエントリのサブセットを含む、ステップと、
前記コンピューティングノードにより、前記転送テーブルの前記ローカル部分における前記フロー識別子の前記ルックアップが成功しなかったという判定に応じて、前記出口コンピューティングノードを判別するために、ルーティングテーブルにおいて前記フロー識別子のルックアップを実行するステップであって、前記ルーティングテーブルは、前記フロー識別子に関する前記出口コンピューティングノードを識別する、ステップと、
前記ネットワークパケットを前記出口コンピューティングノードに送信するステップと、
をさらに含む、請求項１３記載の方法。
【請求項１８】
前記セットマッピングインデックスを前記ＧＰＴと比較して、前記第２のハッシュ関数を判別することは、（ｉ）前記セットマッピングインデックスに応じて、前記ＧＰＴの前記エントリに対してルックアップを実行し、（ｉｉ）該ルックアップの結果として、ハッシュ関数ファミリのうちのハッシュ関数を識別するハッシュ関数インデックスを取得することを含み、前記ハッシュ関数ファミリは、複数のハッシュ関数を含む、請求項１３記載の方法。
【請求項１９】
前記ネットワークパケットの前記フロー識別子を、前記コンピューティングノードのルーティングテーブルに追加するリクエストを受信するステップと、
前記リクエストを受信したことに応じて、前記フロー識別子を、前記コンピューティングノードの前記ルーティングテーブルに追加するステップと、
ハッシュ関数を前記フロー識別子に適用して、前記フロー識別子を記憶するための、前記セットマッピングテーブルのバケットを識別するステップと、
前記フロー識別子を、該バケット内のエントリに追加するステップと、
グループを該エントリに割り当てるステップと、
前記ＧＰＴ内の該エントリに割り当てられた前記グループに対応する前記ハッシュ関数インデックスをアップデートするステップと、
をさらに含む、請求項１８記載の方法。
【請求項２０】
前記ソフトウェアクラスタスイッチの他のコンピューティングノードに対してアップデート通知をブロードキャストするステップ
をさらに含み、
前記アップデート通知は、前記ＧＰＴに対する前記アップデートのインジケーションを提供する、請求項１９記載の方法。
【請求項２１】
前記ハッシュ関数インデックスをアップデートすることは、前記ハッシュ関数ファミリから、前記ネットワークパケットに関する前記出口コンピューティングノードのノードインデックスに対応する出力をもたらすハッシュ関数を識別することを含む、請求項１９記載の方法。
【請求項２２】
前記ハッシュ関数ファミリから前記ハッシュ関数を識別することは、前記フロー識別子と同じグループに割り当てられた、前記セットマッピングテーブルの前記エントリの各々について、適用されたハッシュ関数が、前記出口コンピューティングノードに対応するノードインデックスに対応する出力をもたらすまで、前記ハッシュ関数ファミリの各ハッシュ関数を、前記フロー識別子と同じグループに割り当てられた、前記セットマッピングテーブルの各エントリに適用することを含む、請求項２１記載の方法。
【請求項２３】
前記ソフトウェアクラスタスイッチの前記出口コンピューティングノードに対応する前記ノード識別子を判別することは、前記フロー識別子にマッピングされている出力ポートを有することに基づいて、転送テーブルエントリのサブセットを記憶している、前記ソフトウェアクラスタスイッチのコンピューティングノードとして識別される出口コンピューティングノードを判別することを含む、請求項１３記載の方法。
【請求項２４】
コンピューティングノードであって、
プロセッサと、
複数の命令を記憶しているメモリであって、前記複数の命令は、前記プロセッサにより実行されたときに、当該コンピューティングノードに、請求項１３乃至２３いずれか一項記載の方法を実行させる、メモリと、
を備えたコンピューティングノード。
【請求項２５】
請求項１３乃至２３いずれか一項記載の方法をコンピューティングノードに実行させるプログラム。
【請求項２６】
請求項２５記載のプログラムを記憶したマシン読み取り可能な記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
現代のコンピューティングデバイスは、インターネット等の様々なデータネットワークを介して、他のコンピューティングデバイスと通信する（すなわち、データ通信を送受信する）ことができる。そのようなコンピューティングデバイス間の通信を円滑にするために、ネットワークは、通常、ネットワークフローに基づいて１つのコンピューティングデバイスから別のコンピューティングデバイスに通信（すなわち、ネットワークパケット）をルーティングするための１以上のネットワークデバイス（例えば、ネットワークスイッチ、ネットワークルータ等）を含む。従来、ネットワークパケット処理は、ネットワークデバイスの専用ネットワークプロセッサ上で実行されていた。しかしながら、ネットワーク仮想化技術（例えば、ネットワーク機能仮想化（ＮＦＶ））及び中央コントローラネットワーキングアーキテクチャ（例えば、ソフトウェア定義ネットワーキング（ＳＤＮ））における進化は、高度に拡張可能で迅速に展開可能であるネットワークインフラストラクチャをもたらしている。
【０００２】
そのような１つのネットワークパケット処理例において、ネットワークパケットのルーティング及び交換のために、相互接続されたサーバノードのクラスタを使用することができる。サーバノードクラスタにおいて、各サーバノードは、１以上の外部ポートからネットワークパケットを受信し、ネットワークフローの識別ルールに基づいて宛先又は出力ポートに転送するために、受信したネットワークパケットを他のサーバノードに振り分けることができる。サーバノードクラスタを介してネットワークトラフィックをルーティングするために、サーバノードは、一般に、ルーティングテーブル（すなわち、ルーティング情報ベース（ＲＩＢ））及び転送テーブル（すなわち、転送情報ベース（ＦＩＢ））を使用する。
【０００３】
各サーバノードが、クラスタに追加されるにつれ、クラスタの転送容量が増大するだけでなく、到達することができる宛先アドレスの数も増大する。すなわち、ネットワークのインフラストラクチャのサイズが、拡大されるにつれ、ルーティングテーブル及び転送テーブルの各々のサイズも増大して非常に大きくなり得る。一般に、より大きなルーティングテーブルは、そのルーティングテーブルに対してルックアップを実行するために、より多くの時間及びより多くのコンピューティングリソース（例えば、メモリ、ストレージ、処理サイクル等）を必要とする。加えて、そのような拡大・増大の悪影響は、例えば、ネットワークパケットを処理するために必要とされるさらなるホップ（すなわち、サーバノード間におけるネットワークパケットのそれぞれの通過）又はクラスタの内部スイッチファブリック（internal  switch  fabric）にわたって実行されるさらなるルックアップを含む。そのような悪影響は、スループットの低下及び／又は転送テーブル容量を超える転送テーブルサイズをもたらすおそれがある。
【図面の簡単な説明】
【０００４】
本明細書で説明するコンセプトは、添付の図面において、限定ではなく例として示される。図示の簡潔さ及び明瞭さのために、図面中に示される要素は、必ずしも縮尺通りに描かれてはいない。適切であると考えられる場合、参照ラベルは、対応要素又は類似要素を示すために、複数の図面の間で繰り返される。
【図１】複数のコンピューティングノードを含むソフトウェアクラスタスイッチによるモジュール式転送テーブル拡張性のためのシステムの少なくとも１つの実施形態の簡略化されたブロック図。
【図２】図１のシステムのソフトウェアクラスタスイッチのコンピューティングノードの少なくとも１つの実施形態の簡略化されたブロック図。
【図３】図２のコンピューティングノードの環境の少なくとも１つの実施形態の簡略化されたブロック図。
【図４】図２のコンピューティングノードにより実行され得る、受信されたネットワークパケットに関する出口コンピューティングノードを判別するための方法の少なくとも１つの実施形態の簡略化されたフロー図。
【図５】図２のコンピューティングノードにより実行され得る、受信されたネットワークパケットに関する出口コンピューティングノードを判別するための方法の少なくとも１つの実施形態の簡略化されたフロー図。
【図６】図２のコンピューティングノードにより実行され得る、入口ノードから受信したネットワークパケットを転送するための方法の少なくとも１つの実施形態の簡略化されたフロー図。
【図７】図２のコンピューティングノードにより実行され得る、ネットワークパケットのネットワークフロー識別子に対応するエントリをルーティングテーブルに追加するための方法の少なくとも１つの実施形態の簡略化されたフロー図。
【発明を実施するための形態】
【０００５】
本開示のコンセプトは、様々な変形形態及び代替形態を受け入れる余地があるが、その特定の実施形態が、例として図面に示され、本明細書において詳細に説明される。しかしながら、本開示のコンセプトを、開示する特定の形態に限定する意図はなく、反対に、意図は、本開示及び添付の特許請求の範囲と整合する全ての変形形態、均等形態、及び代替形態をカバーすることにあることを理解すべきである。
【０００６】
「一実施形態」、「ある実施形態」、「例示的な実施形態」等の本明細書における言及は、説明する実施形態が特定の特徴、構造、又は特性を含み得るが、全ての実施形態がそのような特定の特徴、構造、又は特性を含んでもよいし、あるいは必ずしもそのような特定の特徴、構造、又は特性を含む必要がなくてもよいことを示す。さらに、このような語句は、必ずしも同じ実施形態を指すわけではない。さらに、特定の特徴、構造、又は特性がある実施形態との関連で記載されている場合には、明示されていようといまいと、他の実施形態との関連でそのような特定の特徴、構造、又は特性を実装することは当業者の知識の範囲内であるとする。さらに、「Ａ、Ｂ、及びＣのうち少なくとも１つ」という形のリストに含まれる項目は、（Ａ）；（Ｂ）；（Ｃ）；（Ａ及びＢ）；（Ａ及びＣ）；（Ｂ及びＣ）；又は（Ａ、Ｂ、及びＣ）を意味し得ることを理解すべきである。同様に、「Ａ、Ｂ、又はＣのうち少なくとも１つ」という形でリストされる項目は、（Ａ）；（Ｂ）；（Ｃ）；（Ａ及びＢ）；（Ａ及びＣ）；（Ｂ及びＣ）；又は（Ａ、Ｂ、及びＣ）を意味し得る。
【０００７】
開示する実施形態は、場合により、ハードウェア、ファームウェア、ソフトウェア、又はこれらの任意の組合せにより実装することができる。開示する実施形態はまた、１以上のプロセッサにより読み出され実行され得る、一時的又は非一時的な１以上のマシン読み取り可能な記憶媒体（例えば、コンピュータ読み取り可能な記憶媒体）により運ばれる命令又はそのような媒体に記憶される命令として実装することができる。マシン読み取り可能な記憶媒体は、マシンにより読み取ることができる形式で情報を記憶又は送信する任意の記憶デバイス、メカニズム、又は他の物理的構造（例えば、揮発性メモリ、不揮発性メモリ、メディアディスク、又は他のメディアデバイス）として具現化することができる。
【０００８】
図面において、いくつかの構造的特徴又は方法的特徴が、特定の配置及び／又は順序で示され得る。しかしながら、そのような特定の配置及び／又は順序が必要とされるわけではないことを理解すべきである。そうではなく、いくつかの実施形態において、そのような特徴は、例示する図面に示される態様及び／又は順序と異なる態様及び／又は順序で構成され得る。さらに、特定の図面内に構造的特徴又は方法的特徴が含まれることは、そのような特徴が全ての実施形態において必要とされることを意味しない、いくつかの実施形態において、そのような特徴が含まれないことを意味しない、又はそのような特徴が他の特徴と組み合わされないことを意味しない。
【０００９】
次に図１を参照すると、例示的な実施形態において、モジュール式転送テーブル拡張性のためのシステム１００は、ソースコンピューティングデバイス１０２及び宛先コンピューティングデバイス１０６とネットワーク通信するソフトウェアクラスタスイッチ１０４を含む。ソフトウェアクラスタスイッチ１０４は、仮想進化型パケットコア（ｖＥＰＣ）モデルにおいて等、ネットワーク機能仮想化（ＮＦＶ）及び／又はソフトウェア定義ネットワーキング（ＳＤＮ）アーキテクチャのスコープにおいて、分散型サービスのためのスタンドアロンソフトウェアスイッチ／ルータ又はアンダーラインファブリック（underline  fabric）として機能することができる。例示的なソフトウェアクラスタスイッチ１０４は、複数のコンピューティングノード１１０を含み、各コンピューティングノード１１０は、入口コンピューティングノード（ingress  computing  node）及び出口コンピューティングノード（egress  computing  node）の両方として動作することができる。例示的なシステム１００は、ソースコンピューティングデバイス１０２及び宛先コンピューティングデバイス１０６を含むが、コンピューティングノード１１０の各々は、任意の数の異なるネットワーク及び／若しくはサブネットワーク、ネットワークデバイス、並びに／又は他のソフトウェアクラスタスイッチに通信可能に接続され得ることを理解すべきである。したがって、コンピューティングノード１１０のいずれも、１つのネットワークから発生したネットワークパケットを受信することができ、ソフトウェアクラスタスイッチ１０４のルーティングテーブルに基づいて、そのネットワークパケットを異なるネットワークに転送することができる。
【００１０】
例示的なソフトウェアクラスタスイッチ１０４は、「入口」コンピューティングノード１１２、コンピューティングノード１１４、コンピューティングノード１１６、及び「出口」コンピューティングノード１１８を含む。もちろん、いくつかの実施形態において、ソフトウェアクラスタスイッチ１０４は、ネットワークパケットスループットをサポートするために、必要に応じてさらなるコンピューティングノード１１０を含んでもよい。使用の際、ソフトウェアクラスタスイッチ１０４の入口コンピューティングノード１１２は、ソフトウェアクラスタスイッチ１０４と有線ネットワーク通信又は無線ネットワーク通信するソースコンピューティングデバイス１０２（例えば、ネットワークスイッチ、ネットワークルータ、発信元コンピューティングデバイス等）から、ネットワークパケット１０８を受信する。図１に例示的に示される他のコンピューティングノード１１０のいずれもが、代わりに、ソースコンピューティングデバイス１０２から、ネットワークパケット１０８を受信してもよいことを理解すべきである。したがって、ネットワークパケット１０８を受信する特定のコンピューティングノード１１０が、「入口」コンピューティングノード１１２として指定され得、以下の説明においてそのように呼ばれる。
【００１１】
ネットワークパケット１０８を受信すると、入口コンピューティングノード１１２は、ネットワークパケット１０８に対応するフロー識別子（例えば、ターゲットコンピューティングデバイスの媒体アクセスコード（ＭＡＣ）アドレス、ターゲットコンピューティングデバイスのインターネットプロトコル（ＩＰ）アドレス、５タプルフロー識別子等）に基づいてソフトウェアクラスタスイッチ１０４内でネットワークパケット１０８を処理する役割を担う出口コンピューティングノード１１８（すなわち、処理ノード）を識別するために、転送テーブル（すなわち、転送情報ベース）に対してルックアップを実行する。次いで、入口コンピューティングノード１１２は、インターコネクトデバイス１２０又はスイッチを介して、ネットワークパケット１０８をそのノードに直接転送する。そうするために、コンピューティングノード１１０の各々は、フロー識別子をコンピューティングノード１１０の各々の出力ポートにマッピングしている情報を記憶しているルーティングテーブルを含む。ルーティングテーブルから、次の２つの構造が生成され得る：（１）グローバルルックアップテーブル、すなわち、グローバル分割テーブル（ＧＰＴ；global  partitioning  table、global  partition  table）、及び（２）転送テーブルエントリ。以下でさらに詳細に説明するように、ＧＰＴは、ルーティングテーブルより小さく（すなわち、コンパクトに）構成され、そのようなものとして、コンピューティングノード１１０の各々に対して複製され得る。
【００１２】
その全体が複製された転送テーブルエントリの全てを含む転送テーブルを各コンピューティングノードが有する従来のソフトウェアクラスタスイッチとは異なり、現在説明している転送テーブルは、コンピューティングノード１１０のいずれもが転送テーブル全体を含まないように、コンピューティングノード１１０の各々にわたって、分割されて割り当てられる。すなわち、どのコンピューティングノード１１０が、そのコンピューティングノード１１０の出力ポートを介して、関連付けられたネットワークパケットの転送を処理する役割を担うか（すなわち、ネットワークパケットを送信する役割を担う出口コンピューティングノード）に基づいて、転送テーブル全体の分割された部分が、ソフトウェアクラスタスイッチ１０４のコンピューティングノード１１０にわたって分散される。したがって、各コンピューティングノード１１０は、ルーティングテーブルと各コンピューティングノード１１０の出力ポートとに基づく、転送テーブルエントリの異なる部分（すなわち、転送テーブル全体のサブセット）をルックアップする役割を担い得る。結果として、ソフトウェアクラスタスイッチ１０４は、単一のホップにおいて適切な処理ノードへのネットワークパケット１０８の直接的転送を管理することができる。加えて、ＧＰＴ及び分割された転送テーブルエントリを用いることで、各コンピューティングノードにおけるメモリが、従来のソフトウェアクラスタスイッチ内のコンピューティングノードの数とともに直線的に増加する従来のソフトウェアクラスタスイッチより少ないメモリ（すなわち、オーバーヘッド）しか必要とされないことが可能である。
【００１３】
ソースコンピューティングデバイス１０２と、同様に宛先コンピューティングデバイス１０６と、は、本明細書で説明する機能を実行することができる任意のタイプの計算デバイス又はコンピューティングデバイスとして具現化することができる。そのような計算デバイス又はコンピューティングデバイスには、コンピュートデバイス、スマートフォン、デスクトップコンピュータ、ワークステーション、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、モバイルコンピューティングデバイス、ウェアラブルコンピューティングデバイス、ネットワークアプライアンス、ウェブアプライアンス、分散コンピューティングシステム、プロセッサベースのシステム、マルチプロセッサシステム、サーバ（例えば、スタンドアロン、ラックマウント、ブレード等）、ネットワークアプライアンス（例えば、物理又は仮想）、並びに／又は、任意のタイプのコンピュートデバイス及び／若しくは記憶デバイスが含まれるが、これらに限定されるものではない。
【００１４】
ソフトウェアクラスタスイッチ１０４は、クラスタソフトウェアルータ、クラスタソフトウェアスイッチ、分散型ソフトウェアスイッチ、分散型ソフトウェアルータ、分散型サービスのためのスイッチファブリック等といった、本明細書で説明する機能を実行するために協働する個々のコンピューティングノード１１０のグループとして具現化することができる。いくつかの実施形態において、ソフトウェアクラスタスイッチ１０４は、完全接続メッシュネットワーキングトポロジに従って互いに通信可能に接続された複数のコンピューティングノード１１０を含み得る。もちろん、各コンピューティングノード１１０は、任意のネットワーキングトポロジに従って他のコンピューティングノード１１０に通信可能に接続されてもよいことを理解すべきである。例えば、各コンピューティングノード１１０は、トポロジの中でもとりわけ、スイッチネットワークトポロジ、Ｃｌｏｓネットワークトポロジ、バスネットワークトポロジ、スターネットワークトポロジ、リングネットワークトポロジ、メッシュトポロジ、バタフライ状トポロジ、及び／又はこれらの任意の組合せに従って他のコンピューティングノード１１０に通信可能に接続されてもよい。
【００１５】
ソフトウェアクラスタスイッチ１０４のコンピューティングノード１１０の各々は、ソフトウェアクラスタスイッチ１０４のルーティングオペレーション（例えば、入力オペレーション、転送オペレーション、出力オペレーション等）の任意の一部を実行するよう構成され得る。すなわち、各コンピューティングノード１１０は、ソースコンピューティングデバイス１０２からネットワークパケット１０８を受信するコンピューティングノード（例えば、入口コンピューティングノード１１２）、及び、ルックアップを実行し、ソフトウェアクラスタスイッチ１０４からネットワークパケット１０８を送信するために判別されたコンピューティングノード（例えば、出口コンピューティングノード１１８）として動作するよう構成され得る。
【００１６】
コンピューティングノード１１０は、本明細書で説明する機能を実行することができる任意のタイプのコンピューティングデバイスとして具現化することができる、あるいは、そのようなコンピューティングデバイスを含み得る。そのようなコンピューティングデバイスには、サーバコンピュータ、ネットワーキングデバイス、ラックコンピューティングアーキテクチャコンポーネント、デスクトップコンピュータ、ラップトップコンピューティングデバイス、スマートアプライアンス、コンシューマ電子デバイス、モバイルコンピューティングデバイス、携帯電話機、スマートフォン、タブレットコンピューティングデバイス、携帯情報端末、ウェアラブルコンピューティングデバイス、及び／又は他のタイプのコンピューティングデバイスが含まれるが、これらに限定されるものではない。図２に例示的に示されるように、コンピューティングノード１１０は、プロセッサ２０２、入力／出力（Ｉ／Ｏ）サブシステム２１０、メモリ２１２、データストレージ２１８、通信回路２２０、及び複数の通信インタフェース２２２を含む。もちろん、他の実施形態では、コンピューティングノード１１０は、ネットワークコンピューティングデバイスにおいて通常見つけられるもの等の追加コンポーネント又は代替コンポーネントを含んでもよい。さらに、いくつかの実施形態においては、図示するコンポーネントのうちの１以上は、別のコンポーネントに組み込まれてもよいし、別のコンポーネントの一部を形成してもよい。例えば、メモリ２１２又はメモリ２１２の一部は、いくつかの実施形態においては、プロセッサ２０２に組み込まれてもよい。
【００１７】
プロセッサ２０２は、本明細書で説明する機能を実行することができる任意のタイプのプロセッサとして具現化することができる。例えば、いくつかの実施形態において、プロセッサ２０２は、シングルコアプロセッサ、マルチコアプロセッサ、デジタル信号プロセッサ、マイクロコントローラ、又は、他のプロセッサ若しくは処理／制御回路として具現化することができる。プロセッサ２０２は、キャッシュメモリ２０４を含み得る。キャッシュメモリ２０４は、実行される命令及び／又はデータを記憶するために、プロセッサ２０２がメモリ２１２よりも速くアクセスすることができる任意のタイプのキャッシュメモリ（例えば、オンダイキャッシュ）として具現化することができる。いくつかの実施形態において、キャッシュメモリ２０４はまた、グローバル分割テーブル（ＧＰＴ）２０６及び転送テーブル２０８を記憶することができる。
【００１８】
上述したように、ＧＰＴ２０６は、一般に、完全に複製される転送テーブルよりもコンパクトであり、これにより、コンピューティングノード１１０の動作中に、コンピューティングノード１１０の各々におけるキャッシュメモリ２０４内にＧＰＴ２０６を複製して記憶することが可能になる。以下でさらに詳細に説明するように、いくつかの実施形態において、ＧＰＴ２０６は、入力キーをコンピューティングノード１１０のうちの処理ノード（例えば、出口コンピューティングノード１１８）にマッピングするセット分離マッピング方策（set  separation  mapping  strategy）を用いて実装することができる。セット分離マッピング方策は、入力キーの全体セットのより小さなグループ又はサブセットからなる高レベルインデックス構造を作成することを含む。各入力キーは、ネットワークパケット１０８に対応するフロー識別子（例えば、宛先ＩＰアドレス、宛先ＭＡＣアドレス、５タプルフロー識別子等）から導出され得る。
【００１９】
上述したように、転送テーブル２０８は、入力キーを処理ノードにマッピングしている転送テーブルエントリを含み得、いくつかの実施形態においては、さらなる情報を含み得る。コンピューティングノード１１０の各転送テーブル２０８は、ルーティングテーブル２１４から得られる転送テーブルエントリの異なるセット（例えば、一部、サブセット等）を記憶することができる。したがって、各コンピューティングノード１１０における転送テーブル２０８は、ソフトウェアクラスタスイッチ１０４のルーティングテーブルエントリの全てを通常は含むルーティングテーブル２１４よりもサイズが小さい（例えば、ルーティングテーブルエントリよりも少ないエントリを含む）。ソフトウェアクラスタスイッチ１０４の制御プレーンにおいて、転送テーブル２０８は、ハッシュテーブルとして具現化することができる。しかしながら、いくつかの実施形態においては、転送テーブル２０８は、後続の取得のためにキャッシュメモリ２０４にロードされる個々のネットワークルーティングエントリの集合又はグループとして構造化又は具現化されてもよい。
【００２０】
メモリ２１２は、本明細書で説明する機能を実行することができる任意のタイプの揮発性メモリ、不揮発性メモリ、又はデータストレージとして具現化することができる。動作中、メモリ２１２は、コンピューティングノード１１０の動作中に使用される、オペレーティングシステム、アプリケーション、プログラム、ライブラリ、及びドライバ等の様々なソフトウェア及びデータを記憶することができる。メモリ２１２は、Ｉ／Ｏサブシステム２１０を介して、プロセッサ２０２に通信可能に接続される。Ｉ／Ｏサブシステム２１０は、コンピューティングノード１１０のプロセッサ２０２、メモリ２１２、及び他のコンポーネントによる入力／出力オペレーションを円滑にする回路及び／又はコンポーネントとして具現化することができる。例えば、Ｉ／Ｏサブシステム２１０は、メモリコントローラハブ、入力／出力制御ハブ、ファームウェアデバイス、通信リンク（すなわち、ポイントツーポイントリンク、バスリンク、ワイヤ、ケーブル、ライトガイド、プリント回路基板トレース等）、並びに／又は、入力／出力オペレーションを円滑にする他のコンポーネント及びサブシステムとして具現化されてもよいし、これらを含んでもよい。いくつかの実施形態において、Ｉ／Ｏサブシステム２１０は、システムオンチップ（ＳｏＣ）の一部を形成して、コンピューティングノード１１０のプロセッサ２０２、メモリ２１２、及び他のコンポーネントとともに、単一の集積回路チップに組み込むことができる。キャッシュメモリ２０４がオンダイキャッシュ又はオンプロセッサキャッシュとして上述されたが、そのような実施形態において、キャッシュメモリ２０４は、オフダイキャッシュであるが、プロセッサ２０２と同じＳｏＣ上に存在し得ることを理解すべきである。
【００２１】
ソフトウェアクラスタスイッチ１０４のルーティングテーブル２１４（すなわち、グローバルルーティングテーブル）のコピーが、各コンピューティングノード１１０のメモリ２１２に記憶され得る。ルーティングテーブル２１４は、複数のルーティングテーブルエントリを含み、各ルーティングテーブルエントリは、異なるネットワーク宛先（例えば、ネットワークアドレス、宛先ネットワーク又はサブネット、リモートコンピューティングデバイス等）に対応する情報を有する。例えば、いくつかの実施形態において、各ルーティングテーブルエントリは、宛先ＩＰアドレス（すなわち、ターゲットコンピューティングデバイス及び／又は宛先サブネットのＩＰアドレス）、宛先ＩＰアドレスに向けられるネットワークパケットが送信されて経由される必要がある別のコンピューティングノード１１０に対応するゲートウェイＩＰアドレス、及び／又は、宛先ＩＰアドレスに向けられるネットワークパケットがゲートウェイＩＰアドレスに送信されるまでに経由されるコンピューティングノード１１０の出力インタフェースを示す情報を含み得る。ルーティングテーブル２１４は、ネットワークパケットをその最終宛先にルーティングするのを円滑にするための任意の他のタイプの情報を含んでもよいことを理解すべきである。
【００２２】
いくつかの実施形態において、ネットワークルーティングテーブルエントリの全て又は一部は、ルーティングテーブル２１４から得られ、ＧＰＴ２０６と転送テーブル２０８のエントリとを生成又はアップデートするために使用され得る。例えば、ルーティングテーブル２１４に対するアップデートが、コンピューティングノード１１０において受信され得、そのコンピューティングノード１１０は、次いで、そのアップデートから、転送テーブル２０８及びＧＰＴ２０６のエントリを生成又はアップデート（すなわち、追加、削除、又は変更）することができる。次いで、アップデートされた転送テーブルエントリが、適切な処理ノードに送信され得、処理ノードは、その転送テーブルエントリを使用して、その処理ノードのローカルにある転送テーブル２０８をアップデートすることができる。さらに、いくつかの実施形態において、ルーティングテーブル２１４に対するアップデートを受信したコンピューティングノード１１０は、全ての他のコンピューティングノード１１０のそれぞれのＧＰＴをアップデートするために、全ての他のコンピューティングノード１１０に対してアップデートインジケーションをブロードキャストすることができる。
【００２３】
前述したように、転送テーブル２０８は、ハッシュテーブルとして具現化することができる。したがって、ソフトウェアクラスタスイッチ１０４の制御プレーンは、ハッシュテーブルの構築や転送テーブルエントリの追加、削除、及びアップデートといった必要なオペレーションをサポートすることができる。ＧＰＴ２０６及び転送テーブル２０８は、例示的なコンピューティングノード１１０のキャッシュメモリ２０４に記憶されるものとして説明されたが、ＧＰＴ２０６及び転送テーブル２０８のうちの一方又は両方は、他の実施形態では、コンピューティングノード１１０の他のデータ記憶デバイス（例えば、メモリ２１２及び／又はデータストレージ２１８）に記憶されてもよいことを理解すべきである。例えば、特定のコンピューティングノード１１０の転送テーブル２０８のサイズが、キャッシュメモリ２０４において利用可能な記憶量を超える実施形態において、転送テーブル２０８の少なくとも一部分は、コンピューティングノード１１０のメモリ２１２に代わりに記憶されてもよい。いくつかの実施形態において、ＧＰＴ２０６のサイズは、利用可能なキャッシュメモリ２０４に基づき得る。そのような実施形態において、ＧＰＴ２０６のサイズが利用可能なキャッシュメモリ２０４のスペースを超えないことを確実にするために、さらなるコンピューティングノード１１０がソフトウェアクラスタスイッチ１０４に追加され得る。
【００２４】
セットマッピングテーブル（set  mapping  table）２１６は、ハッシュテーブルとして具現化することができる。したがって、ソフトウェアクラスタスイッチ１０４の制御プレーンは、ハッシュテーブルの構築や転送テーブルエントリの追加、削除、及びアップデートといった必要なオペレーションをサポートすることができる。したがって、セットマッピングテーブル２１６が、テーブルエントリをローカルで削除、作成、又はアップデートしたときに、削除、作成、又はアップデートされたテーブルエントリのインジケーションを提供するメッセージが、ＧＰＴ２０６及び／又は転送テーブル２０８内の対応するテーブルエントリを適切に削除、作成、又はアップデートするために、ソフトウェアクラスタスイッチ１０４内の他のコンピューティングノード１１０に送信され得る。
【００２５】
データストレージ２０８は、データの短期記憶又は長期記憶のために構成される任意のタイプの１以上のデバイスとして具現化することができる。そのようなデバイスとして、例えば、メモリデバイス及び回路、メモリカード、ハードディスクドライブ、ソリッドステートドライブ、又は他のデータ記憶デバイス等がある。例えば、データストレージ２１８は、コンピューティングノード１１０により初期化及び／又は実行される１以上のオペレーティングシステムを記憶するよう構成することができる。いくつかの実施形態において、１以上のオペレーティングシステムの諸部分は、より高速な処理のために、且つ／あるいは任意の他の目的のために、動作中、メモリ２１２にコピーされ得る。
【００２６】
コンピューティングノード１１０の通信回路２２０は、１以上の通信ネットワーク（例えば、ローカルエリアネットワーク、パーソナルエリアネットワーク、ワイドエリアネットワーク、セルラネットワーク、インターネット等のグローバルネットワーク等）を介する、コンピューティングノード１１０、ソースコンピューティングデバイス１０２、宛先コンピューティングデバイス１０６、インターコネクトデバイス１２０、及び／又は、他のコンピューティングデバイス若しくはネットワーキングデバイスの間の通信を可能にすることができる任意のタイプの通信回路、通信デバイス、又はこれらの集合として具現化することができる。通信回路２２０は、任意の１以上の通信技術（例えば、無線通信又は有線通信）と関連プロトコル（例えば、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｗｉ−Ｆｉ（登録商標）、ＷｉＭＡＸ（登録商標）等）とを使用してそのような通信を実現するよう構成することができる。例示的な実施形態において、通信回路２２０は、１以上の通信インタフェース２２２を含む、あるいは、１以上の通信インタフェース２２２に通信可能に接続される。通信インタフェース２２２は、コンピューティングノード１１０を、任意の数の他のコンピューティングノード１１０、インターコネクトデバイス１２０、ネットワーク（例えば、物理ネットワーク又は論理ネットワーク）、及び／又は外部コンピューティングデバイス（例えば、ソースコンピューティングデバイス１０２、宛先コンピューティングデバイス１０６、他のネットワーク通信管理デバイス等）に通信可能に接続するよう構成することができる。
【００２７】
次に図３を参照すると、使用の際、コンピューティングノード１１０の各々は、動作中に環境３００を確立する。例示的な環境３００は、ネットワーク通信モジュール３１０、ルーティングテーブル管理モジュール３２０、グローバル分割テーブル（ＧＰＴ）管理モジュール３３０、転送テーブル管理モジュール３４０、転送テーブルルックアップモジュール３５０、及びＧＰＴルックアップモジュール３６０を含む。環境３００のモジュール、ロジック、及び他のコンポーネントの各々は、ハードウェア、ソフトウェア、ファームウェア、又はこれらの組合せとして具現化することができる。例えば、環境３００のモジュール、ロジック、及び他のコンポーネントの各々は、コンピューティングノード１１０のプロセッサ又は他のハードウェアコンポーネントの一部を形成してもよいし、コンピューティングノード１１０のプロセッサ又は他のハードウェアコンポーネントにより確立されてもよい。したがって、いくつかの実施形態において、環境３００のモジュールのうちの１以上は、回路又は電気デバイスの集合（例えば、ネットワーク通信回路、ルーティング管理回路等）として具現化することができる。例示的な環境３００において、コンピューティングノード１１０は、ルーティングテーブルデータ３０２、セットマッピングデータ３０４、ＧＰＴデータ３０６、及び転送テーブルデータ３０８を含み、これらの各々は、コンピューティングノード１１０の様々なモジュール及び／又はサブモジュールのうちの１以上によりアクセス可能であり得る。コンピューティングノード１１０は、サーバデバイスにおいて通常見つけられる、説明の明瞭さのために図３には示されていない他のコンポーネント、サブコンポーネント、モジュール、及びデバイスを含み得ることを理解すべきである。
【００２８】
ネットワーク通信モジュール３１０は、ソースコンピューティングデバイス１０２、インターコネクトデバイス１２０、及び宛先コンピューティングデバイス１０６の間のネットワーク通信を円滑にするよう構成される。各コンピューティングノード１１０は、ルーティング及び交換の目的のために構成することができる。したがって、各コンピューティングノード１１０は、１以上の外部ポート（すなわち、通信インタフェース２２２）からネットワークパケット１０８を受信して、フロー識別ルールに基づいて宛先又は出力ポートに転送するために、ネットワークパケット１０８を別のコンピューティングノード１１０に送信することができる。すなわち、ネットワーク通信モジュール３１０は、コンピューティングデバイス１１０が外部コンピューティングデバイスからネットワークパケット１０８を受信しているか、且つ／あるいは、ネットワークパケットを宛先コンピューティングデバイスに送信しているかに応じて、入口コンピューティングデバイス１１２及び／又は出口コンピューティングデバイス１１８の両方として挙動するよう構成することができる。例えば、コンピューティングデバイス１１０が、ネットワークパケット１０８を受信し、受信したネットワークパケット１０８に対応する、転送テーブル２０８の部分を有するといった所定の条件下において、コンピューティングデバイス１１０は、入口コンピューティングデバイス１１２及び出口コンピューティングデバイス１１８の両方として挙動することができる。
【００２９】
いくつかの実施形態において、ネットワーク通信モジュール３１０は、入力通信モジュール３１２及び／又は出力通信モジュール３１４を含み得る。入力通信モジュール３１２は、コンピューティングノード１１０が入口コンピューティングノード１１２として動作しているときに、ソースコンピューティングデバイス１０２（例えば、ネットワークスイッチ、ネットワークルータ、発信元コンピューティングデバイス等）から、１以上のネットワークパケット１０８を受信するよう構成される。受信される１以上のネットワークパケット１０８は、受信されるネットワークパケット１０８のターゲットの宛先インターネットプロトコル（ＩＰ）アドレスを含むＩＰパケットとして具現化され得る。もちろん、受信される１以上のネットワークパケット１０８は、例えば、宛先ポート、送信元ＩＰアドレス、ソースポート、プロトコル情報、及び／又はＭＡＣアドレスといった他のタイプの情報を含み得る。しかしながら、受信される１以上のネットワークパケット１０８は、他の実施形態では、任意の他のタイプのネットワークパケットとして具現化されてもよいことを理解すべきである。いくつかの実施形態において、１以上のネットワークパケット１０８は、図２の例示的なコンピューティングノード１１０の通信インタフェース２２２に通信可能に接続された外部コンピューティングデバイスから受信され得る。入力通信モジュール３１２が外部コンピューティングデバイスから１以上のネットワークパケット１０８を受信する実施形態において、コンピューティングノード１１０は、「入口」コンピューティングノード１１２と呼ばれ得ることを理解すべきである。入力通信モジュール３１２は、ルーティングテーブルデータ３０２、セットマッピングデータ３０４、ＧＰＴデータ３０６、及び／又は転送テーブルデータ３０８の任意のデータに対してアップデートが実行された後、他のコンピューティングノード１１０にインジケーションを提供するようさらに構成することができる。
【００３０】
出力通信モジュール３１４は、コンピューティングノード１１０が「出口」コンピューティングノード１１８として動作しているときに、出力ポートを判別して、その出力ポートから宛先コンピューティングデバイス１０６に向かうように、ソフトウェアクラスタスイッチ１０４からネットワークパケット１０８を送信するよう構成される。すなわち、出力通信モジュール３１４は、ネットワークパケット１０８をその最終宛先に向けて送信するよう構成される。例えば、いくつかの実施形態において、ネットワークパケット１０８の最終宛先は、出口コンピューティングノード１１８の通信インタフェース２２２のうちの１つに直接接続されている外部コンピューティングデバイスであり得る。別の例では、いくつかの実施形態において、ネットワークパケット１０８の最終宛先は、１以上のネットワークを介して出口コンピューティングノード１１８に通信可能に接続されている外部コンピューティングデバイスであり得る。
【００３１】
ルーティングテーブル管理モジュール３２０は、ルーティングテーブル２１４に記憶されるルーティングテーブルデータ３０２と、セットマッピングテーブル２１６に記憶されるセットマッピングデータ３０４と、を維持するよう構成される。ルーティングテーブルデータ３０２を維持するために、ルーティングテーブル管理モジュール３２０は、ルーティングテーブルデータ３０２の構築及び変更（例えば、追加、削除、及び／又は変更）をサポートするようさらに構成される。いくつかの実施形態において、ルーティングテーブルデータ３０２は、ネットワークコントローラ等の外部コンピューティングデバイスから、コンピューティングノード１１０により受信され得る。セットマッピングデータ３０４を維持するために、ルーティングテーブル管理モジュール３２０は、セットマッピングデータ３０４の構築及び変更（例えば、追加、削除、及び／又は変更）をサポートするようさらに構成される。セットマッピングデータ３０４は、複数のバケットを含むハッシュテーブルを含む。各バケットは、入力キー及び入力キーの対応する値を記憶するための１以上のエントリを含む。ルーティングテーブル管理モジュール３２０は、各入力キーがどの指定バケット（designated  bucket）に記憶されるべきかを判定するための、バケットからグループへのマッピングスキーム（bucket-to-group  mapping  scheme）（すなわち、キーの２レベルハッシング）を使用するようさらに構成される。いくつかの実施形態において、ルーティングテーブル管理モジュール３２０は、複数のバケットが割り当てられるグループを判別するよう構成される。そのような実施形態において、バケットの連続するブロック、すなわち、キーブロックを使用して、多数のブロック、及びさらに多数のエントリを、少数のグループにマッピングすることができる。
【００３２】
いくつかの実施形態において、入力キーは、例えば、宛先ＩＰアドレス、宛先ＭＡＣアドレス、フローラベル、５タプルフロー識別子（すなわち、ソースポート、宛先ポート、送信元ＩＰアドレス、宛先ＩＰアドレス、及びプロトコル）といった、ネットワークパケット１０８のフロー識別子の少なくとも一部分から構成され得る。入力キーの各セットは、入力キーに直接適用され得るハッシュ関数（例えば、単純一様ハッシュ）に基づいて、バケットに配置され得、その結果が、入力キーが記憶される指定バケットに対応し得る。したがって、２以上の入力キー（例えば、１６個の入力キー）が、各指定バケットに記憶され得る。さらに、各コンピューティングノード１１０には、一意な識別子、すなわち、ソフトウェアクラスタスイッチ１０４の各コンピューティングノード１１０と他のコンピューティングノード１１０とを区別するために使用されるノードインデックスが割り当てられる。いくつかの実施形態において、ノードインデックスは、バイナリ参照番号（binary  reference  number）とすることができる。
【００３３】
ＧＰＴ２０６の各エントリは、フロー識別子が割り当てられている候補グループ（すなわち、各バケットが１以上のエントリを含むバケットのブロック）に対応するセットマッピングインデックスと、ハッシュ関数ファミリ（hash  function  family）のうち、フロー識別子に対応するノードインデックス（すなわち、そのフロー識別子に関する出口コンピューティングノードに対するインデックス）を生成するハッシュ関数のインデックスに対応するハッシュ関数インデックスと、を含む。ハッシュ関数インデックスを判別するために、ルーティングテーブル管理モジュール３２０は、ブルートフォース計算を使用して、入力キーを記憶する必要なく、ハッシュ関数ファミリのうちのどのハッシュ関数が、グループの各入力キーを、出力値（すなわち、ノードインデックス）の小さなセットにマッピングしているかを判別するようさらに構成される。すなわち、正しいノードインデックスが返されるまで、ハッシュ関数ファミリの各ハッシュ関数が、予め定められた順番で、グループの各エントリに適用され得る。セットマッピングインデックスと同様に、ハッシュ関数インデックスも、ハッシュ関数ファミリのハッシュ関数の数に対して、ほんの数ビットのサイズしか必要としない。バケットからグループへのマッピングスキームの結果として、グループの全てのために適切なハッシュ関数を見つけ出すことが、より実現可能であり得る。さらに、インデックス（すなわち、セットマッピングインデックス及びハッシュ関数インデックス）だけを記憶することは、ＧＰＴ２０６が、ルーティングテーブル２１４よりもコンパクトでサイズが小さくなることをもたらすことができる。
【００３４】
さらに、入力キーを、その対応するバケットに、結果として、その対応するグループに追加するときに、ハッシュ関数は、そのグループ及びアップデートされた対応するＧＰＴデータ３０６（すなわち、ハッシュ関数インデックス）のために、再計算される必要があり得る。したがって、いくつかの実施形態において、ルーティングテーブル管理モジュール３２０は、セットマッピングデータ３０４に対する変更が生じたことを示す通知を、ＧＰＴ管理モジュール３３０及び／又は転送テーブル管理モジュール３４０に提供することができる。いくつかの実施形態において、セットマッピングデータ３０４の各バケット内のエントリの数は、サイズが制限され得る。すなわち、セットマッピングデータ３０４は、各バケットについて最大数の入力キーの記憶をサポートすることのみ可能である。最大数の入力キーが対応するバケットにすでに存在している場合、特定のエントリは無視され得る。したがって、ＧＰＴ２０６は、ハッシュ関数の出力に基づいて、ネットワークパケット１０８を特定のコンピューティングノード１１０に依然としてルーティングすることがある。しかしながら、そのコンピューティングノード１１０は、出口コンピューティングデバイス１１８に対応していないことがある。結果として、ネットワークパケット１０８がルーティングされたコンピューティングノード１１０（すなわち、「間接（bounce）」コンピューティングノード又は「中間」コンピューティングノード）は、次いで、完全なルーティングテーブルのルックアップを実行して、そのパケットを適切な出口コンピューティングデバイス１１８に送信することがある。すなわち、さらなるホップが追加され得る。
【００３５】
ＧＰＴ管理モジュール３３０は、制御プレーンにおいて、ＧＰＴデータ３０６を構築して維持（すなわち、追加、削除、変更等）するよう構成される。いくつかの実施形態において、ＧＰＴデータ３０６は、ルーティングテーブルデータ３０２に基づいて生成され得るＧＴＰ２０６を含み得る。ＧＰＴデータ３０６全体の再構築を避けるために、構築を開始する前に、総テーブルサイズの事前知識が必要とされ得る。したがって、いくつかのワークロードに関して、総テーブルサイズの粗推定が、様々なヒューリスティック及び／又は推定に基づいて、求められ得る。さらに、いくつかの実施形態（例えば、ｖＥＰＣ）において、入力キーの範囲の事前知識を用いて、必要に応じてアップデートされ得る、ＧＰＴデータ３０６のためのテーブル（例えば、図２のＧＰＴ２０６）を構築することができる。入力キーの範囲の事前知識を確認できない他の実施形態においては、オンラインブートストラップの手段として、バッチ構築が実行され得る。詳細には、転送テーブル全体の完全複製（すなわち、ＧＰＴ２０６ではない）が、十分な入力キーが収集されるまで、各コンピューティングノード１１０において使用され得、十分な入力キーが収集されると、ＧＰＴデータ３０６のためのテーブルが、収集された入力キーに基づいて構築され得る。
【００３６】
ＧＰＴ管理モジュール３３０は、エントリがＧＰＴデータ３０６から削除されるべきであるという通知を（例えば、ルーティングテーブル管理モジュール３２０から）受信するようさらに構成され得る。ｖＥＰＣの実施形態において、例えば、この通知は、モビリティ管理エンティティ（ＭＭＥ）から受信され得る。スイッチ又はルータの実施形態において、ローカル転送テーブル２０８は、最長時間未使用（ＬＲＵ）除去ポリシ等の除去ポリシを保持することができる。エントリがＧＰＴデータ３０６から削除された後、ＧＰＴ管理モジュール３３０は、通知を制御プレーンに提供することができる。ＧＰＴ管理モジュール３３０は、エントリをアップデートするときに、対応するグループのためのハッシュ関数を再計算し、それに応じて、新たなハッシュ関数のインデックスを保存することができる。
【００３７】
転送テーブル管理モジュール３４０は、制御プレーンにおいて、転送テーブル（例えば、図２の転送テーブル２０８）を構築して、様々な追加オペレーション、削除オペレーション、及び変更オペレーションを用いて、転送テーブルの転送テーブルデータ３０８を維持するよう構成される。したがって、いくつかの実施形態において、転送テーブルデータ３０８は、コンピューティングノード１１０のローカルにある転送テーブル２０８（すなわち、転送テーブル全体の一部又はサブセット）を含み得る。転送テーブルルックアップモジュール３５０は、転送テーブルデータ３０８を維持する際に実行されたオペレーションに基づいてＧＰＴデータ３０６に対して対応するアクションをとるようにＧＰＴ管理モジュール３３０に通知する通知を、ＧＰＴ管理モジュール３３０に提供するようさらに構成され得る。例えば、転送テーブルルックアップモジュール３５０が、転送テーブルデータ３０８から転送テーブルエントリを削除するために削除オペレーションを実行した場合、転送テーブルルックアップモジュール３５０は、どの転送テーブルエントリが削除されたかを示す通知を、ＧＰＴ管理モジュール３３０に提供することができるので、ＧＰＴ管理モジュール３３０は、ＧＰＴデータ３０６から、対応するエントリを削除することができる。
【００３８】
転送テーブルルックアップモジュール３５０は、データプレーンにおいて、ネットワークパケット１０８に関する転送情報を判別するために、転送テーブルデータ３０８に対してルックアップオペレーションを実行するよう構成される。前述したように、ソフトウェアクラスタスイッチ１０４内の各コンピューティングノード１１０は、転送テーブルエントリの一部をホストすることができる。各コンピューティングノード１１０に対する転送テーブルエントリの割り当てを決定するために、転送テーブル全体が、コンピューティングノード１１０のうちどれが処理ノードであるか（すなわち、ネットワークパケット１０８を処理する役割を担うか）に基づいて、分割されて分散される。したがって、コンピューティングノード１１０の各々は、そのコンピューティングノード１１０が処理して送信する役割を担う、転送テーブルデータ３０８の転送テーブルエントリの一部のみを受信する。したがって、コンピューティングノード１１０のローカルにある転送テーブル２０８は、その特定のコンピューティングデバイス１１０に対応する転送テーブルエントリのみを含み得る。
【００３９】
ＧＰＴルックアップモジュール３６０は、データプレーンにおいて、どのコンピューティングノード１１０が処理ノードであるか（すなわち、出口コンピューティングノードであるか）を判定するために、ＧＰＴデータ３０６に対してルックアップオペレーションを実行するよう構成される。そうするために、ＧＰＴルックアップモジュール３６０は、ハッシュ関数を、ネットワークパケット１０８のフロー識別子（例えば、宛先ＩＰアドレス、宛先ＭＡＣアドレス、５タプルフロー識別子等）に適用して、フロー識別子エントリが記憶されているバケット（すなわち、ＧＰＴテーブル２０６の１以上のエントリ）を判別するよう構成され得る。ＧＰＴルックアップモジュール３６０は、ＧＰＴデータ３０６に対してルックアップオペレーションを実行したことに応じて、処理ノード（すなわち、出口コンピューティングノード１１８）に対応する値（すなわち、インデックス）を返すことができる。
【００４０】
ＧＰＴテーブル２０６内に現在存在するエントリの数が、ＧＰＴテーブル２０６の許容可能なエントリの最大数を超えているとき等の所定の条件下において、フロー識別子のためのハッシュ関数の検索に関連するコストが、予め定められたコスト閾値を超えることがある。そのような条件下において、ＧＰＴルックアップモジュール３６０は、正しいハッシュ関数ではない可能性があるハッシュ関数の出力に基づいて、別のコンピューティングノード１１０に、そのコンピューティングノード１１０が処理ノードではない場合でも、ネットワークパケット１０８をルーティングすることがある。したがって、ルーティングされたネットワークパケット１０８を受信したコンピューティングノード１１０が、処理ノードではない場合、処理ノードではないそのコンピューティングノード１１０は、ルーティングテーブルに対して完全なルックアップを実行して、ネットワークパケット１０８を処理ノードに送信することがある。これは、さらなるホップをもたらす。いくつかの実施形態において、ＧＰＴルックアップモジュール３６０は、どの最終出力ポートがネットワークパケット１０８の宛先ＩＰアドレスに対応するかを示すインジケーションを、出力通信モジュール３１４に提供するようさらに構成され得る。
【００４１】
次に図４を参照すると、使用の際、コンピューティングノード１１０（例えば、図１の入口コンピューティングノード１１２）は、受信されたネットワークパケット（例えば、ネットワークパケット１０８）に関する出口コンピューティングノード（例えば、出口コンピューティングノード１１８）を判別するための方法４００を実行することができる。前述したように、コンピューティングノード１１０のうちのいずれも、入口コンピューティングノード１１２として動作することができる。方法４００は、ブロック４０２で始まる。ブロック４０２において、入口コンピューティングノード１１２は、ネットワークパケット１０８が、例えば、ソースコンピューティングノード１０２から、受信されたかどうかを判定する。そうするために、入口コンピューティングノード１１２は、新たなネットワークパケット１０８が受信される１以上の通信インタフェース２２２をモニタリングすることができる。入口コンピューティングノード１１２が、新たなネットワークパケット１０８が受信されていないと判定した場合、方法４００は、ブロック４０２にループバックし、入口コンピューティングノード１１２は、新たなネットワークパケット１０８の受信のモニタリングを続ける。しかしながら、入口コンピューティングノード１１２が、新たなネットワークパケット１０８が受信されたと判定した場合、方法４００は、ブロック４０４に進む。
【００４２】
ブロック４０４において、入口コンピューティングノード１１２は、ネットワークパケット１０８のフロー識別子を判別する。いくつかの実施形態において、フロー識別子は、ソフトウェアクラスタスイッチ１０４のコンピューティングノード１１０のうちの１つに通信可能に接続されているターゲットコンピューティングデバイス（例えば、宛先コンピューティングデバイス１０６）、又は、１以上のネットワーク及び／又はネットワーキングデバイスを介してソフトウェアクラスタスイッチ１０４に通信可能に接続されている宛先コンピューティングデバイス（例えば、宛先コンピューティングデバイス１０６）のアドレス及び／又はポートであり得る。一実施形態において、受信されるネットワークパケット１０８は、数あるタイプの情報の中でもとりわけ、受信されるネットワークパケット１０８のターゲットの宛先インターネットプロトコル（ＩＰ）アドレスを含むＩＰパケットとして具現化され得る。そのような実施形態において、入口コンピューティングノード１１２は、受信されたＩＰネットワークパケット１０８のＩＰヘッダを調べて（すなわち、解析して）、ソースコンピューティングデバイスのＩＰアドレス及び／又はポート（すなわち、送信元アドレス及び／又はポート）、ターゲットコンピューティングデバイスのＩＰアドレス及び／又はポート（すなわち、宛先アドレス及び／又はポート）、及び／又はプロトコルを判別することができる。
【００４３】
ブロック４０６において、入口コンピューティングノード１１２は、ＧＰＴ２０６が作成されているかどうかを判定する。前述したように、いくつかの実施形態において、ＧＰＴ２０６を構築するために、最小数の入力キーが必要とされ得る。したがって、ＧＰＴがまだ作成されていないそのような実施形態において、ブロック４０８において、入口コンピューティングノード１１２は、出口コンピューティングノード１１８を識別するために、完全に複製された転送テーブル（すなわち、転送テーブル全体のローカル分割ではなく、転送テーブル全体）に対してルックアップを実行する。ＧＰＴ２０６が作成されている場合、方法４００は、ブロック４１６に進み、ブロック４１６において、以下でさらに説明するルックアップオペレーションが実行される。ブロック４０８から、方法４００は、ブロック４１０に進み、ブロック４１０において、入口コンピューティングノード１１２は、入口コンピューティングノード１１２が、ブロック４０８におけるルックアップにおいて識別された出口コンピューティングノード１１８と同じコンピューティングノードであるかどうかを判定する。すなわち、入口コンピューティングノード１１２は、入口コンピューティングノード１１２が出口コンピューティングノード１１８でもあるかどうかを判定する。入口コンピューティングノード１１２が出口コンピューティングノード１１８である場合、方法４００は、ブロック４１２に進み、ブロック４１２において、入口コンピューティングノード１１２は、ブロック４０８において実行されたルックアップに基づく、入口コンピューティングノード１１２の出力ポートを介して、ネットワークパケット１０８を送信する。入口コンピューティングノード１１２が、出口コンピューティングノード１１８が入口コンピューティングノード１１２以外のコンピューティングノードであると判定した場合、方法４００は、ブロック４１４に進み、ブロック４１４において、入口コンピューティングノード１１２は、ブロック４０８において判別された出口コンピューティングノード１１８に、ネットワークパケット１０８を送信する。
【００４４】
前述したように、現在収集されている入力キーの数が、ＧＰＴ２０６を構築するために必要とされる入力キーの最小数よりも少ないと入口コンピューティングノード１１２が判定した場合、方法４００は、ブロック４１６に進む。ブロック４１６において、入口コンピューティングノード１１２は、キーとしてセットマッピングインデックスを用いて、ＧＰＴに対してルックアップを実行し、ルックアップの結果として、ハッシュ関数インデックス（すなわち、キーがセットマッピングインデックスに合致するキー値ペアの値）を取得する。そうするために、ブロック４１８において、入口コンピューティングノード１１２は、ハッシュ関数（例えば、単純一様ハッシュ）をフロー識別子に適用して、セットマッピングインデックスを識別する。さらに、ブロック４１８において、入口コンピューティングノード１１２は、セットマッピングインデックスをＧＰＴ２０６と比較して、ハッシュ関数のインデックス（すなわち、ハッシュ関数インデックス）を判別する。
【００４５】
ＧＰＴに対するルックアップは、出口コンピューティングノード１１８に対応しない、ＧＰＴ２０６のセットマッピングインデックスを返すことがあることを理解すべきである。例えば、ＧＰＴ２０６が完全である（すなわち、さらなるフローをサポートできない）実施形態において、ＧＰＴ２０６に対するルックアップは、ＧＰＴ２０６に対するルックアップが実行されたフロー識別子に対応しないハッシュ関数インデックスを返すことがある。したがって、ブロック４１６において実行されるルックアップオペレーションは、出口コンピューティングノード１１８ではなく、「間接」コンピューティングノード又は「中間」コンピューティングノードであるコンピューティングノードをもたらすことがある。
【００４６】
ブロック４２４において、入口コンピューティングノード１１２は、入口コンピューティングノード１１２が、ブロック４２２において判別された次のコンピューティングノード１１８と同じコンピューティングノードであるかどうかを判定する。入口コンピューティングノード１１２が、次のコンピューティングノード１１８と同じコンピューティングノードではない場合、方法４００は、ブロック４２６に進み、ブロック４２６において、入口コンピューティングノード１１２は、ネットワークパケット１０８を次のコンピューティングノードに送信する。入口コンピューティングノード１１２が、次のコンピューティングノードと同じコンピューティングノードである場合、方法４００は、図５に示されるブロック４２８に進み、ブロック４２８において、入口コンピューティングノード１１２は、受信されたネットワークパケットを送信するための、入口コンピューティングノード１１２の出力ポートを判別するために、転送テーブルのローカル部分（例えば、転送テーブル２０８）に対して、フロー識別子のルックアップを実行する。
【００４７】
ブロック４３０において、入口コンピューティングノード１１２は、ブロック４１６において実行されたルックアップオペレーションが成功したかどうかを判定する。ブロック４１６において実行されたルックアップが成功した場合、方法４００は、ブロック４３２に進み、ブロック４３２において、入口コンピューティングノード１１２は、ルックアップオペレーションにより判別された、入口コンピューティングノード１１２の出力ポートを介して、ネットワークパケット１０８をターゲットコンピューティングデバイス（例えば、宛先コンピューティングデバイス１０６）に送信する。ルックアップオペレーションが成功しなかった場合、方法４００は、ブロック４３４に進み、ブロック４３４において、入口コンピューティングノード１１２は、出口コンピューティングノード１１８を判別するために、ルーティングテーブル（例えば、ルーティングテーブル２１４）に対して、フロー識別子のルックアップを実行する。ブロック４３６において、入口コンピューティングノード１１２は、受信されたネットワークパケットを、ブロック４３４において判別された出口コンピューティングノード１１８に送信する。
【００４８】
いくつかの実施形態において、ブロック４０８、ブロック４２４、及びブロック４２８におけるルックアップオペレーションにおいて使用されるフロー識別子は、異なるフロー識別子、及び／又は、同じフロー識別子の異なる部分であり得ることを理解すべきである。例えば、いくつかの実施形態において、ブロック４０８及びブロック４２４において実行されるルックアップオペレーションは、ターゲットコンピューティングデバイスのＩＰアドレスを使用し得るのに対し、ブロック４２８において実行されるルックアップオペレーションは、５タプルフロー識別子を使用し得る。
【００４９】
次に図６を参照すると、使用の際、コンピューティングノード１１０（例えば、図１のコンピューティングノード１１４、コンピューティングノード１１６、又は出口コンピューティングノード１１８）は、入口ノードから受信したネットワークパケット（例えば、ネットワークパケット１０８）を転送するための方法６００を実行することができる。方法６００は、ブロック６０２で始まる。ブロック６０２において、次のコンピューティングノード１１８は、ネットワークパケット１０８が、例えば、入口コンピューティングノード１１２から、次のコンピューティングノードにおいて受信されたかどうかを判定する。そうするために、次のコンピューティングノードは、ネットワークパケット１０８が受信される１以上の通信インタフェース２２２をモニタリングすることができる。
【００５０】
前述したように、入口コンピューティングノード１１２は、ＧＰＴ２０６に対して、ルックアップオペレーションを実行することがあり、これは、入口コンピューティングノード１１２が、次のコンピューティングノードが出口コンピューティングノード１１８であるか間接コンピューティングノードであるかを認識することなく、ネットワークパケットを次のコンピューティングノードに送信することをもたらし得る。したがって、いくつかの実施形態において、ネットワークパケットが入口ノード１１２から送信されたかどうか（すなわち、ＧＰＴ２０６とすでに比較されているかどうか）を示すインジケーションが、ブロック６０２において受信されるネットワークパケット内（例えば、パッカ（packer）又はメッセージヘッダ中）に提供され得る、あるいは、ブロック６０２において受信されるネットワークパケットに付随して提供され得る。
【００５１】
次のコンピューティングノードが、ネットワークパケット１０８が受信されていないと判定した場合、方法６００は、ブロック６０２にループバックし、次のコンピューティングノードは、ネットワークパケット１０８の受信のモニタリングを続ける。しかしながら、次のコンピューティングノードが、ネットワークパケットが受信されたと判定した場合、方法６００は、ブロック６０４に進み、ブロック６０４において、次のコンピューティングノードは、ネットワークパケット１０８のフロー識別子を判別する。いくつかの実施形態において、フロー識別子は、ソフトウェアクラスタスイッチ１０４のコンピューティングノード１１０のうちの１つに通信可能に接続されているターゲットコンピューティングデバイス（例えば、宛先コンピューティングデバイス１０６）、又は、１以上のネットワーク及び／又はネットワーキングデバイスを介してソフトウェアクラスタスイッチ１０４に通信可能に接続されている宛先コンピューティングデバイス（例えば、宛先コンピューティングデバイス１０６）のアドレス及び／又はポートであり得る。一実施形態において、受信されるネットワークパケット１０８は、数あるタイプの情報の中でもとりわけ、受信されるネットワークパケット１０８のターゲットの宛先インターネットプロトコル（ＩＰ）アドレスを含むＩＰパケットとして具現化され得る。そのような実施形態において、次のコンピューティングノードは、受信されたＩＰネットワークパケット１０８のＩＰヘッダを調べて（すなわち、解析して）、ターゲットコンピューティングデバイスのＩＰアドレス及び／又はポート、ソースコンピューティングデバイスのＩＰアドレス及び／又はポート、及び／又はプロトコルを判別することができる。
【００５２】
ブロック６０６において、次のコンピューティングノードは、次のコンピューティングノードの出力ポートを判別するために、転送テーブルのローカル部分（例えば、転送テーブル２０８）に対して、フロー識別子のルックアップを実行する。ブロック６０８において、次のコンピューティングノードは、ブロック６０６において実行されたルックアップが成功したかどうかを判定する。すなわち、次のコンピューティングノードは、次のコンピューティングノードが、受信されたネットワークパケットを送信する出口コンピューティングノード１１８であるかどうかを判定する。ブロック６０６において実行されたルックアップが成功した場合（すなわち、次のコンピューティングノードが出口コンピューティングノード１１８である場合）、方法６００は、ブロック６１０に進み、ブロック６１０において、出口コンピューティングノード１１８である次のコンピューティングノードは、ブロック６０６において実行されたルックアップにより判別された、次のコンピューティングノードの出力ポートを介して、ネットワークパケット１０８をターゲットコンピューティングデバイス（例えば、宛先コンピューティングデバイス１０６）に送信する。ブロック６０６において実行されたルックアップが成功しなかった場合（すなわち、次のコンピューティングノードが、実際には、「間接」ノード又は「中間」ノードである場合）、方法６００は、ブロック６１２に進み、ブロック６１２において、次のコンピューティングノードは、出口コンピューティングノード１１８を判別するために、ルーティングテーブル（例えば、ルーティングテーブル２１４）に対して、フロー識別子のルックアップを実行する。ブロック６１４において、次のコンピューティングノードは、受信されたネットワークパケットを、ブロック６１２において判別された出口コンピューティングノード１１８に送信する。
【００５３】
次に図７を参照すると、コンピューティングノード１１０は、ネットワークパケット（例えば、ネットワークパケット１０８）のネットワークフロー識別子に対応するエントリを、コンピューティングノード１１０のルーティングテーブル（例えば、ルーティングテーブル２１４）に追加するための方法７００を実行することができる。方法７００は、ブロック７０２で始まる。ブロック７０２において、コンピューティングノード１１０は、エントリ（すなわち、フロー識別子）をルーティングテーブル２１４に追加するリクエストが、コンピューティングノード１１０において受信されたかどうかを判定する。コンピューティングノード１１０が、リクエストが受信されていないと判定した場合、方法７００は、ブロック７０２にループバックし、コンピューティングノード１１０は、追加エントリリクエストの受信のモニタリングを続ける。しかしながら、コンピューティングノード１１０が、追加エントリリクエストが受信されたと判定した場合、方法７００は、ブロック７０４に進む。
【００５４】
ブロック７０４において、コンピューティングノード１１０は、ハッシュ関数をフロー識別子に適用して、フロー識別子が記憶され得る、ハッシュテーブル（例えば、セットマッピングデータ３０４）のバケットを識別する。ブロック７０６において、コンピューティングノード１１０は、識別されたバケットが、フロー識別子を記憶するための利用可能なエントリを有するかどうかを判定する。識別されたバケットが、利用可能なエントリを有さないと判定された場合、方法７００は、ブロック７０２にループバックし、コンピューティングノード１１０は、追加エントリリクエストの受信のモニタリングを続ける。識別されたバケットが、利用可能なエントリを有すると判定された場合、方法７００は、ブロック７０８に進み、ブロック７０８において、コンピューティングノード１１０は、フロー識別子を、識別されたバケット内の利用可能なエントリに追加する。ブロック７１０において、コンピューティングノード１１０は、識別されたバケットに以前に割り当てられたグループ（すなわち、各バケットがフロー識別子を記憶するための１以上のエントリを含むバケットのブロック）に基づいて、ハッシュ関数を再計算する。すなわち、コンピューティングデバイス１１０は、同じグループに割り当てられている各バケット内の各エントリについてハッシュ関数を再計算する。前述したように、ハッシュ関数を再計算することは、ネットワークパケット１０８に関する処理ノード、すなわち、出口コンピューティングノードに対応するノードインデックスに等しい結果が返されるまで、ハッシュ関数ファミリの複数のハッシュ関数の各々を適用することを含み得る。
【００５５】
ブロック７１２において、コンピューティングノード１１０は、再計算されたハッシュ関数に基づいて、ＧＰＴ２０６をアップデートする。すなわち、コンピューティングノード１１０は、ブロック７０４において識別されたバケットに関する適切なハッシュ関数インデックスをアップデートする。ブロック７１４において、コンピューティングノード１１０は、ブロック７１２において実行されたＧＰＴのアップデートに基づいて他のコンピューティングノード１１０それぞれのＧＰＴをアップデートするよう示すＧＰＴアップデート通知を、他のコンピューティングノード１１０にブロードキャストする。
【００５６】
例
本明細書で開示したデバイス、システム、及び方法の例示的な例が、以下で提供される。デバイス、システム、及び方法の実施形態は、以下に記載される例の任意の１以上、及び任意の組合せを含み得る。
【００５７】
例１は、モジュール式転送テーブル拡張性のためのソフトウェアクラスタスイッチのコンピューティングノードを含み、当該コンピューティングノードは、複数のバケットを含むセットマッピングテーブルを管理するルーティングテーブル管理モジュールであって、各バケットは、当該コンピューティングノードにより受信されるネットワークパケットに対応するフロー識別子を記憶する１以上のエントリを含み、各バケットは、グループに割り当てられ、各グループは、２以上のバケットを含む、ルーティングテーブル管理モジュールと、前記ソフトウェアクラスタスイッチの次のコンピューティングノードのノード識別子を判別するために使用可能な複数のエントリを含むグローバル分割テーブル（ＧＰＴ）を管理するグローバル分割テーブル管理モジュールと、ネットワークパケットを受信したことに応じて、該ネットワークパケットのフロー識別子に基づいて、該ネットワークパケットに関する前記次のコンピューティングノードを判別し、第２のハッシュ関数を前記フロー識別子に適用して、前記次のコンピューティングノードを識別するノード識別子を生成するために、前記ＧＰＴに対してルックアップを実行するＧＰＴルックアップモジュールであって、前記ＧＰＴに対して前記ルックアップを実行することは、（ｉ）第１のハッシュ関数を前記フロー識別子に適用して、前記セットマッピングテーブルのグループを識別するセットマッピングインデックスを生成し、（ｉｉ）前記セットマッピングインデックスを前記ＧＰＴと比較して、第２のハッシュ関数を判別することを含み、前記次のコンピューティングノードは、間接コンピューティングノード又は出口コンピューティングノードの一方を含む、ＧＰＴルックアップモジュールと、前記ネットワークパケットを前記次のコンピューティングノードに送信するネットワーク通信モジュールと、を備える。
【００５８】
例２は、例１の主題を含み、前記ネットワーク通信モジュールは、さらに、別のコンピューティングノードからネットワークパケットを受信し、前記ネットワーク通信モジュールは、さらに、前記別のコンピューティングノードからの前記ネットワークパケットが、前記別のコンピューティングノードが入口コンピューティングノード又は間接ノードの一方であるというインジケーションを含むかどうかを判定する。
【００５９】
例３は、例１及び２のいずれかの主題を含み、前記別のコンピューティングノードが間接ノードであるという判定に応じて、当該コンピューティングノードの出力ポートを判別するために、転送テーブルのローカル部分において前記フロー識別子のルックアップを実行する転送テーブル管理モジュールであって、前記転送テーブルの前記ローカル部分は、当該コンピューティングノードの出力ポートに基づく、転送テーブルエントリのサブセットを含む、転送テーブル管理モジュールをさらに備える。
【００６０】
例４は、例１〜３のいずれかの主題を含み、前記ネットワーク通信モジュールは、さらに、前記転送テーブルの前記ローカル部分における前記フロー識別子の前記ルックアップが成功したという判定に応じて、前記出力ポートを介して、前記ネットワークパケットをターゲットコンピューティングデバイスに送信する。
【００６１】
例５は、例１〜４のいずれかの主題を含み、前記別のコンピューティングノードが出口ノードであるという判定に応じて、当該コンピューティングノードの出力ポートを判別するために、転送テーブルのローカル部分において前記フロー識別子のルックアップを実行する転送テーブル管理モジュールであって、前記転送テーブルの前記ローカル部分は、当該コンピューティングノードの出力ポートに基づく、転送テーブルエントリのサブセットを含む、転送テーブル管理モジュールと、前記転送テーブルの前記ローカル部分における前記フロー識別子の前記ルックアップが成功しなかったという判定に応じて、前記出口コンピューティングノードを判別するために、ルーティングテーブルにおいて前記フロー識別子のルックアップを実行するルーティングテーブルルックアップモジュールであって、前記ルーティングテーブルは、前記フロー識別子に関する前記出口コンピューティングノードを識別する、ルーティングテーブルルックアップモジュールと、をさらに備え、前記ネットワーク通信モジュールは、さらに、前記ネットワークパケットを前記出口コンピューティングノードに送信する。
【００６２】
例６は、例１〜５のいずれかの主題を含み、前記セットマッピングインデックスを前記ＧＰＴと比較して、前記第２のハッシュ関数を判別することは、（ｉ）前記セットマッピングインデックスに応じて、前記ＧＰＴの前記エントリに対してルックアップを実行し、（ｉｉ）該ルックアップの結果として、ハッシュ関数ファミリのうちのハッシュ関数を識別するハッシュ関数インデックスを取得することを含み、前記ハッシュ関数ファミリは、複数のハッシュ関数を含む。
【００６３】
例７は、例１〜６のいずれかの主題を含み、（ｉ）前記ネットワークパケットの前記フロー識別子を、当該コンピューティングノードのルーティングテーブルに追加するリクエストを受信し、（ｉｉ）前記リクエストを受信したことに応じて、前記フロー識別子を、当該コンピューティングノードの前記ルーティングテーブルに追加し、（ｉｉｉ）ハッシュ関数を前記フロー識別子に適用して、前記フロー識別子を記憶するための、前記セットマッピングテーブルのバケットを識別し、（ｉｖ）前記フロー識別子を、該バケット内のエントリに追加し、（ｖ）グループを該エントリに割り当て、（ｖｉ）前記ＧＰＴ内の該エントリに割り当てられた前記グループに対応する前記ハッシュ関数インデックスをアップデートする、ルーティングテーブル管理モジュールをさらに備える。
【００６４】
例８は、例１〜７のいずれかの主題を含み、前記ルーティングテーブル管理モジュールは、さらに、前記ソフトウェアクラスタスイッチの他のコンピューティングノードに対してアップデート通知をブロードキャストし、前記アップデート通知は、前記ＧＰＴに対する前記アップデートのインジケーションを提供する。
【００６５】
例９は、例１〜８のいずれかの主題を含み、前記ハッシュ関数インデックスをアップデートすることは、前記ハッシュ関数ファミリから、前記ネットワークパケットに関する前記出口コンピューティングノードのノードインデックスに対応する出力をもたらすハッシュ関数を識別することを含む。
【００６６】
例１０は、例１〜９のいずれかの主題を含み、前記ハッシュ関数ファミリから前記ハッシュ関数を識別することは、前記フロー識別子と同じグループに割り当てられた、前記セットマッピングテーブルの前記エントリの各々について、適用されたハッシュ関数が、前記出口コンピューティングノードに対応するノードインデックスに対応する出力をもたらすまで、前記ハッシュ関数ファミリの各ハッシュ関数を、前記フロー識別子と同じグループに割り当てられた、前記セットマッピングテーブルの各エントリに適用することを含む。
【００６７】
例１１は、例１〜１０のいずれかの主題を含み、前記ネットワークパケットの前記フロー識別子を判別することは、前記の受信されたネットワークパケットに含まれる、前記の受信されたネットワークパケットのターゲットを示す宛先アドレスを判別することを含む。
【００６８】
例１２は、例１〜１１のいずれかの主題を含み、前記ネットワークパケットの前記フロー識別子を判別することは、前記の受信されたネットワークパケットに含まれる、前記の受信されたネットワークパケットのターゲットを示す５タプルフロー識別子を判別することを含む。
【００６９】
例１３は、例１〜１２のいずれかの主題を含み、前記ソフトウェアクラスタスイッチの前記出口コンピューティングノードに対応する前記ノード識別子を判別することは、前記フロー識別子にマッピングされている出力ポートを有することに基づいて、前記転送テーブルエントリの前記サブセットを記憶している、前記ソフトウェアクラスタスイッチのコンピューティングノードとして識別される出口コンピューティングノードを判別することを含む。
【００７０】
例１４は、ソフトウェアクラスタスイッチのモジュール式転送テーブル拡張性のための方法を含み、当該方法は、コンピューティングノードにより、複数のバケットを含むセットマッピングテーブルを管理するステップであって、各バケットは、前記コンピューティングノードにより受信されるネットワークパケットに対応するフロー識別子を記憶する１以上のエントリを含み、各バケットは、グループに割り当てられ、各グループは、２以上のバケットを含む、ステップと、前記コンピューティングノードにより、前記ソフトウェアクラスタスイッチの次のコンピューティングノードのノード識別子を判別するために使用可能な複数のエントリを含むグローバル分割テーブル（ＧＰＴ）を管理するステップと、前記コンピューティングノードにより、ネットワークパケットを受信したことに応じて、該ネットワークパケットのフロー識別子に基づいて、該ネットワークパケットに関する前記次のコンピューティングノードを判別するために、前記ＧＰＴに対してルックアップを実行するステップであって、前記ＧＰＴに対して前記ルックアップを実行することは、（ｉ）第１のハッシュ関数を前記フロー識別子に適用して、前記セットマッピングテーブルのグループを識別するセットマッピングインデックスを生成し、（ｉｉ）前記セットマッピングインデックスを前記ＧＰＴと比較して、第２のハッシュ関数を判別することを含む、ステップと、前記第２のハッシュ関数を前記フロー識別子に適用して、前記次のコンピューティングノードを識別するノード識別子を生成するステップであって、前記次のコンピューティングノードは、間接コンピューティングノード又は出口コンピューティングノードの一方を含む、ステップと、前記コンピューティングノードにより、前記ネットワークパケットを前記次のコンピューティングノードに送信するステップと、を含む。
【００７１】
例１５は、例１４の主題を含み、前記コンピューティングノードにより、別のコンピューティングノードからネットワークパケットを受信するステップと、前記コンピューティングノードにより、前記別のコンピューティングノードからの前記ネットワークパケットが、前記別のコンピューティングノードが入口コンピューティングノード又は間接ノードの一方であるというインジケーションを含むかどうかを判定するステップと、をさらに含む。
【００７２】
例１６は、例１４及び１５のいずれかの主題を含み、前記コンピューティングノードにより、前記別のコンピューティングノードが間接ノードであるという判定に応じて、前記コンピューティングノードの出力ポートを判別するために、転送テーブルのローカル部分において前記フロー識別子のルックアップを実行するステップであって、前記転送テーブルの前記ローカル部分は、前記コンピューティングノードの出力ポートに基づく、転送テーブルエントリのサブセットを含む、ステップをさらに含む。
【００７３】
例１７は、例１４〜１６のいずれかの主題を含み、前記コンピューティングノードにより、前記転送テーブルの前記ローカル部分における前記フロー識別子の前記ルックアップが成功したという判定に応じて、前記出力ポートを介して、前記ネットワークパケットをターゲットコンピューティングデバイスに送信するステップをさらに含む。
【００７４】
例１８は、例１４〜１７のいずれかの主題を含み、前記コンピューティングノードにより、前記別のコンピューティングノードが出口ノードであるという判定に応じて、前記コンピューティングノードの出力ポートを判別するために、転送テーブルのローカル部分において前記フロー識別子のルックアップを実行するステップであって、前記転送テーブルの前記ローカル部分は、前記コンピューティングノードの出力ポートに基づく、転送テーブルエントリのサブセットを含む、ステップと、前記コンピューティングノードにより、前記転送テーブルの前記ローカル部分における前記フロー識別子の前記ルックアップが成功しなかったという判定に応じて、前記出口コンピューティングノードを判別するために、ルーティングテーブルにおいて前記フロー識別子のルックアップを実行するステップであって、前記ルーティングテーブルは、前記フロー識別子に関する前記出口コンピューティングノードを識別する、ステップと、前記ネットワークパケットを前記出口コンピューティングノードに送信するステップと、をさらに含む。
【００７５】
例１９は、例１４〜１８のいずれかの主題を含み、前記セットマッピングインデックスを前記ＧＰＴと比較して、前記第２のハッシュ関数を判別することは、（ｉ）前記セットマッピングインデックスに応じて、前記ＧＰＴの前記エントリに対してルックアップを実行し、（ｉｉ）該ルックアップの結果として、ハッシュ関数ファミリのうちのハッシュ関数を識別するハッシュ関数インデックスを取得することを含み、前記ハッシュ関数ファミリは、複数のハッシュ関数を含む。
【００７６】
例２０は、例１４〜１９のいずれかの主題を含み、前記ネットワークパケットの前記フロー識別子を、前記コンピューティングノードのルーティングテーブルに追加するリクエストを受信するステップと、前記リクエストを受信したことに応じて、前記フロー識別子を、前記コンピューティングノードの前記ルーティングテーブルに追加するステップと、ハッシュ関数を前記フロー識別子に適用して、前記フロー識別子を記憶するための、前記セットマッピングテーブルのバケットを識別するステップと、前記フロー識別子を、該バケット内のエントリに追加するステップと、グループを該エントリに割り当てるステップと、前記ＧＰＴ内の該エントリに割り当てられた前記グループに対応する前記ハッシュ関数インデックスをアップデートするステップと、をさらに含む。
【００７７】
例２１は、例１４〜２０のいずれかの主題を含み、前記ソフトウェアクラスタスイッチの他のコンピューティングノードに対してアップデート通知をブロードキャストするステップをさらに含み、前記アップデート通知は、前記ＧＰＴに対する前記アップデートのインジケーションを提供する。
【００７８】
例２２は、例１４〜２１のいずれかの主題を含み、前記ハッシュ関数インデックスをアップデートすることは、前記ハッシュ関数ファミリから、前記ネットワークパケットに関する前記出口コンピューティングノードのノードインデックスに対応する出力をもたらすハッシュ関数を識別することを含む。
【００７９】
例２３は、例１４〜２２のいずれかの主題を含み、前記ハッシュ関数ファミリから前記ハッシュ関数を識別することは、前記フロー識別子と同じグループに割り当てられた、前記セットマッピングテーブルの前記エントリの各々について、適用されたハッシュ関数が、前記出口コンピューティングノードに対応するノードインデックスに対応する出力をもたらすまで、前記ハッシュ関数ファミリの各ハッシュ関数を、前記フロー識別子と同じグループに割り当てられた、前記セットマッピングテーブルの各エントリに適用することを含む。
【００８０】
例２４は、例１４〜２３のいずれかの主題を含み、前記ネットワークパケットの前記フロー識別子を判別することは、前記の受信されたネットワークパケットに含まれる、前記の受信されたネットワークパケットのターゲットを示す宛先アドレスを判別することを含む。
【００８１】
例２５は、例１４〜２４のいずれかの主題を含み、前記ネットワークパケットの前記フロー識別子を判別することは、前記の受信されたネットワークパケットに含まれる、前記の受信されたネットワークパケットのターゲットを示す５タプルフロー識別子を判別することを含む。
【００８２】
例２６は、例１４〜２５のいずれかの主題を含み、前記ソフトウェアクラスタスイッチの前記出口コンピューティングノードに対応する前記ノード識別子を判別することは、前記フロー識別子にマッピングされている出力ポートを有することに基づいて、前記転送テーブルエントリの前記サブセットを記憶している、前記ソフトウェアクラスタスイッチのコンピューティングノードとして識別される出口コンピューティングノードを判別することを含む。
【００８３】
例２７は、コンピューティングノードであって、プロセッサと、複数の命令を記憶しているメモリであって、前記複数の命令は、前記プロセッサにより実行されたときに、当該コンピューティングノードに、例１４〜２６のいずれかの方法を実行させる、メモリと、備えるコンピューティングノードを含む。
【００８４】
例２８は、複数の命令を記憶している１以上のマシン読み取り可能な記憶媒体であって、前記複数の命令は、実行されたことに応じて、コンピューティングノードが、例１４〜２６のいずれかの方法を実行することをもたらす、１以上のマシン読み取り可能な記憶媒体を含む。
【００８５】
例２９は、モジュール式転送テーブル拡張性のためのソフトウェアクラスタスイッチのコンピューティングノードを含み、当該コンピューティングノードは、複数のバケットを含むセットマッピングテーブルを管理する手段であって、各バケットは、当該コンピューティングノードにより受信されるネットワークパケットに対応するフロー識別子を記憶する１以上のエントリを含み、各バケットは、グループに割り当てられ、各グループは、２以上のバケットを含む、手段と、前記ソフトウェアクラスタスイッチの次のコンピューティングノードのノード識別子を判別するために使用可能な複数のエントリを含むグローバル分割テーブル（ＧＰＴ）を管理する手段と、ネットワークパケットを受信したことに応じて、該ネットワークパケットのフロー識別子に基づいて、該ネットワークパケットに関する前記次のコンピューティングノードを判別するために、前記ＧＰＴに対してルックアップを実行する手段であって、前記ＧＰＴに対して前記ルックアップを実行する前記手段は、（ｉ）第１のハッシュ関数を前記フロー識別子に適用して、前記セットマッピングテーブルのグループを識別するセットマッピングインデックスを生成し、（ｉｉ）前記セットマッピングインデックスを前記ＧＰＴと比較して、第２のハッシュ関数を判別する手段を含む、手段と、前記第２のハッシュ関数を前記フロー識別子に適用して、前記次のコンピューティングノードを識別するノード識別子を生成する手段であって、前記次のコンピューティングノードは、間接コンピューティングノード又は出口コンピューティングノードの一方を含む、手段と、前記ネットワークパケットを前記次のコンピューティングノードに送信する手段と、を備える。
【００８６】
例３０は、例２９の主題を含み、別のコンピューティングノードからネットワークパケットを受信する手段と、前記別のコンピューティングノードからの前記ネットワークパケットが、前記別のコンピューティングノードが入口コンピューティングノード又は間接ノードの一方であるというインジケーションを含むかどうかを判定する手段と、をさらに備える。
【００８７】
例３１は、例２９及び３０のいずれかの主題を含み、前記別のコンピューティングノードが間接ノードであるという判定に応じて、当該コンピューティングノードの出力ポートを判別するために、転送テーブルのローカル部分において前記フロー識別子のルックアップを実行する手段であって、前記転送テーブルの前記ローカル部分は、当該コンピューティングノードの出力ポートに基づく、転送テーブルエントリのサブセットを含む、手段をさらに備える。
【００８８】
例３２は、例２９〜３１のいずれかの主題を含み、前記転送テーブルの前記ローカル部分における前記フロー識別子の前記ルックアップが成功したという判定に応じて、前記出力ポートを介して、前記ネットワークパケットをターゲットコンピューティングデバイスに送信する手段をさらに備える。
【００８９】
例３３は、例２９〜３２のいずれかの主題を含み、前記別のコンピューティングノードが出口ノードであるという判定に応じて、当該コンピューティングノードの出力ポートを判別するために、転送テーブルのローカル部分において前記フロー識別子のルックアップを実行する手段であって、前記転送テーブルの前記ローカル部分は、当該コンピューティングノードの出力ポートに基づく、転送テーブルエントリのサブセットを含む、手段と、前記転送テーブルの前記ローカル部分における前記フロー識別子の前記ルックアップが成功しなかったという判定に応じて、前記出口コンピューティングノードを判別するために、ルーティングテーブルにおいて前記フロー識別子のルックアップを実行する手段であって、前記ルーティングテーブルは、前記フロー識別子に関する前記出口コンピューティングノードを識別する、手段と、前記ネットワークパケットを前記出口コンピューティングノードに送信する手段と、をさらに備える。
【００９０】
例３４は、例２９〜３３のいずれかの主題を含み、前記セットマッピングインデックスを前記ＧＰＴと比較して、前記第２のハッシュ関数を判別する前記手段は、（ｉ）前記セットマッピングインデックスに応じて、前記ＧＰＴの前記エントリに対してルックアップを実行し、（ｉｉ）該ルックアップの結果として、ハッシュ関数ファミリのうちのハッシュ関数を識別するハッシュ関数インデックスを取得する手段を含み、前記ハッシュ関数ファミリは、複数のハッシュ関数を含む。
【００９１】
例３５は、例２９〜３４のいずれかの主題を含み、前記ネットワークパケットの前記フロー識別子を、当該コンピューティングノードのルーティングテーブルに追加するリクエストを受信する手段と、前記リクエストを受信したことに応じて、前記フロー識別子を、当該コンピューティングノードの前記ルーティングテーブルに追加する手段と、ハッシュ関数を前記フロー識別子に適用して、前記フロー識別子を記憶するための、前記セットマッピングテーブルのバケットを識別する手段と、前記フロー識別子を、該バケット内のエントリに追加する手段と、グループを該エントリに割り当てる手段と、前記ＧＰＴ内の該エントリに割り当てられた前記グループに対応する前記ハッシュ関数インデックスをアップデートする手段と、をさらに備える。
【００９２】
例３６は、例２９〜３５のいずれかの主題を含み、前記ソフトウェアクラスタスイッチの他のコンピューティングノードに対してアップデート通知をブロードキャストする手段をさらに備え、前記アップデート通知は、前記ＧＰＴに対する前記アップデートのインジケーションを提供する。
【００９３】
例３７は、例２９〜３６のいずれかの主題を含み、前記ハッシュ関数インデックスをアップデートする前記手段は、前記ハッシュ関数ファミリから、前記ネットワークパケットに関する前記出口コンピューティングノードのノードインデックスに対応する出力をもたらすハッシュ関数を識別する手段を含む。
【００９４】
例３８は、例２９〜３７のいずれかの主題を含み、前記ハッシュ関数ファミリから前記ハッシュ関数を識別する前記手段は、前記フロー識別子と同じグループに割り当てられた、前記セットマッピングテーブルの前記エントリの各々について、適用されたハッシュ関数が、前記出口コンピューティングノードに対応するノードインデックスに対応する出力をもたらすまで、前記ハッシュ関数ファミリの各ハッシュ関数を、前記フロー識別子と同じグループに割り当てられた、前記セットマッピングテーブルの各エントリに適用する手段を含む。
【００９５】
例３９は、例２９〜３８のいずれかの主題を含み、前記ネットワークパケットの前記フロー識別子を判別する手段は、前記の受信されたネットワークパケットに含まれる、前記の受信されたネットワークパケットのターゲットを示す宛先アドレスを判別する手段を含む。
【００９６】
例４０は、例２９〜３９のいずれかの主題を含み、前記ネットワークパケットの前記フロー識別子を判別する手段は、前記の受信されたネットワークパケットに含まれる、前記の受信されたネットワークパケットのターゲットを示す５タプルフロー識別子を判別する手段を含む。
【００９７】
例４１は、例２９〜４０のいずれかの主題を含み、前記ソフトウェアクラスタスイッチの前記出口コンピューティングノードに対応する前記ノード識別子を判別する手段は、前記フロー識別子にマッピングされている出力ポートを有することに基づいて、前記転送テーブルエントリの前記サブセットを記憶している、前記ソフトウェアクラスタスイッチのコンピューティングノードとして識別される出口コンピューティングノードを判別する手段を含む。
【図１】
2016149757.tif 000003
【図２】
2016149757.tif 000004
【図３】
2016149757.tif 000005
【図４】
2016149757.tif 000006
【図５】
2016149757.tif 000007
【図６】
2016149757.tif 000008
【図７】
2016149757.tif 000009
【外国語明細書】
2016149757000001.pdf
2016149757000002.pdf
2016149757000003.pdf
2016149757000004.pdf