(57)【特許請求の範囲】
【請求項１】
スイッチング層、およびネットワークプロトコルスタックの一連の１つまたは複数の中間ソフトウェア層であって、各々は、状態オブジェクトを有する中間ソフトウェア層を含むコンピュータ化システムにおいて、１つまたは複数の送信先コンポーネント装置と１つまたは複数の送信元コンポーネント装置との間で制御を受け渡しする方法であって、前記方法は、
前記送信元コンポーネント装置が、同じパス状態オブジェクトを含む複数のネットワーク接続を有する反転ツリー構造を形成する複数の状態オブジェクトからなる階層を含むオフロードデータ構造を生成する動作であって、前記複数の状態オブジェクトは１つまたは複数の中間ソフトウェア層に対するネットワークプロトコルの状態に対応する、オフロードデータ構造を生成する動作と、
前記送信元コンポーネント装置が、オフロードデータ構造の同じ中間ソフトウェア層内の２つまたはそれ以上の状態オブジェクトを送信先コンポーネント装置に前記パス状態オブジェクトを共有する複数のネットワーク接続から同時に転送する動作と、
前記送信先コンポーネントが前記転送後に同じプロトコル層で前記２つまたはそれ以上の状態オブジェクトを処理する動作と
を備えたことを特徴とする方法。
【請求項２】
前記送信先コンポーネントおよび送信元コンポーネントのうちの一方は、周辺装置であることを特徴とする請求項１に記載の方法。
【請求項３】
前記２つまたはそれ以上の状態オブジェクトのうち少なくとも１つは、キャッシュ状態変数を含むことを特徴とする請求項２に記載の方法。
【請求項４】
前記オフロードデータ構造は、前記ネットワークプロトコルスタックを通じて異なる接続パスの同じ中間ソフトウェア層を指す少なくとも次のブロックポインタ、および前記ネットワークプロトコルスタックを通じて同じ接続パスの異なる階層を指す依存ブロックポインタを持つブロックリストを含むことを特徴とする請求項２に記載の方法。
【請求項５】
前記オフロードデータ構造および各ソフトウェア層の前記状態オブジェクトの前記一部を転送するステップは、ＴＣＰ接続のスロースタート段階で実行されることを特徴とする請求項２に記載の方法。
【請求項６】
前記送信元コンポーネント装置が、ホストプロトコルスタックを用いて中間ドライバのデータ構造を前記オフロードデータ構造に挿入する動作であって、前記中間ドライバは、入って来るデータパケットおよび出て行くデータパケットの解読およびカプセル化が可能であり、適宜、前記出て行くデータパケットは１つまたは複数の仮想ローカルエリアネットワーク識別子でパッケージされ、入って来るパケットは、１つまたは複数の仮想ローカルエリアネットワーク識別子を剥ぎ取られる、挿入する動作をさらに備えたことを特徴とする請求項２に記載の方法。
【請求項７】
前記中間ドライバは、認証ヘッダをデータパケットに追加すること、認証ヘッダをデータパケットから削除すること、データパケットを暗号化すること、およびデータパケットを解読することのうちの１つまたは複数を適宜実行することにより、ＩＰＳＥＣプロトコルを使用して１つまたは複数のネットワークリンク上でネットワークトラフィックのセキュリティ保護を行うことができることを特徴とする請求項６に記載の方法。
【請求項８】
前記周辺装置が１つまたは複数の中間ソフトウェア層に対する１つまたは複数のハンドルを生成し、前記周辺装置は前記１つまたは複数のハンドルを１つまたは複数の対応するホストプロトコルスタック層に転送する動作と、
前記中間ソフトウェア層の少なくとも１つのキャッシュ状態が変更された場合、前記中間ソフトウェア層の少なくとも１つと同じ前記パス状態オブジェクトを有する前記周辺装置が前記周辺装置の前記キャッシュ状態を更新する動作と
をさらに備えたことを特徴とする請求項２に記載の方法。
【請求項９】
フェイルオーバーイベントが発生し、
前記周辺装置が、前記周辺装置上に作成された仮想周辺装置を用いて、１つまたは複数のオフロードデータ構造および１つまたは複数の状態オブジェクトのプロセッサ制御が与えられている１つまたは複数の周辺装置で処理されている１つまたは複数のリンクに障害が発生したことを検出する動作と、
前記仮想周辺装置が、前記中間ドライバを使用して前記１つまたは複数のオフロードデータ構造および前記１つまたは複数の状態オブジェクトの制御を受け取ることにより前記１つまたは複数のリンクの処理制御を扱うことができる異なる１つまたは複数の周辺装置を検出する動作と
をさらに備えたことを特徴とする請求項２に記載の方法。
【請求項１０】
前記１つまたは複数の障害が発生した周辺装置から前記送信元コンポーネントに前記１つまたは複数のオフロードデータ構造および前記１つまたは複数の状態オブジェクトのプロセッサ制御を受け渡し、それにより、前記１つまたは複数の障害が発生した周辺装置から前記送信元コンポーネントに前記１つまたは複数のリンクの処理制御をアップロードすることをさらに備えたことを特徴とする請求項９に記載の方法。
【請求項１１】
前記周辺装置上に作成された仮想周辺装置が、前記異なる１つまたは複数の周辺装置の処理リソースを検出し、および前記１つまたは複数の障害発生周辺装置からアップロードされた前記１つまたは複数の状態オブジェクトを前記異なる１つまたは複数の周辺装置の前記検出されたリソースに合わせて調整し、前記１つまたは複数のリンクを前記障害発生した１つまたは複数の周辺装置ではなく前記異なる１つまたは複数の周辺装置で処理することができるようにする動作をさらに備えたことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記１つまたは複数のリンクは、アグリゲートされた８０２．３ａｄリンクであることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記周辺装置上に作成された仮想周辺装置が、
前記異なる１つまたは複数の周辺装置の処理リソースを検出し、
前記１つまたは複数のオフロードされた状態オブジェクトのうちの１つが前記検出された処理リソースに基づいて前記異なる１つまたは複数の周辺装置により処理することが可能な場合に、前記１つまたは複数のオフロードされた状態オブジェクトのうちの前記１つの処理制御を前記異なる１つまたは複数の周辺装置に受け渡し、
前記１つまたは複数のオフロードされた状態オブジェクトが前記検出された処理リソースに基づいて前記異なる１つまたは複数の周辺装置により処理することが可能でない場合に、前記１つまたは複数のオフロードされた状態オブジェクトのうちの前記１つの処理制御を前記ホストプロトコルスタックに受け渡す動作をさらに備えたことを特徴とする請求項９に記載の方法。
【請求項１４】
前記１つまたは複数のリンクは、アグリゲートされた８０２．３ａｄリンクであることを特徴とする請求項１３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータネットワーキング技術に関し、より詳細には、本発明はネットワークコンピューティングタスク（network computing tasks）のオフロード機能を最適化するためのメカニズムに関する。
【背景技術】
【０００２】
オペレーティングシステム、アプリケーションソフトウェア、ネットワーキング技術などが留まることなく、めざましい速さで複雑化し、高度な能力を備えるに至り、その結果コンピュータは高機能化しているのである。このような高機能化が進んだ結果、高度な機能を実装する中央演算処理装置（ＣＰＵ）側で実行しなければならない作業が増えたため、ＣＰＵ負荷（これ以降「ＣＰＵオーバーヘッド」とも呼ぶ）が増大することが多い。
【０００３】
ＣＰＵオーバーヘッドの増大が容易に分かる領域は、ネットワークでつながっているアプリケーションの領域であり、そこでは、ネットワーク速度は、高帯域媒体の発達により向上している。ネットワーク速度は、ＣＰＵプロセッサ速度およびホストコンピュータでのローカルメモリのアクセス速度に匹敵することさえありうる。さらにこれらのネットワークでつながっているアプリケーションは、７層Open System Interconnect（ＯＳＩ）モデルまたはＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムによって使用されている階層化モデルなどの、大半のオペレーティングシステムによって使用されている階層化アーキテクチャを採用しているため、ホストプロセッサに負担をかける。
【０００４】
よく知られているように、このようなモデルは、ネットワークへの物理的接続とエンドユーザアプリケーションとの間のデータの流れを記述するために使用される。データビットをネットワークケーブルに送るなどの最も基本的な機能は最下層で実行されるが、アプリケーションの詳細を扱う機能は最上層にある。本質的に、各層の目的は、すぐ上の上位層にサービスを提供し、サービスの実際の実装詳細からその上位層を遮蔽することである。これらの層は、各層が他のコンピュータ上の同じ層と通信していると確信できるような方法で抽象化されている。
【０００５】
層間を進むときにデータパケットに対し実行される様々な機能は、もっぱらソフトウェアであるため、かなりのＣＰＵプロセッサおよびメモリリソースを必要とする。例えば、パケットのチェックサム計算および検証、データの暗号化および解読（例えば、ＳＳＬ暗号化およびＩＰセキュリティ暗号化）、メッセージダイジェスト計算、ＴＣＰセグメント化、ＴＣＰ再送および肯定応答（ＡＣＫ）処理、サービス拒否攻撃に対抗するパケットフィルタ処理、およびユーザデータグラムプロトコル（ＵＤＰ）パケットフラグメンテーションなど、様々な層でパケットに対し実行されるいくつかの機能はＣＰＵに大きな負担をかける。これらの機能が各々実行された結果、ＣＰＵに対し生じる要求は、コンピュータシステム全体のスループットおよびパフォーマンスに大きな影響を及ぼす可能性がある。
【０００６】
ＣＰＵリソースに対する要求が増えるにつれ、ネットワークインターフェースカード（ＮＩＣ）などのコンピュータハードウェアの周辺機器の能力およびスループットも高まってきている。これらの周辺機器は、多くの場合、別の方式であればＣＰＵによって実行されるタスクおよび機能の多くを実行することができる専用プロセッサおよびメモリを備える。
【０００７】
コンピュータ業界ではこのような機能を認識し、以前にはＣＰＵによって実行されていたＣＰＵに負担のかかるタスクおよび機能をオフロードする方法を開発した。例えば、同一出願人によるAnandらの特許文献１、特許文献２、および２０００年１１月２９日に出願された「Method and Computer Program Product for Offloading Processing Tasks from Software to Hardware」という特許文献３では、周辺装置に問い合わせを行い、特定のプロセッサタスクを、負荷の高いタスクおよび機能を実行できる周辺装置にオフロードする解決策を提示している。通常オフロードされる特定のタスクとしては、ＴＣＰ（伝送制御プロトコル）および／またはＩＰ（インターネットプロトコル）チェックサム計算、大量送信オフロード（ＬＳＯ）などのＴＣＰセグメント化、およびインターネットプロトコルセキュリティ（ＩＰＳｅｃ）暗号化および解読がある。
【０００８】
これらのオフロードメカニズムは、ネットワークスタックに対し最小限の変更を加える必要があるという二次的な要件がある点で制限されている。この二次的な要件がある結果、周辺装置に到達するためにオフロードされたタスクおよび機能が無効にされた状態でネットワークスタック全体がトラバースされるので、オフロードのコードパスは長くなるという制限がさらに付く。ほかに、ネットワークスタックとの統合を欠いているという制限もある。ネットワークスタックが周辺装置にパラメータを問い合わせたり、または設定したりするためのインターフェース、あるいは周辺装置が通知または機能の変化をネットワークスタックに知らせるインターフェースがきちんと定義されていない。例えば、ＬＳＯ要求の処理中にルートの変更があった場合、コールバックメカニズムがあり、スタックはタイムアウトを待ち、ＬＳＯ要求を再送する。
【０００９】
周辺装置メーカーによる他の試みとして、コアスタックからネットワークインターフェースカード（ＮＩＣ）へのＴＣＰ接続全体をオフロードするアプローチがあった。このアプローチは、専用インターフェースを使用することによりプロトコルスタック全体をバイパスし、および周辺装置が、ＴＣＰメッセージ、ＩＰ（インターネットプロトコル）メッセージ、ＩＣＭＰ（インターネット制御メッセージプロトコル）メッセージ、ＤＮＳ（ドメインネームサーバ）メッセージ、動的ホスト構成プロトコル（ＤＨＣＰ）メッセージ、ルーティング情報プロトコル（ＲＩＰ）メッセージなどを処理することを必要とする。さらに、このアプローチは、マルチホーム環境（multi-homed environments）に対応しておらず、ホストのオペレーティングシステムのネットワーク管理ユーティリティときれいに統合されない。周辺装置の状態が変化した場合、オフロードされた接続はたやすく失敗する。このようなオフロード接続失敗の可能性があることは、現在の技術にほかにもある欠点のうちの１つにすぎない。
【００１０】
単一の「接続」は、通常、ここでは「状態オブジェクト」と呼ばれる、各ネットワーク層の状態からなることに注意されたい。しかし、ネットワークプロトコルの計算をオフロードすることは、接続オリエンテッドプロトコルに限られていない。ＩＰＳｅｃなどの他のプロトコルは、接続オリエンテッドではないかもしれないが、それでも、状態オブジェクト、または状態オブジェクトのグループを含み、これらはオフロードすることができる。リモートＤＭＡ（ＲＤＭＡ）では、接続オフロードに必要なものにさらに状態オブジェクトを追加することができる。本発明は、上記のすべてに適用され、したがって「状態オブジェクト」は、状態を含む、接続オリエンテッドの場合もそうでない場合もある、およびＴＣＰ／ＩＰネットワーキングに必要な状態だけでなくそれ以上の状態も含む場合も含まない場合もある、１つまたは複数のネットワーク層を指す。
【００１１】
「ネットワーク接続」（本明細書では、「接続」とも呼ぶ）は、限定ではなく説明として、ＴＣＰ接続、ストリーム制御伝送プロトコル（Stream Control Transmission Protocol）（ＳＣＴＰ）接続（またはストリーム）、および、接続オリエンテッド通信の実装に使用する場合は、接続オリエンテッドユーザデータグラムプロトコル（ＵＤＰ）などのプロトコルを使用する「接続」であると理解するものとする。さらに、「ネットワーク接続」（すなわち「接続」）は、通常、７層ＯＳＩネットワークプロトコルスタックモデルのトランスポート層（つまり第４層）において実装されるが、これもまた、接続を実装するアプリケーション層プロトコルまたは接続を実装するデータリンク層プロトコルを含む、他の層で実行される場合がある。
【００１２】
継続して、これら開発中のオフロードメカニズムは、特に、処理のためにＣＰＵサイクルを比較的多く必要とする接続の場合に、一度に１つの接続だけ、または一度に状態オブジェクトの１つの論理グループだけを繰り返し転送することを重視している。例えば、単一のオフロードされた接続または状態オブジェクトを処理するために必要なＣＰＵの総サイクル数は以下のように表すことができる。
Ａ＋［Ｂ−Ｃ］、ただし、
「Ａ」＝接続またはリンクをオフロードするのに必要なＣＰＵサイクルの数、
「Ｂ」＝接続またはリンクを処理するのに必要なＣＰＵサイクルの数、および
「Ｃ」＝接続またはリンクをオフロードすることにより節約されるＣＰＵサイクルの数。
第１項（つまり、「Ａ」）が第２項（つまり、「Ｂ−Ｃ」）よりもかなり大きい場合、一般的に、ＣＰＵのオーバーヘッドに関して、所定の接続またはリンクをオフロードすることには費用効果があるとはいえない。それとは対照的に、第２項（「Ｂ−Ｃ」）が第１項（つまり、「Ａ」）よりもかなり大きい場合、接続または状態オブジェクトをオフロードすると有益であろう。そこで、「Ｂ−Ｃ」項が比較的高い接続または状態オブジェクトをオフロードすることに、オフロードメカニズムを主に適合させた。これは、「長命」の接続または大きなファイルを転送するために使用される接続の場合であることが多い。
【００１３】
長命の接続、および大量のデータを送信するための接続または状態オブジェクトは、ホストコンピュータの貴重なＣＰＵリソースを消費しなければならない可能性のある唯一の種類の接続または状態オブジェクトではない。例えば、インターネットなどのワイドエリアネットワーク（ＷＡＮ）上のホストの場合、Ｗｅｂページのホストとなるサーバは、数千の単純なＷｅｂページ要求などの、数十万の「短命」接続を処理することに等しく消費される可能性がある。
【００１４】
一般的に、「短命」接続は、その名が示すように寿命が短い接続であり、多くの場合ワイドエリアネットワークを介した、ハイパーテキスト転送プロトコル（ＨＴＴＰ）接続などの、リモートコンピュータとサーバ（またはホスト）の間の１つまたは複数の短いデータ転送要求および応答でありうる。ＨＴＴＰバージョン１．０が、この場合を例示している。ＨＴＴＰ１．０を使用して通常のテキストのＷｅｂページを要求するために、クライアントは、そのＷｅｂページをホスティングしているサーバ（またはホスト）との双方向接続を開始する。クライアントからのサーバの要求は、通常、１メッセージ、つまり「get file, file name」（例えば、「GET http://10.1.1.1/file_name.html」）などの短いＡＳＣＩＩ文字列であり、要求は、ときには、総データサイズ１００バイト以下の場合もある。クライアントの要求が受け入れられた後、クライアントは双方向接続の第１の方向（クライアントからサーバへ）を閉じ、サーバは双方向接続の第２の方向（サーバからクライアントへ）でテキストＷｅｂページを送信することにより応答し、その後、双方向接続の第２の方向を閉じる。単一の要求を処理するのではなく、接続を閉じる前に少数の要求を組み合わせたものを含む、この種の作業負荷を有するプロトコルは多数ある。このような各プロトコルを、短命接続（short-lived connection）と呼ぶ。
【００１５】
ＨＴＴＰ  Ｗｅｂページ要求は、多くの場合、１００から１０００バイトまでの間で構成される。ＨＴＴＰ応答も同様に、例えば、要求されたＷｅｂページがテキストベースであり、含まれるマルチメディア情報は、もしあったとしてもほんのわずかである場合にはごく小さなものにできる。したがって、特に、高速ネットワークが広く利用されていることを考えた場合、要求も応答もそれほど多くのデータを運ぶわけではない。さらに、要求も応答も、プロセッサがますます高速化されてゆくため、現在の規格でＣＰＵ時間をそれほど必要としない。したがって、ＨＴＴＰ要求および応答を処理するために必要な接続時間は、かなり短いことがある。この場合、単一の短命接続をオフロードするために必要なＣＰＵサイクル数は、ＣＰＵに短命接続を処理させないことにより維持されるＣＰＵサイクル数をたやすく超える可能性がある。その結果、ＣＰＵサイクルに関して、一度に１つの短命接続を繰り返しオフロードするのは比較的コストがかかる。
【００１６】
ネットワークの計算をオフロードすることに関係する別の制約条件には、１つまたは複数の物理周辺装置の上に１つまたは複数の仮想周辺装置を作成する作業を規定する規格への適合がある。これは、ネットワークトラフィックのロードバランシングおよびネットワークトラフィックのフェイルオーバーをサポートする複数のネットワークリンク群、さらには、一般に仮想ＬＡＮ（ＶＬＡＮ）と呼ばれる、ネットワーク管理側が物理ネットワークを複数の論理的に異なるネットワークとしてみなせるようにする１つまたは複数の仮想リンクへの単一リンクの細分を含む、いくつかの理由から有益である。
【００１７】
リンク群を実現する技術の例として、ＩＥＥＥ８０２．３ａｄ（本明細書では「８０２．３ａｄ規格」とも呼ぶ）、さらに他のベンダの専用規格がある。特に、８０２．３ａｄ規格（だけでなく、ベンダの専用規格）では、２つまたはそれ以上のＥｔｈｅｒｎｅｔ（登録商標）リンクを組み合わせて、複数のＥｔｈｅｒｎｅｔ（登録商標）リンクにまたがるネットワークトラフィックのロードバランシングまたはネットワークトラフィックのフェイルオーバーをサポートする方法を定義している。この機能を使用することにより、ａ）ネットワークリンクの障害に対するホストのフォールトトレランスを高め、かつ／またはｂ）複数のEthernet（登録商標）リンクにわたってネットワークトラフィックをロードバランシングできるようにすることでサーバのネットワーキングキャパシティを増やすことができる。この目的を達成するために、８０２．３ａｄ規格では、１つの仮想周辺装置に「チーム化（teamed）」することができる周辺装置の「チーム」を規定している。こうして、仮想周辺装置は、（フェイルオーバーに関して）現在有効になっているチーム内の周辺装置を切り換えることにより、かつ／または（ロードバランシングに関して）複数の物理装置にまたがるネットワークトラフィックの方向を決めることにより、チーム内の物理周辺装置を管理する。例えば、「チーム」がフェイルオーバーに関して構成されており、仮想周辺装置が、物理周辺装置が故障していることを検出した場合、仮想周辺装置は故障した周辺装置を使わず、代わりに、周辺装置のチーム内の他の周辺装置を使用してネットワーキングトラフィックの送受信を行う。
【００１８】
仮想ＬＡＮ規格の例としては、ＶＬＡＮタグ用のＩＥＥＥ８０３．１ｑ規格がある。この規格では、媒体アクセス制御（ＭＡＣ）アドレスに追加されるタグを定義しており、これにより、タグの値を変更することでＥｔｈｅｒｎｅｔ（登録商標）ネットワークを独立の複数のネットワークに論理的に細分することができる。したがって、システム管理者は、異なる管理ドメインのトラフィックを論理的に分離し（例えば、技術開発用のネットワークと給与支払用のネットワークとを分離する）、その一方で、両方に同じ物理ネットワークを使用することができる。また、さらに、ブロックストレージのネットワークトラフィック（block storage network traffic）を従来のピアツーピアトラフィックから論理的に分離するなどのセキュリティ問題の分離も可能にする。
【００１９】
【特許文献１】米国特許第６，１４１，７０５号明細書
【特許文献２】米国特許第６，３７０，５９９号明細書
【特許文献３】米国特許出願公開第０９／７２６，０８２号明細書
【発明の開示】
【発明が解決しようとする課題】
【００２０】
ネットワークのオフロードで現状の技術を用い、それらと仮想周辺装置を作成する機能とを組み合わせようとしたときにいくつかの制約事項がある。仮想周辺装置をロードバランシングまたはフォールトトレランスに使用し、仮想周辺装置を通じて物理周辺装置に接続または状態オブジェクトをオフロードし、物理周辺装置が故障した場合、通常、オフロードされた接続または状態オブジェクトは復旧することができない（他の物理周辺装置へのフェイルオーバーはもちろんのことである）。さらに、現状の技術では、多くの場合、仮想周辺装置は異種の物理装置をチーム化することができなければならない。物理周辺装置が接続または状態オブジェクトのオフロードをサポートしている場合、これは、チーム内の物理装置が異なるオフロード能力を持つことを意味する。物理装置が故障し、チーム内の新しい物理装置が仮想装置により選択された場合、その新しい物理装置は、以前の装置よりも、オフロードまたは異なる能力に関してキャパシティが大きく、または小さくなることがある。ネットワークの計算のオフロードに対する現状の技術では、このようなレベルの多目的性に対応できない。
【００２１】
したがって、当業では１つのプロセッサから１つの周辺装置への、またその逆の方向の複数の接続のオフロードに関連するオーバーヘッドを低減することが必要であるだけでなく、オフロード機能を拡張して１つまたは複数の物理周辺装置の上に１つまたは複数の仮想周辺装置を作成し、オフロードされた環境においてフォールトトレランス、ネットワークキャパシティ、およびネットワーク管理を高めることができる既存の規格ときれいに統合する必要もある。特に、同時に個々の接続に対する専用の処理要件を保持しながら複数の短命接続をオフロードするための解決策が必要である。そのうえ、８０２．３ａｄ環境内でアグリゲートされた接続をオフロードまたはアップロードする解決策が必要であり（特に、周辺装置のフェイルオーバーイベントに適用されるような）、また仮想ＬＡＮのサポートを可能にする必要もある。
【００２２】
本発明は、ホストプロセッサと周辺装置プロセッサとの間の複数のネットワーク接続または状態オブジェクトの信頼性の高いオフロードおよびアップロードを行う方法を提示することにより従来技術にある前記の問題点の１つまたは複数を克服する。本発明は、さらに、８０２．３ａｄ（または同等の規格）フェイルオーバーイベントも規定しており、様々な接続間のオブジェクト状態を保持している間、他の周辺装置の間の様々なリソースの機能を補正しながら、オフロードされた接続または状態オブジェクトを他の周辺装置に転送することができる。本発明の方法は、長命または短命の接続のいずれか（またはその両方）を転送するＣＰＵサイクルに関して費用効果がある。
【課題を解決するための手段】
【００２３】
本発明の一実施形態では、同時に複数の接続のオフロードを可能にすることにより上記の式（「Ａ＋［Ｂ−Ｃ］」）の中の項「Ａ」を減らし、そうすることで、以前には長命接続のみ周辺装置へのオフロードが可能であると一般にみなされていた、短命接続のオフロードが可能になる。
【００２４】
ネットワークスタックでは、２つまたはそれ以上のＴＣＰ接続は、１つまたは複数の中間のソフトウェア層を通じて同じパスをトラバースする。ソフトウェア層各々は、一定状態変数（constant state variable）、キャッシュ状態変数（cached state variable）、および委譲状態変数（delegated state variable）のうちの１つまたは複数を含むことができる状態オブジェクトを持つ。ソフトウェア層については、ホストは、層の委譲状態変数を使用することで周辺装置が独立してデータを転送できるように、処理制御を周辺装置にオフロードする。キャッシュ状態変数については、ホストは、キャッシュ状態変数の制御権を保持し、キャッシュ状態変数が変化した場合に周辺装置を更新する。一定状態変数については、その値はオフロードの存続期間中変化しない。したがって、ホストは状態オブジェクトを周辺装置にオフロードすることはできるが、イベントが発生してキャッシュまたは委譲状態変数が変化しても、システムの状態は一貫している。
【００２５】
２つのホストの間で行われるパスデータ転送は、パス状態オブジェクトにより表される。２つの接続により同じパスを通じてデータが転送される場合、これらの接続において、同じパス状態オブジェクトが共有される。その結果、反転されたツリーデータ構造の形をとる状態オブジェクトの階層が得られる。ホストは、反転されたツリーデータ構造全体を周辺装置にオフロードし、ホストでは一度に複数の接続の周辺装置に処理制御をオフロードすることができる。このように、複数の特定のネットワーク機能をきれいにオフロードできるため、ホストは、所望のネットワーク機能、保全性、フォールトトレランス、およびセキュリティを損なうことなくＣＰＵサイクルを保持することができ、さらに、本発明を短命および長命の接続を含む、様々な環境で実施することができる。
【００２６】
本発明ではさらに、「チーム」または抽象的に「仮想周辺装置」と呼ばれる、周辺装置のグループとオフロード機能とを統合し、周辺装置またはパスの障害に対するフォールトトレランスを高めるだけでなく、複数の周辺装置にまたがるネットワーキングトラフィックのロードバランシングも可能にする。本発明は、フェイルオーバーイベントが発生している間、仮想周辺装置がオフロード要求を出すのを引き延ばし、またオプションにより、オフロードされているすべての状態オブジェクトをアップロードし、仮想周辺装置のオフロード機能を再調整し、そして状態オブジェクトのオフロードを再有効化することができるメカニズムを提示する。
【００２７】
本発明の他の特徴および利点は、以下の説明の中で述べられており、一部は、説明から明らかであるか、または本発明を実施することから知ることができる。本発明の特徴および利点については、添付の請求項で特に指摘されている機器および組合せを使用することにより理解され、得られる。本発明によるこれらの特徴および他の特徴は、以下の説明および添付の請求項を読むとより完全に明らかになるか、または以下で述べているように本発明を実施することで知ることができる。
【発明を実施するための最良の形態】
【００２８】
本発明の上、およびその他の利点および特徴を得る方法を説明するために、上で簡単に説明した本発明のより具体的な説明を付属の図面に示されている特定の実施形態を参照しながら行う。これらの図面が本発明の代表的な実施形態を示しているだけであり、したがって請求の範囲を制限しているものとみなされないことを理解していることを前提として、付属の図面を使用して本発明を具体的内容および詳細とともに説明する。
【００２９】
本発明は、一般に、コンピュータネットワーキング技術に関する。より具体的には、本発明は、一般に、通常、ホストプロセッサにより実行されるネットワークコンピューティングタスクの特定のハードウェアコンポーネントへのオフロードを最適化し、適宜制御権をホストプロセッサに返すメカニズムに関する。本発明では、さらに、仮想周辺装置を使用することにより、オフロードされたネットワークコンピューティングタスクの柔軟性を高める。このような柔軟性があるため、ホストの負荷が変化する、またはネットワーク装置状態が変化するときのオフロードされたネットワークコンピューティングタスクのフォールトトレランスが向上するだけでなく、仮想ＬＡＮのサポートも可能になる。
【００３０】
したがって、本発明では、様々なネットワーク接続の間の状態の変化を補正し、また他の周辺装置間の異なるリソース機能を補正しながら、一方の周辺装置から他方の周辺装置へ、または周辺装置からホストプロセッサへネットワーク接続を転送することを考察している。制限ではなく説明として、明細書および請求項を読み終わった後、「周辺装置」はネットワークインターフェースカード、さらにネットワークアダプタを備えた汎用ＣＰＵ、専用ＣＰＵを備えたネットワーク処理エンジン、オフロードＮＩＣを備えた従来のミニポート、またはハードウェアの状態機械の実装などのコンポーネントを含むことは理解されるであろう。したがって、以下の説明では、本発明の方法はコンポーネント間の長命または短命の接続のいずれか（またはその両方）を転送するためのＣＰＵサイクルに関して説明する。
【００３１】
後に詳述するが、ホストは、周辺装置が持ちうるリソースを検出し、その結果の関連するデータ構造を調整して関連する接続の要件とオフロード周辺装置との間が一貫するようにする。オフロードデータ構造を操作できることで具体的応用があり、適宜オフロードまたはアップロードデータ構造内に追加データ構造を挿入することを含む、多様なネットワークプロトコルを用いて一貫したアップロードおよびオフロードを行うことが可能である。ホストは、接続をオフロードできるとしても特定のデータ構造に対する制御を維持しているため、またホストは最初の周辺装置のフェイルオーバーが発生した場合に新しい周辺装置とパラメータの再ネゴシエーションを実行できるため、本発明は、周辺装置の故障に関係なく、また接続が長命接続であろうと短命接続であろうと、一度に複数のＴＣＰ接続のオフロードおよびアップロードを実行する新規性のある堅牢な方法を提示する。
【００３２】
本発明の追加の特徴および利点は、以下の説明の中で述べられており、一部は、説明から明らかであるか、または本発明を実施することから知ることができる。本発明の特徴および利点については、書き添えられた請求項で特に指摘されている機器および組合せを使用することにより理解され、得られる。本発明によるこれらの特徴および他の特徴は、以下の説明および書き添えられた請求項を読むとよりいっそう明らかになるか、または以下で述べているように本発明を実施することで知ることができる。
【００３３】
本発明による本発明の範囲内の実施形態はさらに、格納されているコンピュータ実行可能命令またはデータ構造を搬送するまたは保持するためのコンピュータ読取り可能な媒体も含む。このようなコンピュータ読取り可能な媒体は、汎用または専用コンピュータからアクセスできる利用可能な媒体とすることができる。例としてであって、限定ではないが、このようなコンピュータ読取り可能な媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、またはその他の光ディスク記憶装置、磁気ディスク記憶装置またはその他の磁気記憶装置、またはコンピュータ実行可能命令またはデータ構造の形で目的のプログラムコード手段を搬送または格納するために使用できる、専用または汎用コンピュータによりアクセスできる、その他任意の媒体を備えることができる。
【００３４】
ネットワークまたは別の通信接続（有線、無線、または有線と無線の組合せ）を介して情報をコンピュータに転送または供給すると、コンピュータはその接続をコンピュータ読取り可能な媒体として適切に認識する。したがって、そのような接続は、まさにコンピュータ読取り可能な媒体である。上記の組合せも、コンピュータ読取り可能な媒体の範囲に含めなければならない。コンピュータ実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用処理装置に特定の機能または機能群を実行させる命令およびデータを含む。
【００３５】
そこで次に図１を参照すると、図は本発明によりネットワーキングモデルを構成するコンポーネントのいくつかの相互関係を例示している。通常のオペレーション中、ネットワーク上に流されるメッセージ(networked messages)は、アプリケーション１００によりネットワークスタック１０２を通じ周辺装置１０４に送信され、そこからメッセージはネットワーク上の他の装置およびアプリケーションに送信される。さらに、ネットワーク上に流されるメッセージは、周辺装置１０４を使用してネットワーク上の他の装置およびアプリケーションから受信することができ、その後、このメッセージは、ネットワークスタック１０２を通じてアプリケーション１００に受け渡される。ネットワークスタック１０２は、１つまたは複数の中間ソフトウェア層１０６を含む。アプリケーション１００から送信されたデータは、中間ソフトウェア層１０６を通り、そこでデータのパッケージング、信頼できるデータ伝送、データの暗号化およびメッセージダイジェストの計算などの特定のオペレーションをデータに対して実行することができる。
【００３６】
スイッチ１０８は、ホストの処理装置から中間ソフトウェア層１０６のネットワークスタックオペレーションをオフロードするために使用される。スイッチ１０８は別に示されているが、スイッチ１０８はネットワークスタック１０２の上位中間層に組み込むことができることに注意されたい。ネットワークスタックオペレーションをオフロードした後、データがチムニー１１０を経由して周辺装置１０４に送信され、周辺装置１０４はネットワークスタックオペレーションを実行できる。この階層では、中間ソフトウェア層は、ホストまたは周辺装置内に単独で置かれていなくてもよい。さらに、この階層により、任意の中間層を完全にオフロードするか、ホスト内に残すか、またはその両方の組合せを実行することができる（例えば、１つまたは複数の特定の接続をオフロードする）。さらに、チムニーをチムニー上位に置き階層化することができる（例えば、ＩＰＳｅｃチムニーは、ＴＣＰチムニー上位に階層化することができる）。
【００３７】
接続は、信頼できるデータ転送と信頼できないデータ転送との組合せとすることができ、ユニキャストまたはマルチキャストのデータ転送を含むことができる。いずれの場合も、所定の接続に対する状態オブジェクトがオフロードされ、その状態オブジェクト内にキャッシュ変数がある場合、中間層は、それぞれの状態オブジェクトについて「キャッシュ」と指定された変数がホスト内で変更された場合、変数のキャッシュされたコピーが周辺装置内で更新されることを保証する。例えば、接続をオフロードすることは、周辺装置１０４にすべてオフロードされたフレーミング層のアドレス解決プロトコルエントリ（ＡＲＰ）とともに、ネットワーク層のルートキャッシュエントリ（ＲＣＥ）を含むトランスポート層のトランスポート制御ブロック（ＴＣＢ）状態エントリをオフロードすることを含むことができる。スイッチ１０８は、同じＲＣＥを共有するホストネットワークスタック１０２を通じて異なるＴＣＢに対してトラフィックを送信し続け、その一方で、スイッチ１０８は、オフロードされたＴＣＢについてチムニー１１０を通じてトラフィックを送信する。
【００３８】
スイッチ１０８は、中間層１０６にオフロード要求を送信することによりオフロードを開始する。各中間層１０６は、オフロード要求を拒絶するか、またはリソース情報をオフロード要求に追加し、オフロード要求をネットワークスタック１０２内の隣接するソフトウェア層に送信する。オフロード要求は、接続を正常にオフロードできるか否かを周辺装置１０４が決定するのに役立つ（場合によっては、ネットワーク層毎の）リソース情報を含む。周辺装置１０４がオフロード要求を受信すると、接続のオフロードに使用可能なリソースがあるか否か算出する。オフロードが可能でなければ、周辺装置１０４はオフロード要求を拒絶する。可能であれば、周辺装置１０４はオフロード要求を受理し、その接続に対してリソースを割り当てる。周辺装置１０４は、パラメータのリストを含む完了メッセージを中間ソフトウェア層１０６に送信することによりオフロード要求を完了する。このパラメータのリストを使って、中間ソフトウェア層１０６およびスイッチ１０８に情報を送り、中間ソフトウェア層１０６およびスイッチ１０８が周辺装置と通信できるようにする。それぞれの中間ソフトウェア層１０６は、完了メッセージを受け取ると、その層に対する情報をパラメータのリストから削除し、完了メッセージのその残り部分を次の中間層１０６に渡し、中間層１０６がほかになければ、スイッチ１０８に渡す。
【００３９】
中間層１０６がオフロードの完了メッセージを受信した場合、またはもともとのオフロード要求中に、中間層１０６はその状態を周辺装置１０４に受け渡す。各状態は、ＣＯＮＳＴ、ＣＡＣＨＥＤ、およびＤＥＬＥＧＡＴＥＤという３種類の変数（「状態変数」とも呼ばれる）を有することができる。所定の中間層１０６に対応する状態オブジェクトは、３種類すべての状態を有するか、または３種類の状態の部分アグリゲートを有することができる。ＣＯＮＳＴ状態変数は、オフロードされた接続の存続期間中決して変化しない定数である。
【００４０】
ＣＯＮＳＴ状態変数は、ネットワークスタックの処理制御をオフロードするときに（これ以降、単に「オフロード中」と呼ぶ）周辺装置１０４に提供されるが、状態オブジェクトがホストプロトコルスタックにアップロードされたときには（これ以降、単に「アップロード中」と呼ぶ）該当する中間層１０６に周辺装置１０４により戻されない。これは、中間層１０６がＣＯＮＳＴ状態変数の値を保持しており、したがって、アップロード中に渡されたデータ構造をかなり小さくできるからである。
【００４１】
ホストプロセッサは、ＣＡＣＨＥＤ状態変数の所有権を保持し、ホストプロセッサ内のＣＡＣＨＥＤ状態変数に生じた変更が周辺装置１０４内で更新されることを確実にする。ＣＡＣＨＥＤ状態変数を変更する制御メッセージは、ネットワークスタック１０２によって処理される。その結果、ホストは、オフロード中にＣＡＣＨＥＤ状態変数を周辺装置に書き込むが、アップロード中にはＣＡＣＨＥＤ状態変数を周辺装置から読み戻す必要はない。このため、さらに、アップロードにかかわるオーバーヘッドが減少する。
【００４２】
ホストプロセッサは、ＤＥＬＥＧＡＴＥＤ状態変数の所有権を周辺装置１０４に引き渡す。ＤＥＬＥＧＡＴＥＤ状態変数は、オフロード中に１回書き込まれ、アップロード中に読み戻される。ＤＥＬＥＧＡＴＥＤ状態変数の制御権を戻すことだけで、接続をホストにアップロードして戻すことに関連するオーバーヘッドが最小限に抑えられる。
【００４３】
したがって、オフロード中に、状態オブジェクトの制御権は、所定の状態オブジェクトの状態変数のいくつかの制御権はホストプロセッサ内で保持され、その一方で、所定の状態オブジェクトの他の状態変数の制御権は周辺装置１０４に渡されるという点で、ホストプロセッサと周辺装置１０４との間で共有される。したがって、それぞれの中間層に関連する状態の処理のための制御は、ホストプロセッサと周辺装置とにきれいに分割され、それぞれが状態の単独の部分を所有する。
【００４４】
ホストプロセッサは、必要なときに周辺装置１０４にＤＥＬＥＧＡＴＥＤ状態変数について問い合わせることができる。ホストプロセッサは、さらに、診断のためＣＯＮＳＴまたはＣＡＣＨＥＤ状態に問い合わせることもできる。状態を３つのカテゴリ（または「変数」）に分割することで、ネットワークスタック１０２をチムニー１１０ときれいに共存させることができる。周辺装置に与えられるべき状態変数（このような状態変数に対する制御権も周辺装置に渡すか否か）を最初のオフロード要求に入れて、周辺装置とホストスタックとの間のインタラクションの回数を最適化することができる。これは、状態オブジェクトが委譲状態を含まないか、またはホストスタックが、委譲状態オブジェクトが最初のオフロード要求からオフロード要求の完了までの間に変化しないことを確実にできる場合に実行できる。
【００４５】
アップロードは、直接、周辺装置１０４またはスイッチ１０８のいずれかにより開始することができる。アップロードは、さらに、中間層１０２により間接的に開始することもできるが、それは、例えば、中間層１０２がパスまたは隣接エントリを無効化しているからである。アップロードが開始されると、周辺装置１０４は、未完了のすべての要求を完了し、状態オブジェクトをホストスタックに渡して戻す。スイッチ１０８は、さらに送信要求があればそれをキューに入れ、周辺装置１０４への受信バッファのポストを停止する。アップロード中に、ホストスタックの中間層は、状態オブジェクトの制御権を取り戻し、アップロード要求を終了する。アップロード要求が完了した後、周辺装置１０４は、アップロードのためもはや使用されなくなったリソースを解放する。
【００４６】
ある種の状況では、特定の接続または状態オブジェクトに対するデータは、別の周辺装置を通って到着するか、またはホストプロトコルスタック（例えば、ＴＣＰセグメントを異なるネットワークインターフェース上に到達させるＩＰフラグメントまたはルートフラップ）により処理されなければならない場合がある。これが発生すると、中間層１０６はさらに、受信されたデータを周辺装置１０４に転送する転送インターフェースを備えることもできる。中間層１０６は、周辺装置が関連する接続または状態オブジェクトのアップロードの最中に、周辺装置１０４にデータを転送することを試みることができる。したがって、周辺装置１０４は、もはや、データパケットを処理するために必要な状態オブジェクトの制御権を保持することができない。このような場合、周辺装置１０４は、エラーメッセージを中間層１０６に返し、アップロードが進行中であることを示す。エラーメッセージは、入って来たデータの転送を停止し、中間層が状態オブジェクトを受け取るまで他のデータをバッファリングすることを中間層１０６に知らせる。あるいはまた、周辺装置１０４にバッファメモリを増設するのと引き換えになるが、入って来たデータを周辺装置１０４に転送し、周辺装置１０４がデータをバッファリングし、状態オブジェクトのアップロードが完了したときにデータを供給することも可能である。（図７では、このアップロードプロセスを詳しく説明している）。
【００４７】
中間ソフトウェア層１０６により、複数の接続を周辺装置１０４にオフロードすることができる。オフロードのため中間ソフトウェア層の状態オブジェクトを参照する上位層状態オブジェクト（つまり、中間ソフトウェア層１０６よりも上の層の状態オブジェクト）の個数の参照カウンタが、中間ソフトウェア層１０６により保持される。本明細書で用いているような状態オブジェクトは、特定の層に対する状態変数の集まり（「状態」ともいう）である。すでに述べたように、このような状態変数は、ＣＯＮＳＴ、ＣＡＣＨＥＤ、またはＤＥＬＥＧＡＴＥＤに分類することができる。特定の中間層のオフロードされた状態オブジェクトへの参照の回数が０にデクリメントされた場合（例えば、アップロード要求中に）、中間層１０６はメッセージを周辺装置１０４に送信して中間層に対する状態オブジェクトをアップロードし、対応する委譲状態変数を中間層１０６に送信し、中間層１０６に対する状態オブジェクトを削除する。参照カウンタを０にデクリメントさせるもともとのアップロード要求中に、または後で、アップロード要求を実行できることに注意されたい。
【００４８】
図２は、ハードウェア層２１４が、例えば、ネットワークインターフェースカード（ＮＩＣ）である周辺装置を含む本発明による一実施形態を説明している。さらに、図２は、スイッチ２０６（つまり、トランスポート層インターフェース（ＴＬＩ）スイッチ２０６）を含むソフトウェア層、およびトランスポート層２０１、ネットワーク層２０２、およびフレーミング層２０３を含むネットワークスタック２２０を示している。ネットワーク層２０２は、「パス層」とも呼ばれ、フレーミング層２０３は、「隣接層」とも呼ばれる。
【００４９】
一般に、アプリケーション２００は、オペレーション中にネットワーク上に流されるメッセージを、ネットワークスタック２２０を通じて周辺装置（例えば、ハードウェア２１４）に送信する。アプリケーション２００から送信されたデータは、ＴＬＩスイッチ２０６内を流れるが、これは、データがホストベースのネットワークスタック２２０またはチムニー２３０を下るかどうかを制御する。ＴＬＩスイッチ２０６は、ネットワークスタック２２０の上位層に組み込むことができることに注意されたい。ネットワークスタック２２０内のソフトウェア層は、アプリケーション２００からデータを受信し、パケット形式でデータをパッケージし、その結果得られたパケットを、ＮＤＩＳミニドライバ２１０を介して周辺装置ハードウェア２１４に送信する。ソフトウェア層ではさらに、ペイロードをアプリケーションに渡す際にネットワークパケットが受信されたときの反対機能も提供する。データパケットがスタック２２０を通過するときにネットワークスタック２２０が実行することができる他のタスクとしては、データ暗号化および解読、信頼できるデータ伝送、およびメッセージダイジェストの計算またはチェック（例えば、データパケットのチェックサムまたはＣＲＣ）がある。これらのタスクの多くは、オフロードされなければホストプロセッサにより実行されるため、プロセッサに負担がかかる。
【００５０】
ＴＬＩスイッチ２０６は、チムニー２３０とチムニードライバ２１２を介してオフロードされた接続を周辺装置に送信することによりＣＰＵから周辺装置にスタックオペレーションをオフロードするために用いられる。当業者であれば、明細書および請求項を読むと、ＮＤＩＳドライバ２１０およびチムニードライバ２１２が同じ実際のドライバであってよいことを理解できるであろう。当業者であれば、さらに、ＮＤＩＳミニドライバ２１０およびチムニードライバ２１２の上端はＭＩＣＲＯＳＯＦＴ（登録商標）ＷＩＮＤＯＷＳ（登録商標）オペレーティングシステム内のＮＤＩＳ  ＡＰＩであることも理解するであろう。説明のため、伝送制御プロトコル（ＴＣＰ）ベースのプロトコルスタックを使用して、本発明を説明する。しかし、当業者であれば、この説明を検討した後、様々な種類の周辺装置を使用することができ、また他のネットワークスタックのオフロードに本発明による原理を使用できることを理解するであろう。例えば、ＳＣＴＰ（stream control transmission protocol）またはＵＤＰ（user datagram protocol）ベースのプロトコルスタック、リモートＤＭＡ（ＲＭＤＡ）、またはＩＰＳｅｃ暗号化／解読は、オフロードされることができる。さらに、本発明は、ｉＳＣＳＩ（internet Small Computer System Interface）、ＮＦＳ（Network File System）、またはＣＩＦＳ（Common Interface File System）などの上位機能プロトコルをオフロードする場合にも使用されることができる。オフロードされたプロトコルは、接続オリエンテッド（例えば、ＴＣＰ）またはコネクションレス型（例えば、ＩＰＳｅｃ）である。
【００５１】
ネットワーク接続のオフロードを実行する理由は多数ある。例であって限定ではないが、以下でいくつかの理由を述べる。システム管理者は、オフロードする特定のサービスを選択することが可能である。トラフィック（バイトまたはパケットの個数に関して）が大量のリソースを消費している場合、特定の接続をオフロードすることができる。さらに、ＩＰＳｅｃサービスなど、いくつかの種類のサービスをオフロードすることができる。さらに、管理ポリシーにより処理オフロードを推進することもできる。例えば、管理者は、組織内からのすべての接続が最初にオフロードされるポリシー、または特定のアプリケーションに対するすべての接続が最初にオフロードされるポリシーを持つことができる。使用されているシステムリソース（例えば、ＣＰＵ利用、データキャッシュ使用、ページテーブルキャッシュ使用、メモリ帯域幅）は、ホストプロセッサが接続をオフロードさせることができる。
【００５２】
図３は、ＴＣＰ接続をオフロードするために実行される３ステッププロセスを示しており、ここでは、図２のアプリケーション層２００は示されていないが、あるとすればＴＬＩスイッチ３０６の左にある。さらに、図３では、周辺装置３７０は単に例示のためＮＩＣとして示されているが、他の種類の周辺装置でも、ネットワークアダプタを備えた汎用ＣＰＵを含む、本発明による同様のまたは類似の機能を実行することができる。一般に、図３は、ＴＣＰ接続をオフロードするのに必要なリソースを割り当て、層３００、３０２、３０４、３０６のそれぞれにハンドルを与え、層３００、３０２、３０４、３０６のそれぞれの状態を周辺装置３７０にオフロードする工程を示している。オフロードの遷移中、ＴＬＩスイッチ３０６はアプリケーションから送信されたすべてのメッセージをバッファリングする。あるいはまた、トランスポート層３００はデータをバッファリングする。オフロードが完了すると、バッファリングされているデータは、周辺装置３７０に転送される。オフロード遷移中に入って来るパケットが受信されると、周辺装置３７０は、トランスポート委譲状態が周辺装置３７０に受け渡されるまで、データを層３００、３０２、３０４、３０６に送り続ける。オフロード遷移中にトランスポート層３００が入って来るパケットを受け取ると、トランスポート層は、データをトランスポート状態オブジェクト委譲状態の一部として、または個別に、ＮＩＣ３７０に転送する。
【００５３】
ＴＬＩスイッチ３０６は、トランスポート層３００にオフロード要求３３０を送信することによりオフロードを開始する。オフロード要求は、次の層のローカル状態へのポインタ（例えば、トランスポート層３００のＴＣＢポインタ、ネットワーク層３０２のＲＣＥポインタ、フレーミング層３０４のＡＲＰエントリポインタ、またはＮＤＩＳミニドライバ２１０のＮＤＩＳミニポートポインタ）を含む。オフロード要求はさらに、オフロードタイプ（例えば、ＴＬＩスイッチ３０６ではＴＣＰ、ネットワーク層３０２ではＩＰｖ６など）および周辺装置３７０がＴＣＰ接続を正常にオフロードできるかどうかを決定するのに役立つリソース情報も含む。ＴＬＩスイッチ３０６は、さらに、オフロードハンドルを周辺装置３７０に供給することもできる。ＴＬＩスイッチ３０６は、トランスポート層３００へのアプリケーション送信または受信バッファの送信を停止し、それらをキューに入れ、トランスポート層３００が完了メッセージ３２０を送信するのを待つ。
【００５４】
トランスポート層３００は、オフロード要求を拒絶するか、またはＴＣＰリソース情報をＴＬＩスイッチリソース情報に追加してオフロード要求３３２をネットワーク層３０２に送信するかのいずれかを行う。トランスポート層３００は、さらに、オフロードハンドルを周辺装置３７０に供給することもできる。未処理のアプリケーション送信または受信バッファが保留になっている場合、トランスポート層３００はそれらのバッファをＴＬＩスイッチ３０６に返す。
【００５５】
ネットワーク層３０２は、オフロード要求３３２を受信し、接続をオフロードするのを拒絶するか、またはネットワークリソース要件をＴＣＰリソース情報およびＴＬＩスイッチリソース情報に追加してオフロード要求３３４をフレーミング層３０４に送信するかのいずれかを行う。ネットワーク層３０２は、さらに、オフロードハンドルを周辺装置３７０に供給することもできる。
【００５６】
フレーミング層３０４は、接続をオフロードするのを拒絶するか、またはフレーミングリソース要件をネットワークリソース要件、ＴＣＰリソース情報、およびＴＬＩスイッチリソース情報に追加してオフロード要求３３６を周辺装置３７０に送信するかのいずれかを行う。フレーミング層３０４は、さらに、オフロードハンドルを周辺装置３７０に供給することもできる。
【００５７】
周辺装置３７０は、オフロード要求を受信すると、ＴＣＰ接続のオフロードに利用可能なリソースがあるかどうか算出する。ＮＩＣ側で、オフロードが可能でないと判断した場合、オフロード要求を拒絶する。ＮＩＣは、オフロードが可能であると判断した場合、オフロード要求を受け入れ、その接続用にリソース（例えば、ＴＣＢ、ルートキャッシュエントリ（ＲＣＥ）、アドレス解決プロトコル（ＡＲＰ）テーブルエントリ（ＡＴＥ））を割り当てる。周辺装置３７０は、パラメータおよびディスパッチテーブルのリンクリストを作成して、層３００、３０２、３０４、および３０６に受け渡し、パラメータのリンクリストを含む完了メッセージ３０８をフレーミング層３０４に送信することによりオフロード要求を完了する。これらのパラメータは、層３００、３０２、３０４、３０６のそれぞれ用のオフロードハンドルおよびディスパッチテーブルを含む。
【００５８】
本明細書で用いているように、オフロードハンドルとは、ソフトウェア層が周辺装置と通信する、または周辺装置がソフトウェア層と通信するためのメカニズムのことである。例としてであって限定ではないが、オフロードハンドルには、ポインタベースのハンドル、配列の検索に使用される整数値、ハッシュテーブル（例えば、ハッシュ関数）、ソフトウェア層（またはネットワークスタック）と周辺装置との間の通信チャネル、または周辺装置が状態オブジェクトを検索するために使用するソフトウェア層によって渡される一組のパラメータがある。
【００５９】
例としてであって限定ではないが、中間ソフトウェア層（３０６、３００、３０２、および３０４）と周辺装置３７０との間の、ディスパッチテーブルと呼ばれる、通信メカニズムは、配列の検索に使用される関数呼び出しポインタ、ハッシュテーブル（例えば、ハッシュ関数）、ソフトウェア層（またはネットワークスタック）と周辺装置との間の通信チャネル、または周辺装置が状態オブジェクトを検索するために使用するソフトウェア層によって渡される一組のパラメータであり得る。ディスパッチテーブルは、周辺装置の初期化中に、または後で、入れ替えることができる。
【００６０】
ディスパッチテーブルは、周辺装置３７０に直接データを送信したり、または周辺装置３７０から直接データを受信したりするために使用される。ディスパッチテーブルは、さらに、診断を行う場合にも使用することができる。例えば、ソフトウェア層を２つの中間層の間、または一番下の中間層と周辺装置との間に挿入することにより、システムを監視し、フォールトを差し挟んで、システムが正常に機能していることを確認することができる。さらに、ディスパッチテーブルは、必要ならばさらに機能を追加することができるソフトウェア層によりパッチをあてることもできる。例えば、ソフトウェア層は、フィルタドライバまたは仮想周辺装置の機能を提供するために追加することができる。パッチ当ては、通常、挿入された中間層の関数ポインタでディスパッチテーブルを上書きすることにより行われる。その後、挿入された中間層の関数ポインタが呼び出され、挿入された中間層がその作業を終了すると、挿入された中間層は元のディスパッチテーブルから元の関数ポインタを呼び出す。
【００６１】
フレーミング層３０４が完了メッセージを受信すると、フレーミング層３０４は、フレーミング層のオフロードハンドルおよびディスパッチテーブルを更新しやすくする（例えば、送信先ＭＡＣアドレスの変更またはカプセル化タイプの変更）ＡＲＰテーブルエントリに格納する。次に、フレーミング層３０４は、周辺装置３７０をＡＴＥと関連付けられている状態で更新する（３１０）。フレーミング層３０４は、リンクリストから状態を削除し、リンクリスト内の残りの情報をネットワーク層３０２に転送する（３１２）。
【００６２】
ネットワーク層３０２は、ネットワーク層３０２用のオフロードハンドルおよびディスパッチテーブルを格納する。次に、ネットワーク層３０２では、周辺装置３７０をＲＣＥと関連付けられている状態で更新する（３１４）。ネットワーク層３０２は、リンクリストからネットワーク層情報を削除し、パラメータおよびディスパッチテーブルのリンクリストを含む完了メッセージ３１６をトランスポート層３００に送信する。ネットワーク層３０２は、オフロード中に受信した任意のバッファリングされているＩＰフラグメントを処理のため周辺装置３７０に転送するか、またはネットワーク層内のＩＰフラグメントを処理して、トランスポート層３００に転送することができる。
【００６３】
トランスポート層３００は、トランスポート層用のオフロードハンドルを格納し、その状態を周辺装置３７０に送信する（３１８）。代替の実施形態では、トランスポート層およびＴＬＩスイッチは、同じ層である。その後、トランスポート層は、完了メッセージを送信する（３２０）。
【００６４】
それに代わる一実施形態では、層の状態オブジェクトは、オフロード要求とともに送信される。例えば、フレーミング層の状態オブジェクト、ネットワーク層の状態オブジェクト、およびトランスポート層の状態オブジェクトは、オフロード要求とともに送信され、オフロード要求から完了イベントまでの間にキャッシュ状態が変化した場合にのみ更新される。層の状態オブジェクト全体は、委譲状態が存在しないか、またはオフロード要求からオフロード要求の完了までの間に変更できない場合にのみ、オフロード要求とともに送信されることができる。オフロードシーケンス中にＤＥＬＥＧＡＴＥＤ状態を変化させるメッセージを受信した場合、そのメッセージは、一般的には、処理されず（バッファリングされる）、オフロードが完了したときに、処理のためメッセージをオフロード周辺装置に転送しなければならない。しかし、ＣＡＣＨＥＤと分類されている状態変数は、オフロード要求とともに送信することができ、またオフロード要求からオフロード要求の完了までの間に変化することがある。このような場合、ＣＡＣＨＥＤ状態変化における変化を記録しなければならず、オフロードが完了したときに、周辺装置においてＣＡＣＨＥＤ状態を更新しなければならない。
【００６５】
ＴＬＩスイッチ３０６は、完了メッセージ３２０を受信すると、アプリケーション送信および受信バッファを周辺装置３７０に転送する（３２２）。ＴＬＩスイッチ３０６は、ディスパッチテーブルを使用して、未処理および将来のすべての受信バッファをポストし、処理のためＮＩＣ３７０に送信する。オフロード要求が完了するまでの期間に、それぞれの層３００、３０２、および３０４は、オフロードされた状態オブジェクト（つまり、層に関連付けられている状態オブジェクト）の新しいオフロード要求を拒絶するか、またはオフロードが完了するまで問い合わせを続ける。代替の一実施形態では、アプリケーションバッファは、初期オフロード要求で受け渡される。
【００６６】
トランスポート層３００は、それでも、初期オフロード要求３３２でトランスポート状態オブジェクトが周辺装置３７０にオフロードされなかった場合、入って来たＴＣＰデータを処理し、ＴＣＰペイロードをＴＬＩスイッチ３０６に受け渡す機能を有することができる。入って来るＴＣＰデータがこのときよりも後にネットワークスタック３０２を通って到着した場合、入って来るデータは、周辺装置３７０に転送され、周辺装置により処理される。
【００６７】
その後のオフロード要求で、ネットワーク層３０２およびフレーミング層３０４は、周辺装置３７０から受け取ったオフロードハンドルを前のオフロードから周辺装置３７０に受け渡す。これは、周辺装置３７０がすでに、ネットワーク層３０２およびフレーミング層３０４に割り当てており、周辺装置３７０のリソースは保存され、オフロードが高速化されることを示す。
【００６８】
すでに示されているように、層３００、３０２、３０４は、それらの状態を周辺装置３７０に渡す。各状態は、ＣＯＮＳＴ、ＣＡＣＨＥＤ、およびＤＥＬＥＧＡＴＥＤという３種類の変数を持つ。ＣＯＮＳＴ状態変数は、その名が示すように、オフロードされた接続の存続期間中決して変化しない定数である。したがって、ホストは、接続が終了したときに、ＣＯＮＳＴ状態変数を層に読み直さ必要はない。同様に、ホストプロセッサは、ＣＡＣＨＥＤ状態変数の所有権を保持し、ホストプロセッサ内の任意のＣＡＣＨＥＤ状態変数に生じた変更が周辺装置３７０内で更新されることを確実にする。その結果、ホストはＣＡＣＨＥＤ状態変数を書き出すが、（システム診断により要求されない限り）決して読み直さない。ホストＣＰＵは、ＤＥＬＥＧＡＴＥＤ状態変数の所有権のみを周辺装置３７０に転送する。ＤＥＬＥＧＡＴＥＤ状態変数は、オフロードが実行されるときに１度書き込まれ、オフロートが終了したときに読み直される。周辺装置（例えば、ＮＩＣ）はＤＥＬＥＧＡＴＥＤ状態変数を転送し戻すだけでよいので、接続をホストに転送し戻すオーバーヘッドは最小限に抑えられる。さらに、ホストＣＰＵは、必要なときのみＤＥＬＥＧＡＴＥＤ状態変数（例えば、統計量）について周辺装置３７０に問い合わせる。
【００６９】
トランスポート層３００のＣＯＮＳＴ状態変数は、送信先ポート、送信元ポート、トランスポート層の動作（例えば、ウィンドウの縮小拡大を有効にするか否か、ＳＡＣＫを有効にするか否か）を制御する１つまたは複数のフラグ、ＳＥＮＤおよびＲＥＣＶウィンドウ表示倍率、およびリモートエンドポイントにより広告される初期最大セグメントサイズ（リモートＭＳＳ）を含むことができる。本明細書ですでに説明しているように、このような前述のＴＣＰ ＣＯＮＳＴ変数の値は一定である、つまり、その値は、ＴＣＰ接続の存続期間中変化しない。
【００７０】
トランスポート層３００のＣＡＣＨＥＤ状態変数には、ＴＣＰ状態変数とＩＰ状態変数がある。トランスポート構造では、実装によりネットワーク層の値を接続毎に上書きできればＩＰ状態変数が必要になる場合がある。これらのＣＡＣＨＥＤ状態変数は、１つまたは複数のフラグ（例えば、「Ｎａｇｌｅ」アルゴリズムである否か、またはＴＣＰの「Ｋｅｅｐ−Ａｌｉｖｅｓ」を有効にするか否か）、さらに、「Ｋｅｅｐ−Ａｌｉｖｅ」設定（つまり、間隔、プローブ数、およびデルタ）、有効最大セグメントサイズ（または有効ＭＳＳ）、初期デフォルト受信ウィンドウ（ＩｎｉｔｉａｌＲｃｖＷｎｄ）、周辺装置３７０により指示される受信バッファ内にコピーされるバイトの個数、ＩＰｖ４のトラフィックタイプに応じてパケットを優先順位付けするサービスの種類（ＴＯＳ）、および最後に、ネットワーク内でＩＰｖ６パケットの優先順位付けを行えるようにするトラフィッククラスおよびフローラベルを含むことができる。
【００７１】
ＤＥＬＥＧＡＴＥＤ状態変数は、ＩＥＴＦ（Internet Engineering Task Force）ＲＦＣ７９３で規定されているような現在のＴＣＰ状態、１つまたは複数のフラグ（例えば、リモートピアによる異常終了で閉じた接続であったかどうか）、次の予想ＴＣＰ受信セグメントのシーケンス番号（つまり、ＲＣＶ．ＮＥＸＴ）、受信ウィンドウサイズ（ＲＣＶ．ＷＮＤ）、第１の肯定応答のないデータのシーケンス番号（ＳＮＤ．ＵＮＡ）、送信する次のＴＣＰセグメントのシーケンス番号（ＳＮＤ．ＮＥＸＴ）、送信ウィンドウサイズ（ＳＮＤ．ＷＮＤ）、最後のウィンドウ更新に使用されるセグメントシーケンス番号（ＳｎｄＷＬ１）、最後のウィンドウ更新に使用されるセグメント肯定応答番号（ＳｎｄＷＬ２）、これまでに送信された最大シーケンス番号（ＳＮＤ．ＭＡＸ）、最大送信ウィンドウ（ＭＡＸ＿ＷＩＮ）、および現在の輻輳ウィンドウ（Congestion Window）（ＣＷｎｄ）を含むことができる。
【００７２】
ＤＥＬＥＧＡＴＥＤ状態変数は、さらに、スロースタート閾値（Slow Start Threshold）（ＳＳＴＨＲＥＳＨ）、平滑化往復時間（smoothed round trip time）（ＳＲＴＴ）、往復時間変動（ＲｔｔＶａｒ）、次のＴＣＰ  ＡＣＫで送信するタイムスタンプ値（ＴｓＲｅｃｅｎｔ）、一番最近のタイムスタンプが受信された後の経過時間（ＴｓＲｅｃｅｎｔＡｇｅ）、同じシーケンス番号で受け入れたＡＣＫの個数（ＤｕｐＡｃｋＣｏｎｔ）、送信されたｋｅｅｐａｌｉｖｅプローブの個数（ＫｅｅｐＡｌｉｖｅ ＰｒｏｂｅＣｏｕｎｔ）、次のｋｅｅｐａｌｉｖｅタイムアウトまでの残り時間（ＫｅｅｐＡｌｉｖｅ ＴｉｍｅｏｕｔＤｅｌｔａ）、送信された再送回数（ＫｅｅｐＡｌｉｖｅ Ｃｏｕｎｔ）、次の再送タイムアウトまでの残り時間（Ｒｅｔｒａｎｓｍｉｔ ＴｉｍｅｏｕｔＤｅｌｔａ）、およびバッファリングされている受信されたデータへのポインタ（ＢｕｆｆｅｒｅｄＤａｔａ−オフロードまたはアップロードが進行している間に受信されたＴＣＰデータ）を含むことができる。
【００７３】
ネットワーク層３０２のＣＯＮＳＴ状態変数は、送信先ＩＰアドレス（ＩＰｖ４またはＩＰｖ６のいずれかの）および送信元ＩＰアドレス（ＩＰｖ４またはＩＰｖ６のいずれかの）を含むことができる。ネットワーク層３０２のＣＡＣＨＥＤ状態変数は、パス最大伝送単位（ＰａｔｈＭＴＵ）を含むことができる。ネットワーク層３０２のＤＥＬＥＧＡＴＥＤ状態変数は、ＩＰパケットＩＤ開始値を含むことができる。フレーミング層３０４のＣＡＣＨＥＤ状態変数は、送信先ＭＡＣ（Media Access Control）アドレス、ＩＥＴＦ ＲＦＣ ２４６１近隣探索（ホスト到達可能性デルタおよびＮＩＣ到達可能性デルタ）のパラメータ、およびヘッダの形式を示すフラグ（例えば、ＬＬＣ／ＳＮＡＰ（論理リンク制御／サブネットワークアクセスプロトコル）形式またはＤＩＸ（Ｄｉｇｉｔａｌ、Ｉｎｔｅｌ、Ｘｅｒｏｘ）形式）を含むことができる。
【００７４】
トランスポート層状態は、ネットワーク層の状態オブジェクト用のハンドルを含み、ならびにネットワーク層（「パス」ともいう）の状態は、複数の接続間で共有されることができ、およびフレーミング層（「近隣」とも呼ぶ）の状態は、複数のパス間で共有されることができる（例えば、すべてのトラフィックが１台のルータを通る）ため、フレーミング層の状態オブジェクトのハンドルを含むことができる。この階層は、複数の理由から保持されている。ＩＰ ＩＤネームスペースはパス毎にオフロードされたすべての接続にまたがって管理される場合があるため、またはパスＭＴＵの更新はネットワーク層で１回行われることができ、ＴＣＰ接続毎に個別に設定するのではなくすべてのＴＣＰ接続に作用するため、接続はネットワーク層のＮＩＣハンドルを必要とする場合がある。パスは、フレーミング層の状態オブジェクトのＮＩＣハンドルを必要とするが、それは、ルート更新により次のホップアドレスが変更される可能性があり、したがって新しいＭＡＣアドレスを指す場合があるからである。この階層はさらに、ＮＩＣで保持する必要のある状態の量を圧縮する。例えば、ＩＰｖ４のＡＲＰ更新では、ＩＰアドレスからＭＡＣアドレスへのマッピングが変更される場合がある（例えば、サーバ上でインターフェースがフェイルオーバーする）。ホストは、ＭＡＣアドレスをキャッシュされた変数として保持し、したがって、キャッシュされている状態の更新を１回行うだけでよく、すべての接続は新しいインターフェースにフェイルオーバーする。
【００７５】
ホストがＴＣＰ接続をオフロードした後、周辺装置３７０は、ＩＰｖ４を用いて送信するパケットに対するパケット識別子（例えば、ＩＰ ＩＤ）を割り当てる必要がある。ＩＰ ＩＤは、インターフェース毎に、または層の状態オブジェクト毎にオフロードされる。いずれの場合も、周辺装置３７０は、ＩＰ ＩＤネームスペースの一部を割り当てられる。一実施形態では、周辺装置３７０は、初期化の際に、全ＩＰ ＩＤネームスペースの半分が割り当てられ、ホストプロトコルスタックは、周辺装置毎にＩＰ_ＩＤネームスペースの一部を保持する。別の実施形態では、ホストプロトコルスタックはパス毎にＩＰ_ＩＤを保持することができる。周辺装置には、ネットワークの状態オブジェクトが周辺装置３７０に受け渡されるときに使用するＩＰパケットＩＤ開始値が与えられる。周辺装置３７０では、以下の形式を使用して、送信するＩＰパケットに関するＩＰ ＩＤを生成する。
Cur_IPID=[(Start_IPID_For_This_Path)+(Counter_For_This_Path)mod32K]mod 64K
Counter_For_This_Path=Counter_For_This_Path+1
【００７６】
オフロードされた接続がアップロードまたは無効化されたとき、周辺装置３７０は、使用する次のＩＰＩＤ値をネットワーク層に転送して、次のオフロードの実行に備えて格納し、ホスト処理装置３２０は割り当てられたＩＰ ＩＤの一部を使用し続ける。ホスト処理装置３２０は、完全なＩＰ ＩＤネームスペースを使用することもできるが、ネットワーク上のＩＰパケットの最大存続期間を超えた後にのみ使用するのが好ましい。
【００７７】
周辺装置３７０は、データをデータの受信順序で受信バッファ内に配置し、オフロードされた接続についてポストされる順序でアプリケーションバッファに充填する。多くのアプリケーションは、受信バッファにポストする前に受信指示が出るのを待つ。一実施形態では、周辺装置３７０は、接続に対しデータが到着し、アプリケーション受信バッファがポストされていない場合に使用する大域的バッファプールを有する。大域的バッファプールは、オフロードされた接続にまたがって使用され、このプールを用いて、１）乱れているＴＣＰ伝送の処理、２）ＩＰデータグラムのデフラグ、３）アプリケーションがゼロコピーアルゴリズムに対して小さすぎるバッファをポストしている場合にはゼロコピーアルゴリズムではなくバッファコピーアルゴリズム、および４）アプリケーションがバッファを事前にポストしていない場合にはアプリケーションに対してデータを示す指示メカニズムを実装することができる。それに代えて、バッファリソースの効率的使用が問題にならない場合には、バッファの接続毎のプールを使用することができる。この場合、大域的バッファプールは、アプリケーション側でバッファを事前ポストしていない場合、またはシステムリソースが不足した場合にのみ使用される（例えば、アプリケーションバッファをメモリ内に留めておくだけの十分なリソースがない場合）。
【００７８】
図４Ａ〜４Ｄを参照すると、オフロードを受け取った通常の周辺装置（例えば、ＮＩＣ）は、オフロードを表す、反転されたツリーデータ構造４００を持つことができる。図の点線は、周辺装置によって割り当てられた新しい状態を表す。図４Ａに示されている周辺装置は、ルートキャッシュエントリ４０４に結合されたＡＲＰエントリ４０２を有し、このルートキャッシュエントリ４０４はＴＣＰエントリ４０６としてネットワーク接続に結合されている。例えば、すべてのネットワーク接続（例えば、ＴＣＰ）トラフィックがルータに入るのであれば、次のホップは常に、同じＡＲＰエントリ４０２に入る。ルートキャッシュエントリ４０４が次のネットワーク接続オフロードのために使用される場合は、新しいリソースのみが新しいオフロードされたＴＣＰ状態オブジェクトである。したがって、ホストＣＰＵがオフロードを開始しネットワークプロトコルスタックを下って行くとき、その状態をすでにオフロードしている中間ソフトウェア層（例えば、ネットワーク層３０２およびフレーミング層３０４）は単に、前のオフロード要求に割り当てられている周辺装置生成オフロードハンドルを挿入するだけである。周辺装置１７０は、新しいリソース（例えば、ＴＣＰエントリ４０８）を割り当てて、ネットワークプロトコルスタックをバックアップする新しいリソースにオフロードハンドルを送信するだけでよい。
【００７９】
ここで、反転されたツリー４００は、ルートキャッシュエントリ４０４に結合されたＴＣＰエントリ４０８を有する（図４ｂを参照）。このアプローチにより、周辺装置のリソースが節約され、オフロードが高速化される。さらに、キャッシュ変数の状態が変化した場合、単一の構造のみ更新すればよい。チムニー内の様々なソフトウェア層に対するすべての状態が単一エントリとしてオフロードされた場合、上位のソフトウェア層の下の任意の状態更新には、複数回の更新が必要になる。
【００８０】
図４Ｃは、さらに複雑な構成の反転ツリー４００を示す。ＡＲＰテーブルエントリ４０２に入るルートキャッシュエントリには、４０４と４１０の２つがある。ＴＣＰネットワーク接続４０６および４０８では、ルートキャッシュエントリ４０４を利用する。ＴＣＰネットワーク接続４１２および４１４では、ルートキャッシュエントリ４１０を参照する。任意のＡＲＰ更新が行われる（例えば、マルチホームサーバのインターフェースが無償ＡＲＰ更新を使用してフェイルオーバーする）場合、更新しなければならないのはエントリ４０２だけである。これにより、潜在的に数千あるいは数十万にも達する接続を新しいインターフェースにフェイルオーバーするのに、周辺装置を１回更新するだけでよい。図４Ｄは、ルート更新が実行された後、２つの独立の反転ツリー（エントリ４０２〜４０８およびエントリ４１０〜４１６）が単一の反転ツリー４００にマージされたことを示している。ルート更新の前、ルートキャッシュエントリ４１０に対する次のホップＡＲＰエントリはＡＲＰテーブルエントリ４１６である。ルート更新の後、次のホップＡＲＰテーブルエントリはＡＲＰテーブルエントリ４０２である。したがって、フレーミング層、ネットワーク層、およびトランスポート層に対する状態が単一のエントリとしてオフロードされた場合に、反転ツリーを使用することで、ルート更新を数千回または数万回実行するのではなく、周辺装置への１回のトランザクションでルート更新を処理することができる。重要なのは、反転ツリーという概念を拡張して、一度に複数の接続をオフロードするようにできることである。
【００８１】
図５Ａおよび５Ｂは、ブロックリストハンドル（または「ブロックリスト」）への特定の参照を伴う本発明の他の特徴を示している。一般に、ブロックリストは、チムニーオフロードまたはチムニー終了時にオフロードターゲット（例えば、周辺装置）に与えられるデータ構造である。そのため、ネットワーク接続を処理しているコンポーネントは、初期参照点が任意となるように、「アップロード」の場合にはブロックリストをホストに送り返し、「オフロード」の場合には周辺装置に下り方向へ送信する。ブロックリストのデータ構造は、特定の次の層の状態オブジェクト（依存ブロック）または同じ層の状態オブジェクト（次のブロック）を指している一連のポインタを含む。
【００８２】
より具体的には、依存ブロックポインタは、階層内で上の次のレベルを指し、ネットワークプロトコルスタック内の中間ソフトウェア層間の任意の既存の依存関係をオフロードターゲットに通知する場合に使用される。例えば、近隣（またはフレーミング層）の状態オブジェクトはパス（またはネットワーク層）の状態オブジェクトに依存し、さらにこのオブジェクトは同じ階層のＴＣＰ接続に依存することがある。しかし、次のブロックポインタは、異なる階層内の同じレベルにあるデータ構造を指す。例えば、第１のＴＣＰ接続のパス（またはネットワーク層）の状態オブジェクトは、異なるＴＣＰ接続におけるパス状態オブジェクトを指すことができる。
【００８３】
図５Ａは、図４Ａ〜４Ｄに同様に示されているように、反転ツリーデータ構造を示している。図５Ａの反転ツリーは、異なるＴＣＰ層の状態エントリを持つが、しかし共通パス（またはネットワーク層）状態エントリ５０５、および共通近隣状態エントリ５００も持つ、２つのＴＣＰ接続５１０および５１５（つまり、ＴＣＰ  Ｃｏｎｎ１およびＴＣＰ  Ｃｏｎｎ２）を示している。しかし、異なるネットワーク接続５２５（つまり、ＴＣＰ  Ｃｏｎｎ３）は、別のパス状態エントリ５２０を持つが、共通の近隣状態エントリ５００を持つ。シーケンス階層全体は、接続が次のソフトウェア層に向かうように設定する一連のパスハンドルにより各ソフトウェア層の間で定義することができる。例えば、パスハンドル５０７および５１７は、ＴＣＰ状態エントリ５１０および５１５がそれぞれ、パス状態エントリ５０５に向かうように設定し、さらにこのエントリは近隣状態エントリ５００に向かうように設定するハンドル５０２を有する。同様に、ＴＣＰ状態エントリ５２５は、パス状態エントリ５２０を指すハンドル５２７を有し、このエントリもやはり、ハンドル５１２を介して共通の近隣状態エントリ５００に向かうように設定されている。本発明によれば、図５Ａは、さらに、次のブロックポインタに関して表すこともでき、それにより、複数のネットワーク接続のチムニーを一度に含むことができる。
【００８４】
図５Ｂは、ブロックリストハンドル（様々な次のブロックポインタおよび依存ブロックポインタの集まり）による、同時オフロードに関する異なるネットワーク接続の間の複数のネットワーク接続ブロックの関係を示している。図５Ａに示されているように、図５Ｂは、様々なソフトウェア状態ハンドルを含むソフトウェア層ブロックに関する反転ツリーを表している。示されているのは、ＴＣＰブロック５４０および５４５で、共通のパスブロック５３５および共通の近隣ブロック５３０を含む。第３のＴＣＰブロック５５５は、パスブロック５５０および同じ近隣ブロック５３０を持つ。ブロックリストハンドルは、近隣ブロック５３０がパスブロック５３５を指す依存ブロックポインタ５３７を含むことを通知する。しかし、図５Ａの前の反転ツリーとは対照的に、近隣ブロック５３０は、さらに、次のブロックポインタ５３２を通じて別の反転ツリーデータ構造を指すこともできる。次のブロックポインタ５３２が欠損している場合（例えば、ＮＵＬＬ値）、これは、反転ツリーのその層に他の反転ツリーがないことを、ブロックリストにおいて知らせることができる。同様に、パスブロック５３５は、パスブロック５５０を指す次のブロックポインタ５６０、つまり、反転ツリーの全く異なる接続「分岐」を有する。
【００８５】
近隣ブロック５３０の場合のように、パスブロック５３５および５５０はそれぞれ、依存ブロックポインタ５４２および５５７、ならびに次のブロックポインタ５６０および５７０を有し、パスブロック５５０は、さらに、全く異なる反転ツリーの異なる接続パスを指すこともできる（例えば、５７２）。さらに、ＴＣＰブロック５４０、５４５、および５５５は各々、同じ反転ツリー内の別のＴＣＰブロックを指すか（例えば、５４７）、またはこのツリー内にそれ以上ブロックがないことを示す（例えば、５６２および５７２）ことができる、次のブロックポインタ５４７、５６２、および５７２を有する。しかし、これらのポインタは静的でない。つまり、リンクは、あるパスに対してルートが変化した場合などに変化することがあり、次の近隣を異なるルートに変更する場合がある。その場合、例えば、パスブロック５５０は、使用する近隣エントリを近隣状態エントリ１  ５３０から他の何らかの近隣（例えば、近隣エントリ２（図に示されていない））に変更することが可能である。したがって、ブロックリストを使用すると、複数の接続パス、および近隣エントリを１回のプログラム呼び出しでオフロードまたは終了することができる。
【００８６】
これは例に過ぎず限定ではないが、第１のオフロード要求では、オフロードターゲット（例えば、ＮＩＣ）側でデータ構造各々（例えば、５４０、５４５、５３５、５３０など）に対する状態およびハンドルを割り当て、およびホストネットワークプロトコルスタックへのオフロードターゲットのハンドルを返す必要がある。特定のエントリ内のオフロードターゲット割り当てハンドルが無効であれば、状態オブジェクトは新しいオフロード要求である。ホストスタックによるその後のオフロード要求では、既存のパスまたは近隣状態エントリを再利用する可能性もある。ブロックリストは、層毎に状態オブジェクトを１つだけ含むか（例えば、単一の近隣状態オブジェクト、パス状態オブジェクト、およびＴＣＰ状態オブジェクト）、または図５Ａ〜５Ｂで定義されているより複雑な構造であってもよい。指摘されているように、このより複雑な構造により、複数の接続パス、および近隣エントリを１回のプログラム呼び出しでオフロードまたは終了することができる。
【００８７】
示されているようにホストが接続をオフロードした後、１つまたは複数のソフトウェア層では、それぞれの状態オブジェクトの変更を更新する必要がある場合がある。図６は、本発明で状態オブジェクトのキャッシュ状態部分を更新するためのネットワークプロトコルスタック内の中間ソフトウェア層間の本発明による可能な信号シーケンスを示している。すでに述べたように、これは、ソフトウェア層において、層のＣＡＣＨＥＤ状態変数の変化により周辺装置を更新するとき行われる。状態オブジェクトのＣＡＣＨＥＤ状態変数を更新することで、中間ソフトウェア層と周辺装置状態との整合性をとることができる。
【００８８】
したがって、図６は、各ソフトウェア層がそのＣＡＣＨＥＤ状態変数を周辺装置により更新するときに、各ソフトウェア層は更新信号を送信し、ミニポートドライバ６９０に届くまで信号はネットワークプロトコルスタックを下り方向へ進むことを示している。例えば、ＴＣＰ層６５０がそのＣＡＣＨＥＤ状態変数を周辺装置により更新する必要がある場合、ＴＣＰ層６５０は信号６１０をネットワーク層（パス）６６０に送信し、さらにこれは、更新信号６２０をフレーミング層（近隣）６７０に送信し、さらにこれは、更新信号６３０をネットワークドライバインターフェース規約（ＮＤＩＳ）６８０に送信し、さらにこれは、信号６４０をミニポートドライバ６９０に送信する。ＣＡＣＨＥＤ状態変数が周辺装置により更新された後、ミニポートドライバ６９０は信号６４５をＮＤＩＳ６８０に中継し、ＴＣＰ層への一組の中継６３５、６２５、および６１５を続行し、ＴＣＰ ＣＡＣＨＥＤ状態変数が周辺装置により更新されていることを通知する。
【００８９】
本発明では、ブロックリストデータ構造を使用しているため、これら一連の更新および確認ステップは、最初にＣＡＣＨＥＤ状態変数を更新したソフトウェア層でのみ実行するだけでよい。つまり、例えば、フレーミング層（近隣）６７０がＮＩＣを備えた状態オブジェクトのＣＡＣＨＥＤ状態変数部分を更新する必要があった場合、ステップ６３０、６４０、６４５、および６３５だけを実行すればよいということである。したがって、ネットワークプロトコルスタックの上位ソフトウェア層は、フレーミング層のＣＡＣＨＥＤ状態を更新するために信号中継に参加する必要がない。また、このように複数の接続状態変更をブロックリストにより更新できるため、オフロードされたネットワーク接続各々の接続の完全性を非常に高いものとすることが可能である。それに代わる実施形態では、更新通信を、更新を実行するソフトウェア層とミニポートドライバ６９０との間で直接行わせることが可能である。しかし、これには、ミニポートドライバ６９０とのインターフェースを何回も呼び出す必要があり、追加ネットワークプロトコル層をオフロードに追加するように容易には拡張可能ではない。
【００９０】
ホストＣＰＵまたは周辺装置がオフロードされた接続または状態オブジェクトを終了する必要がある場合、本発明では、信号送受信ステップの類似のシーケンスを提案している。前付として、ホストまたはオフロードターゲットはオフロードを終了することができる。中間プロトコル層では、さらに、ＴＣＰ接続が依存していたパスまたは近隣状態オブジェクトを終了することにより、オフロードされたＴＣＰ接続を間接的に終了することもできる。最終的に、ＴＣＰ接続タイムアウトが発生し、さらに、オフロードターゲットはＴＣＰ接続オフロードを終了するよう要求する。コレクションオフロードは、様々な理由から終了する。一般に、特定の接続のオフロードをプロトコルスタックに指示する管理メカニズムがある。管理者がオフロードするよう指令した接続についてオフロードの終了をオフロードターゲットが要求する場合、ホストはその終了を認め、管理者のためにイベントがログに記録される。
【００９１】
それに代わり、ネットワークインターフェースが停止した場合（例えば、媒体切断イベント）、オフロードターゲットは、オフロードされた状態オブジェクトの終了を要求すべきではない。ホストは、通常の信号送受信イベント通じてイベントが通知され、今後何を行えば最もよいのかを決定する。そのうえ、接続がリセットされた場合（これは、ＴＣＰ ＲＳＴセグメントが受信された場合に発生する）、オフロードターゲットは、接続のオフロードを終了すべきであることをホストに指示する。次のホップアドレスが変更され、近隣状態オブジェクトが変更される場合、ホストスタックにより、古い状態オブジェクトが無効化される前に新しい状態オブジェクトが作成されることが保証される。これにより、オフロードターゲットでは、近隣またはパス状態オブジェクトが有効でなくなった場合、それは、ホストスタックからのパスおよび／または近隣状態オブジェクト更新に一時的競合状態が生じたためであることが確かであると判定できる。
【００９２】
図７は、周辺装置がオフロードされたＴＣＰ接続の終了を要求するネットワークプロトコルスタック内の中間ソフトウェア層間の本発明による可能な信号シーケンスを示している。周辺装置は、オフロードの終了を決定した場合、（ホストスタックによって通知される）「指示」機能を呼び出ことによりオフロードの終了をホストスタックに要求し、および周辺装置側でオフロードを終了することを望んでいる理由を含める。この理由としては、周辺装置が特定のネットワークプロトコル層の機能をサポートしていないため、緊急データを受信したが、それに対応できないという状況など、様々な理由があり得る。例えば、周辺装置の終了要求は、ミニポートドライバ７９０からＮＤＩＳ７８０への呼び出し７０２で始まるプロトコル層を通じて一連の信号（７０２、７０４）の後に続き、さらに終了要求信号７０４がＴＣＰ層７５０に送信される。ホストが周辺装置の終了要求を許可した場合、ホストは、信号をミニポートドライバ７９０に送信することにより要求を確認する。
【００９３】
図７には、ホストスタックがオフロードの終了を決定した後、ホストスタックが中間ソフトウェア層各々を通じて信号を送信し、終了を中間層に通知する状況が示されている。例えば、ＴＣＰ７５０は終了知らせる信号をネットワーク層７６０に送信し（７２８）、ネットワーク層は終了を知らせる信号をフレーミング層７７０に送信し（７２６）、さらに信号７２４および７２２でネットワークプロトコルスタックを下り方向へ進む。中間ソフトウェア層の最上位層（例えば、ＴＣＰ）の場合、ＴＣＰトランスポート層７５０（つまり、トランスポート層３００）は終了を要求し、ＴＣＰ（またはトランスポート）層はオフロードターゲットへの新しいアプリケーション送信または受信バッファのポストを停止し、任意の受信したＴＣＰセグメントのバッファリングを開始し、周辺装置によるネットワーク接続のアップロードが成功するまでバッファリングを続ける。それとは対照的に、ネットワークプロトコルスタック内の下位の各ソフトウェア層では、それぞれの層が状態オブジェクトに対する最後の依存ブロックリストデータ構造であるか検査する。それぞれの中間層にそれ以上依存ブロックがない場合、それぞれの層も、追加ブロックリストデータ構造をリストに加えることによりそれぞれの状態オブジェクトの終了を要求し、中間層のそれぞれの状態オブジェクトに対するオフロードターゲットハンドルを含める。追加依存ブロックがある場合は、状態オブジェクトのアップロードを要求せず、単に、アップロード要求を次層に転送するだけである。信号７２４および７２２を参照のこと。
【００９４】
オフロードターゲット（例えば、周辺装置）は、ネットワークプロトコルスタックを通じて要求された終了を確認すると、入って来るネットワーク接続データの処理を中止し、出て行くネットワーク接続データの処理を整合性のとれた状態にする。未処理の要求に関して（つまり、アプリケーション層はオフロード終了を確認する前にネットワーク接続データバッファをポスト済みである）、ステータス信号（７３２、７３４）によるオフロードターゲットの応答は、ネットワークプロトコルスタックを上り方向へ進んで戻り、接続「アップロード」が「進行中」であることを示す。周辺装置がすでにリモートコンピュータ（つまり、ＷＡＮ上のリモートピアコンピュータ）への受け入れの受領確認を行っている受信済みネットワーク接続データがあるが、ホストのアプリケーションはまだ、（最終処理のため）それを消費するバッファをポストしていない場合、周辺装置はこのポストされたバッファを、中間ソフトウェア層に返すＴＣＰ ＤＥＬＥＧＡＴＥＤ状態変数の一部としてパッケージする。
【００９５】
いずれの場合も、周辺装置は、各ＤＥＬＥＧＡＴＥＤ状態変数の制御（例えば、信号７４４、７４６、７４８）を（例えば、ＮＤＩＳ７８０を通して）各中間ソフトウェアレベルに返し、ホストＣＰＵはＤＥＬＥＧＡＴＥＤ状態の制御を取り戻す。したがって、オフロードターゲットは、様々な層からの要求されたＤＥＬＥＧＡＴＥＤ状態の一貫性のあるスナップショットが作成されることを保証し、その状態をＯｆｆｌｏａｄＢｌｏｃｋＬｉｓｔ構造に関連付けられた状態構造の中に書き込み、オフロード終了完了機能（７４２）を呼び出す。ここでもまた、ブロックリストデータ構造がオフロードされているため、接続終了呼び出しは、一度に１つまたは複数の接続について行うことができる。
【００９６】
１つまたは複数のＮＩＣドライバなど、１つまたは複数の物理周辺装置デバイスドライバを管理する１つまたは複数の仮想デバイスドライバをさらに用意することができる。仮想デバイスドライバは、単一のＭＡＣ（Media Access Control）アドレスをホストスタックに公開し、ホストスタックと仮想ドライバが管理する１つまたは複数の周辺装置デバイスドライバとの間のマッピングを提供する。または、仮想デバイスドライバは、実際に、複数の論理インターフェースを１つ（または複数の）物理周辺装置のホストスタックに提供し、ホストスタックが物理周辺装置よりも多いネットワークがあるかのようにネットワークトラフィックを管理することができる。その結果、周辺装置デバイスドライバは、ホストスタックからは１つまたは複数の仮想デバイスドライバに見えるように抽象化され、下の１つまたは複数の周辺装置デバイスに関する知識を持たない。仮想デバイスドライバは物理デバイスドライバと別であってもよいし、あるいはそれらの中に埋め込んでもよいことに注意されたい。
【００９７】
本発明では周辺装置初期化プロセスに参加させることにより仮想周辺装置を有効化することができ、それ自身を通じて物理装置にすべての呼び出しをリダイレクトし、システム内に存在する物理周辺装置よりも多いまたは少ない仮想周辺装置をホストスタックに潜在的に通知できる。
【００９８】
データ転送中に、周辺装置のチーム内のフェイルオーバーサポートのため、仮想周辺装置は特定の物理装置が故障しているかを検出することができる。これをサポートするメカニズムとしては、媒体感知が失われたかどうかを検出するもの、あるいはオフロードされた周辺装置からネットワークスイッチに一定間隔で繰り返される信号の形式で送られる一定のハートビートによるものなど、様々なものがある。ハートビートが失われたことを周辺装置が検出した場合（例えば、信号を検出しなくなることにより）、周辺装置デバイスドライバはこのイベントを信号で仮想周辺装置に送る。
【００９９】
本発明により、仮想周辺装置はオフロードされた状態オブジェクトを復元し、ネットワークトラフィックをチーム内の別の周辺装置に移動することを試みる。仮想周辺装置はこれをホストネットワークスタックを使用して別の物理周辺装置へのフェイルオーバーが発生している間にスタックを管理するか、または新しいプロトコルオフロード要求を中止し、状態オブジェクトを新しい物理周辺装置自体に移動させることにより、様々な方法で行うことができる。
【０１００】
遷移中にオフロードされた状態オブジェクトまたは接続（ＴＣＰの場合）のホストプロトコルスタックによる管理を許可することを仮想周辺装置で選択した場合、仮想周辺装置は、ホストプロトコルスタックが周辺装置への接続のオフロードを中止して、ホストがすでに周辺装置にオフロードしてしまっている既存の状態オブジェクトをアップロードすることを要求する。仮想周辺装置がオフロードを再有効化するまで、ホストは中間ソフトウェア層でリンクまたは接続を処理する。
【０１０１】
仮想デバイスドライバは、１つまたは複数の周辺装置内の利用可能なすべての周辺装置を認識している。周辺装置が故障すると、仮想デバイスドライバは、接続または状態オブジェクトのオフロードを受け取ることができる新しい周辺装置を選択する。仮想デバイスドライバは、新しい周辺装置が所有することができるリソースを検出し、周辺装置内で必要な任意の状態を初期化する。周辺装置が初期化された後、仮想装置は状態オブジェクトのオフロードを再有効化する。
【０１０２】
ホストスタックが特定の仮想周辺装置へのオフロードを再有効化されると、そのオフロード機能に関して仮想周辺装置に再度問い合わせる。ホストは、機能の新しいリストを使用して、オフロードできる状態オブジェクトまたは接続を選択する。この結果、通知された新しい周辺装置の機能に応じて、反転ツリーの制御権を移すことにより（つまり、委譲状態変数、キャッシュ状態変数、および定数状態変数を移すことにより）、仮想周辺装置（および、新しい周辺装置）に接続を再オフロードことになる場合がある。あるいは、新しい物理周辺装置がオフロードをサポートしていない場合、ホストは、オフロードを試みるのではなく、単に、中間ソフトウェア層を通じて自動的に接続の処理を継続するだけである。
【０１０３】
それに代わって、仮想周辺装置は、周辺装置自体の間のオフロードされた状態オブジェクトの遷移を管理することを選択することができる。これが行われると、仮想周辺装置はまだ、上述のイベントシーケンスを使用してオフロード要求を終わらせる一方で、状態を（オフロードされた状態オブジェクトをホストプロトコルスタックに移動させるのではなく）直接移動し、フェイルオーバーが完了したときに機能の任意の変更を通知する。
【０１０４】
ホストは、特定の状態オブジェクトまたは接続をオフロードできるとしても、オフロード機能が変わったときに一貫した状態を維持するため、またホストは最初の周辺装置のフェイルオーバーが発生した場合に新しい周辺装置とパラメータの再ネゴシエーションできるため、本発明では、周辺装置の故障に関係なく、一度に１つまたは複数の状態オブジェクトまたは接続のオフロードおよびアップロードを実行する新規性のある堅牢な方法を提供する。
【０１０５】
仮想周辺装置が１つまたは複数の物理周辺装置上で複数の仮想ＬＡＮをサポートするように構成されている場合、仮想周辺装置は、ここでもまた、物理装置の初期化を横取りし、代わりに、１つまたは複数の仮想周辺装置をホストスタックに通知し、特定の仮想アダプタに実行されるすべての呼び出しが適切な仮想ＬＡＮタグおよび物理周辺装置にマッピングされることを保証する。オフロード中に、フレーミング層の状態オブジェクトへの追加または仮想周辺装置の新規状態オブジェクトの作成のいずれかにより、初期オフロード要求で仮想ＩＤが転送される。特に、本発明により、仮想装置は１つの構造をＢｌｏｃｋＬｉｓｔ内のフレーミング層構造のすぐ下のＢｌｏｃｋＬｉｓｔ構造の中に挿入するか、またはフレーミング層のＢｌｏｃｋＬｉｓｔの状態オブジェクトにＶＩＤを追加することができる。前者のアプローチでは、さらに、仮想周辺装置は、物理周辺装置に対し不透明な（opaque）データ（場合によってはベンダ専用データ）を指定することができる。接続がアップロードされるとき、オフロード中に仮想周辺装置により追加状態オブジェクトが加えられると、仮想周辺装置は、その構造を除去し、ＢｌｏｃｋＬｉｓｔの残り部分をホストプロトコルスタックに受け渡す。
【０１０６】
本発明は、さらに、機能ステップを含む方法および／または非機能動作に関して説明することもできる。以下では、本発明を実施する際に実行することができる動作およびステップについて説明する。通常、機能ステップでは、遂行される結果に関して発明を説明するが、非機能動作では、特定の結果を得るためのより具体的な動きを説明する。非機能ステップおよび非機能動作は特定の順序で説明または請求することができるが、本発明は、必ずしも、特定の順序付け、ならびに動作および／またはステップの組合せに限定されない。
【０１０７】
図８は、１つまたは複数の送信先コンポーネント装置と１つまたは複数の送信元コンポーネント装置との間で制御を受け渡すための方法を実装する流れ図を示しており、この制御は、確立されているネットワーク接続の完全性を維持しながら、複数のネットワーク接続を処理し送信元コンポーネントの処理負荷を緩和するために必要である。図８は、本発明を実施するこの方法は、２つまたはそれ以上のネットワーク接続の処理制御を一度に受け渡すことにより２つまたはそれ以上のネットワーク接続を処理しているコンピューター化システムの処理要求を低減するステップ８００を含むことを示している。理想的には、このステップ８００は、状態変化、フェイルオーバーイベント、ＶＬＡＮタグに関して２つまたはそれ以上のネットワーク接続の完全性を保持するように実行されるべきである。
【０１０８】
ステップ８００は、ブロックリストを生成する特定の動作８１０を実行することにより遂行されることができる。動作８１０は、ブロックリストの生成を含むことができ、ブロックリストは、ネットワークプロトコルスタック上で２つまたはそれ以上のネットワーク接続のデータパスに対する連続するソフトウェア層に対応する一連のブロックポインタを含む。例えば、動作８１０は、ネットワークプロトコルスタックを通じて異なる接続のデータパス内の同じ状態の層を指す（例えば、２つの異なる近隣層５３０の状態間のポインタ５３２）、あるいはネットワークプロトコルスタックを通じて同じ接続のデータパス（例えば、５３５）内の同じ状態の層を指す（例えば、ＴＣＰ５４０とＴＣＰ５４５との間のポインタ５４７）、次のブロックポインタを生成することにより実行することができる。
【０１０９】
さらに、ステップ８００は、状態オブジェクトの一部のブロックリストおよび制御を送信先コンポーネントに受け渡す特定のステップ８３０も含む。各ソフトウェア層の状態オブジェクトの一部は、１つまたは複数のＤＥＬＥＧＡＴＥＤ、ＣＡＣＨＥＤ、およびＣＯＮＳＴ状態変数を含むことができる。そこで、ホストスタックは、各ソフトウェア層に対し（例えば、制御信号３３０、３３２、３３４、３３６を送信することににより）、周辺コンポーネント（例えば、周辺装置）にＣＡＣＨＥＤおよびＣＯＮＳＴ状態変数のソフトウェア層での値を送信すること、およびその層はその層のＤＥＬＥＧＡＴＥＤ状態変数の制御を周辺コンポーネントに受け渡す必要があることを指示することができる。
【０１１０】
送信元コンポーネントは、その後、チムニーオフロード中またはチムニー終了（またはオフロード終了）中にブロックリストをオフロードターゲット（例えば、オフロード中には周辺装置、アップロード中にはＣＰＵ）に送ることができる。さらに、オフロードは、送信元コンポーネントが少なくとも、オフロードまたはアップロードのいずれかが行われているオフロードされたソフトウェア層のＤＥＬＥＧＡＴＥＤ状態変数の制御を渡すまで完了しない。こうして、オフロード（またはアップロード）は、ブロックリストおよびそれぞれのＤＥＬＥＧＡＴＥＤ状態変数を送信元コンポーネントから送信先コンポーネントに受け渡す特定の動作の後、１つまたは複数の反転ツリーからの複数の接続について完了する（および場合によっては、送信先コンポーネントがすでにそれを持っていなければＣＡＣＨＥＤおよびＣＯＮＳＴ）。
【０１１１】
図８の方法は、さらに、ステップ８００を実行した後（動作８１０、８２０、および８３０を経由して）、送信先コンポーネントにより２つまたはそれ以上の接続を処理する特定の動作８４０を実行することを含むことを示している。上述の説明から推察されるように、動作８４０は、受け渡しの後に送信先コンポーネントにより２つまたはそれ以上の接続を処理することを含み、その際に、各状態オブジェクトのデータ構造部分のブロックリストおよび制御がソフトウェア層に渡される場合、中間ソフトウェア層で中央演算処理装置で接続を処理し、各状態オブジェクト部分のブロックリストおよび制御が周辺装置に渡される場合、周辺装置で接続を処理する。
【０１１２】
例えば、多重接続アップロードの場合、周辺装置は、ネットワーク処理制御を中間ソフトウェア層、ＣＰＵへと戻し、通常のネットワークプロトコルスタックを通じて処理する。しかし、多重ネットワーク接続オフロードの場合、ＣＰＵはブロックリスト、および中間ソフトウェア層のそれぞれのＣＡＣＨＥＤ、ＣＯＮＳＴ、およびＤＥＬＥＧＡＴＥＤ状態を周辺装置に受け渡して、チムニーを通じて処理するという形で、ネットワーク処理制御を周辺装置に受け渡す。本発明は、長命接続および短命接続の両方で実施することができる。短命のＴＣＰ接続などの短命接続を特に参照すると、ＣＰＵはデータ転送の「スロースタート」段階で各短命接続をオフロードすることができる。
【０１１３】
説明のため、例えば、リモートコンピュータがサーバとの短命ＨＴＴＰ接続を確立したとすると、このサーバは、通常、要求されたデータをすべて一度に送信することによりリモートコンピュータの要求に応答するわけではない。ほとんどの場合、サーバは、最初、接続帯域幅を評価するため、ゆっくりとデータを転送し、リモートコンピュータまたはパス内の他の装置もしくはリンクをオーバーフローさせるのを避ける。この評価を行うため、サーバは要求されたデータを、徐々にデータパケット数を増やしながら繰り返しリモートコンピュータに送信する。例えば、サーバは、５００バイトパケットを送信し、リモートコンピュータからの肯定応答の届くのを待ち、その後、２つの５００バイトパケット（１０００バイトパケット）を送信し、リモートコンピュータから肯定応答の届くのを待ち、そして５つの５００バイトパケットを送信し、というように、サーバがリモートコンピュータとの間で最大データ転送速度に達するまでこの作業を続ける。
【０１１４】
したがって、リモートコンピュータで使用できるのが、２８．８Ｋｂｐｓ（キロビット／秒）のダイヤルアップ接続だけであれば、サーバは最終的に、ある特定の速度（データパケット／秒）でしかデータを転送できないが、リモートコンピュータで使用できるのが、１０００Ｍｂｐｓ（Ｍｂｐｓ：１００万ビット／秒）のブロードバンド接続であれば、サーバは最終的に、かなり高い速度でデータを転送することができる。このインクリメンタルデータ送信速度（incremental data send rate）（「スロースタート」）では、ある遅延ウィンドウがあり、通常は、ＣＰＵと周辺装置との間の短命接続の制御を受け渡すのに必要な時間よりも長い。したがって、一部はこの方法が一度に複数の接続をオフロードする機能を提供するので、「スロースタート」転送ウィンドウを使用する本発明は、特にオフロードする接続が多数ある場合に、短命ネットワーク接続と長命ネットワーク接続の両方の処理制御を受け渡すのに特に適している。
【０１１５】
図９は、障害が発生した１つまたは複数の周辺装置から、複数のオフロードされた接続を受け取ることができる他の周辺装置に複数のオフロードされたアグリゲートネットワークリンクを受け渡し、その一方で、確立されたアグリゲートネットワークリンク各々の安全性を維持する方法を実装する流れ図を示している。図９は、送信先コンポーネントにフェイルオーバーが発生した場合に１つまたは複数のアグリゲートネットワークリンクの完全性を動的に保持する機能ステップ９００を実行することにより、本発明に基づく実施形態を実装することを示している。すでに述べたように、このステップは、障害の発生していない１つまたは複数の送信先コンポーネント（つまり、代替の送信先コンポーネント）で１つまたは複数のアグリゲートネットワークリンクを処理できるように実行しなければならない。さらに、ステップ９００は、１つまたは複数の初期周辺装置が故障したことを検出する特定の動作９１０を含む。動作９１０は、１つまたは複数のアグリゲートネットワークリンクの処理制御を行う１つまたは複数の初期周辺装置が故障したことを検出することを含む。
【０１１６】
例としてであって限定ではないが、ネットワークリンクは、「チーム化ＮＩＣ」環境（例えば、８０２．３ａｄ）などで「アグリゲート」する（つまり、複数の周辺装置上の複数のリンクを１つのネットワークリンクとして扱う）ことができる。本発明によるホストＣＰＵでは、１つまたは複数のブロックリストおよび１つまたは複数のＤＥＬＥＧＡＴＥＤ状態を中間ソフトウェア層から１つまたは複数の初期周辺装置に送信することにより、タスクを処理するネットワークの処理をチーム化周辺装置にオフロードすることができる。これらのアグリゲートリンクはかなり大きくなる可能性があるため、接続の完全性はＣＰＵにとってある程度重要なことである。したがって、ホストＣＰＵは、周辺装置のうち１つまたは複数がオフロードされたネットワークリンクを処理できなくなった場合にそのことを検出する必要があるかもしれない。
【０１１７】
そのために、ＮＩＣが周辺装置である一実施形態では、オフロードされた周辺装置およびリンク上のネットワークから一定間隔で繰り返される信号の形の一定の「パルス」があってよい。例えば、このパルスは、ＮＩＣにアグリゲートリンクがまだアクティブであることを知らせるＮＩＣとネットワーク装置（例えば、ネットワークルータ）の間の連続する電気信号形でよい。したがって、パルスが停止するか、またはネットワーク装置がある種のエラーメッセージ形のパルスを送信するか、またはホスト管理者がコンポーネントにフェイルオーバーの指令を送った場合に、ホストはＮＩＣがオフロードされたタスクを実行できなくなったことを認識する。
【０１１８】
ステップ９００は、さらに、処理制御を中央演算処理装置に戻す特定の動作９２０も含む。動作９２０は、１つまたは複数のアグリゲートネットワークリンクの処理制御を初期周辺装置から中央演算処理装置に返す動作を含む。例えば、ＮＩＣは、エラーまたは障害信号（例えば、信号７０２、７０４、および７０８）への応答として、ホストＣＰＵが複数のネットワークリンクについてすでにオフロードされていたブロックリストおよびＤＥＬＥＧＡＴＥＤ状態変数をアップロードすることを要求することができる。ＮＩＣは、その後、ネットワークプロトコルスタック内の中間ソフトウェア層を通じてそれぞれのＤＥＬＥＧＡＴＥＤ状態変数のブロックリストおよび制御をホストＣＰＵに受け渡さなければならない。
【０１１９】
ステップ９００は、さらに、異なる１つまたは複数の代替周辺装置の処理リソースを検出する特定の動作９３０も含む。動作９３０は、アグリゲートリンクを受け取ることができる１つまたは複数の代替周辺装置のリソースの機能を検出することを含む。例えば、１つまたは複数の様々なＮＩＣの有するリソース能力は、フェイルオーバーＮＩＣよりもかなり多いか、またはかなり少ない場合があるが、様々なデータサイズの処理能力を備えていたり、または低速／高速なプロセッサを装備したりしているからである。さらに、接続は、異なるＮＩＣで接続のうちごくわずかしか処理できない（つまり、１つまたは複数の代替ＮＩＣがいくつかのセキュリティパラメータをサポートしていない）、あるいはＮＩＣが一度に処理できる接続は比較的少数に限られるというような性質を持つことがある。したがって、本発明では、ブロックリストの１つまたは複数、およびそれぞれの状態オブジェクトを操作し、新しい１つまたは複数のＮＩＣがオフロードされた接続を効果的に受け取れるようにするそれぞれの状態オブジェクトにより、新しい１つまたは複数のＮＩＣとパラメータのネゴシエーションを行うことを規定している。一実施形態では、フェイルオーバーイベントの検出、および新しい使用可能な周辺装置の検出を行い、受け渡しを取り扱う作業は、本明細書で説明しているように、また図１０の中間ドライバとしても説明されているように、仮想デバイスドライバにより実行できる。異なる（新しい）１つまたは複数のＮＩＣとパラメータのネゴシエーションを行う機能により、複数の接続オフロードを継ぎ目のない形でサポートすることができる。
【０１２０】
図９は、さらに、機能ステップ９００の後にネットワークリンク処理制御を１つまたは複数の代替周辺装置に受け渡す特定の動作９４０を続けることにより本発明の方法を実装することを示している。動作９４０は、１つまたは複数のアグリゲートネットワークリンクの処理制御を１つまたは複数の代替周辺装置に受け渡すことを含む。例えば、ホストは、１つまたは複数の新しい周辺装置（例えば、ＮＩＣ）とパラメータのネゴシエーションを行った後、それぞれのＤＥＬＥＧＡＴＥＤ状態のそれぞれのブロックリストおよび制御を適切な１つまたは複数の中間ソフトウェア層に受け渡すことができる。ホストがブロックリストおよびＤＥＬＥＧＡＴＥＤ状態を適切な１つまたは複数の代替ＮＩＣに受け渡した後、１つまたは複数の代替ＮＩＣは、アグリゲートネットワークリンクを処理し、それにより、ホストからそれらのネットワーク処理負荷を取り除くことができる。
【０１２１】
図１０は、本発明による一実施形態を実装する流れ図を示しており、本発明は中間ドライバ（仮想周辺装置デバイスドライバなど）をオフロードデータ構造の隣に挿入し、ネットワーク接続のオフロードおよび／またはアップロードプロセス中に、仮想ローカルエリアネットワークおよび８０２．３ａｄフェイルオーバーイベントのうち少なくとも１つをより円滑にする方法を実行する。このフローチャートを特に参照すると、本発明の実施形態は、２つまたはそれ以上のＣＡＣＨＥＤ状態データ構造を検出する特定の動作１０００を含む。動作１０００は、ネットワークプロトコルスタック内の１つまたは複数の中間ソフトウェア層の２つまたはそれ以上の状態オブジェクトと一致する２つまたはそれ以上のＣＡＣＨＥＤ状態データ構造を検出することを含む。
【０１２２】
例えば、アプリケーション層は、ネットワークプロトコルスタック内の各ネットワーク層に指示信号（例えば、３３０、３３２、３３４）を送信して、各層の状態オブジェクトのエクステント、およびもしあるとすればどのようなプロセスを層はアップロードする必要があるかを判断することができる。ホストが処理制御を周辺装置に与える際の唯一の状態変数は、ＣＡＣＨＥＤ状態変数であるため、アプリケーション層では、各層に問い合わせを行い、どの層でＣＡＣＨＥＤ状態変数をオフロードするかを調べる必要がある。多重接続の場合、少なくとも２つのＣＡＣＨＥＤ状態変数が、ネットワークプロトコルスタックの同じ中間ソフトウェア層内で検出される。
【０１２３】
図１０に示されている本発明の方法は、さらに、２つまたはそれ以上のＣＡＣＨＥＤ状態をチムニースタックにまとめる特定の動作１０１０を含む。動作１０１０は、２つまたはそれ以上のＣＡＣＨＥＤ状態データ構造を順次、チムニースタックデータ構造にまとめ、チムニースタックデータ構造を周辺装置にオフロードすることにより、周辺装置に２つまたはそれ以上のＣＡＣＨＥＤ状態データ構造に対するプロセッサ制御を提供する。例えば、ソフトウェア層でＣＡＣＨＥＤ状態変数を示した後、ホストプロセスは、ＣＡＣＨＥＤ状態を正しい処理順序でＮＩＣ内に読み込む。単一のネットワークリンクの場合、ソフトウェア層に対する状態のこのようなシーケンスは、本明細書で説明されている反転ツリーの単一の枝（例えば、図４Ａ）として表すことができる。複数のネットワークリンクがある場合、ＣＡＣＨＥＤ状態と、複数の次のおよび依存ブロックポインタをまとめるブロックリストとを組み合わせたシーケンスをデータ構造ブロックの反転ツリーとして表すことができる（例えば、図５Ｂ）。いずれの場合も、チムニーはＮＩＣにオフロードされる単一データ構造を含む。名前から分かるように、チムニーデータ構造は、煙が実際の煙突の中を通るのと同様に、データは単一のデータインターフェースのところから入り、別の単一インターフェースから出るだけであり、処理中（または通過中）他のオペレータとの外部相互作用を持たないという点で、ビルに備わっている実際の煙突と酷似している。
【０１２４】
さらに、図１０に示されている方法は、チムニースタックを含むオフロードデータ構造を作成する特定の動作１０２０を含む。例えば、チムニーデータ構造（例えば、３０８）は、さらに、チムニードライバデータ構造、１つまたは複数のネットワークドライバインターフェース規約（ＮＤＩＳ）データ構造、およびミニポートドライバデータ構造と結合することができる。データ構造の集まり全体を、複合オフロードデータ構造として組み合わせることができる。
【０１２５】
図１０の本発明の方法は、さらに、オフロードデータ構造内に中間ドライバを挿入する特定の動作１０３０も含む。例えば、複数のまたは集められたリンク間のより具体的なニーズに対処するため、中間ドライバをオフロードデータ構造の中に挿入する必要がある場合がある。中間ドライバは、オフロードの開始後、ホストスタックにより生成することが可能である。８０２．３ａｄのアグリゲートリンクの場合、中間ドライバ（ＩＭドライバ）をオフロード構造の中に挿入することで、さらに２つの「チーム化」ＮＩＣの間のリソースおよび接続を調整することが可能である。それに代わり、単一のＮＩＣ、または汎用ＣＰＵなどの単一の周辺装置を表す複数の中間ドライバを作成し、オフロードデータ構造の中に挿入することも可能である。仮想ローカルエリアネットワーク（ＶＬＡＮ）の場合、１つまたは複数のＩＭドライバで、入って来るデータパケットに添付されているＶＬＡＮタグを変換する必要があることがある。
【０１２６】
説明のため、ネットワーク管理者は、文書はすべて同じネットワーク上にあるが、組織の特定のグループのみが互いに相手の文書を見られるようにしたいとする。ＶＬＡＮを使用すると、データにタグ付けすることによって特定の仮想ネットワークのメンバのみが互いのコンピュータデータにアクセスできるよう対応できる。つまり、同じネットワーク上で、管理者は「研究」ＶＬＡＮのメンバが「マーケティング」ＶＬＡＮ上のメンバのコンピュータを見られないように複数のＶＬＡＮを編成することができる。ＶＬＡＮでは、オフロードスタックがＶＬＡＮデータタグを解読できなくてもよいので、複数の長命または短命接続をオフロードすることに対し特別に複雑な問題が生じることがある。これは、一部、入って来るデータパケットが、ネットワーク接続の処理の前後に解読されなければならない複数のＶＬＡＮタグを含む可能性があるからである。
【０１２７】
そこで、本発明では、２つまたはそれ以上のＶＬＡＮタグを含むデータパケットを逆多重化（de-multiple）し、データトラフィックを適宜処理することができる１つまたは複数の中間ドライバを（複数の周辺装置に基づく単一の中間ドライバであろうと、単一の周辺装置に基づく複数の中間ドライバであろうと）オフロードデータ構造内に挿入することを規定する。このＶＬＡＮ機能は、一般に、フレーミング層により割り当てられる。
【０１２８】
しかし、本発明および請求項を考慮すると、１つまたは複数の中間ドライバは、さらに、ＩＰＳＥＣプロトコルを通じてデータトラフィックのセキュリティ保護を行うなど、ネットワーク層により割り当てられた機能を処理することも可能であることが分かるであろう。これは、ＶＬＡＮタグのフレーミング層機能への追加とすることもできる。例えば、中間ドライバは、データパケットに認証ヘッダを追加したり、またはデータパケットをカプセル化したり、またはその両方を行う機能を実行することができる。これは、フレーミング層を通じて割り当てられた任意の追加ＶＬＡＮタグ管理に関係なく、またはそれに加えて行うことができる。したがって、本発明では、セキュリティ保護されたリンクを必要とする環境を含む、多様な環境において実現することができるデータ構造およびドライバを提示する。
【０１２９】
図１１および以下の説明は、本発明を実施できる適当なコンピューティング環境について簡潔に述べた一般的な説明である。必要というわけではないが、ネットワーク環境でコンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的文脈において本発明を説明する。一般に、プログラムモジュールは、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。コンピュータ実行可能命令、関連するデータ構造、およびプログラムモジュールは、本明細書で開示している方法のステップを実行するプログラムコード手段の例を表している。このような実行可能命令または関連するデータ構造の特定の並びは、そのようなステップで説明される機能を実装するための対応する動作の例を表す。
【０１３０】
当業者であれば、本発明がパーソナルコンピュータ、携帯型装置、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能な家電製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータなどをはじめとする、様々な種類のコンピュータシステム構成とともにネットワークコンピューティング環境で実施できることを理解するであろう。また、本発明は、ローカルおよびリモート処理装置がタスクを実行し、通信ネットワークを通じて（有線リンク、無線リンク、または有線と無線リンクの組合せにより）リンクされている分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールは、ローカルおよびリモートのメモリ記憶装置に置くことができる。
【０１３１】
図１１を参照すると、本発明を実装するシステム例は、処理装置１１２０、システムメモリ１１３０、およびシステムメモリ１１３０を含む様々なシステムコンポーネントを処理装置１１２０に結合するシステムバス１１２１を備える、従来のコンピュータ１１１０の形をとる汎用計算装置を含む。システムバス１１２１は、メモリバスまたはメモリコントローラ、周辺装置バス、および各種バスアーキテクチャを採用するローカルバスを含む数種類のバス構造のどれでもよい。システムメモリは、読み取り専用メモリ（ＲＯＭ）１１３１およびランダムアクセスメモリ（ＲＡＭ）１１３２を含む。起動時などにコンピュータ１１１０内の要素間の情報伝送を助ける基本ルーチンを含む基本入出力システム（ＢＩＯＳ）１１３３は、ＲＯＭ１１３１に格納することができる。
【０１３２】
コンピュータシステム１１１０は、さらに、磁気ハードディスク(図示せず)への読み書きを行うための磁気ハードディスクドライブ１１４１、リムーバブル磁気ディスク１１２９への読み書きを行うための磁気ディスクドライブ１１５１、およびＣＤ−ＲＯＭまたはその他の光媒体などのリムーバブル光ディスク１１２８への読み書きを行うための光ディスクドライブ１１５５を備えることもできる。磁気ハードディスクドライブ１１４１、磁気ディスクドライブ１１５１、および光ディスクドライブ１１５５は、固定の不揮発性メモリインターフェース１１４０、およびリムーバブル不揮発性メモリインターフェース１１５０によりそれぞれシステムバス１１２１に接続される。ドライブおよび関連コンピュータ読取り可能な媒体は、コンピュータ１１１０用のコンピュータ実行可能命令、データ構造、プログラムモジュール、およびその他のデータを格納する不揮発性記憶装置を実現する。本明細書で説明している環境例では、磁気ハードディスク（図示せず）、リムーバブル磁気ディスク１１２９、およびリムーバブル光ディスク１１２８を採用しているが、磁気カセット、フラッシュメモリカード、デジタル多目的ディスク、ベルヌーイカートリッジ、ＲＡＭ、ＲＯＭなどの、データを格納するための他の種類のコンピュータ読取り可能な媒体を使用することができる。
【０１３３】
ハードディスク(図示せず)、磁気ディスク１１２９、光ディスク１１２８、ＲＯＭ１１３１、またはＲＡＭ１１３２には、オペレーティングシステム１１３４、１つまたは複数のアプリケーションプログラム１１３５、その他のプログラムモジュール１１３６、およびプログラムデータ１１３７など１つまたは複数のプログラムモジュールを含むプログラムコード手段を格納できる。ユーザは、キーボード１１６２、ポインティングデバイス１１６１、またはマイク、ジョイスティック、ゲームパッド、衛星放送アンテナ、スキャナなどの他の入力装置（図示せず）を通じてコンピュータ１１１０にコマンドおよび情報を入力することができる。これらの入力デバイスおよび他の入力デバイスは、多くの場合、システムバス１１２１に結合されているインターフェース１１６０を通じて処理装置１１２１に接続される。それとは別に、入力デバイスは、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェースにより接続することもできる。モニタ１１９１または他の表示装置も、ビデオアダプタ１１９０などのインターフェースを介して、システムバス１１２１に接続される。パーソナルコンピュータは、通常、モニタのほかに、スピーカ１１９７およびプリンタ１１９６など、他の周辺出力装置を備える。
【０１３４】
コンピュータ１１１０は、リモートコンピュータ１１８０などの１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク環境で動作可能である。リモートコンピュータ１１８０はそれぞれ、他のパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、またはその他の共通ネットワークノードでもよく、通常は、コンピュータ１１１０に関係する上述の要素の多くまたはすべてを含むが、メモリ記憶装置１１８１に関連するアプリケーションプログラム１１８５だけが図１１に示されている。図１１に示されている論理接続は、例として、ただしこれに限られないが、ここに示されているローカルエリアネットワーク（ＬＡＮ）１１７３およびワイドエリアネットワーク（ＷＡＮ）１１７１を含む。このようなネットワーキング環境は、オフィスまたは企業全体にわたるコンピュータネットワーク、イントラネット、およびインターネットでは一般的なものである。
【０１３５】
ＬＡＮネットワーキング環境で使用する場合、コンピュータ１１１０はネットワークインターフェース１１７０またはアダプタ(図示せず)を介してローカルネットワーク１１７１に接続される。ＷＡＮネットワーキング環境で使用する場合、コンピュータ１１１０は、通常、モデム１１７２、無線リンク、またはインターネットなどのワイドエリアネットワーク１１７３上で通信を確立するためのその他の手段を備えることができる。モデム１１７２は、内蔵でも外付けでもよいが、シリアルポートインターフェース(図示せず)を介してシステムバス１１２１に接続される。ネットワーク環境では、コンピュータ１１１０またはその一部に関して述べたプログラムモジュールは、リモートにあるメモリ記憶装置に格納できる。図に示されているネットワーク接続は例であり、ワイドエリアネットワーク１１７３上で通信を確立する他の手段を使用することもできる。
【０１３６】
本発明は、本発明の精神または本質的特徴から逸脱することなく他の特定の形式で実現することが可能である。説明されている実施形態は、すべての点で、説明のみを目的としており、制限することを目的としていないとみなすべきである。したがって、本発明の範囲は、上記の説明ではなく、付属の請求項により指示される。請求項の同等性の意味および範囲内にある変更はすべて、本発明の範囲に含まれるものとする。
【図面の簡単な説明】
【０１３７】
【図１】本発明によるネットワークスタックおよび代替パスの機能層を例示するブロック図である。
【図２】本発明によるＮＤＩＳパスおよびおよびバイパスパスの機能層を例示するブロック図である。
【図３】本発明によるオフロードメカニズムを例示するラダー図である。
【図４Ａ】中間ソフトウェア層の状態オブジェクトに関する本発明による反転ツリーを例示するオブジェクト図である。
【図４Ｂ】中間ソフトウェア層の状態オブジェクトに関する本発明による反転ツリーを例示するオブジェクト図である。
【図４Ｃ】中間ソフトウェア層の状態オブジェクトに関する本発明による反転ツリーを例示するオブジェクト図である。
【図４Ｄ】中間ソフトウェア層の状態オブジェクトに関する本発明による反転ツリーを例示するオブジェクト図である。
【図５Ａ】ブロックポインタの集まりに関する本発明による反転ツリーを例示するブロック図である。
【図５Ｂ】ブロックポインタの集まりに関する本発明による反転ツリーを例示するブロック図である。
【図６】本発明による状態オブジェクトのキャッシュ状態部分を更新するためのネットワークプロトコルスタック内の中間ソフトウェア層間の可能な信号シーケンスを示す図である。
【図７】周辺装置がオフロードされたＴＣＰ接続の終了を要求するネットワークプロトコルスタック内の中間ソフトウェア層間の本発明による可能な信号シーケンスを示す図である。
【図８】複数のネットワーク接続のプロセッサ制御権を送信元コンポーネントから送信先コンポーネントに引き渡すフローチャートである。
【図９】故障した周辺装置からホストスタックへ、また１つまたは複数の代替送信先周辺装置へ複数のネットワーク接続の制御権を引き渡すフローチャートである。
【図１０】オフロードデータ構造内に中間ドライバデータ構造を挿入するフローチャートである。
【図１１】本発明により特徴を実装することができる好適なコンピューティングシステムの図である。
【符号の説明】
【０１３８】
１０２  ネットワークスタック
１１０  チムニー
２２０  ネットワークスタック
２３０  チムニー
４００  反転されたツリー構造
８００  コンピュータ化システムの処理要求を低減するステップ
９００  アグリゲートネットワークリンクの完全性を動的に保持する機能ステップ
【図１】
0004658546.tif 000002
【図２】
0004658546.tif 000003
【図３】
0004658546.tif 000004
【図４Ａ】
0004658546.tif 000005
【図４Ｂ】
0004658546.tif 000006
【図４Ｃ】
0004658546.tif 000007
【図４Ｄ】
0004658546.tif 000008
【図５Ａ】
0004658546.tif 000009
【図５Ｂ】
0004658546.tif 000010
【図６】
0004658546.tif 000011
【図７】
0004658546.tif 000012
【図８】
0004658546.tif 000013
【図９】
0004658546.tif 000014
【図１０】
0004658546.tif 000015
【図１１】
0004658546.tif 000016