(57)【要約】【課題】コンピュータ装置においてＮＩＣに亘ってネットワーク接続を分散及び再分散するための効率的な技法を提供する。【解決手段】ネットワーク装置ドライバのハッシュエンジンは、ローカルコンピュータ内の各ＮＩＣについての利用度及びエラー割合に関するデータを維持する。このデータから、ハッシュエンジンは、ソフトウエアドライバから与えられる種々なパラメータに基づいて、送信ＮＩＣ及び受信ＮＩＣを知能的に選択する。ローカルコンピュータにおけるシステムからリモートコンピュータへ送られる送信パケットは、インターセプトされ変更され、ハッシュエンジンにより選択された送信ＮＩＣへリダイレクトされる。同様に、ＡＲＰ要求パケットに応答してシステムにより送られるＡＲＰ応答パケットは、インターセプトされ変更され、選択された受信ＮＩＣへリダイレクトされる。【選択図】図６
2008289146.tif 000002
【特許請求の範囲】
【請求項１】
アドレス解決プロトコル（ＡＲＰ）キャッシュ破損を回避するネットワーク接続を確立するための方法において、
第１ネットワークインターフェースカード（ＮＩＣ）へ送信されるＡＲＰ要求パケットであって、第１のメディアアクセス制御（ＭＡＣ）アドレス及び第１のインターネットプロトコル（ＩＰ）アドレスを含むＡＲＰ要求パケットをインターセプトするステップと、
変更されたＡＲＰ要求パケットを生成するために前記第１のＩＰアドレスをダミーＩＰアドレスと置き換えるステップと、
前記変更されたＡＲＰ要求パケットを１つ以上のリモートコンピューティング装置へブロードキャストするステップと、
を備える方法。
【請求項２】
前記ＡＲＰ要求パケットを生成し、前記ＡＲＰ要求パケットを前記第１のＮＩＣへ送信するステップを更に備える、請求項１に記載の方法。
【請求項３】
ホストオペレーティングシステムが、前記ＡＲＰ要求パケットを生成し、前記ＡＲＰ要求パケットを送信する、請求項２に記載の方法。
【請求項４】
ネットワークドライバ内のロードバランシングフェイルオーバーモジュールが、前記ＡＲＰ要求パケットをインターセプトし、前記第１のＩＰアドレスを前記ダミーＩＰアドレスと置き換える、請求項１に記載の方法。
【請求項５】
前記第１のＩＰアドレスは、ホストコンピューティング装置のＩＰアドレスを含む、請求項１に記載の方法。
【請求項６】
前記ダミーＩＰアドレスは、前記ホストコンピューティング装置を含むネットワークにおける非マップＩＰアドレスを含む、請求項５に記載の方法。
【請求項７】
前記第１のＭＡＣアドレスは、前記ネットワーク接続に関連したネットワークトラフィックを受信するためホストオペレーティングシステムにより選択されたＮＩＣのＭＡＣアドレスを含む、請求項１に記載の方法。
【請求項８】
プロセッサによって実行されるとき、前記プロセッサが、
第１ネットワークインターフェースカード（ＮＩＣ）へ送信されるＡＲＰ要求パケットであって、第１のメディアアクセス制御（ＭＡＣ）アドレス及び第１のインターネットプロトコル（ＩＰ）アドレスを含むＡＲＰ要求パケットをインターセプトするステップと、
変更されたＡＲＰ要求パケットを生成するため前記第１のＩＰアドレスをダミーＩＰアドレスと置き換えるステップと、
前記変更されたＡＲＰ要求パケットを１つ以上のリモートコンピューティング装置へブロードキャストするステップと、
を行うことにより、アドレス解決プロトコル（ＡＲＰ）キャッシュ破損を回避するネットワーク接続を確立するようにさせる命令を含むコンピュータ読み取り可能な媒体。
【請求項９】
前記コンピュータ読み取り可能な媒体は、ネットワークドライバ内のロードバランシングフェイルオーバーモジュールを含む、請求項８に記載のコンピュータ読み取り可能な媒体。
【請求項１０】
前記第１のＩＰアドレスは、ホストコンピューティング装置のＩＰアドレスを含む、請求項８に記載のコンピュータ読み取り可能な媒体。
【請求項１１】
前記ダミーＩＰアドレスは、前記ホストコンピューティング装置を含むネットワークにおける非マップＩＰアドレスを含む、請求項１０に記載のコンピュータ読み取り可能な媒体。
【請求項１２】
前記第１のＭＡＣアドレスは、前記ネットワーク接続に関連したネットワークトラフィックを受信するためホストオペレーティングシステムにより選択されたＮＩＣのＭＡＣアドレスを含む、請求項８に記載のコンピュータ読み取り可能な媒体。
【請求項１３】
ネットワーク接続をハードウエアオフロードエンジンへオフロードするための方法において、
前記ネットワーク接続をオフロードするための動作を開始させるステップと、
前記ネットワーク接続に関連したネットワークトラフィックを受信するためネットワークインターフェースカード（ＮＩＣ）を選択するようにハッシュエンジンに問い合わせるステップと、
前記受信ＮＩＣを選択するステップと、
前記ネットワーク接続を前記受信ＮＩＣにあるハードウエアオフロードエンジンへ転送するステップと、
を備える方法。
【請求項１４】
前記ハードウエアオフロードエンジンは、構成されている、請求項１３に記載の方法。
【請求項１５】
ネットワークドライバ内のロードバランシングフェイルオーバーモジュールが、前記ハッシュエンジンに問い合わせ、前記ネットワーク接続を転送する、請求項１３に記載の方法。
【請求項１６】
前記転送するステップは、
前記ハードウエアオフロードエンジンに含まれた候補接続テーブルに、前記ネットワーク接続についての接続状態を含むエントリーを設定する段階と、
前記ネットワーク接続に対応するホストソフトウエアモジュールに含まれた接続テーブルに、前記ネットワーク接続が前記ハードウエアオフロードエンジンを通して実行されるべきことを指示するハードウエア識別子を設定する段階と、
を含む、請求項１３に記載の方法。
【発明の詳細な説明】
【発明の分野】
【０００１】
[0001]本発明の実施形態は、一般的に、ネットワーク通信に係り、より詳細には、ハッシュエンジンを使用してネットワークトラフィックをインテリジェントロードバランシング及びフェイルオーバーするためのシステム及び方法に係る。
【関連技術の説明】
【０００２】
[0002]性能及び信頼性は、現代のコンピュータネットワークのための重要な必要条件である。複数のネットワークインターフェースカード（「ＮＩＣ」）を含むコンピューティング装置において新しいネットワーク接続が開始されるとき、オペレーティングシステムは、典型的には、各ＮＩＣの利用度又はエラー割合に関係なくその接続のためのＮＩＣを選択する。このような環境の１つの欠点は、新しい接続が、しばしば、オーバーロードされた又は信頼できないＮＩＣへと割り当てられてしまうことがあり、その新しい接続に対するネットワーク性能が減少させられていまい、又、可能性としてその選択されたＮＩＣに係る他の既存の接続に対するネットワーク性能が減少させられてしまうことがあり得るということである。
【０００３】
[0003]幾つかの従来技術による解決法は、「接続状態」を含む複雑なデータ構造を維持することにより、新しい接続がオーバーロードした及び／又は信頼できないＮＩＣへと割り当てることを避けようとしている。このようなデータ構造を分析することにより、どのＮＩＣがオーバーロードした及び／又は信頼できないかを、ネットワーク装置ドライバが決定することができるようにしている。しかしながら、このような接続状態の構造は、どのＮＩＣが各接続へ割り当てられているかを効率的に識別できるようにするものでなく、又は、オーバーロードした又は信頼できないＮＩＣから十分に機能し得るＮＩＣへと接続を効率的に再分散できるようにするものでもない。その上、このような接続状態を維持したり分析したりするには、計算費用が掛かってしまい、コンピューティング装置のための計算及びネットワーク性能が低下させられてしまうことがある。
【０００４】
[0004]前述したように、当業分野において必要とされているものは、コンピューティング装置においてＮＩＣに亘ってネットワーク接続を分散及び再分散するためのより効率的な技法である。
【発明の概要】
【０００５】
[0005]本発明の一実施形態によれば、ネットワークトラフィックを受信するためネットワークインターフェースカード（ＮＩＣ）へネットワーク接続を知能的に転送するための方法が提供される。本方法は、オペレーティングシステムにより生成されたアドレス解決プロトコル（ＡＲＰ）応答パケットをインターセプトするステップであって、前記ＡＲＰ応答パケットが、前記ネットワーク接続に関連したネットワークトラフィックを受信するためにオペレーティングシステムによって選択された第１のＮＩＣに関連した第１のメディアアクセス制御（ＭＡＣ）アドレスを有するものであるステップと、前記ＡＲＰ応答パケットをデコードするステップと、前記デコードされたＡＲＰ応答パケットに含まれた１つ以上のネットワークパラメータをハッシュ関数へ与えることにより、第２のＮＩＣに関連した第２のＭＡＣアドレスを生成するステップと、前記ＡＲＰ応答パケットにおける前記第１のＭＡＣアドレスを前記第２のＭＡＣアドレスと置き換えるステップと、を含む。
【０００６】
[0006]前述した方法の１つの効果は、ハッシュエンジンを使用してコンピューティング装置における複数のＮＩＣに亘ってネットワーク接続を知能的に転送できることである。ロードバランシング、フェイルオーバー又はフェイルバック機能を行うのに、接続転送を使用することができる。このようにして、オーバーロードしたか又は信頼できないＮＩＣを通してネットワーク接続を実行することを容易に回避でき、従って、全ネットワーク性能を改善することができる。
【０００７】
[0007]本発明の前述した特徴を詳細に理解できるように、概要について簡単に前述した本発明について、幾つかを添付図面に例示した実施形態を参照して、以下により特定的に説明する。しかしながら、添付図面は、本発明の典型的な実施形態のみを例示するものであり、従って、本発明の範囲をそれに限定しようとするものではなく、本発明には、他の均等の効果を発揮する実施形態が含まれるものであることに注意されたい。
【詳細な説明】
【０００８】
[0014]コンピューティング装置における複数のＮＩＣの間でのネットワーク接続のインテリジェントロードバランシング及びフェイルオーバーは、コンピューティング装置におけるオペレーティングシステムからリモートコンピューティング装置へ送信されるパケットをインターセプトし、変更し、リダイレクトするネットワークドライバを使用することにより達成される。ある接続のための受信トラフィックは、アドレス解決プロトコル（「ＡＲＰ」）応答パケットがオペレーティングシステムによってリモートコンピューティング装置へ送信されるときに、そのＡＲＰ応答パケットをインターセプトすることにより、ロードバランス又はフェイルオーバーされる。インターセプトされたＡＲＰ応答パケットは、リモートコンピューティング装置へ送られる前に、その接続のための受信トラフィックに対してネットワークドライバによって選択されたＮＩＣのＭＡＣアドレスを含むように変更される。このような変更により、リモートコンピューティング装置からの受信トラフィックは、オペレーティングシステムによって選択されたＮＩＣに達するのでなく、ネットワークドライバによって選択されたＮＩＣに達するようにさせられる。
【０００９】
[0015]同様に、ある接続のための送信トラフィックは、標準送信パケットがオペレーティングシステムによってリモートコンピューティング装置へと送信されるときに、その標準送信パケットをインターセプトすることによりロードバランス又はフェイルオーバーされる。インターセプトされた送信パケットは、リモートコンピューティング装置へ送られる前に、その接続のための送信トラフィックに対してネットワークドライバによって選択されたＮＩＣのＭＡＣアドレスを含むように変更される。このような変更により、送信トラフィックは、オペレーティングシステムによって選択されたＮＩＣを通してではなく、ネットワークドライバによって選択されたＮＩＣを通してリモートコンピューティング装置へ送られるようになる。
【００１０】
[0016]図１Ａ、図１Ｂ及び図１Ｃは、本発明の１つ以上の態様を実施することのできるコンピューティング装置１００を例示している。このコンピューティング装置１００は、デスクトップコンピュータ、サーバー、ラップトップコンピュータ、手のひらサイズコンピュータ、携帯情報端末、タブレットコンピュータ、ゲームコンソール、セルラー電話又は情報を処理する任意の他のタイプの同様の装置であってよい。図示されるように、このコンピューティング装置１００は、主メモリ１０２、メモリコントローラ１０４、マイクロプロセッサ１０６、入出力コントローラ１０８及びＮＩＣ１１０、１１６を含む。ＮＩＣ１１０は、ハードウエアオフロードエンジン（「ＨＯＥ」）１１２を含み、ＮＩＣ１１６は、ＨＯＥ１１８を含む。ＨＯＥ１１２及び１１８は、ＮＩＣ１１０、１１６へ選択的にオフロードされた１つ以上のリモートネットワークコンピューティング装置（図示していない）とコンピューティング装置１００との間のネットワーク接続に関連したネットワークフレームを処理するように構成されたロジックを含む。従来行われていたようにホストソフトウエア送信制御プロトコル（「ＴＣＰ／ＩＰ」）スタックにてそれらの処理機能（ある場合には、「ソフトウエアによる接続の取扱い」と称される）を実施するのではなく、ＨＯＥ１１２及び１１８でネットワークフレームを処理すること（ある場合には、「ハードウエアによる接続の取扱い」と称される）により、ＮＩＣ１１０、１１６とマイクロプロセッサ１０６との間の通信並びにマイクロプロセッサ１０６によって行われる計算量を実質的に減ずることができる。
【００１１】
[0017]メモリコントローラ１０４は、主メモリ１０２及びマイクロプロセッサ１０６に結合されており、入出力コントローラ１０８は、マイクロプロセッサ１０６及びＮＩＣ１１０、１１６に結合されている。本発明の一実施形態では、マイクロプロセッサ１０６は、入出力コントローラ１０８へ命令又はデータを書き込むことにより、命令又はデータをＮＩＣ１１０、１１６へ送信する。このような命令又はデータが入出力コントローラ１０８へ書き込まれるとき、その入出力コントローラ１０８は、任意的に、ターゲットＮＩＣが理解できるようなフォーマットへとそれら命令又はデータを変換し、それら命令又はデータをそのターゲットＮＩＣへと通信する。同様に、ＮＩＣ１１０、１１６は、命令又はデータを入出力コントローラ１０８へ書き込むことにより、命令又はデータをマイクロプロセッサ１０６へ送信し、入出力コントローラ１０８は、任意的に、マイクロプロセッサ１０６が理解できるようなフォーマットへとそれら命令又はデータを変換し、それら命令又はデータをマイクロプロセッサ１０６へと通信する。前述したような結合は、ＰＣＩ（商標）バスの如きメモリバス又は入出力バス又はそれらの組合せとして実施することができ、又は、別の仕方として、任意の他の技術的に可能な方法で実施することができる。
【００１２】
[0018]図１Ｂにより詳細に示されるように、主メモリ１０２は、オペレーティングシステム１２２及びソフトウエアドライバ１２４を含む。ソフトウエアドライバ１２４は、ロードバランシング及びフェイルオーバー（「ＬＢＦＯ」）モジュール１２６及びＴＣＰ／ＩＰスタック１３０を含む。ＬＢＦＯモジュール１２６は、各ＮＩＣについてのネットワーク状態（例えば、各ＮＩＣのリンク状態、各ＮＩＣに関する送信エラー及び受信エラーの数及び／又は各ＮＩＣがキープアライブパケットを送信及び受信しているか）を追跡し、ネットワーク接続がコンピューティング装置１００内の１つのＮＩＣから別の１つのＮＩＣへ移される時に、ＴＣＰ／ＩＰスタック１３０と通信する。ＬＢＦＯモジュール１２６は、ハッシュエンジン１２８を含み、このハッシュエンジン１２８は、各ＮＩＣの前述したようなネットワーク統計量に基づいて、ネットワーク接続がそのコンピューティング装置１００における異なる機能的ＮＩＣに亘ってどのように分散されるべきかを知能的に決定するものである。
【００１３】
[0019]図１Ｃにより詳細に示されるように、ハッシュエンジン１２８は、送信ハッシュテーブル１３８及び受信ハッシュテーブル１４０を含む。送信ハッシュテーブル１３８の目的は、ＬＢＦＯモジュール１２６によりこの送信ハッシュテーブル１３８へ与えられるデータに基づいて、ネットワーク接続に関連したパケットを送信するためのコンピューティング装置１００内の機能的ＮＩＣを選択することである。送信ハッシュテーブル１３８は、複数のハッシュテーブルエントリー（例えば、ハッシュテーブルエントリー１３４）及びソフトウエアハッシュ関数（図示していない）を含む。更に又、各ハッシュテーブルエントリーは、テーブルインデックス（例えば、テーブルインデックス１３２）及びテーブル値（例えば、テーブル値１３６）を含む。ＬＢＦＯモジュール１２６は、ＴＣＰ／ＩＰ接続データを送信ハッシュテーブル１３８におけるソフトウエアハッシュ関数へ通信するハッシュエンジン１２８へＴＣＰ／ＩＰ接続データを通信することにより、ハッシュエンジン１２８にコンピューティング装置内の送信ＮＩＣを選択するように指示する。それに応答して、ソフトウエアハッシュ関数は、そのＴＣＰ／ＩＰ接続データに基づいて、送信ハッシュテーブル１３８内のテーブルインデックスを選択する。このような選択されたテーブルインデックスから、送信ハッシュテーブル１３８は、対応するテーブル値を識別し、ハッシュエンジン１２８は、その識別されたテーブル値をＬＢＦＯモジュール１２６へと通信し返す。もし、その対応するテーブル値が無効である場合には、ハッシュエンジン１２８は、ＬＢＦＯモジュール１２６によって維持されているような、コンピューティング装置１００における全てのＮＩＣについてのＮＩＣ利用度及びＮＩＣエラー割合データの重み付け組合せに基づいて、その接続のためのＮＩＣを選択し、そして、そのハッシュエンジン１２８は、現在のテーブルインデックスに対応するテーブル値にその選択されたＮＩＣのＭＡＣアドレスを記憶させる。ソフトウエアハッシュ関数の設計及び動作は当業者にはよく知られているので、これらのことについては、ここでは論じないこととする。一実施形態では、ＬＢＦＯモジュール１２６は、次の４つのＴＣＰ／ＩＰデータ、即ち、クライアントインターネットプロトコル（「ＩＰ」）アドレス、サーバーＩＰポート、クライアントＩＰポート及び仮想ローカルエリアネットワーク識別子（「ＶＬＡＮ  ＩＤ」）をハッシュエンジン１２８へ通信する。他の実施形態では、ＬＢＦＯモジュール１２６は、技術的に可能なＴＣＰ／ＩＰパラメータをハッシュエンジン１２８へ通信することもできる。
【００１４】
[0020]受信ハッシュテーブル１４０の目的は、ＬＢＦＯモジュール１２６によりその受信ハッシュテーブル１４０へ与えられるデータに基づいて、ネットワーク接続に関連したパケットを受信するためのコンピューティング装置１００内の機能的ＮＩＣを選択することである。送信ハッシュテーブル１３８と同様に、受信ハッシュテーブル１４０は、複数のハッシュテーブルエントリー及びソフトウエアハッシュ関数（図示していない）を含み、各ハッシュテーブルエントリーは、テーブルインデックス及びテーブル値を含む。ここでも又、ＬＢＦＯモジュール１２６は、受信ハッシュテーブル１４０におけるソフトウエアハッシュ関数へＴＣＰ／ＩＰ接続データを通信するハッシュエンジン１２８へＴＣＰ／ＩＰ接続データを通信することにより、ハッシュエンジン１２８にコンピューティング装置１００内の受信ＮＩＣを選択するように指示する。これに応答して、ソフトウエアハッシュ関数は、そのＴＣＰ／ＩＰ接続データに基づいて、受信ハッシュテーブル１４０内のテーブルインデックスを選択する。このように選択されたテーブルインデックスから、受信ハッシュテーブル１４０は、対応するテーブル値を識別し、そして、ハッシュエンジン１２８は、その識別されたテーブル値をＬＢＦＯモジュール１２６へと通信し返す。ここでも又、もし、その対応するテーブル値が無効である場合には、ハッシュエンジン１２８は、ＬＢＦＯモジュール１２６によって維持されるようなコンピューティング装置１００における全てのＮＩＣについてのＮＩＣ利用度及びＮＩＣエラー割合データの重み付け組合せに基づいて、その接続のためのＮＩＣを選択し、そして、そのハッシュエンジン１２８は、現在のテーブルインデックスに対応するテーブル値にその選択されたＮＩＣのＭＡＣアドレスを記憶させる。一実施形態では、ＬＢＦＯモジュール１２６がハッシュエンジン１２８へ通信するＴＣＰ／ＩＰデータは、サーバーＩＰアドレスを含む。他の実施形態では、ＬＢＦＯモジュール１２６は、任意の技術的に可能なＴＣＰ／ＩＰデータをハッシュエンジン１２８へ通信することもできる。
【００１５】
[0021]重要なことは、ハッシュエンジン１２８の構造は、ロードバランシング、フェイルオーバー又はフェイルバック動作を行うときに、１つのＮＩＣから別の１つのＮＩＣへの接続の転送を効率的に支援するものであるということである。例えば、一実施形態では、もし、第１のＮＩＣがオーバーロードとされ、ＬＢＦＯモジュール１２６がその第１のＮＩＣに係る幾つかの接続を第２のＮＩＣへと転送しようとする場合には、ハッシュエンジン１２８は、そのオーバーロードとされた第１のＮＩＣのＭＡＣアドレスをハッシュテーブル値が含むハッシュテーブルエントリーを無効とすることができる。以下の図２に関する説明においてより詳細に述べられているように、このようにハッシュテーブルエントリーを無効とすることにより、ハッシュエンジン１２８が、その無効とされたハッシュテーブルエントリーに対応する接続のための新しいＮＩＣとして第２のＮＩＣを選択し、そのハッシュテーブルエントリーにその第２のＮＩＣのＭＡＣアドレスを記憶させるようになる。ハッシュテーブル値をこのように変更された後は、その変更されたハッシュテーブル値に対応するハッシュテーブルインデックスの全ての接続は、その第２のＮＩＣを通して通信することになる。
【００１６】
[0022]更に又、ハッシュエンジン１２８の構造は、１つのＮＩＣから別の１つのＮＩＣへの接続のフェイルオーバーを効率的に支援するものである。例えば、一実施形態では、もし、第１のＮＩＣがフェイルした又は信頼できないものとなり、ＬＢＦＯモジュール１２６がその第１のＮＩＣに係る接続を第２のＮＩＣへと転送しようとする場合には、ハッシュエンジン１２８は、そのフェイルした又は信頼できないものとなったＮＩＣのＭＡＣアドレスをハッシュテーブル値が含む全てのハッシュテーブルエントリーを無効とすることができる。ここでも又、以下に図２にて説明されるように、このようにハッシュテーブルエントリーを無効とすることにより、ハッシュエンジン１２８が、その無効とされたハッシュテーブルエントリーに対応する接続のための新しいＮＩＣとして第２のＮＩＣを選択し、ハッシュテーブル１２８がそれらのハッシュテーブルエントリーにその第２のＮＩＣのＭＡＣアドレスを記憶させるようになる。フェイルした又は信頼できないものとなったＮＩＣのＭＡＣアドレスを含んだ全てのハッシュテーブル値がその第２のＮＩＣのＭＡＣアドレスでオーバーライトされたとき、その第１のＮＩＣに係る全ての接続は、その第２のＮＩＣへフェイルオーバーされている。フェイルオーバー中のＬＢＦＯモジュール１２６の機能については、２００７年５月１８日に出願され、代理人管理番号ＮＶＤＡ／Ｐ００１８８０を有する「Intelligent Failover In a Load-Balanced Networking Environment」と題する関連米国特許出願第１１／７５０，９０３号明細書により詳細に記載されている。従って、この関連出願明細書の記載はここに援用される。
【００１７】
[0023]更に、ハッシュエンジン１２８の構造は、１つのＮＩＣから別の１つのＮＩＣへの接続のフェイルバックを効率的に支援するものである。例えば、もし、ＬＢＦＯモジュール１２６が第１のＮＩＣから幾つかの接続を第２のＮＩＣへとフェイルオーバーし、その第１のＮＩＣがその後に十分に機能できるものとなった場合には、ＬＢＦＯモジュール１２６は、そのフェイルオーバーした接続のうちの幾つか又は全てをその第１のＮＩＣへとフェイルバックすることができる。一実施形態では、ＬＢＦＯモジュール１２６は、その第２のＮＩＣでなくその第１のＮＩＣのＭＡＣアドレスを記憶するため選択されフェイルオーバーされた接続に対応するハッシュテーブル値を更新することにより、その選択された接続をフェイルバックすることができる。その第２のＮＩＣのＭＡＣアドレスを含んだハッシュテーブル値がその第１のＮＩＣのＭＡＣアドレスでオーバーライトされたとき、そのオーバーライトされたハッシュテーブル値に対応する接続は、その第１のＮＩＣへとフェイルバックされている。このフェイルバック中のＬＢＦＯモジュール１２６の機能については、２００７年５月１８日に出願され、代理人管理番号ＮＶＤＡ／Ｐ００１８８２を有する「Intelligent Failback In a Load-Balanced Networking Environment」と題する関連米国特許出願第１１／７５０，９１４号明細書により詳細に記載されている。従って、この関連出願明細書の記載はここに援用される。
【００１８】
[0024]ロードバランシング及びフェイルオーバー／フェイルバックの前述の説明に基づいて、本発明は、各々が異なる動作環境の必要に対して効率的に対処する４つのモードにて動作するように構成することができる。第１の動作モードでは、ハッシュエンジン１２８は、スイッチ独立型ネットワーク環境（即ち、コンピューティング装置１００のＮＩＣを外部ネットワークに結合するスイッチが８０２．３ａｄモードにて動作しないようなネットワーク環境）においてロードバランシング及びフェイルオーバー／フェイルバックを行うため接続を転送するのに使用される。この実施形態では、以下に説明する図３及び図４の方法は、ハッシュエンジン１２８を使用して、それぞれトラフィックを受信及び送信する接続を転送するためのＮＩＣを識別する。ここでも又、このような識別は、ロードバランシングの一部として、又は、信頼できるＮＩＣへの接続のフェイルオーバーの一部として行うことができる。重要なことは、ある接続についての受信トラフィック及び送信トラフィックは、以下により詳細に説明されるように、その接続がオフロードされて、単一のＮＩＣがそのオフロードされた接続について受信トラフィック及び送信トラフィックを取り扱うようにならない限り、異なるＮＩＣを使用することができるということである。
【００１９】
[0025]第２の動作モードでは、ハッシュエンジン１２８は、スイッチ独立型ネットワーク環境において、送信トラフィックに係るロードバランシングを行うため接続を転送するのに使用されるが、受信トラフィックに係るロードバランシングを行うのには使用されない。重要なことは、ハッシュエンジン１２８は、フェイルオーバー又はフェイルバックを行うため接続を転送するのには使用されないということである。従って、ハッシュエンジン１２８は、ある接続に係る送信トラフィックのためのＮＩＣを選択し、その後に、送信トラフィックをロードバランシングするようにその選択を変更することができるが、その接続についての受信トラフィックは、オペレーティングシステムにより選択されたＮＩＣを通して取り扱われる。ここでも又、ある接続についての受信トラフィック及び送信トラフィックは、以下により詳細に説明されるように、その接続がオフロードされて、オペレーティングシステムにより選択されたＮＩＣがそのオフロードされた接続について受信トラフィック及び送信トラフィックを取り扱うようにならない限り、異なるＮＩＣを使用することができる。
【００２０】
[0026]第３の動作モードでは、ハッシュエンジン１２８は、スイッチ独立型ネットワーク環境において、フェイルオーバー及びフェイルバックを行うため接続を転送するのに使用されるが、ロードバランシングを行うのには使用されない。ハッシュエンジン１２８は、この実施形態ではロードバランシングを行うのに接続を転送しないので、その接続についてのトラフィックを送信及び受信するためオペレーティングシステム１２２により選択されたＮＩＣが維持される。更に又、ＬＢＦＯモジュール１２６は、ＮＩＣがフェイルした又は信頼できないものとなるときに、ネットワークトラフィックをフェイルオーバーするようにハッシュエンジン１２８に指示し、又、ＮＩＣが十分に機能できる状態に戻るときに、トラフィックをフェイルバックするようにハッシュエンジン１２８に指示する。
【００２１】
[0027]第４の動作モードでは、ハッシュエンジン１２８は、スイッチ依存型ネットワーク環境（即ち、コンピューティング装置１００のＮＩＣを外部ネットワークに結合するスイッチが８０２．３ａｄモードにおいて動作するようなネットワーク環境）において、送信トラフィックのロードバランシング及びフェイルオーバー／フェイルバックを行うため接続を転送するのに使用されるが、受信トラフィックのロードバランシング及びフェイルオーバー／フェイルバックを行うため接続を転送するのには使用されない。重要なことは、スイッチ依存型ネットワーク環境では、コンピューティング装置１００におけるどのＮＩＣがある接続についてのトラフィックを受信するのかを、そのスイッチが選択する。従って、ハッシュエンジン１２８は、受信トラフィックのロードバランシング又はフェイルオーバー／フェイルバックを行わないが、ハッシュエンジン１２８は、送信トラフィックをロードバランシングすることができ、ＬＢＦＯモジュール１２６は、送信トラフィックをフェイルオーバー／フェイルバックするようにハッシュエンジン１２８に指示することができる。しかしながら、ここでも又、もし、ネットワーク接続がその接続についてのトラフィックを受信するためそのスイッチによって選択されたＮＩＣにオフロードされる場合には、ハッシュエンジン１２８は、以下により詳細に説明するように、その接続についてのトラフィックを送信するためその同じＮＩＣを選択する。
【００２２】
[0028]図２は、本発明の一実施形態によるハッシュ関数に与えられるパラメータに基づいて、ハッシュテーブルからＭＡＣアドレスを選択するための方法ステップ２００のフローチャートを例示している。この方法は、コンピューティング装置１００に関して説明されているのであるが、当業者には、任意の順序でこれら方法ステップを行うように構成されたいずれのシステムも、本発明の範囲内に入るものであることは理解されよう。
【００２３】
[0029]図示されるように、ハッシュエンジン１２８においてハッシュテーブルからＭＡＣアドレスを選択するための方法は、ステップ２０２で開始され、このステップ２０２にて、ハッシュテーブル内のハッシュ関数は、そのハッシュ関数によって受け取られたパラメータからハッシュテーブルインデックスを決定する。ハッシュ関数を生成し使用して、そのハッシュ関数に与えられるパラメータに基づいてハッシュテーブルを索引する方法は、当業者にはよく知られているので、これらの方法については、ここでは説明しないこととする。送信ハッシュテーブル１３８を索引する機能における送信ハッシュ関数によって受け取られるパラメータは、受信ハッシュテーブル１４０を索引する機能における受信ハッシュ関数によって受け取られるパラメータとは異なるものであることに注意されたい。本発明の一実施形態では、受信ハッシュ関数は、受信ハッシュテーブル１４０を索引するためのパラメータとして、リモートコンピューティング装置のＩＰアドレスを受け取る。更に又、送信ハッシュ関数は、送信ハッシュテーブル１３８を索引するためのパラメータとして、リモートコンピューティング装置のＩＰアドレス、リモートコンピューティング装置に対するＴＣＰポート、コンピューティング装置１００に対するＴＣＰポート、及びそのネットワーク環境において、ＶＬＡＮ  ＩＤ技法が使用されている場合には、ＶＬＡＮ  ＩＤ、を受け取る。本発明の他の実施形態では、受信ハッシュ関数及び送信ハッシュ関数は、それぞれ受信ハッシュテーブル１４０及び送信ハッシュテーブル１３８を索引するための任意の技術的に可能なパラメータを受け取ることができる。
【００２４】
[0030]ステップ２０４にて、ハッシュエンジン１２８は、ステップ２０２にて識別されたハッシュテーブルインデックスに対応するハッシュテーブルエントリーを読み取る。ステップ２０６にて、ハッシュエンジン１２８は、ステップ２０４にて読み取ったハッシュテーブルエントリーが有効であるかを決定する。もし、ステップ２０６において、そのハッシュテーブルエントリーが有効であるとされる場合には、この方法は、ステップ２０８へと続けられ、このステップ２０８にて、ハッシュエンジン１２８は、その索引されたハッシュテーブルエントリーに記憶されたＭＡＣアドレスを選択する。ステップ２１６において、ハッシュエンジン１２８は、その選択されたＭＡＣアドレスをＬＢＦＯモジュール１２６へ戻し、この方法は終了する。
【００２５】
[0031]もし、ステップ２０６において、ステップ２０４にて読み取られたハッシュテーブルエントリーが有効でないとされる場合には、この方法は、ステップ２１０へと続き、このステップ２１０において、ハッシュエンジン１２８は、ネットワークトラフィックを通信するのに適したＮＩＣを識別する。一実施形態では、あるＮＩＣについて、そのＮＩＣの送信容量又は受信容量に対する割合としてのそのＮＩＣの利用度がコンピューティング装置１００における他のＮＩＣの利用度より低いときに、そのＮＩＣは、ネットワークトラフィックを通信するのに適していると見なされる。別の実施形態では、あるＮＩＣについて、そのＮＩＣについてのエラー割合がコンピューティング装置１００における他のＮＩＣのエラー割合より低いときに、そのＮＩＣは、ネットワークトラフィックを通信するのに適していると見なされる。更に別の実施形態では、あるＮＩＣについての利用度及びエラー割合の重み付け組合せと、コンピューティング装置における他のＮＩＣの利用度及びエラー割合の重み付け組合せとを相対的に比べることにより、そのＮＩＣがネットワークトラフィックを通信するのに適しているかを決定することができる。ステップ２１２にて、ハッシュエンジン１２８は、ステップ２１０において識別された適当なＮＩＣのＭＡＣアドレスを選択する。ステップ２１４にて、ハッシュエンジン１２８は、ステップ２０２において識別されたハッシュテーブルインデックスに対応するハッシュテーブルエントリーにその選択されたＭＡＣアドレスを記憶させる。
【００２６】
[0032]図３Ａ及び図３Ｂは、本発明の一実施形態によるネットワークトラフィックを受信するためハッシュエンジン１２８により選択されたＮＩＣへ接続を転送するための方法ステップ３００のフローチャートを例示している。この方法はコンピューティング装置１００に関して説明されているのであるが、当業者には、任意の順序でこれら方法ステップを行うように構成されたいずれのシステムも本発明の範囲内に入るものであることは理解されよう。
【００２７】
[0033]図示されるように、接続を転送するためのこの方法は、ステップ３０２にて開始され、このステップ３０２において、オペレーティングシステム１２２は、リモートコンピューティング装置（図示していない）からのＡＲＰ要求パケットを聴取する。リモートコンピューティング装置がデータをコンピューティング装置１００へ送信するための接続を始動するとき、そのリモートコンピューティング装置は、ローカルネットワークに結合されたコンピューティング装置へコンピューティング装置１００のＩＰアドレスを含むＡＲＰ要求パケットを送ることにより、コンピューティング装置１００のＭＡＣアドレスを要求する。コンピューティング装置１００は、そのＡＲＰ要求パケットに応答して、そのコンピューティング装置１００のＭＡＣアドレスを含むＡＲＰ応答パケットを送る。そのＡＲＰ応答パケットを受け取りデコードするとき、そのリモートコンピューティング装置は、そのＡＲＰ応答パケットからデコードされたＭＡＣアドレスを使用して、そのローカルコンピューティング装置１００へパケットを送信することができる。ＡＲＰ要求パケットとＡＲＰ応答パケットとを交換するための方法は当業者にはよく知られているので、それらの方法についてはここでは説明しないこととする。ステップ３０４において、オペレーティングシステム１２２は、ＡＲＰ要求パケットがステップ３０２において受信されたかを決定する。もし、ＡＲＰ要求パケットが受信されていないと、オペレーティングシステムが見出す場合には、この方法は、ステップ３０２に戻り、そこで、オペレーティングシステム１２２は、ＡＲＰ要求パケットを聴取することを続ける。
【００２８】
[0034]しかしながら、もし、ステップ３０４において、ＡＲＰ要求パケットが受信されたことを、オペレーティングシステム１２２が見出す場合には、この方法は、ステップ３０６から３１０へと続けられ、そこで、オペレーティングシステム１２２は、ＡＲＰ要求パケットの受信に応答して、ＡＲＰ応答パケットを生成する。ステップ３０６にて、オペレーティングシステム１２２は、その接続に対するトラフィックがそこを通して受信されるべきＮＩＣを識別する。説明のためだけであるが、オペレーティングシステムは、トラフィックを受信するのに使用されるＮＩＣとしてＮＩＣ１１０を選択すると仮定する。ステップ３０８にて、オペレーティングシステム１２２は、そのＮＩＣ１１０のＭＡＣアドレスを含むＡＲＰ応答パケットを生成する。ステップ３１０にて、オペレーティングシステム１２２は、そのＡＲＰ応答パケットをＮＩＣ１１０へ送る。
【００２９】
[0035]ステップ３１２にて、ＬＢＦＯモジュール１２６は、オペレーティングシステム１２２からＮＩＣ１１０へ送られるＡＲＰ応答パケットをインターセプトする。ここでも又、ＬＢＦＯモジュール１２６は、コンピューティング装置１００におけるオペレーティングシステム１２２により選択されたＮＩＣへオペレーティングシステム１２２から送られるＡＲＰ応答パケットをインターセプトし、それらＡＲＰ応答パケットのＭＡＣアドレスを変更するように構成されている。以下に説明するように、ハッシュエンジン１２８により選択されたＮＩＣのＭＡＣアドレスを反映するようにＡＲＰ応答パケットを変更することにより、リモートコンピューティング装置からのパケットをどのＮＩＣが受信するのかについて、ＬＢＦＯモジュール１２６が、オペレーティングシステム１２２に代わって、制御するようになる。従って、ＡＲＰ応答パケットに組み入れられたハッシュエンジン１２８によるインテリジェントＮＩＣ選択により、その対応する接続は、ＬＢＦＯモジュール１２６によって選択されたＮＩＣにて受信されるようになり、別の不利なＮＩＣにて受信されないようになる。
【００３０】
[0036]ステップ３１４にて、ＬＢＦＯモジュール１２６は、インターセプトされたＡＲＰ応答パケットを、そのＡＲＰ応答パケットが宛てられたリモートコンピューティング装置のＩＰアドレスを含むコンポーネントへとデコードする。ステップ３１５にて、ＬＢＦＯモジュール１２６は、そのＡＲＰ応答パケットに関する接続が存在し、既に受信ＮＩＣにあるハードウエアオフロードエンジンへとオフロードされているかを決定する。もし、そのような接続が存在していないか又はそのような接続が存在していても受信ＮＩＣにあるハードウエアオフロードエンジンへとオフロードされていないことを、ＬＢＦＯモジュール１２６が見出す場合には、この方法は、ステップ３１６へと続き、そこで、ハッシュエンジン１２８がＭＡＣアドレスを選択する。このような選択は、図２において前述したように、ＬＢＦＯモジュール１２６がリモートコンピューティング装置のＩＰアドレスをハッシュエンジン１２８へパラメータとして通すことに基づいてなされる。
【００３１】
[0037]ステップ３１８にて、ＬＢＦＯモジュール１２６は、デコードされたＡＲＰ応答パケットにおけるオペレーティングシステム１２２により選択されたＭＡＣアドレスを、その選択されたＭＡＣアドレスと置き換える。ステップ３２０にて、ＬＢＦＯモジュール１２６は、その選択されたＭＡＣアドレス及びデコードされたＡＲＰ応答パケットの残りのコンポーネントをエンコードして、ＡＲＰ応答パケットを形成する。ステップ３２２にて、ＬＢＦＯモジュールは、そのＡＲＰ応答パケットをリモートコンピューティング装置へ送信し、この方法は、終了する。一実施形態では、そのＡＲＰ応答パケットは、その選択されたＭＡＣアドレスに対応するＮＩＣを通して送信される。
【００３２】
[0038]ステップ３１５に戻って、もし、インターセプトされたＡＲＰ応答パケットに関する接続が存在していて既に受信ＮＩＣにあるハードウエアオフロードエンジンへオフロードされていることを、ＬＢＦＯモジュール１２６が見出す場合には、この方法は、ステップ３１７へと続く。ステップ３１７にて、ハッシュエンジン１２８は、ステップ３１８からステップ３２２にて前述したように、ＡＲＰ応答パケットを変更し、エンコードし、送信するところへ進む前に、受信ＮＩＣのＭＡＣアドレスを選択する。
【００３３】
[0039]図４Ａ及び図４Ｂは、本発明の一実施形態によるネットワークトラフィックを送信するためハッシュエンジン１２８により選択されたＮＩＣへ接続を転送するための方法ステップ４００のフローチャートを例示している。この方法はコンピューティング装置１００に関して説明されているが、当業者には、任意の順序にてこれら方法ステップを行うように構成されたいずれのシステムも本発明の範囲内に入るものであることは理解されよう。
【００３４】
[0040]図示されるように、接続を転送するためのこの方法は、ステップ４０２で始まり、このステップ４０２では、オペレーティングシステム１２２は、このオペレーティングシステム１２２により選択されたＮＩＣのＭＡＣアドレスを含む送信パケットを生成する。例えば、オペレーティングシステム１２２は、コンピューティング装置１００とリモートコンピューティング装置（図示していない）との間の発信通信の一部として送信パケットを生成するように、アプリケーションプログラムにより要求される。説明のためだけであるが、オペレーティングシステム１２２は、リモートコンピューティング装置へ送信パケットを送るためＮＩＣ１１０を選択すると仮定する。
【００３５】
[0041]ステップ４０４にて、オペレーティングシステム１２２は、ステップ４０２にて生成された送信パケットをＮＩＣ１１０へ送る。ステップ４０６にて、ＬＢＦＯモジュール１２６は、オペレーティングシステム１２２からＮＩＣ１１０へ送られる送信パケットをインターセプトする。前述したように、ＬＢＦＯモジュール１２６は、コンピューティング装置１００においてオペレーティングシステム１２２により選択されたＮＩＣへオペレーティングシステム１２２から送られる送信パケットをインターセプトし、そのインターセプトされた送信パケットのＭＡＣアドレスを変更するように構成されている。ここでも又、ハッシュエンジン１２８によって選択されたＮＩＣのＭＡＣアドレスを反映するように送信パケットを変更することにより、どのＮＩＣがリモートコンピューティング装置からの送信パケットを送るかの制御を、ＬＢＦＯモジュール１２６が、オペレーティングシステム１２２に代わって、行うことができるようになる。従って、ハッシュエンジン１２８によりインテリジェントＮＩＣ選択により、パケットがＬＢＦＯモジュール１２６により選択されたＮＩＣにて送信されるようになり、別のより不利なＮＩＣにて送信されるようなことがなくなる。
【００３６】
[0042]ステップ４０８にて、ＬＢＦＯモジュール１２６は、ステップ４０６からの送信パケットをデコードして、その送信パケットの１つ以上のＴＣＰ／ＩＰパラメータを識別する。ステップ４１０にて、ＬＢＦＯモジュール１２６は、その送信パケットに対応する接続が受信ＮＩＣにあるハードウエアオフロードエンジンへオフロードされているかを決定する。ここでも又、もし、ある接続が受信ＮＩＣにあるそのハードウエアオフロードエンジンへ既にオフロードされている場合には、その接続に対するパケットは、異なるＮＩＣのソフトウエアからでなく、その受信ＮＩＣにあるそのハードウエアオフロードエンジンから効果的に送信される。従って、もし、その送信パケットに対応する接続が受信ＮＩＣにあるハードウエアオフロードエンジンへ既にオフロードされている場合には、ステップ４１２において、ハッシュエンジン１２８は、その受信ＮＩＣのＭＡＣアドレスを送信ＭＡＣアドレスとして選択する。
【００３７】
[0043]ステップ４１６にて、ＬＢＦＯモジュール１２６は、そのデコードされたソースＭＡＣアドレスを送信ＭＡＣアドレスと置き換えて、デコードされ変更されたパケットを形成する。ステップ４１８にて、ＬＢＦＯモジュール１２６は、そのデコードされ変更されたパケットを送信パケットへとエンコードする。ステップ４２０にて、ＬＢＦＯモジュール１２６は、その送信ＭＡＣアドレスに対応するＮＩＣを通してコンピューティング装置へその送信パケットを通信する。
【００３８】
[0044]ステップ４１０へ戻って、もし、送信パケットに対応する接続が受信ＮＩＣにあるハードウエアオフロードエンジンへオフロードされていない場合には、この方法は、ステップ４１４へと続く。ステップ４１４にて、ハッシュエンジン１２８は、ステップ４０８において送信パケットからデコードされたＴＣＰ／ＩＰパラメータを使用して、図２において前述したように、送信ハッシュテーブル１３８から送信ＭＡＣアドレスを選択する。それから、この方法は、前述したように、ステップ４１６から４２０へと進む。
【００３９】
[0045]図５は、本発明の一実施形態によるハッシュエンジン１２８により選択されたＮＩＣへ既存の接続をオフロードするための方法ステップ５００のフローチャートを例示している。この方法はコンピューティング装置１００に関して説明されるが、当業者には、任意の順序にてこれら方法ステップを行うように構成されたいずれのシステムも本発明の範囲内に入るものであることは理解されよう。
【００４０】
[0046]図示されるように、既存の接続をオフロードするためのこの方法は、ステップ５０２で開始され、このステップ５０２において、ソフトウエアドライバ１２４は、その既存の接続をオフロードするための動作を開始させる。ソフトウエアドライバ１２４は、オペレーティングシステム１２２の要求により、又は、このソフトウエアドライバ１２４により行われる特定の処理動作に基づいて、オフロード動作を開始することができる。例えば、ソフトウエアドライバ１２４は、その既存の接続がハードウエアオフロードエンジンによりより良好に処理される高トラフィック接続であることを決定することができる。
【００４１】
[0047]ステップ５０４にて、ＬＢＦＯモジュール１２６は、その接続に関連したネットワークトラフィックを受信するため新しいＮＩＣを選択するためハッシュエンジン１２８に問い合わせる。ステップ５０６にて、ハッシュエンジン１２８は、受信ハッシュテーブル１４０を使用して、コンピューティング装置１００内のどのＮＩＣ及びハードウエアオフロードエンジンがその接続に関連したネットワークトラフィックを受信するのに選択されるべきかを決定する。その選択されたＮＩＣ及びハードウエアオフロードエンジンは、最小平均ロードを担持し、最小数のオフロード接続を有することができ、又は、最も信頼できる物理リンクへ接続される。ステップ５０８にて、ＬＢＦＯモジュール１２６は、その選択されたＮＩＣ及びハードウエアオフロードエンジンへその受信ＮＩＣをオフロードする。
【００４２】
[0048]図６は、本発明の一実施形態によるダミーインターネットプロトコルアドレスを使用して、アドレス解決プロトコル（ＡＲＰ）要求を行うための方法ステップ６００のフローチャートを例示している。この方法はコンピューティング装置１００に関して説明されるのであるが、当業者には、任意の順序にてこれら方法ステップを行うように構成されたいずれのシステムも本発明の範囲内に入るものであることは理解されよう。
【００４３】
[0049]図示されるように、アドレス解決プロトコル要求を行うためのこの方法は、ステップ６０２で始まり、このステップ６０２において、オペレーティングシステム１２２は、確立すべき接続に関連したネットワークトラフィックを受信するためオペレーティングシステム１２２により選択されたＮＩＣのＭＡＣアドレス及びコンピューティング装置１００のＩＰアドレスを含むＡＲＰ要求パケットを生成する。そのＩＰアドレスは、手動的に又は工業標準ダイナミックホストコンフィギュレーションプロトコル（ＤＨＣＰ）の如き自動技法により、コンピューティング装置１００へと割り当てられる。そのＭＡＣアドレスは、オペレーティングシステム１２２により認識されるデフォルト又は一次ＮＩＣに対応することができる。ステップ６０４にて、オペレーティングシステム１２２は、その選択されたＮＩＣへそのＡＲＰ要求パケットを送る。
【００４４】
[0050]ステップ６０６において、ＬＢＦＯモジュール１２６は、そのＡＲＰ要求パケットが送信のためその選択されたＮＩＣへ与えられる前に、そのＡＲＰ要求パケットをインターセプトする。ステップ６０８にて、ＬＢＦＯモジュール１２６は、コンピューティング装置１００のＩＰアドレスをこのＬＢＦＯモジュール１２６により選択されたダミーＩＰアドレスと置き換えて、変更されたＡＲＰ要求パケットを生成する。このダミーＩＰアドレスは、そのネットワーク内の非マップアドレスであるべきである。例えば、１０．１．１．０から１０．１．１．２５５までの範囲に亘るＩＰアドレスを有するネットワークにおいては、１０．１．１．２５４の如き１つのＩＰアドレスが、ダミーＩＰアドレスとして、ネットワーク管理者によって予約される。この実施例では、そのＡＲＰ要求パケットを受信する装置は、そのダミーＩＰアドレスに対するローカルＡＲＰキャッシュエントリーを新しいＭＡＣアドレスで更新し、それにより、コンピューティング装置１００のＩＰアドレスに対するキャッシュエントリーが破損されてしまうのを回避することができる。そのダミーＩＰアドレスは、ＬＢＦＯモジュール１２６による使用のため、マニュアルコンフィギュレーションを含む任意の技術的に可能な手段により確立することができる。ステップ６１０にて、ＬＢＦＯモジュール１２６は、コンピューティング装置１００と同じネットワークに接続された１つ以上のリモートコンピューティング装置へ、その選択されたＮＩＣを通してその変更されたＡＲＰ要求パケットを送信（ブロードキャスト）する。
【００４５】
[0051]図６の方法は、ＬＢＦＯモジュール１２６が、オペレーティングシステム１２２を必要とせずに、複数のＮＩＣに亘るＡＲＰ要求処理を管理することができるようにする。その上、この方法は、変更されたＡＲＰ要求パケットを受信するリモートコンピューティング装置により維持されたＡＲＰキャッシュが破損されるのを避けるために使用することができる。
【００４６】
[0052]ここに説明した本発明のシステム及び方法の１つの効果は、これらのシステム及び方法によれば、ハッシュエンジンを使用して複数のコンピューティング装置に亘ってネットワーク接続を知能的に転送することができるということである。このような接続転送は、ロードバランシング、フェイルオーバー又はフェイルバック機能を行うのに使用することができる。この形式においては、オーバーロードされた又は信頼できないＮＩＣを通してネットワーク接続を実行してしまうようなことを容易に避けることができ、従って、全ネットワーク性能を改善することができる。もう１つ別の効果は、各ＮＩＣへの接続の割当てを管理するのにハッシュエンジンを使用することにより、接続状態を管理するための複雑且つ計算費用の掛かる処理を避けつつ、どのＮＩＣが各接続を取り扱うかの決定を効率よく行うことができるようになるということである。
【００４７】
[0053]本発明の幾つかの実施形態について前述したのであるが、本発明の基本的範囲から逸脱せずに、本発明の他の更に別の実施形態を考えることができるものである。例えば、本発明の態様は、ハードウエア又はソフトウエア、又はハードウエアとソフトウエアとの組合せにて実施することができるものである。本発明の一実施形態は、コンピュータシステムに使用するためのプログラム製品として実施することができる。そのようなプログラム製品のプログラムは、それら実施形態（ここに説明した方法を含む）の機能を定義しており、種々なコンピュータ読み取り可能な記憶媒体に含ませることができるものである。コンピュータ読み取り可能な記憶媒体の例としては、これらに限定されるものではないが、（ｉ）情報が永久的に記憶される非書き込み可能記憶媒体（例えば、ＣＤ-ＲＯＭドライブにより読み取られるＣＤ-ＲＯＭディスクの如きコンピュータ内のリードオンリーメモリ装置、フラッシュメモリ、ＲＯＭチップ又は任意のタイプの固体不揮発性半導体メモリ）、及び（ii）変更可能情報が記憶される書き込み可能記憶媒体（例えば、ディスケットドライブ又はハードディスクドライブ内のフロッピーディスク、又は任意のタイプの固体ランダムアクセス半導体メモリ）がある。このようなコンピュータ読み取り可能な記憶媒体は、本発明の機能を指示するコンピュータ読み取り可能な命令を担持するとき、本発明の実施形態である。従って、本発明の範囲は、特許請求の範囲の記載により決定されるものである。
【図面の簡単な説明】
【００４８】
【図１Ａ】本発明の１つ以上の態様を実施することのできるコンピューティング装置を例示している。
【図１Ｂ】本発明の１つ以上の態様を実施することのできるコンピューティング装置を例示している。
【図１Ｃ】本発明の１つ以上の態様を実施することのできるコンピューティング装置を例示している。
【図２】本発明の一実施形態によるハッシュ関数に与えられるパラメータに基づいてハッシュテーブルからＭＡＣアドレスを選択するための方法ステップのフローチャートを例示している。
【図３Ａ】本発明の一実施形態によるネットワークトラフィックを受信するためハッシュエンジンによって選択されたＮＩＣへ接続を転送するための方法ステップのフローチャートを例示している。
【図３Ｂ】本発明の一実施形態によるネットワークトラフィックを受信するためハッシュエンジンによって選択されたＮＩＣへ接続を転送するための方法ステップのフローチャートを例示している。
【図４Ａ】本発明の一実施形態によるネットワークトラフィックを送信するためハッシュエンジンによって選択されたＮＩＣへ接続を転送するための方法ステップのフローチャートを例示している。
【図４Ｂ】本発明の一実施形態によるネットワークトラフィックを送信するためハッシュエンジンによって選択されたＮＩＣへ接続を転送するための方法ステップのフローチャートを例示している。
【図５】本発明の一実施形態によるハッシュエンジンによって選択されたＮＩＣへ既存の接続をオフロードするための方法ステップのフローチャートを例示している。
【図６】本発明の一実施形態によるダミーインターネットプロトコルアドレスを使用してアドレス解決プロトコル要求を行うための方法ステップのフローチャートを例示している。
【符号の説明】
【００４９】
１００…コンピューティング装置、１０２…主メモリ、１０４…メモリコントローラ、１０６…マイクロプロセッサ、１０８…入出力コントローラ、１１０…ネットワークインターフェースカード（ＮＩＣ）、１１２…ハードウエアオフロードエンジン（ＨＯＥ）、１１６…ＮＩＣ、１１８…ＨＯＥ、１２２…オペレーティングシステム、１２４…ソフトウエアドライバ、１２６…ロードバランシング及びフェイルオーバー（ＬＢＦＯ）モジュール、１２８…ハッシュエンジン、１３０…ＴＣＰ／ＩＰスタック、１３２…テーブルインデックス、１３４…ハッシュテーブルエントリー、１３６…テーブル値、１３８…送信ハッシュテーブル、１４０…受信ハッシュテーブル。
【図１Ａ】
2008289146.tif 000003
【図１Ｂ】
2008289146.tif 000004
【図１Ｃ】
2008289146.tif 000005
【図２】
2008289146.tif 000006
【図３Ａ】
2008289146.tif 000007
【図３Ｂ】
2008289146.tif 000008
【図４Ａ】
2008289146.tif 000009
【図４Ｂ】
2008289146.tif 000010
【図５】
2008289146.tif 000011
【図６】
2008289146.tif 000012
【外国語明細書】
2008289146000001.pdf