JP4327496B2 - ネットワークスタックをオフロードする方法 - Google Patents
ネットワークスタックをオフロードする方法 Download PDFInfo
- Publication number
- JP4327496B2 JP4327496B2 JP2003124294A JP2003124294A JP4327496B2 JP 4327496 B2 JP4327496 B2 JP 4327496B2 JP 2003124294 A JP2003124294 A JP 2003124294A JP 2003124294 A JP2003124294 A JP 2003124294A JP 4327496 B2 JP4327496 B2 JP 4327496B2
- Authority
- JP
- Japan
- Prior art keywords
- layer
- peripheral device
- offload
- state
- network
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/165—Combined use of TCP and UDP protocols; selection criteria therefor
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/40—Network security protocols
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Pile Receivers (AREA)
Description
【発明の属する技術分野】
本発明は一般に、コンピュータシステムの効率、速度、および/またはスループットを向上させる方法に関し、より詳細には、通常ならホストプロセッサによって実施されるコンピューティングタスクを特定のハードウェアコンポーネントにオフロードする(offloading)方法に関する。
【0002】
【従来の技術】
オペレーティングシステム、アプリケーションソフトウェア、ネットワーキング、ネットワーク化通信などの複雑さおよび精巧さは、劇的な速度で増大し続けている。複雑化および精巧化の結果の1つとして、アプリケーションおよびシステムの機能の増加がある。この機能増加により、増加したシステム機能およびアプリケーション機能を実行するためにCPUが実施しなければならない義務が追加されるせいで、しばしばCPUオーバーヘッドが増大する。
【0003】
CPUオーバーヘッドの増大が容易にわかる領域の1つはネットワーク化アプリケーションの領域であり、この領域では、高帯域幅メディアが増加しているためにネットワーク速度が上昇している。ネットワーク速度はしばしば、ホストコンピュータのCPUプロセッサ速度およびメモリ帯域幅能力に匹敵し、ますますそれを超過している。これらのネットワーク化アプリケーションは、7層ISOモデルやWindows(登録商標)オペレーティングシステムによって使用される階層モデルなど、ほとんどのオペレーティングシステムによって階層アーキテクチャが使用されるせいで、さらにホストプロセッサに負担を課す。周知のように、このようなモデルは、ネットワークへの物理接続とエンドユーザアプリケーションとの間のデータフローを記述するのに使用される。データビットをネットワークケーブル上に配置するなどの最も基本的な機能は下層で実施され、アプリケーションの詳細に伴う機能は上層で実施される。本質的に各層の目的は、サービスが実際にどのように実装されるかに関する詳細を次に高い層から見えないようにして、次に高い層にサービスを提供することである。各層は、それぞれが他のコンピュータ上の同じ層と通信していると信じるような形で抽象化される。
【0004】
データパケットが各層間を進む中でデータパケットに対して実施される様々な機能は、ソフトウェア集約的である可能性があり、かなりの量のCPUプロセッサリソースおよびメモリリソースを必要とすることが多い。例えば、様々な層でパケットに対して実施されるいくつかの機能は、パケットチェックサム計算および検証、データの暗号化および復号(例えばSSL暗号化やIP Security暗号化)、メッセージダイジェスト計算、TCPセグメンテーション、TCP再送および肯定応答(ACK)処理、サービス拒否攻撃から守るためのパケットフィルタリング、ユーザデータグラムプロトコル(UDP)パケットフラグメンテーションなど、非常にCPU集約的である。これらの各機能が実施されるとき、その結果CPUに求められる需要は、コンピュータシステム全体のスループットおよび性能に大きく影響する可能性がある。
【0005】
CPUリソースに対する需要は増大しているものの、ネットワークインタフェースカード(NIC)などのコンピュータハードウェア周辺装置の能力およびスループットもまた増大している。これらの周辺装置には、通常ならCPUによって実施されるタスクおよび機能の多くを実施することのできる専用プロセッサおよびメモリが装備されることが多い。
【0006】
コンピュータ産業はこの能力を認識し、従来はCPUによって実施されていたCPU集約的なタスクおよび機能をオフロードする方法を開発した。例えば、周辺デバイスに照会し、集約的なタスクおよび機能を実施できる周辺デバイスに特定のプロセッサタスクをオフロードする解決法が提供されている(例えば、本願と同じくAnand他に譲渡された特許文献1、2000年9月7日出願の米国特許出願第09/657510号明細書「Method and Computer Program Product for Offloading Processing Tasks from Software to Hardware」、2000年11月29日出願の米国特許出願第09/726082号明細書「Method and Computer Program Product for Offloading Processing Tasks from Software to Hardware」参照)。通常オフロードされる特定のタスクには、TCP(伝送制御プロトコル)および/またはIP(インターネットプロトコル)チェックサム計算、LSO(large send offload)などのTCPセグメンテーション、セキュアインターネットプロトコル(IPSEC)暗号化および復号が含まれる。
【0007】
これらのオフロード機構は、ネットワークスタックに最小限の数の変更を加えるという副次的要件を有する点で制限される。この副次的要件の結果、オフロードがロングコードパスを有するという別の制限がある。というのは、周辺デバイスに到達するために、オフロードされるタスクおよび機能がディセーブルにされた状態でネットワークスタック全体がトラバースされるからである。さらに、ネットワークスタックとの統合がないという制限もある。ネットワークスタックが周辺デバイスに対して照会またはパラメータ設定するための明確なインタフェースがなく、あるいは通知または能力変更がある場合にネットワークスタックに通知するための周辺デバイス用インタフェースがない。例えばLSO要求の処理中にルートが変化した場合、この場合のフォールバック機構は、スタックがタイムアウトを待機してLSO要求を再送するようにするものである。
【0008】
周辺デバイス製造業者が試みたもう1つの手法は、TCP接続全体をコアスタックからネットワークインタフェースカード(NIC)にオフロードするものである。この手法は、プロプラエタリインタフェースを使用してプロトコルスタック全体をバイパスするものであり、周辺デバイスがTCPメッセージ、IP(インターネットプロトコル)メッセージ、ICMP(インターネット制御メッセージプロトコル)メッセージ、DNS(ドメインネームサーバ)メッセージ、RIPメッセージのすべてを扱う必要があり、NICが全部を処理する必要がある。さらにこの手法は、マルチホーム環境に対処せず、ホストオペレーティングシステムのネットワーク管理ユーティリティとすっきり統合しない。状態が変化すると、オフロード接続は容易に失敗する可能性がある。
【0009】
【特許文献1】
米国特許第6,141,705号明細書
【0010】
【発明が解決しようとする課題】
本発明は、TCPベースのプロトコルスタックなどのネットワークスタック接続をオフロードする方法を提供する。
【0011】
【課題を解決するための手段】
複数のソフトウェア層を有するNDIS(ネットワークドライバインタフェース仕様)パスを介して周辺デバイスに通常なら送られるデータを、スイッチ層から周辺デバイスへのパスにオフロードする。ネットワークスタックおよび処理ユニットとの密な同期が維持される。スタックをオフロードする要求が、NDISパスを介して周辺デバイスに送られる。この要求は、周辺デバイスがリソース割振りに必要な情報を有することができるように、リソース要件のリストを含む。NDISパス中の各層は、その層のリソース要件をリストに加える。周辺デバイスが要求を受け入れる場合、周辺デバイスは、各ソフトウェア層にリソースを割り振り、各ソフトウェア層が周辺デバイスと通信できるように、各ソフトウェア層にオフロードハンドルを送る。
【0012】
周辺デバイスがオフロードを受け入れたことがソフトウェア層に通信されると、各ソフトウェア層ごとの状態が周辺デバイスに送られる。あるいは、状態はオフロード要求と共に送られ、状態に加えられた変化だけが周辺デバイスに送られる。各状態は状態変数を有し、各状態変数は、一定の変数、キャッシュされる変数、または委任される(delegated)変数として分類される。一定の変数は、プロトコルスタックがオフロードされている間は変化しない。キャッシュされる変数はCPUが扱い、委任される変数は周辺デバイスが扱う。
【0013】
本発明はまた、オフロードされたネットワーク接続を周辺デバイスからホストにアップロードする方法も提供する。アップロードは、周辺デバイスおよびスイッチ層のいずれかから開始される。アップロードが開始されると、周辺デバイスはすべての未解決要求を完了し、委任される状態をスイッチ層に渡す。委任される状態がホストに受け入れられた後、周辺デバイスにおける状態リソースは開放される。
【0014】
オフロード転送またはアップロード転送の間、更新(例えばARP更新またはRIP更新)が到着する可能性がある。複数の更新メッセージが周辺デバイスによって受信される場合は、周辺デバイスが古いデータを使用しないように、シーケンス番号を用いて一番最近の更新メッセージが使用されるようにする。
【0015】
本発明の他の特徴および利点は、例示的な実施形態に関する後続の詳細な説明から明らかになるであろう。この詳細な説明は、添付の図面を参照しながら進める。
【0016】
本発明の特徴については頭記の特許請求の範囲に詳細に述べるが、本発明はその目的および利点と共に、後続の詳細な説明を添付の図面と合わせて読めば最もよく理解されるであろう。
【0017】
【発明の実施の形態】
図面に目を向けると、本発明を適したコンピューティング環境で実施する場合が示してあり、図面では、同じ参照番号は同じ要素を指す。必須ではないが本発明は、パーソナルコンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的なコンテキストで述べる。一般にプログラムモジュールは、特定のタスクを実施するかまたは特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。さらに、当業者なら理解するであろうが、この発明的方法はハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能な民生用電子機器、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、ネットワーク化された周辺装置(例えばネットワーク化されたプリンタ)など、他のコンピュータシステム構成でも実施することができる。本発明は分散コンピューティング環境で実施することもでき、その場合、タスクは通信ネットワークを介してリンクされたリモート処理デバイスによって実施される。分散コンピューティング環境では、プログラムモジュールは、ローカルおよびリモートの両方のメモリ記憶デバイスに位置することができる。
【0018】
図1に、本発明を実施できる適したコンピューティングシステム環境100の例を示す。コンピューティングシステム環境100は、適したコンピューティング環境の一例にすぎず、本発明の使用範囲または機能についてどんな制限を意味するものでもない。またコンピューティング環境100は、この例示的な動作環境100に示すコンポーネントのいずれか1つまたは組合せに関してどんな依存も要件も有するものと解釈すべきではない。
【0019】
本発明は、その他多くの汎用または専用コンピューティングシステム環境または構成でも動作する。本発明で使用するのに適する可能性のある周知のコンピューティングシステム、環境、および/または構成の例には、限定しないがパーソナルコンピュータ、サーバコンピュータ、ハンドヘルドデバイスまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な民生用電子機器、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、ネットワーク化された周辺装置(例えばネットワーク化されたプリンタ)や、これらのシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれる。
【0020】
本発明は、コンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的なコンテキストで述べることができる。一般にプログラムモジュールは、特定のタスクを実施するか特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。本発明は分散コンピューティング環境で実施することもでき、その場合、タスクは通信ネットワークを介してリンクされたリモート処理デバイスによって実施される。分散コンピューティング環境では、プログラムモジュールは、メモリ記憶装置を含めたローカルとリモートの両方のコンピュータ記憶媒体に位置することができる。
【0021】
図1を参照すると、本発明を実施するための例示的なシステムは、コンピュータ110の形をとる汎用コンピューティングデバイスを含む。コンピュータ110のコンポーネントには、限定しないが処理ユニット120と、システムメモリ130と、システムメモリを含めた様々なシステムコンポーネントを処理ユニット120に結合するシステムバス121とを含めることができる。システムバス121は、様々なバスアーキテクチャのいずれかを用いた、メモリバスまたはメモリコントローラ、周辺バス、クロスバー、スイッチトバスファブリック、ローカルバスを含めて、いくつかのタイプのバス構造のいずれかとすることができる。システムバス121は、バスの階層とすることもできる。限定ではなく例として、このようなアーキテクチャには、ISA(Industry Standard Architecture)バス、MCA(Micro ChannelArchitecture)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Associate)ローカルバス、NC−NUMA(No Cache Non−Uniform Memory Access)アーキテクチャバス、CC−NUMA(Cache−Coherent Non−Uniform Memory Access)アーキテクチャバス、およびメザニンバスとも呼ばれるPCI(Peripheral Component Interconnect)バスが含まれる。
【0022】
コンピュータ110は通常、様々なコンピュータ可読媒体を備える。コンピュータ可読媒体は、コンピュータ110からアクセスできる任意の利用可能な媒体とすることができ、揮発性および不揮発性、取外し可能および取外し不可能の両方の媒体が含まれる。限定ではなく例として、コンピュータ可読媒体には、コンピュータ記憶媒体および通信媒体を含めることができる。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を記憶するための任意の方法または技術で実現される、揮発性と不揮発性、取外し可能および取外し不可能の両方の媒体が含まれる。コンピュータ記憶媒体には、限定しないがRAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、CD−ROM、ディジタル多用途ディスク(DVD)または他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶デバイスが含まれ、あるいは、所望の情報を記憶するのに使用できコンピュータ110からアクセスできる他の任意の媒体が含まれる。通信媒体は通常、搬送波や他のトランスポート機構など変調されたデータ信号中に、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを組み入れたものであり、任意の情報送達媒体が含まれる。「変調されたデータ信号」という語は、信号中の情報が符号化される形で1つまたは複数の特性が設定または変更された信号を意味する。限定ではなく例として、通信媒体には、配線式ネットワークや直接配線式接続などの配線式媒体と、音響、無線周波、赤外線、その他の無線媒体などの無線媒体とが含まれる。以上の任意の組合せもコンピュータ可読媒体の範囲に含めるべきである。
【0023】
システムメモリ130は、読取り専用メモリ(ROM)131およびランダムアクセスメモリ(RAM)132など、揮発性および/または不揮発性メモリの形のコンピュータ記憶媒体を含む。ROM131には通常、起動中などにコンピュータ110内の要素間で情報を転送するのを助ける基本ルーチンを含むBIOS(basic input/output system)133が記憶されている。RAM132は通常、処理ユニット120がすぐにアクセス可能な、かつ/または現在作用している、データおよび/またはプログラムモジュールを含む。限定ではなく例として、図1には、オペレーティングシステム134、アプリケーションプログラム135、その他のプログラムモジュール136、およびプログラムデータ137を示す。
【0024】
コンピュータ110はその他の取外し可能/取外し不可能、揮発性/不揮発性コンピュータ記憶媒体を備えることもできる。例にすぎないが図1には、取外し不可能な不揮発性の磁気媒体に対して読み書きするハードディスクドライブ141と、取外し可能な不揮発性の磁気ディスク152に対して読み書きする磁気ディスクドライブ151と、CD ROMや他の光媒体など取外し可能な不揮発性の光ディスク156に対して読み書きする光ディスクドライブ155を示す。この例示的な動作環境で使用できるその他の取外し可能/取外し不可能、揮発性/不揮発性コンピュータ記憶媒体には、限定しないが磁気テープカセット、フラッシュメモリカード、ディジタル多用途ディスク、ディジタルビデオテープ、半導体RAM、半導体ROMなどが含まれる。ハードディスクドライブ141は通常、インタフェース140などの取外し不可能メモリインタフェースを介してシステムバス121に接続され、磁気ディスクドライブ151および光ディスクドライブ155は通常、インタフェース150などの取外し可能メモリインタフェースでシステムバス121に接続される。
【0025】
以上に論じ図1に示した各ドライブおよびそれらに関連するコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの記憶域をコンピュータ110に提供する。例えば図1には、ハードディスクドライブ141がオペレーティングシステム144、アプリケーションプログラム145、その他のプログラムモジュール146、およびプログラムデータ147を記憶しているのが示されている。これらのコンポーネントは、オペレーティングシステム134、アプリケーションプログラム135、その他のプログラムモジュール136、およびプログラムデータ137と同じ場合もあり異なる場合もあることに留意されたい。ここでは、オペレーティングシステム144、アプリケーションプログラム145、その他のプログラムモジュール146、およびプログラムデータ147が少なくとも異なるコピーであることを示すために、異なる番号を付してある。
【0026】
ユーザは、キーボード162や、マウス、トラックボール、タッチパッドと一般に呼ばれるポインティングデバイス161などの入力デバイスを介して、コンピュータ110にコマンドおよび情報を入力することができる。その他の入力デバイス(図示せず)には、マイクロホン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナ、ビデオ入力などを含めることができる。これらおよび他の入力デバイスは、システムバスに結合されたユーザ入力インタフェース160を介して処理ユニット120に接続されることが多いが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス(「USB」)など、他のインタフェースおよびバス構造で接続されてもよい。モニタ191または他のタイプの表示デバイスもまた、ビデオインタフェース190などのインタフェースを介してシステムバス121に接続される。モニタに加えて、コンピュータは通常、スピーカ197、プリンタ196、ビデオ出力など、他の周辺出力デバイスも備えることができ、これらは出力周辺インタフェース195を介して接続することができる。
【0027】
コンピュータ110は、リモートコンピュータ180など1つまたは複数のリモートコンピュータへの論理接続を用いて、ネットワーク化された環境で動作することができる。リモートコンピュータ180は、別のパーソナルコンピュータ、サーバ、ルータ、ネットワーク周辺デバイス(例えばプリンタ)、ネットワークPC、ピアデバイス、または他の一般的なネットワークノードとすることができる。図1にはメモリ記憶デバイス181しか示していないが、通常はパーソナルコンピュータ110に関して上述した要素の多くまたはすべてを含む。図1に示す論理接続は、ローカルエリアネットワーク(LAN)171およびワイドエリアネットワーク(WAN)173を含むが、他のネットワークを含むこともできる。このようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネット、およびインターネットでよくみられるものである。
【0028】
パーソナルコンピュータ110は、LANネットワーキング環境で使用されるときは、ネットワークインタフェースまたはアダプタ(例えばネットワークインタフェースカード(NIC)170を介してLAN171に接続される。WANネットワーキング環境で使用されるときは通常、モデム172、またはインターネットなどのWAN173を介した通信を確立するための他の手段を備える。モデム172は内蔵でも外付けでもよく、ユーザ入力インタフェース160または他の適切な機構を介してシステムバス121に接続することができる。ネットワーク化環境では、パーソナルコンピュータ110に関して示したプログラムモジュールまたはその一部を、リモートメモリ記憶デバイスに記憶することができる。限定ではなく例として、図1には、リモートアプリケーションプログラム185がメモリデバイス181上にあるものとして示す。図示のネットワーク接続は例示的なものであり、コンピュータ間に通信リンクを確立するための他の手段を使用してもよいことは理解されるであろう。
【0029】
以下の記述では、特に指示しない限り、1つまたは複数のコンピュータによって実施される働きおよび操作の象徴表現に関して本発明を述べる。したがって、このような働きおよび操作は、しばしばコンピュータ実行される(computer−executed)と言及するが、データを構造化形式で表す電気信号をコンピュータの処理ユニットによって操作することを含むことは理解されるであろう。この操作は、データを変形させるか、データをコンピュータのメモリシステム中の位置に維持し、これにより、当業者によく理解されている方式でコンピュータの動作が再構成あるいは改変される。データが維持される位置のデータ構造は、データのフォーマットで定義される特定の属性を有する、メモリの物理位置である。ただし、こうしたコンテキストで本発明を述べるが、当業者には理解されるように、以下に述べる多くのアクションおよび動作はハードウェアに実装することもできるので、このコンテキストは限定的なものではない。
【0030】
図2に、本発明のネットワーキングモデルおよびコンポーネントを構成するいくつかのコンポーネントの相互関係を示す。通常の動作中は、ネットワーク化メッセージがアプリケーション200からネットワークスタック202を介して周辺デバイス204に送られ、そこでメッセージは、ネットワーク上の他のデバイスおよびアプリケーションに送られ、他のデバイスおよびアプリケーションから受け取られる。ネットワークスタック202は、1つまたは複数の中間ソフトウェア層206を含む。アプリケーション200から送られたデータは中間ソフトウェア層206の中を通るが、このときデータには、データのパッケージ化、高信頼データ送信、データ暗号化、およびメッセージダイジェストの計算など、特定の操作を実施することができる。
【0031】
スイッチ208は、中間ソフトウェア層206に対するネットワークスタック動作の実施から処理ユニット120をオフロードするのに使用される。スイッチ208は別個に示してあるが、ネットワークスタック202の最上部の中間層に統合してもよいことに留意されたい。周辺デバイス204に対するチムニー210を介して周辺デバイス204にデータが送られ、ネットワークスタック動作が実施される。この階層構造では、中間ソフトウェア層はすべてホスト中または周辺デバイス中にある必要はなく、いずれかの中間層を完全にオフロードすることもでき、ホストに残すこともでき、あるいはこの両方を組み合わせることもできる(例えば1つまたは複数の特定の接続をオフロードする)。さらに、チムニーの最上部にチムニーを重ねることもできる(例えばTCPチムニーの最上部にIPSECチムニーを重ねることができる)。接続は、高信頼および低信頼データ転送とユニキャストまたはマルチキャストのデータ転送との任意の組合せとすることができる。中間層がホストに残される場合、ホストは、周辺デバイス204中のキャッシュされる変数(後述する)を更新する。例えば、接続に関するトランスポート制御ブロック(TCB、transport control block)状態エントリをトランスポート層についてオフロードし、ネットワーク層についてのルートキャッシュエントリ(RCE)を周辺デバイス204にオフロードすることができる。スイッチ208は、オフロードされたTCBのためにチムニー210を介してトラフィックを送りながら、同じRCEを共有する別のTCBのためにネットワークスタック202を介してトラフィックを送り続ける。
【0032】
スイッチ208は、中間層206にオフロード要求を送ることによってオフロードを開始する。オフロード要求は、周辺デバイス204が接続をうまくオフロードできるかどうかを決定する助けとなるリソース情報を含む。各中間層206は、オフロード要求を拒否するか、またはオフロード要求にリソース情報を加えて、ネットワークスタック202中の隣接するソフトウェア層に送る。周辺デバイス204は、オフロード要求を受け取ると、接続をオフロードするのに利用できるリソースがあるかどうかを計算する。オフロードが不可能な場合は、周辺デバイス204はオフロード要求を拒否する。そうでない場合はオフロード要求を受け入れ、接続のためのリソースを割り振る。周辺デバイス204は、パラメータのリンクリストを有する完了メッセージを中間ソフトウェア層206に送ることによってオフロード要求を完了する。パラメータのリンクリストは、中間ソフトウェア層206およびスイッチ208が周辺デバイスと通信できるようにするための情報を、中間ソフトウェア層206およびスイッチ208に提供するものである。各中間ソフトウェア層206は、その層についての情報をパラメータのリンクリストから除去する。
【0033】
中間層206は、オフロードのための完了メッセージを受け取ると、その状態を周辺デバイス204に渡す。各状態は、CONST(一定)、CACHED(キャッシュされる)、DELEGATED(委任される)の3タイプの変数を有するものとすることができる。1つの状態が3タイプの変数すべてを有することもあり、3タイプの変数のサブセットを有することもある。CONST変数は、オフロードされた接続の寿命の間は決して変化しない定数である。これらは、接続がアップロードされるときに層に再び読み込まれることはない。ホスト処理ユニット120は、CACHED変数の所有権を維持し、ホスト処理ユニット120中のCACHED変数に変化があった場合には周辺デバイス204中で更新されるようにする。CACHED状態を変更する制御メッセージが、ネットワークスタック202によって扱われる。この結果、ホストはCACHED変数を書き込むが、接続がアップロードされるときに再び読み出す必要はない。ホスト処理ユニット120は、DELEGATED変数の所有権を周辺デバイス204に譲渡する。DELEGATED変数は、オフロードが行われるときに1度書き込まれ、オフロードが終了したときに再び読み込まれる。接続をホストに転送して戻すオーバーヘッドは、DELEGATED変数を転送して戻すだけで最小化される。ネットワークスタック202と、様々な性能上の理由でオフロード(すなわち委任)されている周辺デバイス204との間で共有(例えば制御)しなければならない状態は、ネットワークスタック202とチムニー210(例えばTCPオフロードにおけるIP ID)との間ですっきりと分離され、したがって、ネットワークスタック202と周辺デバイス204は両方とも、その状態の排他的部分をそれぞれ保有する。ホスト処理ユニット120は、必要なときにDELEGATED変数を周辺デバイス204に照会する(例えば統計のため)。ホスト処理ユニット120はまた、診断のためにCONST変数またはCACHED変数を照会することもできる。状態を3つのカテゴリに分けることにより、ネットワークスタック202は、チムニー210とすっきりと共存することができる。状態はオフロード要求に含めることもできることに留意されたい。これは、状態が、委任される状態変数を含まない場合、あるいは最初のオフロード要求とオフロード要求完了との間で変化しない委任される状態変数を含む場合に行うことができる。
【0034】
周辺デバイス204またはホストは、オフロードされた接続をアップロードするときを決定する。アップロードは、周辺デバイス204およびスイッチ208のいずれかによって開始される。アップロードが開始されると、周辺デバイス204は、すべての未解決要求を適切な状態で完了し、一番上の中間層の委任される状態をスイッチ208に渡す。スイッチ208は、それ以上の送信要求があればそれらをキューに入れ、受信バッファのポスティングを停止する。スイッチ208は、委任される状態の制御を獲得するよう一番上の中間層に命じる。一番上の中間層は、委任される状態の制御を握り、完了メッセージをスイッチ208に送る。スイッチ208は、完了メッセージを受け取った後、アップロードを周辺デバイス204に確認し、これにより周辺デバイス204は、もう使用されていないリソースを開放することができる。
【0035】
一番上の中間層は、委任される状態の制御を獲得するまでは、オフロードされた接続に関する入来データパケットを周辺デバイス204に転送して、処理されるようにすることに留意されたい。データパケットは、周辺デバイス204が委任される状態をスイッチ208に渡すときと、一番上の中間層が委任される状態の制御を獲得するときとの間に到着する場合もある。周辺デバイス204は、委任される状態をスイッチ208に渡した後はもう入来データパケットを処理することができない。入来データを受け取ったときは、周辺デバイス204は、アップロードが進行中であることを示すエラーメッセージを一番上の中間層に送る。エラーメッセージは、入来データの転送を停止して、委任される状態を受け取るまでそれ以上のデータをバッファに入れるよう、一番上の中間層に通知する。あるいは、周辺デバイス204上のバッファメモリをさらに犠牲にして、入来データを周辺デバイス204に転送し、周辺デバイス204がそのデータをバッファするようにすることもできる。
【0036】
複数の接続を中間ソフトウェア層206から周辺デバイス204にオフロードすることもできる。中間ソフトウェア層206は、上層の状態オブジェクト(すなわちその中間ソフトウェア層206よりも上の層の状態オブジェクト)の数に関する参照カウンタを維持する。これらの状態オブジェクトは、オフロードについての中間ソフトウェア層の状態オブジェクトを参照するものである。本明細書において、状態オブジェクトとは、特定の層についての状態変数の集合であり、本明細書ではCONST、CACHED、またはDELEGATEDとして分類する。中間層のオフロードされる状態オブジェクトがそれよりも上の層からそれへの参照を有さない場合、中間層206は、この中間層についての状態オブジェクトをアップロードして委任される状態変数を中間層206に送るよう周辺デバイス204にメッセージを送る。周辺デバイス204は中間層206についての状態オブジェクトを削除し、中間層206はスイッチ208に完了メッセージを送る。
【0037】
全体概念を述べたところで、次に図3に目を向け、一実施形態における本発明の詳細について述べる。この実施形態では、周辺デバイス204はNIC170であり、スイッチ208はトランスポート層インタフェーススイッチ(TLI)306であり、ネットワークスタック202はトランスポート層300、ネットワーク層302、およびフレーミング層304を備える。ネットワーク層302はパス層とも呼ばれ、フレーミング層304は隣接層とも呼ばれる。
【0038】
動作中、ネットワーク化メッセージがアプリケーション200からネットワークスタック202を介してNIC170に送られる。アプリケーション200から送られたデータはTLIスイッチ306を通るが、TLIスイッチ306は、データがホストベースのネットワークスタック202を下りるかまたはチムニー308を下りるかを制御する。TLIスイッチ306はネットワークスタック202の最上層に組み入れてもよいことに留意されたい。ネットワークスタック202中のソフトウェア層は、アプリケーション200からデータを受け取り、パケット形式にパッケージし、NDISミニドライバ310を介して周辺デバイスハードウェア314に送る。データパケットがネットワークスタック202を通る間にスタック202が実施することのできる他のタスクには、データ暗号化、高信頼データ転送、およびメッセージダイジェスト(例えばデータパケットについてのチェックサムやCRC)の計算が含まれる。これらのタスクの多くは、処理ユニット120によって実施され、プロセッサ集約的である。
【0039】
TLIスイッチ306を使用して、接続に関するデータをチムニー308(およびチムニードライバ312)を介してNIC170に送ることにより、スタック動作の実施から処理ユニット120をオフロードする。NDISミニドライバ310およびチムニードライバ312の上端は、Microsoft(登録商標)オペレーティングシステムにおけるNDIS APIであることを当業者なら認識するであろう。説明のために、伝送制御プロトコル(TCP)ベースのプロトコルスタックを用いて本発明を説明する。ただし理解されるように、本発明の教示を用いて多くのタイプの周辺デバイスを使用することができ、他のネットワークスタックをオフロードすることもできることを、当業者なら認識するであろう。例えば、SCTP(stream control transmission protocol)またはユーザデータグラムプロトコル(UDP)ベースのプロトコルスタックをオフロードすることもできる。さらに、本発明を用いて、iSCSI(internet small computer system interface)、ネットワークファイルシステム(NFS)、またはCIFS(common interface file system)など、より高機能のプロトコルをオフロードすることもできる。
【0040】
オフロードが行われるのには多くの理由がある。限定ではなく例として、いくつかの理由を以下に挙げる。システム管理者が、オフロードする特定のサービスを選択することがあり得る。接続上にあるトラフィック(バイト数またはパケット数からみて)が多量のリソースを消費している場合に、特定の接続がオフロードされることもある。あるタイプのサービスがオフロードされることもある。例えば、IPSECなどのセキュリティプロトコルがオフロードされることがある。オフロードはポリシーによって主導することもできる。例えば管理者は、組織内からの接続はすべて最初にオフロードされるというポリシーを有することができる。使用されているシステムリソース(例えばCPU利用、データキャッシュ使用、ページテーブルキャッシュ使用、メモリ帯域幅)により、ホストプロセッサが接続をオフロードすることになる場合もある。
【0041】
図4に、TCP接続をオフロードするために実施されるステップを示す。3段階のプロセスが用いられる。一般に、この3段階のプロセスは、TCP接続をオフロードするのに必要なリソースを割り振り、各層300、302、304、306にハンドルを提供し、各層300、302、304、306についての状態をNIC170にオフロードするものである。オフロード移行中、TLIスイッチ306は、アプリケーション200から送られたメッセージをすべてバッファに入れる。あるいは、トランスポート層300がデータをバッファに入れる。オフロードが完了したとき、バッファに入れられたデータは、オフロードデータ送信と同じ機構を使用してNIC170に転送される。オフロード移行中に入来パケットが受信されたときは、NIC170は、トランスポート層の委任される状態がNIC170に渡されるまで、層300、302、304、306を介してデータを上に移動させ続ける。
【0042】
TLIスイッチ306は、トランスポート層300にオフロード要求を送ることにより(線400)、オフロードを開始する。オフロード要求は、次の層のローカル状態へのポインタ(例えばトランスポート層300ではTCBポインタ、ネットワーク層302ではRCEポインタ、フレーミング層304ではARPテーブルポインタ、またはNDISミニドライバ310ではNDISミニポートポインタ)、オフロードタイプ(例えばTLIスイッチ306ではTCP、ネットワーク層302ではIPv6など)、および、NIC170がTCP接続をうまくオフロードできるかどうか決定する助けとなるリソース情報を含む。TLIスイッチ306はまた、ディスパッチテーブルをNIC170に提供することもできる。トランスポート層300は、オフロード要求を拒否するか、あるいは、TCPリソース情報をTLIスイッチリソース情報に付加して、オフロード要求をネットワーク層302に送る(線402)。
【0043】
ネットワーク層302は、オフロード要求を受け取り、接続のオフロードを拒否するか、あるいは、TCPリソース情報およびTLIスイッチリソース情報にネットワークリソース要件を付加して、オフロード要求をフレーミング層304に送る(線404)。ネットワーク層302はまた、ディスパッチテーブルをNIC170に送ることもできる。フレーミング層304は、接続のオフロードを拒否するか、あるいは、ネットワークリソース要件、TCPリソース情報、およびTLIスイッチリソース情報にフレーミングリソース要件を付加して、オフロード要求をNIC170に送る(線406)。
【0044】
NIC170は、オフロード要求を受け取り、TCP接続をオフロードするのに利用可能なリソースがあるかどうかを計算する。オフロードが不可能であると判定した場合は、NICはオフロード要求を拒否する。オフロードが可能であると判定した場合は、NICはオフロード要求を受け入れ、この接続のためのリソース(例えばTCB、ルートキャッシュエントリ(RCE)、アドレス解決プロトコル(ARP)テーブルエントリ(ATE))を割り振る。NIC170は、層300、302、304、306に渡すためにパラメータのリンクリストおよびディスパッチテーブルを生み出し、パラメータのリンクリストを有する完了メッセージをフレーミング層304に送ることによってオフロード要求を完了する(線408)。パラメータは、各層300、302、304、306ごとのオフロードハンドルおよびディスパッチテーブルを含む。本明細書において、オフロードハンドルとは、ソフトウェア層が周辺デバイスと通信できるようにする機構を意味する。限定ではなく例として、オフロードハンドルは、ポインタベースのハンドル、配列のルックアップとして使用される整数値、ハッシュテーブル(例えばハッシング関数)、ソフトウェア層(またはネットワークスタック)と周辺デバイスとの間の通信チャネルとすることができ、または、周辺デバイスが状態オブジェクトをルックアップするのに使用する、ソフトウェア層から伝えられたパラメータのセットとすることができる。
【0045】
ディスパッチテーブルは、データをNIC170に直接送るかまたはデータをNIC170から直接受け取るのに使用される。ディスパッチテーブルはまた、診断を提供するのに使用することもできる。例えば、システムが正しく機能しているようにするために、システムを監視して障害を注入するソフトウェア層を追加することができる。さらに、必要なら、追加機能を加えることのできるソフトウェア層でディスパッチテーブルにパッチを当てることもできる。例えば、フィルタドライバの機能を提供するソフトウェア層を追加することができる。パッチを当てるのは、通常、追加機能を挿入する場所で元の機能へのポインタをとって、追加機能にリダイレクトする(すなわちポイントする)ことによって行う。パッチが挿入された後、元の機能が呼び出されたとき、追加機能はその機能を実施してから元の機能を呼び出す。
【0046】
フレーミング層304は、フレーミング層についてのオフロードハンドルおよびディスパッチテーブルをそのARPテーブルエントリに記憶し、宛先MACアドレスが変化した場合またはカプセル化タイプが変化した場合に更新しやすくする。次いでフレーミング層304は、ATEに関連するNIC170の状態を更新する(線410)。フレーミング層304は、その状態をリンクリストから除去し、リンクリスト中の残りの情報をネットワーク層302に転送する(線412)。
【0047】
ネットワーク層302は、ネットワーク層302についてのオフロードハンドルおよびディスパッチテーブルを記憶する。ネットワーク層302もまた、その状態をNIC170に送る(線414)。ネットワーク層302は、ネットワーク層情報をリンクリストから除去し、パラメータのリンクリストおよびディスパッチテーブルを有する完了メッセージをトランスポート層300に送る(線416)。ネットワーク層302は、オフロード状態について受け取るIPフラグメントをNIC170に転送して、処理されるようにすることもでき、あるいはIPフラグメントをネットワーク層で処理して、トランスポート層300に転送することもできる。
【0048】
代替実施形態では、層の状態オブジェクトはオフロード要求と共に送られる。例えば、フレーミング層状態オブジェクトおよびネットワーク層状態オブジェクトはオフロード要求と共に送られ、キャッシュされる状態がオフロード要求と完了イベントとの間で変化したときだけ状態は更新される。層の状態オブジェクト全体は、委任される状態が存在しない場合、または委任される状態がオフロード要求とオフロード要求完了との間で変化し得ない場合だけ、オフロード要求と共に送ることができる。ただし、委任される状態が存在し、オフロード要求とオフロード要求完了との間で変化し得る場合であっても、CONSTとして分類される状態変数は、オフロード要求と共に送ることができる。
【0049】
トランスポート層300は、トランスポート層についてのオフロードハンドルを記憶し、その状態をNIC170に送る(線418)。未解決の送信バッファまたは受信バッファが保留中である場合は、トランスポート層300はバッファをTLIスイッチ306に返す。トランスポート層300がバッファをTLIスイッチ306に戻し始めると、TLIスイッチ306は、バッファをトランスポート層300に送るのを停止し、それらをキューに入れ、トランスポート層300からTLIスイッチ306にパラメータのリンクリストおよびディスパッチテーブルを有する完了メッセージが送られてくるのを待機する。トランスポート層300は、すべてのバッファを返し、次いで完了メッセージを送る(線420)。TLIスイッチ306は、完了メッセージを受け取ると、送信バッファおよび受信バッファをNIC170に転送する(線422)。TLIスイッチ306は、ディスパッチテーブルを使用して未解決のおよび将来の受信バッファをすべてポストし、処理のためにNIC170に送る。オフロード要求が完了するのにかかる時間の間、各層300、302、304は、オフロードされる状態オブジェクト(すなわち層に関連する状態オブジェクト)に対する新しいオフロード要求を拒絶するか、あるいはオフロードが完了するまでそれらをキューに入れる。
【0050】
トランスポート状態がまだNIC170にオフロードされていない場合、トランスポート層300は依然として、入来TCBデータを処理してデータをTLIスイッチ306に渡す能力を有する。TCBデータがオフロードの最中に到着した場合、トランスポート層300は、データを保持するか、あるいはデータを処理してTLIスイッチ306に渡すことができる。トランスポート層300がその状態をNIC170に送るとき(線418)とTLIスイッチがバッファをNIC170に転送するとき(線422)との間、ネットワークスタック202を通ってくる入来TCBデータはNIC170に送られる。
【0051】
後続のオフロード要求時には、ネットワーク層302およびフレーミング層304は、NIC170から受け取った前のオフロードからのオフロードハンドルをNIC170に渡す。これにより、ネットワーク層302およびフレーミング層304のためのリソースがすでに割り振られていることがNIC170に信号で伝えられ、したがって、NICリソースが温存され、オフロードが高速化される。
【0052】
先に示したように、層300、302、304は、それらの状態をNIC170に渡す。各状態は、CONST、CACHED、DELEGATEDの3タイプの変数を有する。CONST変数は、オフロードされた接続の寿命の間は決して変化しない変数である。これらは、接続終了時に層に再び読み込まれることはない。ホスト処理ユニット120は、CACHED変数の所有権を維持し、ホスト処理ユニット120中のCACHED変数に変化があった場合にはNIC170中で更新されるようにする。この結果、ホストはCACHED変数を書き込むが、再び読み出すことはない(システム診断がそう要求しない限り)。ホスト処理ユニット120は、DELEGATED変数の所有権をNIC170に譲渡する。DELEGATED変数は、オフロードが行われるときに1度書き込まれ、オフロードが終了したときに再び読み込まれる。接続をホストに転送して戻すオーバーヘッドは、DELEGATED変数を転送して戻すだけで最小化される。ホスト処理ユニット120は、必要なときにDELEGATED変数をNIC170に照会する(例えば統計のため)。
【0053】
トランスポート層300についてのCONST変数は、宛先ポートと、ソースポートと、「気付(care−of)」アドレスが変化する可能性のあるモバイルIPケースがあることを示すフラグと、SENDおよびRECVウィンドウスケールファクタと、ネットワーク層302についてのNICハンドルとを含む。トランスポート層300についてのCACHED変数は、TCP変数およびIP変数である。TCP変数は、Effective MSS、NIC170によって受信指示にコピーされるバイトの数、Naglingをオフにするフラグ、キープアライブが必要であることを示すフラグ、およびキープアライブ設定(すなわち間隔、プローブ数、およびデルタ)を含む。IP変数は、TOSおよびTTLを含む。DELEGATED変数は、現在TCP状態、次のRECV(すなわちRCV.NEXT)についてのシーケンス番号、受信ウィンドウサイズ(RCV.WND)、First Un−Acked Dataについてのシーケンス番号(SND.UNA)、次のSENDについてのシーケンス番号(SND.NEXT)、それまで送られた中で最大のシーケンス番号(SND.MAX)、最大Send Window(MAX_WIN)、現在輻輳ウィンドウ(CWIN)、スロースタートしきい値(SSTHRESH)、平滑化RTT(8*A)、Delta(8*D)、現在再送カウント、Next Retransmitに残された時間、およびエコーされるタイムスタンプを含む。
【0054】
ネットワーク層302についてのCONST変数は、宛先IPアドレス(IPv4とIPv6のいずれかの場合の)、およびソース宛先IPアドレス(IPv4とIPv6のいずれかの場合の)を含む。ネットワーク層302についてのCACHED変数は、フレーミング層304についてのNICハンドルを含む。ネットワーク層302についてのDELEGATED変数は、IPパケットID開始値を含む。フレーミング層304についてのCACHED変数は、ARPアドレスと、ヘッダのフォーマット(例えばLLC/SNAP[Logical Link Control/Sub−Network Access Protocol]やDIX[Digital、Intel、Xerox])を示すためのフラグを含む。
【0055】
トランスポート層の状態は、ネットワーク層についてのハンドルを含み、ネットワーク層の状態は、フレーミング状態についてのハンドルを含む。というのは、ネットワーク層の状態は複数の接続間で共有される可能性があり、フレーミング層の状態は複数のパス間で共有される可能性があるからである(例えばIPエイリアス)。この階層はいくつかの理由で維持される。IP ID名前空間はオフロードされる接続すべてにわたってパスごとに管理しなければならないので、接続にはネットワーク層についてのNICハンドルが必要である。ルート更新が次のホップアドレスを変更し、それにより新しいMACアドレスをポイントする可能性があるので、パスにはフレーミング層についてのNICハンドルが必要である。また、この階層により、NICが維持する必要のある状態の量が圧縮される。例えば、IPv4の場合のARP更新は、IPアドレスからMACアドレスへのマッピングを変更する可能性がある(例えばサーバ上でフェイルオーバされたインタフェース)。ホストは、キャッシュされた変数としてMACアドレスを維持しており、したがってキャッシュされる状態の更新を1度するだけでよく、すべての接続は新しいインタフェースにフェイルオーバされる。
【0056】
TCP接続がオフロードされると、NIC170は、送信するパケットに対するパケット識別子(例えばIP ID)の割当てを担う。IP IDは、インタフェースごとに、または層状態オブジェクトごとにオフロードされる。NIC170には、IP ID名前空間の一部が割り当てられる。一実施形態では、NIC170には、IP ID名前空間全体の半分が割り当てられ、ネットワーク状態がNIC170に渡されたときに使用するIPパケットID開始値が与えられる。NIC170は、以下の式を用いて、送信するIPパケットに対するIP IDを生成する。
Cur_IPID=[(Start_IPID_For_This_Path)+(Counter_For_This_Path)mod32K]mod64K
Counter_For_This_Path=Counter_For_This_Path+1
【0057】
オフロードされた接続がアップロードされるか無効にされるときは、NIC170は、使用することになる次のIPID値をネットワーク層に転送して、行われる次のオフロードのために記憶し、ホスト処理ユニット120は、割り当てられたIP ID名前空間の一部を使用し続ける。ホスト処理ユニット120は、IP ID名前空間を全部使用することもできるが、カウンタはオフロードが行われるたびにセットしなければならない。
【0058】
NIC170は、データが受け取られた順にデータを受信バッファに配置し、アプリケーションバッファがオフロード接続のためにポストされた順にアプリケーションバッファを満たす。多くのアプリケーションは、受信バッファをポストする前に受信指示を待機する。一実施形態では、NIC170は、データが接続のために到着したがアプリケーション受信バッファがポストされていない場合に使用するために、大域的なバッファプールを有する。大域的バッファプールは、オフロードされたいくつかの接続にまたがって使用され、1)順番になっていないTCP送信を処理し、2)IPデータグラムのデフラグメンテーションを実施し、3)アプリケーションがゼロコピーアルゴリズムには小さすぎるバッファをポストしている場合にゼロコピーアルゴリズムではないバッファコピーアルゴリズムを実施するのに使用することができる。あるいは、リソースの効率的使用が問題でない場合は、接続単位のバッファプールを使用することもできる。ただし、NICが接続単位のバッファプールをサポートしない場合、またはシステムリソースが不足している場合(例えばアプリケーションバッファをメモリ中に留めておくのに十分なリソースがない場合)は、大域的バッファプールを使用する。
【0059】
次に図5A〜5Dに目を向けると、NIC170は、オフロード実施後のオフロードを表す逆ツリー500を有する。図において、点線はNIC170によって割り振られた新しい状態を表す。図5AのNIC170では、ARPエントリ502がルートキャッシュエントリ504に結合され、ルートキャッシュエントリ504はTCPエントリ506に結合されている。例えばすべてのトラフィックがルータに行くことになる場合、次のホップは常に同じARPエントリ502へのホップになる。ルートキャッシュエントリ504が次のTCP接続オフロードに使用される場合、新しいリソースはオフロードされる新しいTCBだけである。したがって、オフロードがネットワークスタック202の下方に向けて開始したとき、すでに状態をオフロードしている中間ソフトウェア層(例えばネットワーク層302やフレーミング層304)は、単に、NICによって生成されて前のオフロード要求時に割り振られたオフロードハンドルを挿入するだけである。NIC170は、新しいリソース(例えばTCPエントリ508)を割り振り、新しいリソースについてのオフロードハンドルをネットワークスタック202を通して上に送り返すだけでよい。このとき逆ツリー500では、TCPエントリ508がルートキャッシュエントリ504に結合されている(図5B参照)。この手法は、NICリソースを節約し、オフロードを高速化する。さらに、キャッシュされる変数状態が変化した場合も、単一の構造を更新するだけでよい。もしチムニー中の様々なソフトウェア層についてのすべての状態が単一のエントリとしてオフロードされたとすれば、最上部のソフトウェア層よりも下の状態更新は、複数の更新を必要とすることになる。
【0060】
図5Cには、逆ツリー500のより詳細な構成を示す。ARPテーブルエントリ502を通る2つのルートキャッシュエントリ504および510がある。TCP接続506および508がルートキャッシュエントリ504を使用する。TCP接続512および514がルートキャッシュエントリ510を参照する。ARP更新が行われる場合(例えばマルチホームサーバのインタフェースがフェイルオーバする場合)は、エントリ502だけを更新すればよい。これにより、NIC170への更新を1度しか必要とせずに、何千も何十万もあるかもしれない接続を新しいインタフェースにフェイルオーバすることができる。図5Dには、独立した2つの逆ツリー(エントリ502〜508およびエントリ510〜516)が、ルート更新の実施後に単一の逆ツリー500にマージされたのを示す。ルート更新前は、ルートキャッシュエントリ510に対する次のホップARPエントリはARPテーブルエントリ516である。ルート更新後は、次のホップARPテーブルエントリはARPテーブルエントリ502である。したがって、逆ツリーを用いると、ルート更新は、ネットワークスタック状態が単一のエントリとしてオフロードされた場合の何千や何万もの更新ではなく、NIC170への単一のトランザクションとして処理することができる。
【0061】
次に図6に目を向けるが、接続がNIC170にオフロードされた後は、NIC170へのパスは2つある。第1のパスは、NDISミニドライバ310を通り、フレーミング層304、ネットワーク層302、およびトランスポート層300を通る。第2のパスはオフロード接続608を通り、これはチムニーと呼ばれる。ホストコンピュータからみると、通信の点では2つのパスについてすべて同じである。キャッシュされる状態変数が2つのパスを同期させ、処理ユニット120は、先に示したようにNIC170中のキャッシュされる状態変数を更新する。キャッシュされる変数の更新を矢印602、604、606で示す。
【0062】
入来データパケットが到着したとき、NIC170は、入来データパケットがオフロードされるパスを通るかオフロードされないパス(すなわちNDISミニドライバ310および層304、302、300のNDISパス)を通るかを決定する。一実施形態では、NIC170は、ソースおよび宛先TCPポート番号と、ソースおよび宛先IPアドレスと、プロトコルタイプとに対してハッシング関数を実施することにより、どちらのパスに入来データパケットを送るかを決定する。ハッシュがオフロードされる接続パラメータと一致する場合(すなわち、ハッシュバケットチェーンが調べられ、接続のタプルすべての一致が生じる場合)は、チムニー608を使用する。ハッシュがハッシュインデックスと一致しない場合は、ネットワークスタック202を通るオフロードされないパスを使用する。キャッシュされる状態を更新する制御メッセージが、ホストによって処理される。この結果、NIC170は、ICMP、DNS、RIPメッセージなど、オフロードされる接続の外にあるどんな制御メッセージも処理する必要がない。
【0063】
本発明は、Netstatなど既存のツールを使用して、ホスト上のすべての接続や、プロトコルタイプ、ローカルとリモートのポートおよびIPアドレスバインディング、接続の状態、プロセスIDなどの接続パラメータを含めた、様々な情報を取り出し、統計を導き出す能力をユーザに提供する。本発明では、統計は、層ごとまたは層状態オブジェクトごとに収集される。1つの層内で層状態オブジェクトをグループ化して、複数の層状態オブジェクトにわたる統計を収集することができる。例えば、ネットワーク層についての統計は、使用されるプロトコル(例えばIPv4およびIPv6)ごとの統計になるように分割することができる。CONSTおよびCACHED状態変数に関連する統計はホストから提供され、DELEGATED状態変数に関連する統計は周辺デバイス204から提供される。照会が行われたとき、DELEGATED状態変数に関連する統計は、CONSTおよびCACHED状態変数に関連する統計に添付される。
【0064】
パケットカウントなどのように、ホスト層状態と周辺デバイス層状態のグループ化全体にわたって合計される種類の統計もある。別のタイプの統計は、システム中にある機能の状態のリストである(例えばシステム中のあらゆるTCBの状態のリスト)。TCBについての統計は、ホストによって追跡される統計と周辺デバイスによって追跡される統計とが組み合わさったものである。同様に、パケットカウントについての統計は、ホスト層状態の統計と周辺デバイス層状態の統計の合計である。
【0065】
以下の表1に、TCP MIB(管理情報ベース)の場合におけるホストと周辺デバイス204との分割の例を示し、以下の表2に、IPv4 MIB統計を提示する。表では、第1列はフィールドであり、第2列は、統計の追跡を周辺デバイスが担当するかホストネットワークスタックが担当するかを指定し、第3列は、各フィールドがどのように追跡されるかを示す。周辺デバイスが担当する統計は、層状態オブジェクトごとまたは層ごとに追跡される。本明細書において、層ごととは、プロトコルごとの周辺デバイスごとの層ごとに統計が追跡されることを意味する。ただし、ホスト状態と周辺デバイスからの状態で統計が統合されるときは、統計は概してプロトコルごとに提示されることに留意されたい。ホストネットワークスタックが周辺デバイスに照会せずに生成することのできる統計は、「スタックが完全な情報を有する」または「スタックだけで行われる」として類別している。「スタックが完全な情報を有する」カテゴリは、周辺デバイスが統計について知っているが統計を追跡しないことを示す。「スタックだけで行われる」統計は、周辺デバイスが統計について知らないことを示す。通常のNDISインタフェースを介して、アダプタ統計に照会する。アダプタ統計は、bytes sentやbytes receivedなどの変数を含む。
【0066】
【表1】
【0067】
ts_RtoAlgorithmは、肯定応答されなかったオクテットを再送するのに用いられるタイムアウト値を決定するのに使用されるアルゴリズムの値である。ts_Rto_Minは、ミリ秒で測定された送信タイムアウトに関する、TCP実装によって許容される最小値の値である。ts_Rto_Minは、ミリ秒で測定された再送タイムアウトに関する、TCP実装によって許容される最大値である。ts_MaxConnは、サポートできるTCP接続の総数である。ts_ActiveOpensは、TCP接続がCLOSED状態からSYN_SENT状態への直接移行を行った回数である。ts_PassiveOpensは、TCP接続がLISTEN状態からSYN_RCVD状態への直接移行を行った回数である。ts_AttemptFailsは、TCP接続がSYN_SENT状態およびSYN_RCVD状態のいずれかからCLOSED状態への直接移行を行った回数と、TCP接続がSYN_RCVD状態からLISTEN状態への直接移行を行った回数とを足した回数である。ts_EstabResetsは、TCP接続がESTABLISHED状態およびCLOSE_WAIT状態のいずれかからCLOSED状態への直接移行を行った回数である。ts_CurrEstabは、現在の状態がESTABLISHEDおよびCLOSE_WAITのいずれかであるTCP接続の数である。ts_InSegsは、エラーで受信されたものを含めた受信セグメントの総数である。ts_OutSegsは、再送オクテットしか含まない接続を除いた現在の接続上にある送信セグメントの総数である。ts_RetransSegsは、再送されたセグメントの総数である。ts_InErrsは、エラー(例えば不良TCPチェックサム)で受信されたセグメントの総数である。ts_OutRstsは、RSTフラグを含む送信済みTCPセグメントの数である。ts_NumConsは、現存するTCP接続の総数である。
【0068】
【表2】
【0069】
ipsi_Forwardingは、ホスト宛ではないがホストによって受信されたデータグラムの転送に関して、ホストがIPルータとして働いているかどうかの指標を提供する値である。ipsi_DefaultTTLは、TTL値がトランスポート層プロトコルから供給されないときに、このエンティティで発生するデータグラムのIPヘッダのTime−To−Liveフィールドに挿入されるデフォルト値である。ipsi_InReceivesは、エラーで受信されたものを含めた、インタフェースから受信された入力データグラムの総数である。ipsi_InHdrErrorsは、バッドチェックサム、バージョン番号不一致、その他のフォーマットエラー、生存時間の超過、入力データグラムのIPオプションの処理中に発見されたエラーなどを含めて、入力データグラムのIPヘッダにあるエラーのせいで廃棄された入力データグラムの数である。ipsi_InAddrErrorsは、入力データグラムのIPヘッダの宛先フィールドにあるIPアドレスがホストで受信される有効アドレスではなかったために廃棄された入力データグラムの数である。ipsi_ForwDatagramsは、ホストが入力データグラムの最終IP宛先ではなく、そのため最終宛先に転送するルートを見つける試みがなされた入力データグラムの数である。ipsi_UnknownProtosは、うまく受信されたが未知のまたはサポートされないプロトコルであるために廃棄された、ローカルにアドレス指定されたデータグラムの数である。ipsi_InDiscardsは、継続処理を阻む問題には遭遇しなかったが廃棄された(例えばバッファ空間の不足により)、入力IPデータグラムの数である。ipsi_InDeliversは、うまくIPユーザプロトコルに送達された入力データグラムの総数である。ipsi_OutRequestsは、ローカルIPユーザプロトコル(ICMPを含む)が送信要求に応じてIPに供給したIPデータグラムの総数である。ipsi_RoutingDiscardsは、有効であるにもかかわらず廃棄が選択されたルーティングエントリの数である。ipsi_OutDiscardsは、宛先に送信されるのを阻む問題には遭遇しなかったが廃棄された(例えばバッファ空間の不足により)、出力IPデータグラムの数である。ipsi_OutNoRoutesは、宛先に送信するためのルートが見つからなかったために廃棄されたIPデータグラムの数である。ipsi_ReasmTimeoutは、受信フラグメントがホストで再アセンブルされるのを待機している間に受信フラグメントが保持される最大秒である。ipsi_ReasmReqdsは、ホストで再アセンブルする必要のあった受信IPフラグメントの数である。ipsi_ReasmOKsは、うまく再アセンブルされたIPデータグラムの数である。ipsi_ReasmFailsは、IP再アセンブリアルゴリズムによって検出された障害(例えばタイムアウトやエラーなど)の数である。ipsi_FragOKsは、ホストでうまくフラグメント化されたIPデータグラムの数である。ipsi_FragFailsは、ホストでフラグメント化する必要があるのにそうすることができなかったために廃棄された、例えばDon’t Fragmentフラグがセットされていたために廃棄された、IPデータグラムの数である。ipsi_FragCreatesは、ホストにおけるフラグメント化によって生成されたIPデータグラムフラグメントの数である。ipsi_NumIfは、使用可能なインタフェースの総数である。ipsi_NumAddrは、システム上の固有IPアドレスの総数である。ipsi_NumRoutesは、現在アクティブなルートの総数である。
【0070】
本発明は、オフロードされたネットワーク接続を周辺デバイスからホストにアップロードする方法も提供する。アップロードが行われるのには多くの理由がある。限定ではなく例として、いくつかの理由を次に挙げる。ルートが変更され、トラフィックを異なるインタフェース上に送ることが必要になる場合がある。接続トラフィック挙動が変化し、したがってもはやオフロードに適さなくなる場合もある。例えば、トラフィックが不十分であったり、アクティビティが不足していたり、接続が設定時間よりも長くフロー制御されていたりする(例えばウィンドウ更新が受信されていない)ことがある。さらに、周辺デバイスが特定の機能をサポートできない場合もあり、また、過剰なIPフラグメント、順番になっていない過剰なトラフィック、帯域外データの使用、過剰な再送がある場合や、キープアライブがタイムアウトした場合、セキュリティ関連付けが無効になり更新されない場合、過剰なデータが周辺デバイスに転送されている場合は、トラフィック挙動がオフロードに適さないことがある。オフロードされた接続をアップロードすることに対する他の理由は、リソースの問題によるものである。例えば、接続の処理を継続するためのリソースが周辺デバイスに不足している場合がある。別の接続が、オフロードされた接続よりも高い優先度を有することがあり、周辺デバイスのリソース使用可能性がしきい値よりも低いときに接続をアップロードすれば、優先度のより高い接続が周辺デバイスのリソースを使用し続けることができる場合がある。
【0071】
システムリソースは、オフロードされた接続を処理するためのリソースをホストプロセッサが有するように、変更されている場合がある。チムニーは、元のオフロードとは異なるリソースを必要とする場合がある(例えばセキュリティフィルタ変更など)。ホストは、周辺デバイスのリソースがしきい値レベルに近づいているかどうかを判定することができ、この場合、オフロード接続はホスト処理ユニットによってより効率的に処理される。例えばしきい値には、トラフィックサイズ(バイト数またはパケット数)、フラグメント数、ウィンドウサイズ、オフロードタイプを含めることができる。
【0072】
次に図7に目を向けると、アップロードは、周辺デバイス204(例えばNIC170)とTLIスイッチ306のいずれかによって開始される。接続は様々な理由でアップロードされることがある。これらの理由には、接続が別の周辺デバイスに移動すること、メディア切断の発生、順番になっていない過剰なセグメント、過剰なデータが周辺デバイス204に転送されること、アプリケーション200がバッファを事前ポストしないこと、過剰なIPフラグメント、低帯域接続、過剰な再送が含まれる。
【0073】
図7は、TLIスイッチ306がアップロードを開始する場合を示している(線700)。NIC170がアップロードを開始する場合は、線700は存在しないことに留意されたい。アップロードが開始されると、NIC170はすべての未解決要求を適切な状態で完了し、委任されるトランスポート層状態をスイッチ層に渡す(線702)。NIC170は、送信を完了しない、または受信バッファを完全に満たさない場合もある。NIC170は、すべての送受信状態が、トランスポート層300に戻される委任される状態と同期するようにするだけである。TLIスイッチ306は、それ以上の送信要求があればそれらをキューに入れ、受信バッファのポストを停止する。TLIスイッチ306は、委任されるトランスポート状態の制御を獲得するようトランスポート層に命じる(線704)。トランスポート層300は、受け取ったセグメントをNIC170に転送するのを停止し、委任される状態の制御を獲得し、完了メッセージをTLIスイッチ306に送る(線706)。TLIスイッチ306は、トランスポート層300が委任されるトランスポート状態の制御を握った旨の確認を受け取った後、NIC170にアップロードを確認し(線708)、それによりNIC170はリソースを開放することができる。トランスポート層300はまた、完了メッセージをTLIスイッチ306に送る前またはその後に、アップロードする接続をネットワーク層302に通知する(線710)。
【0074】
トランスポート層300は、委任される状態の制御を獲得する(線706)までは、オフロードされた接続に関する入来データパケットをNIC170に転送して、処理されるようにすることに留意されたい。データパケットは、NIC170が委任される状態をTLIスイッチ306に渡すとき(線702)と、トランスポート層300が委任される状態の制御を獲得するとき(線706)との間に到着するかもしれない。NIC170は、委任される状態をTLIスイッチ306に渡した後はもう入来データパケットを処理することができない。アップロード接続に関する入来パケットを受信したときは、NIC170は、アップロードが進行中であることを示すエラーメッセージをトランスポート層300に送り、場合によってはこれらの入来パケットを廃棄する。エラーメッセージは、入来データの転送を停止するようトランスポート層300に通知する。一実施形態では、トランスポート層300は、委任される状態を受け取るまではそれ以上のデータをバッファに入れる。
【0075】
複数の接続を中間ソフトウェア層から周辺デバイスにオフロードすることもできる。中間ソフトウェア層は、中間ソフトウェア層から周辺デバイスにオフロードされた接続の数に関する参照カウンタを維持する。参照カウントが0になる場合、次の中間ソフトウェア層へのアップロード要求が生成される。これにより、次の層の参照カウントがデクリメントされる。次の層の参照カウントが0になる場合、アップロード要求はネットワークスタック202中を下降し続ける。中間ソフトウェア層の参照カウントが0でなくなるか、または周辺デバイスがアップロード要求を受け取るまで、このプロセスが繰り返される。ネットワーク層302は、NIC170に関連するオフロードされた状態オブジェクトの数に関する参照カウントをデクリメントする。参照カウントが0になる場合は、NIC170中でネットワーク層302のために割り振られたリソースを使用しているTCBはない。参照カウントが0になるとき、ネットワーク層302はNIC170にメッセージを送り、ネットワーク層302についての状態オブジェクトをアップロードして委任されるネットワーク状態変数をネットワーク層302に送るよう伝える(線712)。NIC170は、状態を削除して、委任されるネットワーク状態変数およびNIC170が使用したであろう次のIPID値をネットワーク層302に送る(線714)。ネットワーク層302は、接続が再びオフロードされた場合に初期値として使用するために、この情報を記憶する。ネットワーク層302はフレーミング層304にもメッセージを送り、フレーミング層304にその参照カウントをデクリメントさせる(線716)。
【0076】
フレーミング層304もまた参照カウントを維持し、ネットワーク層302からメッセージを受け取ったときにその参照カウントをデクリメントする。フレーミング層304中の参照カウントが0になる場合、フレーミング層は、フレーミング層状態を削除するようNIC170にメッセージを送る(線718)。NIC170は、NIC170中の状態変数を削除し、委任される状態変数があればフレーミング層に送る(線720)。フレーミング層304はネットワーク層302に完了メッセージを送り(線722)、ネットワーク層302はトランスポート層に完了メッセージを送る(線724)。
【0077】
TCP接続は、その存続期間のいずれかの時点で、IPSECなどのセキュリティプロトコルを使用したセキュア接続を用いることが必要な場合がある。接続がIPセキュアであり周辺デバイス204がセキュリティを扱うことができない場合、接続をオフロードすることはできない。セキュアIP接続をオフロードするときは、前述のようにセキュリティ関連状態をCONST変数、CACHED変数、およびDELEGATED変数に分割して扱う。ホスト処理ユニット120は、鍵の再交渉などの制御メッセージを管理する。周辺デバイス204は、セキュリティアソシエーション状態変数を使用して、必要なすべてのIPSECデータ操作を実施する。
【0078】
次に図8に目を向けると、セキュア接続をオフロードするステップが示されている。以下の記述では、図4に示した前述のステップは同じであり、繰り返し記述しない。例示のために、トランスポートモードで動作するIPSEC接続を用いる。トランスポート層300が、TCPリソース情報をTLIスイッチリソース情報に追加したオフロード要求をIPSEC層800に送ったとき、IPSEC層オフロードが開始する(線402’)。IPSEC層800は、IPSECリソース要件をTCPリソース情報およびTLIスイッチリソース情報に追加したオフロード要求を、ネットワーク層302に送る(線802)。リソース要件は、IPSEC層がオフロードしたいセキュリティアソシエーションの数を含む。NICがオフロード要求を受け入れる場合、NICはセキュリティアソシエーションを扱うためのリソースを割り振る。ネットワーク層302は、パラメータのリンクリストおよびディスパッチテーブルを有する完了メッセージを、トランスポート層300ではなくIPSEC層に送る(線804)。
【0079】
IPSEC層800は、完了メッセージを受け取ると、IPSEC状態が前にオフロードされていない場合はIPSEC層状態をインバウンド記述子およびアウトバウンド記述子の一部としてNIC170に送り、セキュリティアソシエーション中の委任される状態の所有権をNIC170に譲渡する(線806)。状態が前にオフロードされている場合は、IPSEC層は参照カウントをインクリメントする。所有権が譲渡されると、NIC170はすべてのパケットを復号および暗号化する。IPSEC層800は、パラメータのリンクリストおよびディスパッチテーブルを有する完了メッセージをトランスポート層に送る(線414’)。
【0080】
IPSEC層800からNIC170に渡されるCONST状態変数は、パケットを特定のセキュリティアソシエーションに分類するのに必要な情報と、インバウンドおよびアウトバウンドのセキュリティアソシエーションに固有の情報からなる。CONST変数は、ソースおよび宛先ポート、プロトコルタイプ、およびセキュリティアソシエーション変数を含む。
【0081】
CACHED状態変数は、セキュリティアソシエーションの存続期間を決定するファクタと、インバウンドおよびアウトバウンドのセキュリティアソシエーションに固有の情報を備える。CACHED変数は、暗号化されるバイトに基づくソフト制限(例えばバイトカウントに対する鍵更新(rekey))およびハード制限(例えばバイトカウントに対するストップ)、セキュリティアソシエーションを使用できる最大回数に関するソフト制限(例えば事前定義済みティックでの鍵更新)およびハード制限(例えば事前定義済みティックでのストップ)、セキュリティアソシエーションを使用できる最大アイドル時間に関するハード制限(例えば最大アイドルティック)を含む。ソフト制限に達したときは、NIC170はホスト処理ユニット120に通知する。ハード制限に達したときは、NIC170はセキュリティアソシエーションを廃棄する。
【0082】
DELEGATED変数は、実行情報(running information)と、インバウンドおよびアウトバウンドのセキュリティアソシエーションに固有の情報とを含む。DELEGATED変数は、セキュリティアソシエーションで暗号化または復号されるバイトのカウント、セキュリティアソシエーションの存続時間、およびセキュリティアソシエーションのアイドル時間を含む。
【0083】
次に図9に目を向けると、IPSECを使用してオフロード済みネットワーク接続を周辺デバイスからホストにアップロードする場合が示されている。以下の記述では、図7に示した前述のステップは同じであり、繰り返し記述しない。トランスポート層300は、完了メッセージをスイッチ層306に送る前またはその後に、アップロードする接続をIPSEC層800に通知する(線710’)。すべてのセキュリティアソシエーションに関連する参照カウントがデクリメントされる。0になる参照カウントがない場合は、IPSEC層800は完了メッセージをトランスポート層300に送る(線724’)。オフロードされている接続が、特定のセキュリティアソシエーションを使用する最後の接続である場合は、IPSEC層800はNIC170にメッセージを送り、委任される状態変数をIPSEC層800にアップロードするよう伝える(線900)。NIC170は、委任される状態変数をIPSEC層800に返す(線902)。NIC170は、セキュリティアソシエーションの使用を停止し、セキュリティアソシエーションに属するパケットをスタック202を介してIPSEC層800に送る。IPSEC層800はNIC170に完了メッセージを送り、NIC170は、セキュリティアソシエーションのために割り振られたリソースを開放する(線904)。
【0084】
セキュリティアソシエーションの参照カウントが0になる場合は、IPSEC層800はネットワーク層302にもメッセージを送り、アップロードされる状態をネットワーク層302に通知する(線906)。フレーミング層304がネットワーク層302に完了メッセージを送った後(線722)、ネットワーク層302はIPSEC層に完了メッセージを送る(線908)。IPSEC層800は、トランスポート層に完了メッセージを送る(線724’)。
【0085】
トランスポート層300、ネットワーク層302、フレーミング層304、またはIPSEC層800についての状態がオフロードされているとき、更新(例えばARP更新やRIP更新)が到着する可能性がある。完了メッセージが受け取られる前に更新が行われる場合は、単にローカル状態が更新され、オフロード要求と共に状態オブジェクトが送られた場合に状態が変更されたことを示すフラグがセットされる。
【0086】
キャッシュされる状態を更新するためのNICの更新ルーチンが呼び出されている間に更新が行われる場合、競合があり得る。別個のメッセージが次いで状態を更新し、それによりNIC更新ルーチンが呼び出された場合、NICは、スケジューリングの問題のせいで2番目の呼出しを先とみなし、元の更新が到着したときに古いデータを使用することになる可能性がある。古いデータが使用された場合、次の更新が到着するまで誤ったエントリが使用されることになり、多量のデータが誤った場所に送信されるか、あるいはドロップされる可能性がある。この競合状況に対しては2つの解決法が考えられる。第1の考えられる解決法は、完了メッセージが常に第2の更新を実施するようにすることだが、この結果、多数の更新が入来した場合に再帰問題が生じる可能性がある。第2の考えられる解決法は、更新にシーケンス番号を付加して、一番最近のシーケンス番号を常に使用するようにすることである。
【0087】
IPSECがサポートする別の動作モードはトンネリングであり、トンネリングでは、データパケットがセキュア接続の一部として新しいパケットにカプセル化される。トンネルは、ネットワークスタック202に対しては仮想インタフェースに見える。IPSECトンネルをオフロードするステップは、トランスポートモードでIPSEC接続をオフロードするステップと同様である。トランスポートモードでは、IPSECヘッダがIPヘッダとTCPヘッダとの間に配置される。トンネルモードでは、UDPを用いてトンネルを提供する。ヘッダチェーンは、TCPヘッダ、IPSECヘッダ、UDPヘッダ、IPヘッダ、フレーミング層ヘッダと続く。トンネルを確立するために、交渉されたセキュリティ接続を記述するインバウンド記述子およびアウトバウンド記述子を周辺デバイスに送る。記述子は、接続についての状態変数と、接続を確立するのに必要な他の情報を含む。トンネルについてのCACHEDおよびDELEGATED状態変数は、トランスポートモードのCACHEDおよびDELEGATED状態変数と同じである。トンネルについてのCONST状態変数は、ソースおよび宛先ポート、ローカルアドレス、リモートアドレス、プロトコルタイプ、およびセキュリティアソシエーション変数を含む。
【0088】
ホスト処理ユニットとの密な同期を維持して、ネットワークスタック接続を周辺デバイスにオフロードおよびアップロードする方法について述べた。この方法は多くのプロトコルで用いることができる。例えば、使用できるプロトコルにはTCPやSCTPなどが含まれる。
【0089】
本発明の原理を適用できる多くの可能な実施形態に鑑みれば、図面に関して本明細書に述べた実施形態は例示的なものでしかなく、本発明の範囲を限定するものと解釈すべきではないことが理解されるであろう。例えば、本発明の趣旨を逸脱することなく、ソフトウェアで示した例示的実施形態の要素をハードウェアで実装することもでき、またその逆も可能であり、あるいは例示的実施形態の構成および詳細を修正することもできることは、当業者なら理解するであろう。したがって、本明細書に述べた本発明は、頭記の特許請求の範囲およびその均等物に含まれるこのような実施形態すべてを企図する。
【図面の簡単な説明】
【図1】本発明が存在する例示的なコンピュータシステムを一般的に示すブロック図である。
【図2】本発明のネットワークスタックの機能層およびバイパス経路を示すブロック図である。
【図3】本発明のNDIS経路の機能層およびバイパス経路を示すブロック図である。
【図4】本発明のオフロード機構を示すラダー図である。
【図5A】本発明の逆ツリーを示す図である。
【図5B】本発明の逆ツリーを示す図である。
【図5C】本発明の逆ツリーを示す図である。
【図5D】ルート更新の実施後に単一の逆ツリーにマージされた2つの独立した逆ツリーを示す図である。
【図6】ホストコンピュータと周辺デバイスとの間の同期を示すブロック図である。
【図7】本発明のアップロード機構を示すラダー図である。
【図8】本発明の教示による、セキュアプロトコルスタック接続のオフロード機構を示すラダー図である。
【図9】本発明の教示による、オフロードされたセキュアプロトコルスタック接続のアップロード機構を示すラダー図である。
【符号の説明】
100 コンピューティングシステム環境
110 コンピュータ
120 処理ユニット
121 システムバス
130 システムメモリ
131 ROM
132 RAM
133 BIOS
134 オペレーティングシステム
135 アプリケーションプログラム
136 その他のプログラムモジュール
137 プログラムデータ
140 取外し不可能な不揮発性メモリインタフェース
141 ハードディスクドライブ
144 オペレーティングシステム
145 アプリケーションプログラム
146 その他のプログラムモジュール
147 プログラムデータ
150 取外し可能な不揮発性メモリインタフェース
151 磁気ディスクドライブ
152 磁気ディスク
155 光ディスクドライブ
156 光ディスク
160 ユーザ入力インタフェース
161 マウス
162 キーボード
170 ネットワークインタフェースカード(NIC)
171 ローカルエリアネットワーク
172 モデム
173 ワイドエリアネットワーク
180 リモートコンピュータ
181 メモリ記憶デバイス
185 リモートアプリケーションプログラム
190 ビデオインタフェース
191 モニタ
195 出力周辺インタフェース
196 プリンタ
197 スピーカ
200 アプリケーション
202 ネットワークスタック
206 中間層
208 スイッチ
210 チムニー
300 トランスポート層
302 ネットワーク層
304 フレーミング層
306 TLIスイッチ
310 NDISミニドライバ
310 NDISミニポート
312 チムニードライバ
314 ハードウェア
500 逆ツリー
502 ARPテーブルエントリ
504 ルートキャッシュエントリ
506 TCPエントリ
508 TCPエントリ
510 ルートキャッシュエントリ
512 エントリ
514 エントリ
516 ARPテーブルエントリ
800 セキュリティ層
800 IPSEC層
Claims (49)
- コンピュータシステム環境で、ネットワーク化メッセージのパスを、スイッチ層およびネットワークスタックを通って周辺デバイスに行く第1のパスから、前記スイッチ層を通って前記周辺デバイスに行く第2のパスに変更するために、複数のソフトウェア層からなるネットワークスタックの状態変数をオフロードする方法であって、前記方法は、
前記ネットワークスタックの状態変数をオフロードするためのオフロード要求を、前記第1のパスを介して前記周辺デバイスに送るステップと、
前記オフロード要求を受け取った周辺デバイスにより前記ネットワークスタックの状態変数がオフロードされる場合に、
前記複数のソフトウェア層の少なくとも1つにおいて、前記周辺デバイスと通信できるようにするためのオフロードハンドルを前記周辺デバイスから受け取るステップと、
前記オフロードハンドルを受け取った複数のソフトウェア層の前記少なくとも1つから前記周辺デバイスに前記ネットワークスタックの状態変数を送るステップであって、キャッシュされる状態変数、ならびに、一定の状態変数およびオフロード中の所有権が前記周辺デバイスに委任される状態変数のうちの少なくとも一方を有する状態変数を送るステップと、
前記スイッチ層から前記周辺デバイスにバッファを転送するステップとを備えることを特徴とする方法。 - 前記オフロード要求はリソース要件リストを含み、前記複数のソフトウェア層の少なくとも1つは前記リソース要件リストに層リソース要件を追加することを特徴とする請求項1に記載の方法。
- 前記周辺デバイスから、前記スイッチ層またはソフトウェア層と前記周辺デバイスとの間で送受されるデータまたはポインタを保持した少なくとも1つの第1のディスパッチテーブルを受け取るステップをさらに備えることを特徴とする請求項1に記載の方法。
- 前記少なくとも1つの第1のディスパッチテーブルは、ネットワークスタック全体についてのプロトコルスタックディスパッチテーブル、および前記複数のソフトウェア層のうちの1つについての層ディスパッチテーブルの少なくとも一方を含むことを特徴とする請求項3に記載の方法。
- 前記周辺デバイスに、前記スイッチ層またはソフトウェア層と前記周辺デバイスとの間で送受されるデータまたはポインタを保持した第2のディスパッチテーブルを送るステップをさらに備えることを特徴とする請求項3に記載の方法。
- 前記第1のディスパッチテーブルおよび前記第2のディスパッチテーブルにパッチを当てて、少なくとも1つの機能を実施するための少なくとも1つのソフトウェア層を追加するステップをさらに備えることを特徴とする請求項5に記載の方法。
- 前記少なくとも1つのソフトウェア層は、追加機能、性能診断、および機能診断のうちの少なくとも1つを実施することを特徴とする請求項6に記載の方法。
- 前のオフロードが行われたかどうかを前記複数のソフトウェア層のそれぞれによって判定するステップと、
前記前のオフロードが行われた場合に、
前記周辺デバイスに前記オフロードハンドルを送るステップとをさらに備えることを特徴とする請求項1に記載の方法。 - 前記複数のソフトウェア層の1つはTCP層であり、前記一定の変数は、宛先ポート、ソースポート、ウィンドウスケールファクタ、および前記オフロードハンドルのうちの少なくとも1つを含むことを特徴とする請求項1に記載の方法。
- 前記複数のソフトウェア層の1つはTCP層であり、前記キャッシュされる変数は、TCP変数およびIP変数のうちの少なくとも一方を含むことを特徴とする請求項1に記載の方法。
- 前記複数のソフトウェア層の1つはTCP層であり、前記委任される変数は、現在TCP状態、受信ウィンドウサイズ、次のRECVについてのシーケンス番号、最大送信ウィンドウ、現在輻輳ウィンドウ、送信済み最大シーケンス番号、および次のSENDについてのシーケンス番号のうちの少なくとも1つを含むことを特徴とする請求項1に記載の方法。
- 前記複数のソフトウェア層の1つはネットワーク層であり、前記一定の変数は、宛先IPアドレスおよびソースIPアドレスのうちの少なくとも一方を含むことを特徴とする請求項1に記載の方法。
- 前記複数のソフトウェア層の1つはネットワーク層であり、前記キャッシュされる変数は次の層への前記オフロードハンドルを含むことを特徴とする請求項1に記載の方法。
- 前記複数のソフトウェア層の1つはネットワーク層であり、前記委任される変数は、IPパケットID開始値、ローカルアドレス、およびリモートアドレスを含むことを特徴とする請求項1に記載の方法。
- 前記複数のソフトウェア層の1つはフレーミング層であり、前記キャッシュされる変数はARPアドレスを含むことを特徴とする請求項1に記載の方法。
- 前記複数のソフトウェア層の1つはIPセキュリティ層であり、前記一定の変数は、ソースポート、宛先ポート、プロトコルタイプ、ローカルIPアドレス、リモートIPアドレス、およびセキュリティアソシエーション変数のうちの少なくとも1つを含むことを特徴とする請求項1に記載の方法。
- 前記複数のソフトウェア層の1つはIPセキュリティ層であり、前記キャッシュされる変数は、バイトカウントに対する鍵更新、バイトカウントに対するストップ、事前定義済みティックにおける鍵更新、事前定義済みティックにおけるストップ、およびセキュリティアソシエーションを使用できる最大アイドル時間のうちの少なくとも1つを含むことを特徴とする請求項1に記載の方法。
- 前記複数のソフトウェア層の1つはIPセキュリティ層であり、前記委任される変数は、セキュリティアソシエーションで暗号化または復号されるバイトのカウント、前記セキュリティアソシエーションに残された存続時間、および前記セキュリティアソシエーションに残されたアイドル時間のうちの少なくとも1つを含むことを特徴とする請求項1に記載の方法。
- ホスト処理デバイスが、前記キャッシュされる変数を処理し、前記キャッシュされる状態中の変数が変化したときに前記キャッシュされる変数を更新するよう前記周辺デバイスに命じることを特徴とする請求項1に記載の方法。
- 少なくとも1つのキャッシュされる変数を更新するために前記周辺デバイスに更新メッセージを送るステップをさらに備えることを特徴とする請求項1に記載の方法。
- 前記更新メッセージにシーケンス番号を付加するステップをさらに備えることを特徴とする請求項20に記載の方法。
- オフロード完了メッセージが受け取られて、それにより前記バッファが前記周辺デバイスに転送されるまでは、前記複数のソフトウェア層を介してデータを送信するステップをさらに備えることを特徴とする請求項1に記載の方法。
- 前記複数のソフトウェア層のうちの1つに関する特定の構造がオフロードされつつある場合に、前記複数のソフトウェア層のうちの1つに対する追加のオフロード要求を、前記オフロード要求が完了するまでブロックするステップをさらに備えることを特徴とする請求項1に記載の方法。
- 前記ネットワークスタックの状態変数がオフロードされるかどうかを前記複数のソフトウェア層の少なくとも1つによって判定するステップをさらに備えることを特徴とする請求項1に記載の方法。
- 前記オフロード要求が送られるかどうかを判定するステップをさらに備えることを特徴とする請求項1に記載の方法。
- 前記オフロード要求が送られるかどうかを判定するステップは、
オフロードする特定のサービスを選択するステップ、
前記ネットワークスタックの状態変数に関連するバイト数およびパケット数のうちの一方がホストリソースを多量に消費しているかどうかを判定するステップ、
オフロードの実施をポリシーが要求するかどうかを判定するステップ、ならびに
プロセッサ利用、データキャッシュ使用、ページテーブルキャッシュ使用およびメモリ帯域幅使用のうちの少なくとも1つがしきい値を超えるかどうかを判定するステップのうち、少なくとも1つのステップを含むことを特徴とする請求項25に記載の方法。 - IP ID空間全体の一部を前記周辺デバイスに割り当てるステップをさらに備えることを特徴とする請求項1に記載の方法。
- 前記IP ID空間全体の一部を割り当てるステップは、前記IP ID空間全体のほぼ半分を前記周辺デバイスに割り当てるステップを含むことを特徴とする請求項27に記載の方法。
- パケットに対するIP IDを、以下の式
現在のIP ID=[(パスのIPパケットID開始値)+(前記パスのカウンタ値) mod 32000] mod 64000
前記パスのカウンタ値=前記パスのカウンタ値+1
に従って生成するステップをさらに備えることを特徴とする請求項28に記載の方法。 - 請求項1に記載のステップを実施するためのコンピュータ実行可能命令を有することを特徴とするコンピュータ可読媒体。
- 前記周辺デバイスから、前記スイッチ層またはソフトウェア層と前記周辺デバイスとの間で送受されるデータまたはポインタを保持した少なくとも1つの第1のディスパッチテーブルを受け取ること、および
前記周辺デバイスに、前記スイッチ層またはソフトウェア層と前記周辺デバイスとの間で送受されるデータまたはポインタを保持した第2のディスパッチテーブルを送ることを含むステップを実施するための実行可能命令をさらに有することを特徴とする請求項30に記載のコンピュータ可読媒体。 - 前記キャッシュされる変数を処理すること、および前記キャッシュされる状態中の変数が変化したときに前記キャッシュされる変数を更新するよう前記周辺デバイスに命じることを含むステップを実施するための実行可能命令をさらに有することを特徴とする請求項30に記載のコンピュータ可読媒体。
- コンピュータシステム環境で、ネットワーク化メッセージのパスを、スイッチ層およびネットワークスタックを通って周辺デバイスに行く第1のパスから、前記スイッチ層を通って前記周辺デバイスに行く第2のパスに変更するために、複数のソフトウェア層からなるネットワークスタックの状態変数をオフロードする方法であって、前記周辺デバイスにより実行される方法は、
前記ネットワークスタックの状態変数をオフロードするためのオフロード要求を、前記スイッチ層から受け取るステップであって、前記オフロード要求はリソース要件リストを有するステップと、
前記受け取ったオフロード要求に応答して、ネットワークスタックの状態変数がオフロードされるかどうかを判定するステップと、
前記ネットワークスタックの状態変数がオフロードされる場合に、
前記受け取ったオフロード要求に含まれたリソース要件リストを扱うためのリソースを割り振るステップと、
前記複数のソフトウェア層の少なくとも1つに、前記周辺デバイスと通信できるようにするためのオフロードハンドルを渡すステップと、
前記オフロードハンドルを受け取った複数のソフトウェア層の前記少なくとも1つから、前記周辺デバイスへの前記ネットワークスタックの状態変数を受け取るステップであって、キャッシュされる状態変数、ならびに、一定の状態変数およびオフロード中の所有権が前記周辺デバイスに委任される状態変数のうちの少なくとも一方を有する状態変数を受け取るステップと、
前記スイッチ層からバッファを受け取るステップとを備えることを特徴とする方法。 - 前記スイッチ層から、前記スイッチ層と前記周辺デバイスとの間で送受されるデータまたはポインタを保持したディスパッチテーブルを受け取るステップをさらに備えることを特徴とする請求項33に記載の方法。
- 前記スイッチ層に、前記スイッチ層と前記周辺デバイスとの間で送受されるデータまたはポインタを保持したディスパッチテーブルを送るステップをさらに備えることを特徴とする請求項33に記載の方法。
- 請求項33に記載のステップを実施するためのコンピュータ実行可能命令を有することを特徴とするコンピュータ可読媒体。
- 前記スイッチ層から、前記スイッチ層と前記周辺デバイスとの間で送受されるデータまたはポインタを保持した第1のディスパッチテーブルを受け取ること、および
前記スイッチ層に、前記スイッチ層またはソフトウェア層と前記周辺デバイスとの間で送受されるデータまたはポインタを保持した第2のディスパッチテーブルを送ることを含むステップを実施するためのコンピュータ実行可能命令をさらに有することを特徴とする請求項36に記載のコンピュータ可読媒体。 - コンピュータ環境で、ネットワーク化メッセージのパスを、スイッチ層およびネットワークスタックを通って周辺デバイスに行く第1のパスから、前記スイッチ層を通って前記周辺デバイスに行く第2のパスに変更するために、複数のソフトウェア層からなるネットワークスタックの状態変数をオフロードする方法であって、前記方法は、
前記ネットワークスタックの状態変数をオフロードするためのオフロード要求を、前記第1のパスを介して前記周辺デバイスに送るステップであって、前記オフロード要求はリソース要件リストを有するステップと、
前記オフロード要求を受け取った周辺デバイスにより前記ネットワークスタックの状態変数がオフロードされる場合に、
前記複数のソフトウェア層の各層につき、前記層が前のオフロードからの前記周辺デバイスと通信できるようにするための既存のオフロードハンドルを有さない場合に前記リソース要件リストにリソース要件を追加すること、および前記リソース要件リストに既存のオフロードハンドルを追加することのうちの一方を実施し、
前記状態変数をオフロードしつつあり既存のオフロードハンドルを有さない前記複数のソフトウェア層のそれぞれにつき、キャッシュされる状態変数を前記周辺デバイスに送るステップと、
前記ネットワークスタックの状態変数がオフロードされた場合に、前記スイッチ層から前記周辺デバイスにバッファを転送するステップとを備えることを特徴とする方法。 - 前記複数のソフトウェア層はトランスポート層、ネットワーク層、およびフレーミング層を含み、状態エントリが第1の状態エントリから変化した場合に、前記リソース要件リストにリソース要件を追加するステップは、
プロトコル状態エントリが第1のプロトコル状態エントリから変化した場合に、前記リソース要件リストにトランスポートリソース要件を追加するステップと、
ネットワーク状態エントリが第1のネットワーク状態エントリから変化した場合に、前記リソース要件リストにネットワークリソース要件を追加するステップと、
フレーミング状態エントリが第1のフレーミング状態エントリから変化した場合に、前記リソース要件リストにフレーミングリソース要件を追加するステップとを含むことを特徴とする請求項38に記載の方法。 - 前記複数のソフトウェア層の各層につき、
状態エントリが変化していない場合に前記周辺デバイスに第1のハンドルを送るステップをさらに備えることを特徴とする請求項38に記載の方法。 - 前記状態エントリが変化していない場合に前記周辺デバイスに前記第1のハンドルを送るステップは、プロトコル状態エントリが変化していない場合に、前記周辺デバイスに第1のプロトコルハンドルを送るステップを含むことを特徴とする請求項40に記載の方法。
- 前記状態エントリが変化していない場合に前記周辺デバイスに前記第1のハンドルを送るステップは、ネットワーク状態エントリが変化していない場合に、前記周辺デバイスに第1のネットワークハンドルを送るステップを含むことを特徴とする請求項40に記載の方法。
- 前記状態エントリが変化していない場合に前記周辺デバイスに前記第1のハンドルを送るステップは、フレーミング状態エントリが変化していない場合に、前記周辺デバイスにフレーミングハンドルを送るステップを含むことを特徴とする請求項40に記載の方法。
- 請求項39に記載のステップを実施するためのコンピュータ実行可能命令を有することを特徴とするコンピュータ可読媒体。
- 前記複数のソフトウェア層の各層につき、
前記状態エントリが変化していない場合に前記周辺デバイスに前記第1のハンドルを送ることを含むステップを実施するための実行可能命令をさらに有することを特徴とする請求項44に記載のコンピュータ可読媒体。 - 前記複数のソフトウェア層はトランスポート層、ネットワーク層、およびフレーミング層を含み、状態エントリが第1の状態エントリから変化した場合に、前記リソース要件リストにリソース要件を追加するステップは、
プロトコル状態エントリが第1のプロトコル状態エントリから変化した場合に、前記リソース要件リストにトランスポートリソース要件を追加するステップと、
ネットワーク状態エントリが第1のネットワーク状態エントリから変化した場合に、前記リソース要件リストにネットワークリソース要件を追加するステップと、
フレーミング状態エントリが第1のフレーミング状態エントリから変化した場合に、前記リソース要件リストにフレーミングリソース要件を追加するステップとを含むことを特徴とする請求項44に記載の方法。 - コンピュータ環境で、スイッチ層およびプロトコルスタックを通って周辺デバイスに行く第1のパスから、前記スイッチ層から前記周辺デバイスに行く第2のパスに変更するために、プロトコルスタックの状態変数をオフロードする方法であって、
前記プロトコルスタックの状態変数をオフロードするためのオフロード要求を受け取るステップであって、前記オフロード要求は、リソース要件リストと、前記複数のソフトウェア層の少なくとも1つに対する前記周辺デバイスと通信できるようにするための少なくとも1つの既存のオフロードハンドルとを有するステップと、
前記プロトコルスタックの状態変数がオフロードされるかどうかを判定するステップと、
前記プロトコルスタックの状態変数がオフロードされる場合に、前記リソース要件リストを扱うためのリソースを割り振るステップと、
既存のオフロードハンドルを有さない前記複数の層の各層が状態変数をオフロードした場合に、前記各層にオフロードハンドルを送るステップとを備えることを特徴とする方法。 - 前記複数のソフトウェア層はプロトコル層、ネットワーク層およびフレーミング層を含み、既存のオフロードハンドルを有さない前記複数の層の各層が状態変数をオフロードした場合に前記各層に前記オフロードハンドルを送るステップは、
プロトコル層の状態変数がオフロードされた場合に、前記プロトコル層にプロトコルハンドルを送るステップと、
ネットワーク層の状態変数がオフロードされた場合に、前記ネットワーク層にネットワークハンドルを送るステップと、
フレーミング層の状態変数がオフロードされた場合に、前記フレーミング層にフレーミングハンドルを送るステップとを含むことを特徴とする請求項47に記載の方法。 - 請求項47に記載のステップを実施するためのコンピュータ実行可能命令を有することを特徴とするコンピュータ可読媒体。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/135,489 US7007103B2 (en) | 2002-04-30 | 2002-04-30 | Method to offload a network stack |
US10/135,489 | 2002-04-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003333076A JP2003333076A (ja) | 2003-11-21 |
JP4327496B2 true JP4327496B2 (ja) | 2009-09-09 |
Family
ID=29215650
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003124294A Expired - Fee Related JP4327496B2 (ja) | 2002-04-30 | 2003-04-28 | ネットワークスタックをオフロードする方法 |
Country Status (5)
Country | Link |
---|---|
US (3) | US7007103B2 (ja) |
EP (1) | EP1359724B1 (ja) |
JP (1) | JP4327496B2 (ja) |
AT (1) | ATE327626T1 (ja) |
DE (1) | DE60305378T2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9304957B2 (en) | 2011-12-27 | 2016-04-05 | Ricoh Company, Limited | Image processing method, image processing apparatus, and control program |
Families Citing this family (139)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5978379A (en) * | 1997-01-23 | 1999-11-02 | Gadzoox Networks, Inc. | Fiber channel learning bridge, learning half bridge, and protocol |
US6697868B2 (en) * | 2000-02-28 | 2004-02-24 | Alacritech, Inc. | Protocol processing stack for use with intelligent network interface device |
US6904519B2 (en) * | 1998-06-12 | 2005-06-07 | Microsoft Corporation | Method and computer program product for offloading processing tasks from software to hardware |
US7430171B2 (en) | 1998-11-19 | 2008-09-30 | Broadcom Corporation | Fibre channel arbitrated loop bufferless switch circuitry to increase bandwidth without significant increase in cost |
US7447795B2 (en) * | 2001-04-11 | 2008-11-04 | Chelsio Communications, Inc. | Multi-purpose switching network interface controller |
US8218555B2 (en) | 2001-04-24 | 2012-07-10 | Nvidia Corporation | Gigabit ethernet adapter |
US7212534B2 (en) | 2001-07-23 | 2007-05-01 | Broadcom Corporation | Flow based congestion control |
US7295555B2 (en) | 2002-03-08 | 2007-11-13 | Broadcom Corporation | System and method for identifying upper layer protocol message boundaries |
US7007103B2 (en) * | 2002-04-30 | 2006-02-28 | Microsoft Corporation | Method to offload a network stack |
US7181531B2 (en) * | 2002-04-30 | 2007-02-20 | Microsoft Corporation | Method to synchronize and upload an offloaded network stack connection with a network stack |
US7171505B2 (en) * | 2002-05-02 | 2007-01-30 | International Business Machines Corporation | Universal network interface connection |
US7457845B2 (en) * | 2002-08-23 | 2008-11-25 | Broadcom Corporation | Method and system for TCP/IP using generic buffers for non-posting TCP applications |
US7934021B2 (en) | 2002-08-29 | 2011-04-26 | Broadcom Corporation | System and method for network interfacing |
US7426579B2 (en) * | 2002-09-17 | 2008-09-16 | Broadcom Corporation | System and method for handling frames in multiple stack environments |
US7411959B2 (en) | 2002-08-30 | 2008-08-12 | Broadcom Corporation | System and method for handling out-of-order frames |
US7346701B2 (en) | 2002-08-30 | 2008-03-18 | Broadcom Corporation | System and method for TCP offload |
US7397800B2 (en) * | 2002-08-30 | 2008-07-08 | Broadcom Corporation | Method and system for data placement of out-of-order (OOO) TCP segments |
US8180928B2 (en) | 2002-08-30 | 2012-05-15 | Broadcom Corporation | Method and system for supporting read operations with CRC for iSCSI and iSCSI chimney |
US7313623B2 (en) * | 2002-08-30 | 2007-12-25 | Broadcom Corporation | System and method for TCP/IP offload independent of bandwidth delay product |
US7519650B2 (en) | 2002-09-05 | 2009-04-14 | International Business Machines Corporation | Split socket send queue apparatus and method with efficient queue flow control, retransmission and sack support mechanisms |
US7058797B2 (en) * | 2002-09-10 | 2006-06-06 | Veritas Operating Corporation | Use of off-motherboard resources in a computer system |
US7936766B2 (en) * | 2002-09-20 | 2011-05-03 | Wind River Systems, Inc. | System and method for separating logical networks on a dual protocol stack |
US7313148B2 (en) * | 2002-11-18 | 2007-12-25 | Sun Microsystems, Inc. | Method and system for TCP large segment offload with ack-based transmit scheduling |
US7349943B2 (en) * | 2003-03-12 | 2008-03-25 | Microsoft Corporation | Protocol-independent client-side caching system and method |
US7370082B2 (en) * | 2003-05-09 | 2008-05-06 | Microsoft Corporation | Remote invalidation of pre-shared RDMA key |
US7412488B2 (en) * | 2003-06-05 | 2008-08-12 | Nvidia Corporation | Setting up a delegated TCP connection for hardware-optimized processing |
US7420931B2 (en) * | 2003-06-05 | 2008-09-02 | Nvidia Corporation | Using TCP/IP offload to accelerate packet filtering |
US20050022017A1 (en) * | 2003-06-24 | 2005-01-27 | Maufer Thomas A. | Data structures and state tracking for network protocol processing |
US20050050187A1 (en) * | 2003-09-03 | 2005-03-03 | International Business Machines Corporation | Method and apparatus for support of bottleneck avoidance in an intelligent adapter |
ATE528897T1 (de) * | 2003-09-10 | 2011-10-15 | Microsoft Corp | Mehrfachabladung von netzstatusobjekten mit unterstützung von failoverereignissen |
US7526577B2 (en) * | 2003-09-19 | 2009-04-28 | Microsoft Corporation | Multiple offload of network state objects with support for failover events |
US8285881B2 (en) * | 2003-09-10 | 2012-10-09 | Broadcom Corporation | System and method for load balancing and fail over |
US20050060538A1 (en) * | 2003-09-15 | 2005-03-17 | Intel Corporation | Method, system, and program for processing of fragmented datagrams |
US8655755B2 (en) * | 2003-10-22 | 2014-02-18 | Scottrade, Inc. | System and method for the automated brokerage of financial instruments |
US8549345B1 (en) | 2003-10-31 | 2013-10-01 | Oracle America, Inc. | Methods and apparatus for recovering from a failed network interface card |
US7689702B1 (en) * | 2003-10-31 | 2010-03-30 | Sun Microsystems, Inc. | Methods and apparatus for coordinating processing of network connections between two network protocol stacks |
US7978716B2 (en) * | 2003-11-24 | 2011-07-12 | Citrix Systems, Inc. | Systems and methods for providing a VPN solution |
US7636372B2 (en) * | 2003-12-19 | 2009-12-22 | Broadcom Corporation | Method and system for providing smart offload and upload |
US8549170B2 (en) * | 2003-12-19 | 2013-10-01 | Nvidia Corporation | Retransmission system and method for a transport offload engine |
US7814219B2 (en) | 2003-12-19 | 2010-10-12 | Intel Corporation | Method, apparatus, system, and article of manufacture for grouping packets |
US20050188074A1 (en) * | 2004-01-09 | 2005-08-25 | Kaladhar Voruganti | System and method for self-configuring and adaptive offload card architecture for TCP/IP and specialized protocols |
US20050223088A1 (en) * | 2004-03-31 | 2005-10-06 | Cisco Technology, Inc. | System using planning information to modify operation of a digital network |
US20050246443A1 (en) * | 2004-03-31 | 2005-11-03 | Intel Corporation | Management of offload operations in a network storage driver |
US7586951B2 (en) * | 2004-04-27 | 2009-09-08 | Intel Corporation | Method, apparatus, and system for idle state definition for power management |
US7826457B2 (en) * | 2004-05-11 | 2010-11-02 | Broadcom Corp. | Method and system for handling out-of-order segments in a wireless system via direct data placement |
US7831745B1 (en) | 2004-05-25 | 2010-11-09 | Chelsio Communications, Inc. | Scalable direct memory access using validation of host and scatter gather engine (SGE) generation indications |
US7757074B2 (en) | 2004-06-30 | 2010-07-13 | Citrix Application Networking, Llc | System and method for establishing a virtual private network |
US8495305B2 (en) | 2004-06-30 | 2013-07-23 | Citrix Systems, Inc. | Method and device for performing caching of dynamically generated objects in a data communication network |
US8739274B2 (en) * | 2004-06-30 | 2014-05-27 | Citrix Systems, Inc. | Method and device for performing integrated caching in a data communication network |
US7386566B2 (en) * | 2004-07-15 | 2008-06-10 | Microsoft Corporation | External metadata processing |
KR20070039597A (ko) * | 2004-07-23 | 2007-04-12 | 사이트릭스 시스템스, 인크. | 사설망에 대한 원격 액세스를 보안화하기 위한 방법 및시스템 |
AU2005266943C1 (en) | 2004-07-23 | 2011-01-06 | Citrix Systems, Inc. | Systems and methods for optimizing communications between network nodes |
JP4091095B2 (ja) * | 2004-08-06 | 2008-05-28 | シャープ株式会社 | 送信機、受信機、通信システム、通信方法、通信プログラム |
US7769905B1 (en) * | 2004-08-13 | 2010-08-03 | Oracle America, Inc. | Adapting network communication to asynchronous interfaces and methods |
US7409558B2 (en) * | 2004-09-02 | 2008-08-05 | International Business Machines Corporation | Low-latency data decryption interface |
ES2335788T3 (es) * | 2004-09-16 | 2010-04-05 | Beckhoff Automation Gmbh | Procedimiento para la transmision de datos y sistema de automatizacion para el empleo de un procedimiento de transmision de datos de este tipo. |
US8145908B1 (en) * | 2004-10-29 | 2012-03-27 | Akamai Technologies, Inc. | Web content defacement protection system |
US7783880B2 (en) | 2004-11-12 | 2010-08-24 | Microsoft Corporation | Method and apparatus for secure internet protocol (IPSEC) offloading with integrated host protocol stack management |
US20060153215A1 (en) * | 2004-12-20 | 2006-07-13 | Linden Cornett | Connection context prefetch |
US20060253605A1 (en) * | 2004-12-30 | 2006-11-09 | Prabakar Sundarrajan | Systems and methods for providing integrated client-side acceleration techniques to access remote applications |
US7810089B2 (en) | 2004-12-30 | 2010-10-05 | Citrix Systems, Inc. | Systems and methods for automatic installation and execution of a client-side acceleration program |
US8700695B2 (en) * | 2004-12-30 | 2014-04-15 | Citrix Systems, Inc. | Systems and methods for providing client-side accelerated access to remote applications via TCP pooling |
US8954595B2 (en) | 2004-12-30 | 2015-02-10 | Citrix Systems, Inc. | Systems and methods for providing client-side accelerated access to remote applications via TCP buffering |
US8549149B2 (en) | 2004-12-30 | 2013-10-01 | Citrix Systems, Inc. | Systems and methods for providing client-side accelerated access to remote applications via TCP multiplexing |
US8255456B2 (en) | 2005-12-30 | 2012-08-28 | Citrix Systems, Inc. | System and method for performing flash caching of dynamically generated objects in a data communication network |
US7787391B2 (en) * | 2005-01-28 | 2010-08-31 | Sharp Kabushiki Kaisha | Communication device, communication system, communication method, communication program, and communication circuit |
US8284684B2 (en) | 2005-01-28 | 2012-10-09 | Sharp Kabushiki Kaisha | Communication device, communication system, communication method, and communication circuit |
CN101964705B (zh) | 2005-01-28 | 2012-08-08 | 夏普株式会社 | 通信设备、通信***、通信方法、通信程序、通信电路 |
US8051182B2 (en) * | 2005-01-28 | 2011-11-01 | Sharp Kabushiki Kaisha | Communication device, communication system, communication method, communication program, and communication circuit |
US7640346B2 (en) * | 2005-02-01 | 2009-12-29 | Microsoft Corporation | Dispatching network connections in user-mode |
US7693166B2 (en) | 2005-02-17 | 2010-04-06 | Nec Corporation | Method and apparatus for transmitting data to network and method and apparatus for receiving data from network |
US7454667B2 (en) * | 2005-04-26 | 2008-11-18 | Intel Corporation | Techniques to provide information validation and transfer |
FI20055239A (fi) * | 2005-05-13 | 2006-11-14 | Nethawk Oy | Menetelmä sanomien käsittelemiseksi tietojenkäsittelylaite ja tietokoneohjelmatuote |
US7653070B2 (en) * | 2005-06-07 | 2010-01-26 | Broadcom Corporation | Method and system for supporting efficient and cache-friendly TCP session lookup operations based on canonicalization tags |
US7430220B2 (en) * | 2005-07-29 | 2008-09-30 | International Business Machines Corporation | System load based dynamic segmentation for network interface cards |
US7660264B1 (en) | 2005-12-19 | 2010-02-09 | Chelsio Communications, Inc. | Method for traffic schedulign in intelligent network interface circuitry |
US7715436B1 (en) | 2005-11-18 | 2010-05-11 | Chelsio Communications, Inc. | Method for UDP transmit protocol offload processing with traffic management |
US7616563B1 (en) | 2005-08-31 | 2009-11-10 | Chelsio Communications, Inc. | Method to implement an L4-L7 switch using split connections and an offloading NIC |
US7660306B1 (en) | 2006-01-12 | 2010-02-09 | Chelsio Communications, Inc. | Virtualizing the operation of intelligent network interface circuitry |
US7724658B1 (en) | 2005-08-31 | 2010-05-25 | Chelsio Communications, Inc. | Protocol offload transmit traffic management |
US7886083B2 (en) * | 2005-08-31 | 2011-02-08 | Microsoft Corporation | Offloaded neighbor cache entry synchronization |
US7639715B1 (en) | 2005-09-09 | 2009-12-29 | Qlogic, Corporation | Dedicated application interface for network systems |
US7760733B1 (en) | 2005-10-13 | 2010-07-20 | Chelsio Communications, Inc. | Filtering ingress packets in network interface circuitry |
US20090262661A1 (en) * | 2005-11-10 | 2009-10-22 | Sharp Kabushiki Kaisha | Data transmission device and method of controlling same, data receiving device and method of controlling same, data transfer system, data transmission device control program, data receiving device control program, and storage medium containing the programs |
US7921184B2 (en) * | 2005-12-30 | 2011-04-05 | Citrix Systems, Inc. | System and method for performing flash crowd caching of dynamically generated objects in a data communication network |
US8301839B2 (en) * | 2005-12-30 | 2012-10-30 | Citrix Systems, Inc. | System and method for performing granular invalidation of cached dynamically generated objects in a data communication network |
US20070156974A1 (en) * | 2006-01-03 | 2007-07-05 | Haynes John E Jr | Managing internet small computer systems interface communications |
US8700800B2 (en) * | 2006-02-15 | 2014-04-15 | Tropos Networks, Inc. | Roaming of clients between gateways of clusters of a wireless mesh network |
US7895646B2 (en) * | 2006-05-25 | 2011-02-22 | International Business Machines Corporation | IKE daemon self-adjusting negotiation throttle |
US20070297334A1 (en) * | 2006-06-21 | 2007-12-27 | Fong Pong | Method and system for network protocol offloading |
US7894453B2 (en) * | 2006-07-20 | 2011-02-22 | Oracle America, Inc. | Multiple virtual network stack instances |
US7885257B2 (en) * | 2006-07-20 | 2011-02-08 | Oracle America, Inc. | Multiple virtual network stack instances using virtual network interface cards |
JP2008061223A (ja) * | 2006-08-04 | 2008-03-13 | Canon Inc | 通信装置及び通信方法 |
US8543808B2 (en) * | 2006-08-24 | 2013-09-24 | Microsoft Corporation | Trusted intermediary for network data processing |
US8661160B2 (en) * | 2006-08-30 | 2014-02-25 | Intel Corporation | Bidirectional receive side scaling |
US8214509B2 (en) * | 2006-10-02 | 2012-07-03 | Microsoft Corporation | Receive coalescing and direct data placement |
JP4219950B2 (ja) * | 2006-10-16 | 2009-02-04 | シャープ株式会社 | 通信機器、通信方法、通信回路、携帯電話機、プログラム、およびプログラムを記録したコンピュータ読み取り可能な記録媒体 |
GB0621774D0 (en) * | 2006-11-01 | 2006-12-13 | Level 5 Networks Inc | Driver level segmentation |
US9794378B2 (en) * | 2006-11-08 | 2017-10-17 | Standard Microsystems Corporation | Network traffic controller (NTC) |
US8467390B2 (en) * | 2006-12-14 | 2013-06-18 | Oracle America, Inc. | Method and system for network stack tuning |
US7966039B2 (en) * | 2007-02-02 | 2011-06-21 | Microsoft Corporation | Bidirectional dynamic offloading of tasks between a host and a mobile device |
US8935406B1 (en) | 2007-04-16 | 2015-01-13 | Chelsio Communications, Inc. | Network adaptor configured for connection establishment offload |
US8589587B1 (en) | 2007-05-11 | 2013-11-19 | Chelsio Communications, Inc. | Protocol offload in intelligent network adaptor, including application level signalling |
US8060644B1 (en) | 2007-05-11 | 2011-11-15 | Chelsio Communications, Inc. | Intelligent network adaptor with end-to-end flow control |
US7826350B1 (en) | 2007-05-11 | 2010-11-02 | Chelsio Communications, Inc. | Intelligent network adaptor with adaptive direct data placement scheme |
US7831720B1 (en) | 2007-05-17 | 2010-11-09 | Chelsio Communications, Inc. | Full offload of stateful connections, with partial connection offload |
JP4964683B2 (ja) * | 2007-06-18 | 2012-07-04 | 株式会社リコー | 通信装置およびプログラム |
US20090019160A1 (en) * | 2007-07-12 | 2009-01-15 | International Business Machines Corporation | Method and system for workload management utilizing tcp/ip and operating system data |
JP5049834B2 (ja) * | 2008-03-26 | 2012-10-17 | 株式会社東芝 | データ受信装置、データ受信方法およびデータ処理プログラム |
US8014282B2 (en) * | 2008-06-26 | 2011-09-06 | Intel Corporation | Hashing packet contents to determine a processor |
GB2462825A (en) * | 2008-08-19 | 2010-02-24 | Howler Technologies Ltd | Processing packetised data using a Cell Broadband Engine architecture |
US8572251B2 (en) * | 2008-11-26 | 2013-10-29 | Microsoft Corporation | Hardware acceleration for remote desktop protocol |
US8914417B2 (en) | 2009-01-07 | 2014-12-16 | International Business Machines Corporation | Apparatus, system, and method for maintaining a context stack |
JP5353278B2 (ja) * | 2009-02-06 | 2013-11-27 | 富士通株式会社 | 通信装置 |
US20100215052A1 (en) * | 2009-02-20 | 2010-08-26 | Inventec Corporation | Iscsi network interface card with arp/icmp resolution function |
US8726007B2 (en) * | 2009-03-31 | 2014-05-13 | Novell, Inc. | Techniques for packet processing with removal of IP layer routing dependencies |
US9497039B2 (en) * | 2009-05-28 | 2016-11-15 | Microsoft Technology Licensing, Llc | Agile data center network architecture |
US8416692B2 (en) | 2009-05-28 | 2013-04-09 | Microsoft Corporation | Load balancing across layer-2 domains |
WO2011068091A1 (ja) | 2009-12-04 | 2011-06-09 | 日本電気株式会社 | サーバ及びフロー制御プログラム |
US9391716B2 (en) | 2010-04-05 | 2016-07-12 | Microsoft Technology Licensing, Llc | Data center using wireless communication |
US8726093B2 (en) | 2010-06-30 | 2014-05-13 | Oracle America, Inc. | Method and system for maintaining direct hardware access in the event of network interface card failure |
US8694618B2 (en) * | 2011-04-13 | 2014-04-08 | Microsoft Corporation | Maximizing data transfer through multiple network devices |
US8627412B2 (en) | 2011-04-14 | 2014-01-07 | Microsoft Corporation | Transparent database connection reconnect |
US8966499B2 (en) | 2011-09-09 | 2015-02-24 | Microsoft Technology Licensing, Llc | Virtual switch extensibility |
JP2013097734A (ja) | 2011-11-04 | 2013-05-20 | Ricoh Co Ltd | 制御装置、通信制御方法 |
US8848741B2 (en) | 2012-06-21 | 2014-09-30 | Breakingpoint Systems, Inc. | High-speed CLD-based TCP segmentation offload |
US8824508B2 (en) * | 2012-06-21 | 2014-09-02 | Breakingpoint Systems, Inc. | High-speed CLD-based TCP assembly offload |
US9058219B2 (en) | 2012-11-02 | 2015-06-16 | Amazon Technologies, Inc. | Custom resources in a resource stack |
US9954751B2 (en) | 2015-05-29 | 2018-04-24 | Microsoft Technology Licensing, Llc | Measuring performance of a network using mirrored probe packets |
CN106559460B (zh) * | 2015-09-30 | 2020-06-26 | 华为技术有限公司 | 软件定义协议网络中分配资源的方法和*** |
FR3052890B1 (fr) * | 2016-06-21 | 2018-07-13 | Thales Sa | Procede de reception garantie de signaux communs dans un systeme avionique comportant une pluralite de calculateurs electroniques |
US20180150256A1 (en) * | 2016-11-29 | 2018-05-31 | Intel Corporation | Technologies for data deduplication in disaggregated architectures |
US11409569B2 (en) * | 2018-03-29 | 2022-08-09 | Xilinx, Inc. | Data processing system |
CN108600002B (zh) * | 2018-04-17 | 2021-02-26 | 浙江工业大学 | 一种基于半监督学习的移动边缘计算分流决策方法 |
US10531436B1 (en) | 2018-09-12 | 2020-01-07 | Capital One Services, Llc | Multiple network connections to increase data throughput of mobile device |
US11863318B2 (en) * | 2020-08-31 | 2024-01-02 | Frontiir Pte Ltd. | Error correction for network packets |
US11568089B2 (en) * | 2020-08-31 | 2023-01-31 | Frontiir Pte Ltd. | Offloading operations from a primary processing device to a secondary processing device |
CN115225690B (zh) * | 2022-06-22 | 2024-04-19 | 中科驭数(北京)科技有限公司 | 基于硬件协议栈的tcp长连接保活方法及装置 |
CN117041353B (zh) * | 2023-10-08 | 2024-01-16 | 北京小米移动软件有限公司 | 任务处理的方法、装置、电子设备及存储介质 |
Family Cites Families (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5835726A (en) * | 1993-12-15 | 1998-11-10 | Check Point Software Technologies Ltd. | System for securing the flow of and selectively modifying packets in a computer network |
US6067407A (en) * | 1995-06-30 | 2000-05-23 | Canon Information Systems, Inc. | Remote diagnosis of network device over a local area network |
US5737337A (en) * | 1996-09-30 | 1998-04-07 | Motorola, Inc. | Method and apparatus for interleaving data in an asymmetric digital subscriber line (ADSL) transmitter |
US6094712A (en) | 1996-12-04 | 2000-07-25 | Giganet, Inc. | Computer network interface for direct mapping of data transferred between applications on different host computers from virtual addresses to physical memory addresses application data |
US7133940B2 (en) * | 1997-10-14 | 2006-11-07 | Alacritech, Inc. | Network interface device employing a DMA command queue |
US7185266B2 (en) * | 2003-02-12 | 2007-02-27 | Alacritech, Inc. | Network interface device for error detection using partial CRCS of variable length message portions |
US6434620B1 (en) * | 1998-08-27 | 2002-08-13 | Alacritech, Inc. | TCP/IP offload network interface device |
US6226680B1 (en) * | 1997-10-14 | 2001-05-01 | Alacritech, Inc. | Intelligent network interface system method for protocol processing |
US8782199B2 (en) * | 1997-10-14 | 2014-07-15 | A-Tech Llc | Parsing a packet header |
US6687758B2 (en) * | 2001-03-07 | 2004-02-03 | Alacritech, Inc. | Port aggregation for network connections that are offloaded to network interface devices |
US6757746B2 (en) | 1997-10-14 | 2004-06-29 | Alacritech, Inc. | Obtaining a destination address so that a network interface device can write network data without headers directly into host memory |
US5937169A (en) * | 1997-10-29 | 1999-08-10 | 3Com Corporation | Offload of TCP segmentation to a smart adapter |
US6765901B1 (en) | 1998-06-11 | 2004-07-20 | Nvidia Corporation | TCP/IP/PPP modem |
US6141705A (en) * | 1998-06-12 | 2000-10-31 | Microsoft Corporation | System for querying a peripheral device to determine its processing capabilities and then offloading specific processing tasks from a host to the peripheral device when needed |
US6904519B2 (en) * | 1998-06-12 | 2005-06-07 | Microsoft Corporation | Method and computer program product for offloading processing tasks from software to hardware |
US6711164B1 (en) * | 1999-11-05 | 2004-03-23 | Nokia Corporation | Method and apparatus for performing IP-ID regeneration to improve header compression efficiency |
US6829357B1 (en) * | 1999-12-14 | 2004-12-07 | Trw Inc. | Communication system having a transmitter and a receiver that engage in reduced size encrypted data communication |
JP3975045B2 (ja) * | 2000-01-24 | 2007-09-12 | パナソニック コミュニケーションズ株式会社 | ネットワーク制御装置及びリモート表示装置 |
US20010034754A1 (en) * | 2000-03-17 | 2001-10-25 | Elwahab Amgad Mazen | Device, system and method for providing web browser access and control of devices on customer premise gateways |
EP1330725B1 (en) | 2000-09-29 | 2012-03-21 | Alacritech, Inc. | Intelligent network storage interface system and devices |
US8019901B2 (en) * | 2000-09-29 | 2011-09-13 | Alacritech, Inc. | Intelligent network storage interface system |
US7283527B2 (en) * | 2002-02-27 | 2007-10-16 | International Business Machines Corporation | Apparatus and method of maintaining two-byte IP identification fields in IP headers |
US7535913B2 (en) * | 2002-03-06 | 2009-05-19 | Nvidia Corporation | Gigabit ethernet adapter supporting the iSCSI and IPSEC protocols |
US7181531B2 (en) * | 2002-04-30 | 2007-02-20 | Microsoft Corporation | Method to synchronize and upload an offloaded network stack connection with a network stack |
US7007103B2 (en) * | 2002-04-30 | 2006-02-28 | Microsoft Corporation | Method to offload a network stack |
US7114096B2 (en) * | 2003-04-02 | 2006-09-26 | International Business Machines Corporation | State recovery and failover of intelligent network adapters |
US7412488B2 (en) * | 2003-06-05 | 2008-08-12 | Nvidia Corporation | Setting up a delegated TCP connection for hardware-optimized processing |
US7526577B2 (en) * | 2003-09-19 | 2009-04-28 | Microsoft Corporation | Multiple offload of network state objects with support for failover events |
US7586936B2 (en) * | 2005-04-01 | 2009-09-08 | International Business Machines Corporation | Host Ethernet adapter for networking offload in server environment |
US7684344B2 (en) * | 2005-07-18 | 2010-03-23 | Broadcom Corporation | Method and system for transparent TCP offload |
-
2002
- 2002-04-30 US US10/135,489 patent/US7007103B2/en not_active Expired - Fee Related
-
2003
- 2003-04-07 DE DE60305378T patent/DE60305378T2/de not_active Expired - Lifetime
- 2003-04-07 AT AT03007902T patent/ATE327626T1/de not_active IP Right Cessation
- 2003-04-07 EP EP03007902A patent/EP1359724B1/en not_active Expired - Lifetime
- 2003-04-28 JP JP2003124294A patent/JP4327496B2/ja not_active Expired - Fee Related
-
2004
- 2004-12-02 US US11/002,869 patent/US7590755B2/en not_active Expired - Fee Related
-
2005
- 2005-11-10 US US11/272,213 patent/US7254637B2/en not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9304957B2 (en) | 2011-12-27 | 2016-04-05 | Ricoh Company, Limited | Image processing method, image processing apparatus, and control program |
Also Published As
Publication number | Publication date |
---|---|
EP1359724B1 (en) | 2006-05-24 |
US7007103B2 (en) | 2006-02-28 |
JP2003333076A (ja) | 2003-11-21 |
US7590755B2 (en) | 2009-09-15 |
DE60305378D1 (de) | 2006-06-29 |
US20050091412A1 (en) | 2005-04-28 |
DE60305378T2 (de) | 2007-02-22 |
US20030204634A1 (en) | 2003-10-30 |
ATE327626T1 (de) | 2006-06-15 |
US20060069792A1 (en) | 2006-03-30 |
US7254637B2 (en) | 2007-08-07 |
EP1359724A1 (en) | 2003-11-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4327496B2 (ja) | ネットワークスタックをオフロードする方法 | |
JP4638658B2 (ja) | オフロードされたネットワークスタックの状態オブジェクトをアップロードする方法及びそれを同期する方法 | |
US7526577B2 (en) | Multiple offload of network state objects with support for failover events | |
JP5442755B2 (ja) | リモートデスクトッププロトコルのためのハードウェアアクセラレーション | |
US7685287B2 (en) | Method and system for layering an infinite request/reply data stream on finite, unidirectional, time-limited transports | |
JP4829896B2 (ja) | データ破壊を避けることによる改善されたネットワーク性能のための方法、システム及び物品 | |
Stewart et al. | Sockets API extensions for the stream control transmission protocol (SCTP) | |
WO2018187135A1 (en) | A proxy for serving internet-of-things (iot) devices | |
US8359405B1 (en) | Performance enhancing proxy and method for enhancing performance | |
JP4658546B2 (ja) | フェイルオーバーイベントをサポートするネットワーク状態オブジェクトの多重オフロード | |
CN1309201C (zh) | 用于网络传输丢失容限的客户端应用控制的方法和*** | |
US20060107168A1 (en) | Method and apparatus for transmitting/receiving virtual block information for multiple segment recovery in data network using transmission control protocol | |
Fall et al. | Disruption/Delay-Tolerant Networking Tutorial |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060224 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20080411 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080808 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20081110 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20090515 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20090611 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120619 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120619 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130619 Year of fee payment: 4 |
|
LAPS | Cancellation because of no payment of annual fees |