JP2004030612A - オフロードされたネットワークスタックの状態オブジェクトをアップロードする方法及びそれを同期する方法 - Google Patents

オフロードされたネットワークスタックの状態オブジェクトをアップロードする方法及びそれを同期する方法 Download PDF

Info

Publication number
JP2004030612A
JP2004030612A JP2003125928A JP2003125928A JP2004030612A JP 2004030612 A JP2004030612 A JP 2004030612A JP 2003125928 A JP2003125928 A JP 2003125928A JP 2003125928 A JP2003125928 A JP 2003125928A JP 2004030612 A JP2004030612 A JP 2004030612A
Authority
JP
Japan
Prior art keywords
state
layer
offload
statistics
initial
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.)
Granted
Application number
JP2003125928A
Other languages
English (en)
Other versions
JP4638658B2 (ja
JP2004030612A5 (ja
Inventor
James Pinkerton
ジェームズ ピンカートン
Abolade Gbadegesin
アボラデ グバデゲシン
Sanjay Kaniyar
サンジャイ カニヤー
Nk Srinivas
エヌケー スリニバス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2004030612A publication Critical patent/JP2004030612A/ja
Publication of JP2004030612A5 publication Critical patent/JP2004030612A5/ja
Application granted granted Critical
Publication of JP4638658B2 publication Critical patent/JP4638658B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/10Streamlined, light-weight or high-speed protocols, e.g. express transfer protocol [XTP] or byte stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/161Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/166IP fragmentation; TCP segmentation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/30Definitions, standards or architectural aspects of layered protocol stacks
    • H04L69/32Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Computer And Data Communications (AREA)
  • Information Transfer Between Computers (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
  • Communication Control (AREA)

Abstract

【課題】ホストのネットワークスタックと周辺機器との間で、オフロードされたネットワークスタックコネクションを同期及びアップロードする方法を提供する。
【解決手段】定数、ホストによって処理されるキャッシュされた変数、及び機器によって処理される委託変数に分類される状態変数を含む、スタック202の各層の状態オブジェクトが機器204に送られる。ネットワークスタック202と周辺機器204によって更新すべき状態を明確に分割する。例えば、統計は、ホスト、機器、又はホストと機器によって追跡される。ホストと周辺機器の両方によって追跡された統計を重複のない部分に分割し、組み合わせて統計を得る。アップロードが開始されると、機器は不変の状態に達し、委託された状態をスタックに渡す。スタック202の各層は各自の委託された状態の管理権を得、機器204のリソースが解放される。
【選択図】    図2

Description

【0001】
【発明の属する技術分野】
本発明は、一般には、コンピュータシステムの効率、速度、及び/又はスループットを高める、オフロードされたネットワークスタックの状態オブジェクトをアップロードする方法及びそれを同期する方法に関する。より詳細には、特定のハードウェアコンポーネントにオフロードされた、通例はホストプロセッサによって行われるコンピューティングタスクを同期し、アップロードする方法に係る、オフロードされたネットワークスタックの状態オブジェクトをアップロードする方法、オフロードされたネットワークスタックの状態オブジェクト及び少なくとも1つの関連付けられたプロトコルをアップロードする方法、オフロードされたネットワークスタックの状態オブジェクトを同期する方法、リソースを節減する方法、オフロードされたネットワークスタックについての統計を得る方法及び記録媒体に関する。
【0002】
【従来の技術】
オペレーティングシステム、アプリケーションソフトウェア、ネットワーキング、ネットワーク通信などの複雑性と高度化は、劇的な速度で高まり続けている。複雑性と高度化の結果の1つは、アプリケーション及びシステムの機能性の向上である。このように機能性が増した結果、しばしば、増大したシステム及びアプリケーション機能を実行するためにCPUが行わなければならない追加的な動作に起因するCPUオーバーヘッドの増大が生じる。
【0003】
CPUオーバーヘッドの増大が直ちに明白になる領域の1つは、高い処理能力(帯域幅;bandwidth)の媒体における発展によりネットワーク速度が増しているネットワーク型アプリケーションの領域である。ネットワーク速度は、多くの場合、ホストコンピュータのCPUのプロセッサ速度とメモリの処理能力に匹敵し、次第にそれらを上回りつつある。こうしたネットワーク型アプリケーションはさらに、Windows(登録商標)オペレーティングシステムで使用される7階層ISOモデルあるいは階層化モデルなど、大半のオペレーティングシステムで用いられる階層化アーキテクチャのためにホストプロセッサに負担をかける。よく知られるように、このようなモデルは、ネットワークへの物理コネクション(connection)とエンドユーザアプリケーションとの間のデータフローを記述するのに使用される。データビットをネットワークケーブルに乗せるなどの最も基本的な機能は下層で行われ、一方アプリケーションの詳細に対応する機能は上層で行われる。基本的に、各層の目的は次に高い層にサービスを提供し、1つ上の層を実際のサービスの実装方式の詳細から隠蔽することである。層は、各層がもう一方のコンピュータ上の同じ層と通信していると認識するような方式で抽象化されている。
【0004】
データパケットが層間を進む際にデータパケットに行われる各種の機能は、ソフトウェア集約型であり、しばしば相当量のCPUプロセッサリソースとメモリリソースを必要とする。例えば、様々な層でパケットに行われる特定の機能はきわめてCPU集約型であり、このような機能には、パケットのチェックサムの計算及び検証、データの暗号化及び解読(例えばSSL(Secure Socket Layer)暗号化やIP(Internet Protocol)セキュリティ暗号化)、メッセージダイジェストの計算、TCP(Transmission Control Protocol)のセグメント化、TCPの再送及び肯定応答(ACK)の処理、Dosアタック(denial of services attacks)から防御するためのパケットフィルタリング、及びユーザデータグラムプロトコル(UDP)パケットのフラグメント化などがある。こうした各機能を行うと、結果的なCPUに対する要求が、コンピュータシステム全体のスループット及びパフォーマンスに大きく影響する可能性がある。
【0005】
CPUリソースに対する要求は増しているが、ネットワークインタフェースカード(NIC)などのコンピュータハードウェアの周辺機器の能力とスループットも高まっている。こうした周辺機器はしばしば、本来はCPUによって行われるタスクと機能の多くを行うことができる専用のプロセッサとメモリを備える。
【0006】
コンピュータ業界はこの能力を認識し、以前はCPUで行っていたCPU集約型のタスクと機能をオフロード(offload)する方法を開発した。例えば、Anand他による特許(特許文献1参照)、2000年9月7日付け出願の「Method and Computer Program Product for Offloading Processing Tasks from Software to Hardware」という名称の特許出願、及び2000年11月29日付け出願の「Method and Computer Program Product for Offloading Processing Tasks from Software to Hardware」という名称の特許出願は、周辺機器に照会を行い、集約型のタスクと機能を行うことが可能な周辺機器に、特定のプロセッサタスクをオフロードする解決法を提供する。通例オフロードされる特定のタスクには、TCP(伝送制御プロトコル)及び/又はIP(インターネットプロトコル)のチェックサムの計算、LSO(large send offload)などのTCPのセグメント化、及びセキュアインターネットプロトコル(IPSEC)の暗号化及び解読などのタスクが含まれる。
【0007】
【特許文献1】
米国特許第6,141,705号明細書
【0008】
【発明が解決しようとする課題】
これらのオフロード機構は、ネットワークスタックに最少数の変更を行わなければならないという二次的な要件がある点で制限されている。この二次的要件の結果、周辺機器に到達することが出来ないオフロードタスク及び機能により、ネットワークスタック全体がトラバース(traverse)されるため、オフロードが長いコードパスを有するという別の制限が生じる。さらなる制限はネットワークスタックとの統合に欠けることである。ネットワークスタックが周辺機器に照会を行う又はパラメータを設定するための、明確に定義されたインタフェース、あるいは周辺機器がネットワークスタックに能力の通知又は変更を知らせるための、インタフェースは存在しない。例えば、LSO要求の処理中にルートが変わった場合、フォールバック機構は、スタックがタイムアウトを待ち、LSO要求を再送することである。
【0009】
周辺機器の製造者が試みた別の手法は、TCPコネクション全体をコアスタックからネットワークインタフェースカード(NIC)にオフロードすることである。この手法では、独自のインタフェースを使用することによりプロトコルスタック全体をバイパスし、また周辺機器がTCPメッセージ、IP(インターネットプロトコル)メッセージ、ICMP(インターネット制御メッセージプロトコル)メッセージ、DNS(ドメイン名サーバ)メッセージ、及びRIP(Routing Information Protocol)メッセージすべてを処理することを必要とするため、NICですべてを処理することが必要とされる。さらに、この手法はマルチホーム環境に対応せず、またホストのオペレーティングシステムのネットワーク管理ユーティリティとうまく一体化しない。一旦状態が変化すると、オフロードされたコネクションが容易に機能しなくなる可能性がある。
【0010】
本発明は、このような課題に鑑みてなされたもので、その目的とするところは、ホストのネットワークスタックと周辺機器との間で、オフロードされたネットワークスタックコネクションを効率的に同期及びアップロードすることができる、オフロードされたネットワークスタックの状態オブジェクトをアップロードする方法及びそれを同期する方法を提供することにある。
【0011】
【課題を解決するための手段】
本発明は、TCPベースのプロトコルスタックなどのネットワークスタックコネクションをオフロードする方法を提供する。通常は複数のソフトウェアレイヤを有するNDIS(ネットワークドライバインタフェース仕様)パスを通じて周辺機器に送られるデータを、スイッチ層から周辺機器へ通じるパスにオフロードする。ネットワークスタックとプロセッサとの厳密な同期を維持する。スタックをオフロードする要求は、NDISパスを通じて周辺機器に送られる。この要求はリソース要件のリストを含んでおり、周辺機器はリソースの割り振りに必要な情報を得る。NDISパスの各層は、各自のリソース要件をリストに追加する。周辺機器が要求を受け入れる場合、周辺機器はリソースを割り振り、ソフトウェア層が周辺機器と通信することができるように各ソフトウェア層にオフロードハンドルを送る。
【0012】
周辺機器によるオフロードの受け入れがソフトウェア層に伝えられると、各ソフトウェア層の状態を周辺機器に送る。あるいはオフロード要求とともに状態を送り、状態の変更だけを周辺機器に送る。各状態は状態変数を備え、各状態変数は、不変変数、キャッシュされた変数、又は委託変数に分類される。不変変数は、プロトコルスタックがオフロードされている時間中に変化しない。キャッシュ変数はCPUによって扱われ、委託変数は周辺機器によって扱われる。
【0013】
本発明は、オフロードされたネットワークコネクションを周辺機器からホストにアップロードする方法も提供する。アップロードは、周辺機器又はスイッチ層によって開始される。アップロードが開始されると、周辺機器はすべての未処理の要求を完了し、委託された状態をスイッチ層に渡す。委託された状態がホストによって受け付けられると、周辺機器での状態のリソースが解放される。
【0014】
オフロード又はアップロードの移行中に、更新(例えばARP(Address Resolution Protocol)の更新やRIPの更新)が到着する可能性がある。周辺機器で複数の更新メッセージを受信した場合は、通し番号を使用して最も新しい更新メッセージを使用することを保証し、周辺機器は古いデータを使用しない。
【0015】
添付図面を参照して進める以下の例示的実施形態の詳細な説明から、本発明のさらなる特徴及び利点が明らかになろう。
【0016】
【発明の実施の形態】
以下、図面を参照して本発明の実施形態を詳細に説明する。特許請求の範囲に本発明の特徴を具体的に述べるが、本発明とその目的及び利点は添付図面と合わせて解釈する以下の詳細な説明により最も正しく理解することができる。
【0017】
同様の要素を同様の参照符号で示す複数の図面に、適切なコンピューティング環境で実施した本発明を示している。必須ではないが、本発明はパーソナルコンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令との一般的な関連で説明する。一般に、プログラムモジュールには、特定タスクを行うか、あるいは特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。さらに、当業者は、本発明は、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベース又はプログラム可能な家庭用電化製品、ネットワークPC(personal computer)、ミニコンピュータ、メインフレームコンピュータ、ネットワーク周辺機器(例えばネットワークプリンタ)などを含む他のコンピュータシステム構成で実施することが可能であることを認識されよう。本発明は、通信ネットワークを通じてリンクされたリモートの処理装置によってタスクを行う分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールはローカル及びリモート両方のメモリ記憶装置に置くことができる。
【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 Channel Architecture)バス、EISA(Enhanced ISA)バス、VESA(Video ElectronicsStandards Associate)ローカルバス、NC−NUMA(No Cache Non−Uniform Memory Access)アーキテクチャバス、CC−NUMA(Cache−Coherent Non−Uniform Memory Access)アーキテクチャバス、及びメザニンバスとも称されるPCI(Peripheral Component Interconnects)バスが含まれる。
【0022】
コンピュータ110は通例各種のコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ110がアクセスすることができる任意の利用可能媒体でよく、揮発性及び不揮発性の媒体、リムーバル及びノンリムーバル媒体を含む。これに限定しないが、例としてコンピュータ可読媒体は、コンピュータ記憶媒体及び通信媒体を含むことができる。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、又はその他のデータなどの情報を記憶するための任意の方法又は技術に実現された揮発性及び不揮発性の媒体、リムーバル及びノンリムーバルの媒体が含まれる。コンピュータ記憶媒体には、これらに限定しないが、RAM(random access memory)、ROM(read only member)、EEPROM(electrically erasable PROM)、フラッシュメモリ又は他のメモリ技術、CD(compact disc [disk])−ROM、デジタル多用途ディスク(DVD)又は他の光ディスク記憶、磁気カセット、磁気テープ、磁気ディスク記憶又は他の磁気記憶装置、あるいは所望の情報の記憶に用いることができ、コンピュータ110によるアクセスが可能な任意の他の媒体が含まれる。通信媒体は、通例、搬送波又は他の搬送機構などの、変調データ信号にコンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータを統合し、任意の情報伝達媒体を含む。用語「変調データ信号」とは、信号中に情報を符号化するような方式でその特性の1つ又は複数を設定又は変化させた信号を意味する。例として、通信媒体には、有線ネットワーク又は直接配線コネクションなどの有線媒体と、音響、RF(radio frequencies)、赤外線、及び他の無線媒体などの無線媒体が含まれるが、これらに限定しない。上記の媒体のいずれの組合せもコンピュータ可読媒体の範囲に含めるべきである。
【0023】
システムメモリ130には、ROM131及びRAM132など、揮発性及び/又は不揮発性メモリの形態のコンピュータ記憶媒体が含まれる。起動時などにコンピュータ110内の要素間の情報伝達を助ける基本ルーチンを含むBIOS133(Basic Input/Output System)は、通例ROM131に格納される。RAM132は通例、プロセッサ120から即座にアクセス可能な、かつ/又は現在プロセッサ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】
LANネットワーキング環境で使用する場合、パーソナルコンピュータ110はネットワークインタフェースあるいはアダプタ(例えばネットワークインタフェースカード(NIC))170を通じてLAN171に接続される。WANネットワーキング環境で使用する場合、コンピュータ110は通例、インターネットなどのWAN173を通じて通信を確立するためのモデム172又はその他の手段を含む。モデム172は内蔵型でも外付け型でもよく、ユーザ入力インタフェース160又は他の適切な機構を介してシステムバス121に接続することができる。ネットワーク環境では、パーソナルコンピュータ110との関連で図示したプログラムモジュール、又はその一部をリモートのメモリ記憶装置に格納することができる。これに限定しないが、例として図1ではリモートアプリケーションプログラム185がメモリ記憶装置181に常駐している。図のネットワークコネクションは例示的なものであり、コンピュータ間に通信リンクを確立する他の手段を使用できることは理解されよう。
【0029】
以下の説明では、特に指示しない限りは、1つ又は複数のコンピュータによって行われる動作及びオペレーションの記号的表現を参照して本発明を説明する。このため、個所によってはコンピュータによって実行すると述べるそのような動作及びオペレーションには、コンピュータのプロセッサによる、構造化された形でデータを表す電気信号の操作が含まれることは理解されよう。この操作ではデータを変形するか、又はコンピュータのメモリシステム中の位置にデータを保持するが、それにより当業者に周知の方式でコンピュータの動作が再設定されるか、あるいはその他の形で変更される。データが保持されるデータ構造は、そのデータの形式によって定義される特定のプロパティを持つメモリの物理的位置である。ただし、本発明は前述の状況で説明するが、それは制限的なものではなく、当業者は、下記の各種の動作及びオペレーションはハードウェアに実装することも可能であることを理解されよう。
【0030】
図2に、本発明のネットワーキングモデル及びコンポーネントを構成するコンポーネントの一部の相互関係を示す。通常の動作中は、ネットワーク上の他のデバイス及びアプリケーションにメッセージを送信し、他のデバイス及びアプリケーションからメッセージを受信する周辺機器204に、アプリケーション200によりネットワークスタック202を通じてネットワーク化メッセージが送られる。ネットワークスタック202は、1つ又は複数の中間ソフトウェア層206を含む。アプリケーション200から送られたデータは中間ソフトウェア層206を通過し、ここでデータのパッケージング、高信頼データ送信、データの暗号化、及びメッセージダイジェストの計算といった特定の操作をデータに行うことができる。
【0031】
スイッチ208は、中間ソフトウェア層206のためのネットワークスタック動作の実行からプロセッサ120をオフロードするのに使用される。図にはスイッチ208を分離して示しているが、スイッチ208はネットワークスタック202の中間層の最上層に統合してもよいことに留意されたい。周辺機器204がネットワークスタック動作を行うために、チムニー(chimney)210を介して周辺機器204にデータが送られる。この階層では、中間ソフトウェア層は排他的に(exclusively)ホスト又は周辺機器に常駐しなくともよく、中間層の任意の層を、完全にオフロードする、ホストに留める、あるいはその両方の組合せ(例えば1つ又は複数の特定のコネクションをオフロードするなど)がいずれも可能である。さらに、チムニー同士を階層化してもよい(例えばIPSECのチムニーをTCPチムニーの上に重ねることができる)。コネクションは、高信頼データ転送と低信頼データ転送、及びユニキャストのデータ転送とマルチキャストのデータ転送の任意の組合せでよい。ある中間層がホストに留まる場合、ホストは周辺機器204中のキャッシュ変数を更新する(下記で説明する)。例えば、コネクションのトランスポート制御ブロック(TCB)状態エントリをトランスポート層のためにオフロードし、ネットワーク層のルートキャッシュエントリ(RCE)を周辺機器204にオフロードすることができる。スイッチ208は、オフロードされたTCBのためにチムニー210を通じてトラフィックを送るのと同時に、同じRCEを共有するネットワークスタック202を通じて別のTCBにトラフィックを送り続ける。
【0032】
スイッチ208は、中間層206にオフロード要求を送ることによりオフロードを開始する。オフロード要求は、周辺機器204がそのコネクションをうまくオフロードできるかどうかを判定するのを助けるリソース情報を含んでいる。各中間層206は、オフロード要求を拒絶するか、又はオフロード要求にリソース情報を追加して、ネットワークスタック202で隣接するソフトウェア層にオフロード要求を送る。周辺機器204はオフロード要求を受け取ると、そのコネクションをオフロードするのに利用できるリソースを持っているかどうかを計算する。周辺機器204は、オフロードが可能でない場合はオフロード要求を拒絶する。そうでない場合、周辺機器204はオフロード要求を受け入れ、コネクションのためのリソースを割り振る。周辺機器204は、パラメータの連結リストを含む完了メッセージを中間ソフトウェア層206に送ることによりオフロード要求を完了する。パラメータの連結リストは中間ソフトウェア層206とスイッチ208に情報を提供して、中間ソフトウェア層206とスイッチ208が周辺機器と通信できるようにする。各中間ソフトウェア層206は、パラメータの連結リストからその層の情報を取り除く。
【0033】
中間層206は、オフロードの完了メッセージを受け取るとその層の状態を周辺機器204に渡す。各状態は、3タイプの変数CONST、CACHED、及びDELEGATEDを有することができる。状態は、3タイプの変数すべてか、3タイプの変数のサブセットを有することができる。CONST変数は、オフロードされたコネクションの寿命中に変わることのない定数である。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は、必要な際(例えば統計のため)には、周辺機器204にDELEGATE変数を照会する。ホストプロセッサ120は、また診断のためにCONST又はCACHED変数を照会することができる。状態を3つのカテゴリに分けることにより、ネットワークスタック202がチムニー210と明確に共存することが可能になる。状態はオフロード要求に含めてもよいことに留意されたい。これは、状態が委託状態変数を含まないか、又は最初のオフロード要求からそのオフロード要求の完了までに変化しない委託状態変数を含む場合に行うことができる。
【0034】
周辺機器204又はホストが、オフロードされたコネクションをいつアップロードするかを決定する。アップロードは、周辺機器204又はスイッチ208によって開始される。アップロードが開始されると、周辺機器204はすべての未処理の要求を適切な状態で完了し、最上位の中間層の委託された状態をスイッチ208に渡す。スイッチ208は、以後の送信要求をキューに入れ、受信バッファをポスト(post)することを停止する。スイッチ208は、最上位の中間層に委託された状態を管理するように命令する。最上位の中間層は委託状態の管理権を得、スイッチ208に完了メッセージを送る。スイッチ208は完了メッセージを受け取ると、周辺機器204へアップロードを確認し、これにより周辺機器204はもはや使用されていないリソースを解放することができる。
【0035】
最上位の中間層は、その層が委託された状態の管理権を得るまでは、オフロードされたコネクションに対する着信データパケットを処理のために周辺機器204に転送することに留意されたい。周辺機器204が委託された状態をスイッチ208に渡した時から、最上位の中間層が委託された状態の管理権を得る時までにデータパケットが到着する可能性がある。周辺機器204は、委託された状態をスイッチ208に渡してしまうと着信データパケットを処理することはできない。周辺機器204は、着信データを受け取ると最上位の中間層にエラーメッセージを送ってアップロードが進行中であることを知らせる。エラーメッセージは、最上位の中間層に、着信データの転送をやめ、その層が委託された状態を受け取るまで以降のデータはバッファに入れるように通知する。あるいは、周辺機器204の付加的なバッファメモリを犠牲にして、着信データを周辺機器204に転送して周辺機器204がデータをバッファに入れることも可能である。
【0036】
中間ソフトウェア層206により複数のコネクションを周辺機器204にオフロードすることが可能である。オフロードのために中間ソフトウェア層の状態オブジェクトを参照する、より上の層の状態オブジェクト(すなわち中間ソフトウェア層206より上の層の状態オブジェクト)の数の、参照カウンタが、中間ソフトウェア層206によって保持される。本明細書で使用する状態オブジェクトとは、ここで用いるCONST、CACHED、又はDELEGATEDと分類される特定層の状態変数の集合である。ある中間層のオフロードされた状態オブジェクトにその上の層による参照がない場合、その中間層206は周辺機器204にメッセージを送って、その中間層の状態オブジェクトをアップロードさせ、中間層206へ委託された状態変数を送らせる。周辺機器204は中間層206の状態オブジェクトを削除し、中間層206はスイッチ208に完了メッセージを送る。
【0037】
全般的な概念を説明したので、次いで図3を参照して一実施形態において本発明の詳細を説明する。この実施形態では、周辺機器204はNIC170であり、スイッチ208はトランスポート層インタフェーススイッチ(TLI)306であり、ネットワークスタック202はトランスポート層300、ネットワーク層302、及びフレーミング層304を備える。ネットワーク層302はパス(path)層としても知られ、フレーミング層304は隣接層としても知られる。
【0038】
動作中に、ネットワーク化メッセージは、アプリケーション200によりネットワークスタック202を通じてNIC170に送られる。アプリケーション200から送られたデータはTLIスイッチ306を通過し、スイッチ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)又はユーザデータグラムプロトコル(UDP)ベースのプロトコルスタックをオフロードすることができる。さらに、本発明は、インターネットスモールコンピュータシステムインタフェース(iSCSI)、ネットワークファイルシステム(NFS)、あるいは共通インタフェースファイルシステム(CIFS)などのより高機能なプロトコルのオフロードにも使用することができる。
【0040】
オフロードは多くの理由で行われる。これらに限定しないが、例として理由の一部を以下に挙げる。システム管理者は、オフロードする特定のサービスを選択することができる。(バイト数又はパケット数から見た)コネクションのトラフィックが相当量のリソースを消費している場合は、特定のコネクションをオフロードすることができる。複数タイプのサービスをオフロードすることができる。例えば、IPSECなどのセキュリティプロトコルをオフロードすることができる。オフロードはポリシーによって操作することができる。例えば、管理者は、ある組織内からのすべてのコネクションを最初にオフロードするというポリシーを備えることができる。使用中のシステムリソース(例えばCPU利用、データキャッシュ使用、ページテーブルキャッシュ使用、メモリの処理能力)により、ホストプロセッサがコネクションをオフロードするようにすることができる。
【0041】
図4に、TCPコネクションをオフロードする際にとるステップを表す。3段階のプロセスを使用している。一般に、3段階のプロセスは、TCPコネクションのオフロードに必要なリソースの割り振り、各層300、302、304、306へのハンドルの提供、及びNIC170への各層300、302、304、306の状態のオフロードである。オフロードの移行中は、TLIスイッチ306はアプリケーション200から送られるすべてのメッセージをバッファに入れる。あるいは、トランスポート層300がデータをバッファに入れる。オフロードが完了すると、オフロードデータの送信と同じ機構を使用してバッファ中のデータをNIC170に転送する。オフロードの移行中に着信パケットを受信すると、NIC170は、トランスポート層の委託された状態がNIC170に渡されるまで層300、302、304、306を通じてデータを上に移し続ける。
【0042】
TLIスイッチ306は、トランスポート層300にオフロード要求を送ることによりオフロードを開始する(ライン400)。オフロード要求には、次の層のローカル状態へのポインタ(例えばトランスポート層300のTCPポインタ、ネットワーク層302のRCEポインタ、フレーミング層304のARPテーブルポインタ、NDISミニドライバ310のNDISミニポートポインタ)、オフロードのタイプ(例えばTLIスイッチ306のTCP、ネットワーク層302のIPv6など)、及びNIC170がTCPコネクションを正常にオフロードできるかどうかを判断するのを助けるリソース情報が含まれる。TLIスイッチ306は、NIC170にディスパッチテーブルも提供することができる。トランスポート層300はオフロード要求を拒絶するか、又はTLIスイッチリソース情報にTCPリソース情報を追加してオフロード要求をネットワーク層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は、宛先のMAC(media access control)アドレスが変わるか、あるいはカプセル化のタイプが変わった場合に容易に更新できるように、フレーミング層のオフロードハンドルとディスパッチテーブルをそのARPテーブルエントリ(ATE)に格納しておく。そしてフレーミング層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】
トランスポート層300は、トランスポート状態がNIC170にオフロードされていない場合でも、入ってくる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変数は、オフロードされたコネクションの寿命中に変化することのない定数である。CONST変数は、コネクションが終了すると層に読み戻される。ホストプロセッサ120はCACHED変数の所有権を保持し、ホストプロセッサ120におけるCACHED変数の変更がいずれもNIC170で更新されることを保証する。この結果、ホストはCACHED変数を書くが、(システム診断で必要とされない限り)読み戻すことはない。ホストプロセッサ120は、DELEGATED変数の所有権をNIC170に移す。DELEGATED変数は、オフロードが発生した時に1回書かれ、オフロードが終了すると読み戻される。DELEGATED変数を転送して戻すだけにすることにより、コネクションをホストに転送するオーバーヘッドが最小に抑えられる。ホストプロセッサ120は、(例えば統計のために)必要な際にはNIC170にDELEGATED変数を照会する。
【0053】
トランスポート層300のCONST変数には、宛先ポート、送信元ポート、「気付(care−of)」アドレスが変わる可能性のあるMobile IPの事例があることを示すフラグ、SEND及びRECVウィンドウのスケール係数、及びネットワーク層302のNICハンドルが含まれる。トランスポート層300のCACHED変数は、TCP変数及びIP変数である。TCP変数には、有効MSS、NIC170により受信指示内にコピーすべきバイト数、Naglingをオフにするフラグ、Keep−Aliveが必要であることを示すフラグ、及びKeep−Aliveの設定(すなわち間隔、プローブ回数、及びデルタ)が含まれる。IP変数は、TOS及びTTLを含む。DELEGATED変数には、現在のTCP状態、次のRECVの通し番号(すなわちRCV.NEXT)、受信ウィンドウサイズ(RCV.WND)、肯定応答のない最初のデータの通し番号(SND.UNA)、次のSENDの通し番号(SND.NEXT)、これまで送られた最大の通し番号(SND.MAX)、最大の送信ウィンドウ(MAX_WIN)、現在の輻輳ウィンドウ(CWIN)、スロースタートの閾値(SSTHRESH)、平滑化したRTT(8*A)、Delta(8*D)、現在の再送回数、次回の再送の残り時間、及びエコーすべきタイムスタンプが含まれる。
【0054】
ネットワーク層302のCONST変数には、宛先IPアドレス(IPv4あるいはIPv6)、及び送信元IPアドレス(IPv4あるいはIPv6)が含まれる。ネットワーク層302のCACHED変数には、フレーミング層304のNICハンドルが含まれる。ネットワーク層302のDELEGATED変数には、IP Packet 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)を割り当てる役割を担う。IPIDは、インタフェースごとか、又は層の状態オブジェクトごとにオフロードされる。NIC170には、IP IDネーム空間の一部が割り当てられる。一実施形態では、NIC170には全IP IDネーム空間の半分が割り当てられ、NIC170にネットワーク状態を渡す際に使用するIPパケットIDの開始値が与えられる。NIC170は次の式を使用して、それが送るIPパケットにIP IDを生成する。
【0057】
Cur_IPID=[(Start_IPID_For_This_Path)+(Counter_For_This_Path)mod32K]mod64K
Counter_For_This_Path=Counter_For_This_Path+1
オフロードされたコネクションがアップロードされるか、あるいは無効になると、NIC170は、それが使用することになっていた次のIPID値をネットワーク層に転送して、行われる次のオフロードのために格納し、ホストプロセッサ120はそれに割り当てられたIP IDのネーム空間の部分を引き続き使用する。ホストプロセッサ120はIP IDのネーム空間を完全に使用することができるが、オフロードが行われるたびにカウンタをセットしなれければならない。
【0058】
NIC170は、データをその受信順序で受信バッファに入れ、オフロードされたコネクションのためにポストした順序でアプリケーションバッファを埋める。多くのアプリケーションは、受信バッファをポストする前に受信指示を待つ。一実施形態では、NIC170は、あるコネクションに対してデータが到着し、アプリケーション受信バッファがポストされていない場合に使用するグローバルなバッファプールを備える。このグローバルなバッファプールはオフロードされた複数のコネクションで使用され、次を実施するのに使用することができる。1)順序外れのTCP伝送の処理、2)IPデータグラムのデフラグメント、3)アプリケーションがゼロコピーアルゴリズムには小さすぎるバッファにポストしている場合の、ゼロコピーアルゴリズムではなくバッファコピーアルゴリズム。あるいは、リソースの効率的な使用が問題とならない場合にはコネクションごとのバッファプールを使用することもできる。ただし、グローバルなバッファプールは、NICがコネクションごとのバッファプールをサポートしない場合に、あるいはシステムリソースの不足(例えばメモリにアプリケーションバッファを留める(pin)だけのリソースがない場合)のために使用される。
【0059】
次いで図5A〜5Dを参照すると、NIC170は、オフロードが発生するとそのオフロードを表す逆ツリー500を有する。これらの図で、点線はNIC170によって割り当てられた新しい状態を表す。図5Aで、NIC170は、TCPエントリ506に結合されたルートキャッシュエントリ504に結合されたAPRエントリ502を有する。例えばすべてのトラフィックがルータに向かう場合は、次のホップは常に同じARPエントリ502になる。次のTCPコネクションのオフロードにルートキャッシュエントリ504を使用する場合は、唯一の新しいリソースは新しくオフロードされたTCBになる。したがって、ネットワークスタック202の下方でオフロードが開始されると、すでにその状態をオフロードした中間ソフトウェア層(例えばネットワーク層302及びフレーミング層304)は、単に前回のオフロード要求時に割り当てられたNICで生成されたオフロードハンドルを挿入する。NIC170は、新しいリソース(例えばTCPエントリ508)を割り振り、新しいリソースのオフロードハンドルをネットワークスタック202の上方に送り返すだけでよい。この結果、逆ツリー500は、ルートキャッシュエントリ504に結合されたTCPエントリ508を有することになる(図5B参照)。この手法はNICリソースを節減し、オフロードの速度を上げる。さらに、キャッシュされた変数状態が変化した場合は単一の構造だけを更新すればよい。チムニー中の各種のソフトウェア層のすべての状態が単一のエントリとしてオフロードされた場合は、最上位のソフトウェア層より下にある状態の更新にはいずれも複数回の更新が必要となる。
【0060】
図5Cは、より複雑な構成の逆ツリー500を示す。ARPテーブルエントリ502を通る2つのルートキャッシュエントリ504及び510がある。TCPコネクション506及び508はルートキャッシュエントリ504を利用する。TCPコネクション512及び514はルートキャッシュエントリ510を参照する。ARPの更新が行われた場合(例えばマルチホームサーバのインタフェースがフェールオーバーした場合)は、エントリ502だけを更新すればよい。これにより、NIC170に1回の更新を必要とするだけで、可能性としては何千又は何十万のコネクションを新しいインタフェースにフェールオーバーさせることができる。図5Dは、ルート更新が行われた後に単一の逆ツリー500に併合した2つの別々の逆ツリー(エントリ502〜508及びエントリ510〜516)を示す。ルートの更新前には、ルートキャッシュエントリ510への次のホップARPエントリはARPテーブルエントリ516である。ルートの更新後は、次のホップARPテーブルエントリはARPテーブルエントリ502になる。このように逆ツリーを使用することにより、ネットワークスタックの状態を単一のエントリとしてオフロードした場合の何千又は何万回の更新ではなく、NIC170に対する1回のトランザクションとしてルート更新を処理することが可能になる。
【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アドレス、及びプロトコルタイプにハッシング関数を実行することにより、着信データパケットをどちらのパスに送るかを判定する。ハッシュがオフロードされたコネクションのパラメータと一致する(すなわちハッシュバケットのチェーンをウォーク(walk)し、すべてのコネクションのタプルの正確な一致がある)場合は、チムニー608を使用する。ハッシュがハッシュインデックスと一致しない場合は、ネットワークスタック202を通るオフロードされたのでないパスを使用する。キャッシュされた状態を更新する制御メッセージはホストによって処理される。この結果、NIC170は、ICMP、DNS、及びRIPメッセージなど、オフロードされたコネクションの外部にある制御メッセージのいずれも処理せずに済む。
【0063】
本発明は、Netstatなど既存のツールを使用して統計を得て、ホストにおけるすべてのコネクション、プロトコルタイプ、ローカル及びリモートのポートとIPアドレスのバインディング、コネクションの状態、プロセスIDなどのコネクションパラメータを含む各種の情報を取り出す能力をユーザに提供する。本発明では、統計は層単位、又は層の状態オブジェクト単位で収集される。層内ではその層の状態オブジェクトをグループ化して、複数の層状態オブジェクトにわたる統計を集めることができる。例えば、ネットワーク層の統計は、使用されるプロトコル(例えばIPv4やIPv6)ごとの統計となるように分割することができる。CONST及びCACHEDの状態変数と関連付けられた統計はホストによって提供され、DELEGATED状態変数と関連付けられた統計は周辺機器204によって提供される。照会を行う際は、DELEGATED状態変数と関連付けられた統計をCONST及びCACHED状態変数と関連付けられた統計に追加する。
【0064】
また、パケット数など、ホスト層の状態と周辺機器層の状態のグループ化全体にわたって総計される統計クラスもある。別のタイプの統計は、システム中の機能の状態の一覧(例えばシステム中のすべてのTCBの状態の一覧)である。TCBの統計は、ホストによって追跡された統計と周辺機器によって追跡された統計を組み合わせたものである。同様に、パケット数の統計は、ホスト層の状態の統計と周辺機器層の状態の統計の合計である。
【0065】
TCP MIB(管理情報ベース)の場合のホストと周辺機器204の分割の一例を下の表1に示し、IPv4 MIBの統計を下の表2に示す。2つの表中、1列目はフィールドであり、2列目はその統計を追跡する役割を担うのが周辺機器かホストネットワークスタックかを示し、3番目のフィールドはそのフィールドの追跡方式を示している。周辺機器が担当する統計は、層の状態オブジェクト単位か層単位で追跡される。ここで使用する層単位とは、層ごと、周辺機器ごと、プロトコルごとに統計を追跡することを意味する。ただし、ホストの状態と周辺機器の状態から統計を合成する際には、一般にはそれがプロトコル単位で提示されることに留意されたい。ホストネットワークスタックが周辺機器に照会せずに生成できる統計を「スタックが完全な情報を有する」又は「スタックだけによって実行」と分類する。「スタックが完全な情報を有する」カテゴリは、周辺機器がその統計について知っているがその統計を追跡しないことを意味する。「スタックだけによって実行」される統計は、周辺機器がその統計を知らないことを意味する。アダプタ統計は正規のNDISインタフェースを通じて照会する。アダプタ統計には、送信バイト、受信バイトなどの変数が含まれる。
【0066】
【表1】
Figure 2004030612
【0067】
ts_RtoAlgorithmは、応答のないオクテットの再送に使用されるタイムアウト値を決定するのに用いるアルゴリズムの値である。ts_Rto_Minは、ミリ秒単位で測定される再送のタイムアウトにTCP実装で許される最小値の値である。ts_Rto_Maxは、ミリ秒単位で測定される再送のタイムアウトに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かCLOSED−WAITであるTCPコネクションの数である。ts_InSegsは、エラーとして受信したセグメントを含む受信セグメントの総数である。ts_OutSegsは、現在のコネクションによるセグメントを含むが、再送されたオクテットだけを含むセグメントは除いた送信セグメントの総数である。ts_RetransSegsは、再送されたセグメントの総数である。ts_InErrsは、エラーとして受信されたセグメント(例えば不良のTCPチェックサム)の総数である。ts_OutRstsは、RSTフラグを含む送信TCPセグメントの数である。ts_NumConsは、現在存在するTCPコネクションの総数である。
【0068】
【表2】
Figure 2004030612
【0069】
ipsi_Forwardingは、ホストによって受信されるがホストを宛先としないデータグラムの転送に関してホストがIPルータとして動作するかどうかの指示を提供する値である。ipsi_DefaultTTLは、トランスポート層プロトコルによってTTL値が供給されないときに、そのエンティティを送信元とするデータグラムのIPヘッダのTTL(Time−To−Live)フィールドに挿入されるデフォルト値である。ipsi_InReceivesは、エラーで受信されたものを含む、インタフェースから受信した入力データグラムの総数である。ipsi_InHdrErrorsは、不良のチェックサム、バージョン番号の不一致、他のフォーマットエラー、TTLの超過、IPオプションを処理する際に見つかったエラーなどを含む、IPヘッダ中のエラーのために破棄された入力データグラムの数である。ipsi_AddrErrorsは、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_ReasmOKは、リアセンブリが成功した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フラグメントが多すぎる、順序外れのトラフィックが多すぎる、処理能力外のデータの使用がある、再送が多すぎる、keep−aliveを経過した、セキュリティアソシエーションが無効になり更新されていない、周辺機器に転送中のデータが多すぎるなどの場合にトラフィックの振る舞いがオフロードに適さない場合がある。オフロードされたコネクションをアップロードする他の理由は、リソース問題によるものである。例えば、周辺機器でコネクションの処理を継続するためのリソースが不足する可能性がある。オフロードされたコネクションよりも別のコネクションの優先順位が高く、周辺機器のリソース可用性が閾値以下である際にコネクションをアップロードすることにより、優先順位がより高いコネクションが周辺機器のリソースを使用し続けることが可能になる場合がある。
【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は、それが委託された状態の管理権を得るまで、オフロードされたコネクションに対する着信データパケットを処理のためにNIC170に転送することに留意されたい。NIC170が委託された状態をTLIスイッチ306に渡した(ライン702)時から、トランスポート層300が委託された状態を管理し始める時(ライン706)までにデータパケットが到着する可能性がある。NIC170は、委託された状態をTLIスイッチ306に渡すと、もはや着信データパケットを処理することはできない。NIC170は、アップロードするコネクションへの着信パケットを受信すると、トランスポート層300にエラーメッセージを送ってアップロードが進行中であることを知らせ、着信パケットを破棄することができる。エラーメッセージは、トランスポート層300に着信データの転送を止めるように通知する。一実施形態では、トランスポート層300はそれが委託された状態を受け取るまで、以後のデータをバッファに入れる。
【0075】
中間ソフトウェア層により複数のコネクションを周辺機器にオフロードすることができる。中間ソフトウェア層から周辺機器にオフロードされたコネクションの数の参照カウンタが、中間ソフトウェア層によって保持される。参照カウントがゼロになると、次の中間ソフトウェア層に対してアップロード要求が生成される。これにより次の層の参照カウントがデクリメントされる。次の層の参照カウントがゼロになると、アップロード要求はネットワークスタック202を下へと進む。このプロセスは、ある中間ソフトウェア層の参照カウントがゼロにならないか、又は周辺機器がアップロード要求を受け取るまで繰り返される。ネットワーク層302は、NIC170と関連付けられたオフロードされた状態オブジェクトの数の参照カウントをデクリメントする。参照カウントがゼロになった場合、ネットワーク層302のためにNIC170で割り振られたリソースを使用しているTCBはないことになる。参照カウントがゼロになると、ネットワーク層302はNIC170にメッセージを送って、ネットワーク層302の状態オブジェクトをアップロードさせ、委託されたネットワークの状態変数をネットワーク層302に送らせる(ライン712)。NIC170は状態を削除し、委託されたネットワーク状態変数とNIC170が使うことになっていた次のIPID値とをネットワーク層302に送る(ライン714)。ネットワーク層302はこの情報を格納して、再びコネクションがオフロードされた場合に初期値として使用する。ネットワーク層302はフレーミング層304にもメッセージを送って、フレーミング層304にその参照カウントをデクリメントさせる(ライン716)。
【0076】
フレーミング層304も参照カウントを保持し、ネットワーク層302からのメッセージを受け取るとその参照カウントをデクリメントする。フレーミング層304の参照カウントがゼロになると、フレーミング層はフレーミング層の状態を削除するように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コネクションを使用する。IPSEC層のオフロードは、トランスポート層300が、TLIスイッチのリソース情報にTCPリソース情報を追加してオフロード要求をIPSEC層800に送る(ライン402a)と開始する。IPSEC層800は、TCPリソース情報及びTLIスイッチリソース情報にIPSECリソース要件を追加してネットワーク層302にオフロード要求を送る(ライン802)。リソース要件には、IPSEC層がオフロードしたいセキュリティアソシエーションの数が含まれる。NICがオフロード要求を受け入れる場合、NICはセキュリティアソシエーションを処理するためのリソースを割り振る。ネットワーク層302は、パラメータの連結リストとディスパッチテーブルを含む完了メッセージをトランスポート層300ではなくIPSEC層に送る(ライン804)。
【0079】
IPSEC層800は完了メッセージを受け取ると、IPSEC層の状態が以前にオフロードされていない場合は、インバウンド記述子及びアウトバウンド記述子の一部としてIPSEC層の状態をNIC170に送り、セキュリティアソシエーション中の委託された状態の所有権をNIC170に移す(ライン806)。状態がすでにオフロードされている場合、IPSEC層は参照カウントをインクリメントする。所有権が移されると、NIC170がすべてのパケットの解読及び暗号化を行う。IPSEC層700は、パラメータの連結リスト及びディスパッチテーブルを含む完了メッセージをトランスポート層に送る(ライン414a)。
【0080】
IPSEC層800からNIC170に渡されるCONST状態変数は、パケットを特定のセキュリティアソシエーションに分類するのに必要な情報と、インバウンド及びアウトバウンドのセキュリティアソシエーションに固有の情報とからなる。CONST変数には、送信元及び宛先のポート、プロトコルタイプ、及びセキュリティアソシエーション変数が含まれる。
【0081】
CACHED状態変数は、セキュリティアソシエーションの寿命を決定する要素、及びインバウンド及びアウトバウンドのセキュリティアソシエーションに固有の情報からなる。CACHED変数は、暗号化されたバイトに基づくソフトリミット(例えばバイトカウントでリキー(rekey))及びハードリミット(例えばバイトカウントで停止)、セキュリティアソシエーションを使用できる最大回数についてのソフトリミット(例えば所定のティックにおけるリキー)及びハードリミット(例えば所定のティックにおける停止)、及びセキュリティアソシエーションの使用が可能な最大アイドル時間についてのハードリミット(例えば最大アイドルティック)を含む。NIC170は、これらのソフトリミットとハードリミットに従う。ソフトリミットに達すると、NIC170はホストプロセッサ120に通知する。ハードリミットに達すると、NIC170はセキュリティアソシエーションを破棄する。
【0082】
DELEGATED変数は、実行情報とインバウンド及びアウトバウンドのセキュリティアソシエーションに固有の情報を含む。DELEGATED変数は、セキュリティアソシエーションで暗号化又は解読されたバイト数、セキュリティアソシエーションの寿命、及びセキュリティアソシエーションのアイドル時間を含む。
【0083】
次いで図9を参照すると、周辺機器からホストへのオフロードされたIPSECによるネットワークコネクションのアップロードを示している。以下の説明で、ステップは図7に示した上述のステップと同じであり、繰り返して説明しない。トランスポート層300は、完了メッセージをスイッチ層306に送る前又は後にIPSEC層800にコネクションのアップロードを通知する(ライン710a)。すべてのセキュリティアソシエーションと関連付けられた参照カウントをデクリメントする。ゼロになる参照カウントがない場合、IPSEC層800はトランスポート層300に完了メッセージを送る(ライン724a)。オフロードされているコネクションが特定のセキュリティアソシエーションを使用した最後のコネクションである場合、IPSEC層800は、委託された状態変数をIPSEC層800にアップロードするようにNIC170にメッセージを送る(ライン900)。NIC170は、委託された状態変数をIPSEC層800に戻す(ライン902)。NIC170は、そのセキュリティアソシエーションの使用をやめ、そのセキュリティアソシエーションに属するパケットをスタック202を通じてIPSEC層800に送る。IPSEC層800はNIC170に完了メッセージを送り、NIC170はそのセキュリティアソシエーションに割り振られたリソースを解放する(ライン904)。
【0084】
セキュリティアソシエーションの参照カウントがゼロになる場合、IPSEC層800はネットワーク層302にもメッセージを送ってアップロードされる状態をネットワーク層302に通知する(ライン906)。フレーミング層304がネットワーク層302に完了メッセージを送ると(ライン722)、ネットワーク層302はIPSEC層に完了メッセージを送る(ライン908)。IPSEC層800は、トランスポート層に完了メッセージを送る(ライン724a)。
【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】
本発明の原理を適用できる多くの可能な実施形態に照らすと、図面との関係でここに説明した実施形態は例証的なものに過ぎず、本発明の範囲を制限するものと解釈すべきでないことが認識されよう。例えば、当業者は、ソフトウェアとして示した例証的な実施形態の要素はハードウェアに実装してもよく、その反対も可能であること、あるいは本発明の趣旨から逸脱することなくここに説明した実施形態の構成及び詳細を変更できることを理解されよう。したがって、ここに記載した本発明は、特許請求の範囲及びその均等物の範囲内に該当するすべての実施形態を企図する。
【0090】
【発明の効果】
以上説明したように本発明によれば、ホストのネットワークスタックと周辺機器との間で、オフロードされたネットワークスタックコネクションを効率的に同期及びアップロードすることができる。
【図面の簡単な説明】
【図1】本発明の実施形態の例示的コンピュータシステムを示す概略的なブロック図である。
【図2】本発明の実施形態のネットワークスタックの機能層及びバイパス経路を表すブロック図である。
【図3】本発明の実施形態のNDISパスの機能層及びバイパス経路を表すブロック図である。
【図4】本発明の実施形態のオフロード機構を表すラダー図である。
【図5A】本発明の逆ツリーを表す図である。
【図5B】本発明の実施形態の逆ツリーを表す図である。
【図5C】本発明の実施形態の逆ツリーを表す図である。
【図5D】本発明の実施形態の逆ツリーを表す図である。
【図6】本発明の実施形態のホストコンピュータと周辺機器の同期を表すブロック図である。
【図7】本発明の実施形態のアップロード機構を表すラダー図である。
【図8】本発明の実施形態の教示によるセキュアプロトコルスタックコネクションのオフロード機構を表すラダー図である。
【図9】本発明の実施形態の教示によるセキュアなオフロードされたプロトコルスタックコネクションのアップロード機構を表すラダー図である。
【符号の説明】
100 コンピューティングシステム環境
110、180 コンピュータ
120 プロセッサ
121 システムバス
130 システムメモリ
131 ROM
132 RAM
133 BIOS
134、144 オペレーティングシステム
135、145、185、200 アプリケーションプログラム
136、146 プログラムモジュール
137、147 プログラムデータ
140、150、160 インタフェース
141 ハードディスクドライブ
151 磁気ディスクドライブ
152 磁気ディスク
155 光ディスクドライブ
156 光ディスク
161 ポインティングデバイス
162 キーボード
170 NIC
171 LAN
172 モデム
173 WAN
181 メモリ記憶装置
190 ビデオインタフェース
191 モニタ
195 出力周辺インタフェース
196 プリンタ
197 スピーカ
202 ネットワークスタック
204 周辺機器
206 中間ソフトウェア層
208、306 スイッチ
210、308 チムニー
300 トランスポート層
302 ネットワーク層
304 フレーミング層
310 NDISミニドライバ
314 ハードウェア
500 逆ツリー
502、504、506、508、510、512、514、516 エントリ

Claims (44)

  1. 周辺機器からスイッチ層に至る第1のパスから、前記周辺機器から複数のソフトウェア層及び前記スイッチ層を通過する第2のパスに、オフロードされたネットワークスタックの状態オブジェクトをアップロードする方法であって、前記複数のソフトウェア層は中間層を含み、前記ネットワークスタックの状態オブジェクトは少なくとも1つのキャッシュされた状態及び少なくとも1つの委託された状態を有し、
    前記少なくとも1つの委託された状態を受け取った後に前記少なくとも1つの委託された状態を管理するように前記中間層に命令するステップと、
    前記第2のパスを通じてデータを送るステップと
    を備えたことを特徴とするオフロードされたネットワークスタックの状態オブジェクトをアップロードする方法。
  2. 前記オフロードされたネットワークスタックの状態オブジェクトのアップロードを開始するステップをさらに備えたことを特徴とする請求項1に記載のオフロードされたネットワークスタックの状態オブジェクトをアップロードする方法。
  3. 前記複数の層はネットワーク層を含み、前記周辺機器はネットワークの委託された状態を有し、
    前記ネットワークの委託された状態についてのオフロードされたいくつかのトランスポートコネクションのカウントをデクリメントするステップと、
    前記カウントをデクリメントしてゼロになった場合、
    前記ネットワークの委託された状態を前記ネットワーク層に送るように前記周辺機器にメッセージを送るステップと
    をさらに備えたことを特徴とする請求項1に記載のオフロードされたネットワークスタックの状態オブジェクトをアップロードする方法。
  4. 前記複数の層はフレーミング層を含み、前記周辺機器は、フレーミングの委託された状態を有し、
    前記フレーミングの委託された状態についてのオフロードされたいくつかのネットワーク層の状態のフレーミングカウントをデクリメントするステップと、
    前記フレーミングカウントをデクリメントしてゼロになった場合、
    前記フレーミングの委託された状態を前記フレーミング層に送るように前記周辺機器にメッセージを送るステップと
    をさらに備えたことを特徴とする請求項1に記載のオフロードされたネットワークスタックの状態オブジェクトをアップロードする方法。
  5. 前記アップロードを開始すべきかどうかを判定するステップをさらに備えたことを特徴とする請求項1に記載のオフロードされたネットワークスタックの状態オブジェクトをアップロードする方法。
  6. 前記アップロードを開始すべきかどうかを判定するステップは、
    前記周辺機器に転送されているデータ量が最大閾値を超えているかどうかを判定すること、
    前記周辺機器がある機能を処理できないかどうかを判定すること、
    あるアプリケーションがバッファを事前にポストしていないかどうかを判定すること、及び
    前記周辺機器に転送されているデータ量が最低の処理能力を下回っているかどうかを判定すること
    の少なくとも1つを含むことを特徴とする請求項5に記載のオフロードされたネットワークスタックの状態オブジェクトをアップロードする方法。
  7. 請求項1に記載のステップを行うコンピュータ実行可能命令を備えたことを特徴とするコンピュータ読み取り可能な記録媒体。
  8. 前記アップロードを開始すべきかどうかを判定するステップを行うコンピュータ実行可能命令をさらに備え、前記アップロードを開始すべきかどうかを判定するステップは、
    前記周辺機器に転送されているデータ量が最大閾値を超えているかどうかを判定すること、
    前記周辺機器がある機能を処理できないかどうかを判定すること、
    あるアプリケーションがバッファを事前にポストしていないかどうかを判定すること、及び
    前記周辺機器に転送されているデータ量が最低の処理能力を下回っているかどうかを判定すること
    の少なくとも1つを含むことを特徴とする請求項7に記載のコンピュータ読み取り可能な記録媒体。
  9. 前記複数の層はネットワーク層及びフレーミング層を含み、前記周辺機器はネットワークの委託された状態及びフレーミングの委託された状態を有し、前記コンピュータ読み取り可能な記録媒体は、
    前記ネットワークの委託された状態についてオフロードされたいくつかのトランスポートコネクションのカウントをデクリメントするステップと、
    前記カウントをデクリメントしてゼロになった場合は、
    前記ネットワークの委託された状態を前記ネットワーク層に送るように前記周辺機器にメッセージを送るステップと、
    前記フレーミングの委託された状態についてオフロードされたいくつかのネットワーク層の状態のフレーミングカウントをデクリメントするステップと、
    前記フレーミングカウントをデクリメントしてゼロになった場合は、
    前記フレーミングの委託された状態を前記フレーミング層に送るように前記周辺機器にメッセージを送るステップと
    を行うコンピュータ実行可能命令をさらに有することを特徴とする請求項7に記載のコンピュータ読み取り可能な記録媒体。
  10. 周辺機器からスイッチ層に至る第1のパスから、前記周辺機器から複数のソフトウェア層及び前記スイッチ層を通過する第2のパスに、オフロードされたネットワークスタックの状態オブジェクト及び少なくとも1つの関連付けられたプロトコルをアップロードする方法であって、前記複数のソフトウェア層は中間層を含み、前記ネットワークスタック状態オブジェクトは、キャッシュされた状態及び委託された状態を有し、
    未処理の要求を転送ステータスで完了するステップと、
    前記委託された状態を前記スイッチ層に渡すステップと、
    前記中間層のための前記周辺機器中のリソースを開放するステップと、
    前記第2のパスを通じてデータを送るステップと
    を備えたことを特徴とするオフロードされたネットワークスタックの状態オブジェクト及び少なくとも1つの関連付けられたプロトコルをアップロードする方法。
  11. 前記オフロードされたネットワークスタックの状態オブジェクト及び前記少なくとも1つの関連付けられたプロトコルのアップロードを開始するステップをさらに備えたことを特徴とする請求項10に記載のオフロードされたネットワークスタックの状態オブジェクト及び少なくとも1つの関連付けられたプロトコルをアップロードする方法。
  12. 前記複数の層はネットワーク層を含み、前記周辺機器はネットワークの委託された状態を有し、
    前記トランスポート層からのオフロードされたコネクションがすべてアップロードされた場合に、前記ネットワークの委託された状態を前記ネットワーク層に送るステップ
    をさらに備えたことを特徴とする請求項10に記載のオフロードされたネットワークスタックの状態オブジェクト及び少なくとも1つの関連付けられたプロトコルをアップロードする方法。
  13. 前記複数の層はフレーミング層を含み、前記周辺機器はフレーミングの委託された状態を有し、
    前記ネットワーク層からのオフロードされたコネクションがすべてアップロードされた場合に、前記フレーミングの委託された状態を前記フレーミング層に送るステップ
    をさらに備えたことを特徴とする請求項10に記載のオフロードされたネットワークスタックの状態オブジェクト及び少なくとも1つの関連付けられたプロトコルをアップロードする方法。
  14. 前記アップロードを開始すべきかどうかを判定するステップをさらに備えたことを特徴とする請求項10に記載のオフロードされたネットワークスタックの状態オブジェクト及び少なくとも1つの関連付けられたプロトコルをアップロードする方法。
  15. 前記アップロードを開始すべきかどうかを判定するステップは、
    前記スイッチ層から前記周辺機器に転送されているデータ量が最大閾値を超えているかどうかを判定すること、
    前記オフロードされたネットワークスタックコネクションにアクティビティの欠如があるかどうかを判定すること、
    前記周辺機器がある機能を処理できないかどうかを判定すること、
    コネクションの振る舞いがオフロードに適さないかどうかを判定すること、
    周辺機器リソースの可用性が閾値未満である場合に、アップロードにより優先順位がより高い状態オブジェクトが周辺機器リソースを使用することが可能になるかどうかを判定すること、
    あるアプリケーションがバッファを事前にポストしていないかどうかを判定すること、及び
    前記周辺機器に転送されているデータ量が最大の処理能力を超えているかどうかを判定すること
    の少なくとも1つを含むことを特徴とする請求項14に記載のオフロードされたネットワークスタックの状態オブジェクト及び少なくとも1つの関連付けられたプロトコルをアップロードする方法。
  16. 請求項10に記載のステップを行うコンピュータ実行可能命令を備えたことを特徴とするコンピュータ読み取り可能な記録媒体。
  17. 前記アップロードを開始すべきかどうかを判定するステップを行うコンピュータ実行可能命令をさらに備え、前記アップロードを開始すべきかどうかを判定するステップは、
    前記スイッチ層から前記周辺機器に転送されているデータ量が最大閾値を超えているかどうかを判定すること、
    前記オフロードされたネットワークスタックコネクションにアクティビティの欠如があるかどうかを判定すること、
    前記周辺機器がある機能を処理できないかどうかを判定すること、
    コネクションの振る舞いがオフロードに適さないかどうかを判定すること、
    周辺機器リソースの可用性が閾値未満である場合に、アップロードにより優先順位がより高い状態オブジェクトが周辺機器リソースを使用することが可能になるかどうかを判定すること、
    あるアプリケーションがバッファを事前にポストしていないかどうかを判定すること、及び
    前記周辺機器に転送されているデータ量が最大の処理能力を超えているかどうかを判定すること
    の少なくとも1つを含むことを特徴とする請求項16に記載のコンピュータ読み取り可能な記録媒体。
  18. 複数のソフトウェア層を有するホスト中で、ホストと周辺機器との間でオフロードされたネットワークスタックの状態オブジェクトを同期する方法であって、各ソフトウェア層は少なくとも1つの状態変数を有し、
    前記複数のソフトウェア層の各ソフトウェア層について、
    前記少なくとも1つの状態変数を、不変変数、キャッシュされた変数、及び委託された変数の1つに分類するステップと、
    前記少なくとも1つの状態変数を前記周辺機器に送るステップと、
    前記少なくとも1つの状態変数がキャッシュされた変数に分類された場合は、
    前記キャッシュされた変数を前記ホストによって処理するステップと、
    前記キャッシュされた変数が変化した場合は前記周辺機器中の前記キャッシュされた変数を更新するステップと
    を備えたことを特徴とするオフロードされたネットワークスタックの状態オブジェクトを同期する方法。
  19. 前記複数のソフトウェア層の1つはトランスポート層であり、前記少なくとも1つの状態変数は不変変数に分類され、前記少なくとも1つの状態変数は、宛先ポート、送信元ポート、ウィンドウのスケール係数、及びオフロードハンドルの少なくとも1つを含むことを特徴とする請求項18に記載のオフロードされたネットワークスタックの状態オブジェクトを同期する方法。
  20. 前記複数のソフトウェア層の1つはネットワーク層であり、前記少なくとも1つの状態変数は不変変数と分類され、前記少なくとも1つの状態変数は、宛先IPアドレス及び送信元IPアドレスの少なくとも1つを含むことを特徴とする請求項18に記載のオフロードされたネットワークスタックの状態オブジェクトを同期する方法。
  21. 前記複数のソフトウェア層の1つはTCP層であり、前記少なくとも1つの状態変数はキャッシュされた変数に分類され、前記少なくとも1つの状態変数は、TCP変数及びIP変数の少なくとも1つを含むことを特徴とする請求項18に記載のオフロードされたネットワークスタックの状態オブジェクトを同期する方法。
  22. 前記複数のソフトウェア層の1つはネットワーク層であり、前記少なくとも1つの状態変数はキャッシュされた変数に分類され、前記少なくとも1つの状態変数はオフロードハンドルを含むことを特徴とする請求項18に記載のオフロードされたネットワークスタックの状態オブジェクトを同期する方法。
  23. 前記複数のソフトウェア層の1つはフレーミング層であり、前記少なくとも1つの状態変数はキャッシュされた変数に分類され、前記少なくとも1つの状態変数はARPアドレスを含むことを特徴とする請求項18に記載のオフロードされたネットワークスタックの状態オブジェクトを同期する方法。
  24. 前記複数のソフトウェア層の1つはIPセキュリティ層であり、前記不変変数は、送信元ポート、宛先ポート、プロトコルタイプ、及びセキュリティアソシエーション変数の少なくとも1つを含むことを特徴とする請求項18に記載のオフロードされたネットワークスタックの状態オブジェクトを同期する方法。
  25. 前記複数のソフトウェア層の1つはIPセキュリティ層であり、前記キャッシュされた変数は、バイトカウントのリキー(rekey)、バイトカウントの停止、所定のティックにおけるリキー、所定のティックにおける停止、及びセキュリティアソシエーションの使用が可能な最大アイドル時間の少なくとも1つを含むことを特徴とする請求項18に記載のオフロードされたネットワークスタックの状態オブジェクトを同期する方法。
  26. 前記少なくとも1つの状態変数が委託された変数に分類された場合、
    前記少なくとも1つの状態変数を前記周辺機器によって処理するステップと、
    前記委託された変数が変化した場合は前記少なくとも1つの状態変数を更新するステップと
    をさらに備えたことを特徴とする請求項18に記載のオフロードされたネットワークスタックの状態オブジェクトを同期する方法。
  27. 前記複数のソフトウェア層の1つはTCP層であり、前記少なくとも1つの状態変数は委託された変数に分類され、前記少なくとも1つの状態変数は、現在のTCP状態、受信ウィンドウサイズ、次のRECVの通し番号、最大送信ウィンドウ、現在の輻輳ウィンドウ、送信された最大通し番号、及び次のSENDの通し番号の少なくとも1つを含むことを特徴とする請求項26に記載のオフロードされたネットワークスタックの状態オブジェクトを同期する方法。
  28. 前記複数のソフトウェア層の1つはネットワーク層であり、前記少なくとも1つの状態変数は委託された変数に分類され、前記少なくとも1つの状態変数はIPパケットIDの開始値を含むことを特徴とする請求項26に記載のオフロードされたネットワークスタックの状態オブジェクトを同期する方法。
  29. 前記複数のソフトウェア層の1つはIPセキュリティ層であり、前記委託された変数は、セキュリティアソシエーションで暗号化又は解読されたバイトのカウント、前記セキュリティアソシエーションの寿命、及び前記セキュリティアソシエーションのアイドル時間の少なくとも1つを含むことを特徴とする請求項26に記載のオフロードされたネットワークスタックの状態オブジェクトを同期する方法。
  30. 請求項18に記載のステップを行うコンピュータ実行可能命令を備えたことを特徴とするコンピュータ読み取り可能な記録媒体。
  31. 各委託された変数を前記周辺機器によって処理するステップと、
    各キャッシュされた変数について、前記キャッシュされた変数が変化した場合は前記キャッシュされた変数を更新するステップと
    を行うコンピュータ実行可能命令をさらに備えたことを特徴とする請求項30に記載のコンピュータ読み取り可能な記録媒体。
  32. 複数の中間ソフトウェア層についての少なくとも1つのオフロードされた状態及び関連付けられたプロトコルを処理している周辺機器中でリソースを節減する方法であって、前記少なくとも1つのオフロードされた状態は状態オブジェクトを有し、
    第1のオフロードされた状態の初期状態オブジェクトを格納するステップと、前記周辺機器から前記初期状態オブジェクトの初期オフロードハンドルを受け取るステップと、
    前記状態オブジェクトが前記初期状態オブジェクトである場合、次のオフロード時に前記初期オフロードハンドルを前記周辺機器に渡すステップと、
    前記状態オブジェクトが新しい状態オブジェクトである場合、前記次のオフロード時に新しいオフロードハンドルを受け取るステップと
    を備えたことを特徴とするリソースを節減する方法。
  33. 前記初期状態オブジェクトは初期トランスポート状態オブジェクトを含み、前記初期オフロードハンドルは初期トランスポートオフロードハンドルを含み、前記新しいオフロードハンドルは新しいトランスポートオフロードハンドルを含み、前記状態オブジェクトが前記初期状態オブジェクトである場合に次のオフロード時に前記初期オフロードハンドルを前記周辺機器に渡すステップと、前記状態オブジェクトが新しい状態オブジェクトである場合に前記次のオフロード時に新しいオフロードハンドルを受け取るステップとは、
    前記トランスポート状態オブジェクトが前記初期トランスポート状態オブジェクトである場合、次のオフロード時に前記初期トランスポートオフロードハンドルを前記周辺機器に渡すステップと、
    前記トランスポート状態オブジェクトが新しいトランスポート状態オブジェクトである場合、前記次のオフロード時に新しいトランスポートオフロードハンドルを受け取るステップと
    を含むことを特徴とする請求項32に記載のリソースを節減する方法。
  34. 前記初期状態オブジェクトは初期ネットワーク状態オブジェクトを含み、前記初期オフロードハンドルは初期ネットワーク層オフロードハンドルを含み、前記新しいオフロードハンドルは新しいネットワーク層オフロードハンドルを含み、前記状態オブジェクトが前記初期状態オブジェクトである場合に次のオフロード時に前記初期オフロードハンドルを前記周辺機器に渡すステップと、前記状態オブジェクトが新しい状態オブジェクトである場合に前記次のオフロード時に新しい状態オフロードを受け取るステップとは、
    前記ネットワーク状態オブジェクトが前記初期ネットワーク状態オブジェクトである場合は、次のオフロード時に前記初期ネットワーク層オフロードハンドルを前記周辺機器に渡すステップと、
    前記ネットワーク状態オブジェクトが新しいネットワーク状態オブジェクトである場合は、前記次のオフロード時に新しいネットワーク層オフロードハンドルを受け取るステップと
    を含むことを特徴とする請求項32に記載のリソースを節減する方法。
  35. 前記初期状態オブジェクトは初期フレーミング状態オブジェクトを含み、前記初期オフロードハンドルは初期フレーミング層オフロードハンドルを含み、前記新しいオフロードハンドルは新しいフレーミング層オフロードハンドルを含み、前記状態オブジェクトが前記初期状態オブジェクトである場合に次のオフロード時に前記初期オフロードハンドルを前記周辺機器に渡すステップと、前記状態オブジェクトが新しい状態オブジェクトである場合に前記次のオフロード時に新しいオフロードハンドルを受け取るステップとは、
    前記フレーミング状態オブジェクトが前記初期フレーミング状態オブジェクトである場合は、次のオフロード時に前記初期フレーミング層オフロードハンドルを前記周辺機器に渡すステップと、
    前記フレーミング状態オブジェクトが新しいフレーミング状態オブジェクトである場合、前記次のオフロード時に新しいフレーミング層オフロードハンドルを受け取るステップと
    を含むことを特徴とする請求項32に記載のリソースを節減する方法。
  36. 前記少なくとも1つのオフロードされた状態は、トランスポート状態オブジェクト、ネットワーク層状態オブジェクト、及びフレーミング層状態オブジェクトを含み、
    前記第1のオフロードされた状態の前記初期状態オブジェクトを格納するステップは、第1のオフロードされたコネクションの初期トランスポート状態オブジェクト、初期ネットワーク層状態オブジェクト、及び初期フレーミング層状態オブジェクトを格納することを含み、
    前記周辺機器から前記初期状態エントリの前記初期オフロードハンドルを受け取るステップは、前記第1のオフロードされたコネクションについての前記初期トランスポート状態オブジェクトの初期トランスポート状態オフロードハンドル、前記初期ネットワーク層状態オブジェクトの初期ネットワーク層オフロードハンドル、及び前記初期フレーミング層状態オブジェクトの初期フレーミング層オフロードハンドルを受け取ることを含み、
    前記状態エントリが前記初期状態から変化していない場合に次のオフロード時に前記初期オフロードハンドルを前記周辺機器に渡すステップは、
    前記トランスポート状態オブジェクトが前記初期トランスポート状態オブジェクトである場合、次のオフロード時に前記初期トランスポート状態オフロードハンドルを前記周辺機器に渡すこと、
    前記ネットワーク層状態オブジェクトが前記初期ネットワーク層状態オブジェクトである場合、前記次のオフロード時に前記初期ネットワーク層オフロードハンドルを前記周辺機器に渡すこと、及び
    前記フレーミング層状態オブジェクトが前記初期フレーミング層状態オブジェクトから変化していない場合、前記次のオフロード時に前記初期フレーミング層オフロードハンドルを前記周辺機器に渡すこと
    を含み、
    前記周辺機器が前記状態エントリのためにリソースを割り振った後に前記状態エントリが前記初期状態から変化している場合に、前記次のオフロード時に前記新しいオフロードハンドルを受け取るステップは、
    前記トランスポート状態オブジェクトが新しいトランスポート状態オブジェクトである場合に、前記次のオフロード時に新しいトランスポート状態オフロードハンドルを受け取ること、
    前記ネットワーク層状態オブジェクトが新しいネットワーク層状態オブジェクトである場合に、前記次のオフロード時に新しいネットワーク層オフロードハンドルを受け取ること、及び
    前記フレーミング層状態オブジェクトが新しいフレーミング層状態オブジェクトである場合に、前記次のオフロード時に新しいフレーミング層オフロードハンドルを受け取ること
    を含むことを特徴とする請求項32に記載のリソースを節減する方法。
  37. 請求項32に記載のステップを行うことを特徴とするコンピュータ読み取り可能な記録媒体。
  38. 前記少なくとも1つのオフロードされた状態は、トランスポート状態オブジェクト、ネットワーク層状態オブジェクト、及びフレーミング層状態オブジェクトの少なくとも1つを含み、
    前記第1のオフロードされた状態の前記初期状態オブジェクトを格納するステップは、第1のオフロードされたコネクションについての初期トランスポート状態オブジェクト、初期ネットワーク層状態オブジェクト、及び初期フレーミング層状態オブジェクトの少なくとも1つを格納することを含み、
    前記周辺機器から前記初期状態エントリの前記初期オフロードハンドルを受け取るステップは、前記第1のオフロードされたコネクションについての前記初期トランスポート状態オブジェクトの初期トランスポート状態オフロードハンドル、前記初期ネットワーク層状態オブジェクトの初期ネットワーク層オフロードハンドル、及び前記初期フレーミング層状態オブジェクトの初期フレーミング層オフロードハンドルの少なくとも1つを受け取ることを含み、
    前記状態エントリが前記初期状態から変化していない場合に、次のオフロード時に前記周辺機器に前記初期オフロードハンドルを渡すステップは、前記トランスポート状態オブジェクトが前記初期トランスポート状態オブジェクトである場合に次のオフロード時に前記周辺機器に前記初期トランスポート状態オフロードハンドルを渡すこと、前記ネットワーク層状態オブジェクトが前記初期ネットワーク層状態オブジェクトである場合に前記次のオフロード時に前記周辺機器に前記初期ネットワーク層オフロードハンドルを渡すこと、及び、前記フレーミング層状態オブジェクトが前記初期フレーミング層状態オブジェクトから変化していない場合に、前記次のオフロード時に前記周辺機器に前記初期フレーミング層オフロードハンドルを渡すこと、の少なくとも1つを含み、
    前記周辺機器が前記状態エントリにリソースを割り振った後に前記状態エントリが前記初期状態から変化した場合に、前記次のオフロード時に前記新しいオフロードハンドルを受け取るステップは、前記トランスポート状態オブジェクトが新しいトランスポート状態オブジェクトである場合に、前記次のオフロード時に新しいトランスポート状態オフロードハンドルを受け取ること、前記ネットワーク層状態オブジェクトが新しいネットワーク層状態オブジェクトである場合に、前記次のオフロード時に新しいネットワーク層オフロードハンドルを受け取ること、及び、前記フレーミング層状態オブジェクトが新しいフレーミング層状態オブジェクトである場合に、前記次のオフロード時に新しいフレーミング層オフロードハンドルを受け取ること、の少なくとも1つを含むことを特徴とする請求項37に記載のコンピュータ読み取り可能な記録媒体。
  39. 少なくとも1つの中間ソフトウェア層と少なくとも1つのネットワーク状態オブジェクトが周辺機器にオフロードされたネットワークスタックについての統計を得る方法であって、前記ネットワーク状態オブジェクトは、不変状態変数、キャッシュされた状態変数、及び委託状態変数の少なくとも1つを有し、前記ネットワークスタックはホストによって制御され、前記オフロードされたネットワーク状態オブジェクトは前記周辺機器によって処理され、
    各中間ソフトウェア層について、
    ホストによって維持される統計には前記ホストから統計を得るステップと、
    周辺機器によって保持される統計には前記周辺機器から統計を得るステップと、
    ホスト及び周辺機器によって保持される統計には前記ホスト及び周辺機器から統計を得るステップと、
    前記周辺機器によって保持される統計と前記ホスト及び周辺機器によって保持される統計を、前記ホストによって保持される統計に組み合わせるステップとを備えたことを特徴とするオフロードされたネットワークスタックについての統計を得る方法。
  40. 前記統計は、トランスポート制御プロトコル管理情報ベースの統計であり、前記ホストによって保持される統計は、ts_RtoAlgorithmの統計、ts_rtominの統計、ts_RtoMaxの統計、ts_RtoMaxConnの統計、ts_ActiveOpensの統計、ts_PassiveOpensの統計、ts_AttemptFailsの統計、ts_EstabResetsの統計、及びts_numconsの統計の少なくとも1つを含むことを特徴とする請求項39に記載のオフロードされたネットワークスタックについての統計を得る方法。
  41. 前記統計は、トランスポート制御プロトコル管理情報ベースの統計であり、前記ホスト及び周辺機器によって保持される統計は、ts_CurrEstabの統計、ts_InSegsの統計、ts_OutSegsの統計、ts_RetransSegsの統計、ts_InErrsの統計、及びts_OutRstsの統計の少なくとも1つを含むことを特徴とする請求項39に記載のオフロードされたネットワークスタックについての統計を得る方法。
  42. 前記統計は、インターネットプロトコルバージョン4の管理情報の統計であり、前記ホストによって保持される統計は、ipsi_Forwardingの統計、ipsi_DefaultTTLの統計、ipsi_InAddrErrorsの統計、ipsi_ForwDatagramsの統計、ipsi_UnknownProtosの統計、ipsi_RoutingDiscardsの統計、ipsi_ReasmTimeoutの統計、ipsi_FragOKsの統計、ipsi_FragFailsの統計、ipsi_FragCreatesの統計、ipsi_NumIfの統計、ipsi_NumAddrの統計、及びipsi_NumRoutesの統計の少なくとも1つを含むことを特徴とする請求項39に記載のオフロードされたネットワークスタックについての統計を得る方法。
  43. 前記統計は、インターネットプロトコルバージョン4の管理情報の統計であり、前記ホスト及び周辺機器によって保持される統計は、ipsi_InReceivesの統計、ipsi_InHdrErrorsの統計、ipsi_InDiscardsの統計、ipsi_InDeliversの統計、ipsi_OutRequestsの統計、ipsi_OutDiscardsの統計、ipsi_OutNoRoutesの統計、ipsi_ReamsReqdsの統計、ipsi_ReasmOKの統計、及びipsi_ReasmFailsの統計の少なくとも1つを含むことを特徴とする請求項39に記載のオフロードされたネットワークスタックについての統計を得る方法。
  44. 請求項39に記載のステップを行うことを特徴とするコンピュータ読み取り可能な記録媒体。
JP2003125928A 2002-04-30 2003-04-30 オフロードされたネットワークスタックの状態オブジェクトをアップロードする方法及びそれを同期する方法 Expired - Fee Related JP4638658B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/135,630 US7181531B2 (en) 2002-04-30 2002-04-30 Method to synchronize and upload an offloaded network stack connection with a network stack

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2010228902A Division JP2011018373A (ja) 2002-04-30 2010-10-08 オフロードされたネットワークスタックの状態オブジェクトをアップロードする方法及びそれを同期する方法

Publications (3)

Publication Number Publication Date
JP2004030612A true JP2004030612A (ja) 2004-01-29
JP2004030612A5 JP2004030612A5 (ja) 2006-06-15
JP4638658B2 JP4638658B2 (ja) 2011-02-23

Family

ID=29249503

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2003125928A Expired - Fee Related JP4638658B2 (ja) 2002-04-30 2003-04-30 オフロードされたネットワークスタックの状態オブジェクトをアップロードする方法及びそれを同期する方法
JP2010228902A Withdrawn JP2011018373A (ja) 2002-04-30 2010-10-08 オフロードされたネットワークスタックの状態オブジェクトをアップロードする方法及びそれを同期する方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2010228902A Withdrawn JP2011018373A (ja) 2002-04-30 2010-10-08 オフロードされたネットワークスタックの状態オブジェクトをアップロードする方法及びそれを同期する方法

Country Status (12)

Country Link
US (2) US7181531B2 (ja)
EP (1) EP1361512B1 (ja)
JP (2) JP4638658B2 (ja)
KR (1) KR100938519B1 (ja)
CN (1) CN100552626C (ja)
AT (1) ATE396453T1 (ja)
AU (1) AU2003203727B2 (ja)
BR (1) BR0301035A (ja)
CA (1) CA2425706C (ja)
DE (1) DE60321082D1 (ja)
MX (1) MXPA03003787A (ja)
RU (1) RU2336652C2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006191537A (ja) * 2004-11-12 2006-07-20 Microsoft Corp 統合ホストプロトコルスタック管理を使用するセキュアなインターネットプロトコル(ispec)オフロードのための方法および装置
JP2007272628A (ja) * 2006-03-31 2007-10-18 Nec Corp 情報検知処理方法及び装置
JP2010136414A (ja) * 2003-06-05 2010-06-17 Nvidia Corp オフロードユニットを使用したtcp接続のためのデータ処理
JP2012510126A (ja) * 2008-11-26 2012-04-26 マイクロソフト コーポレーション リモートデスクトッププロトコルのためのハードウェアアクセラレーション

Families Citing this family (99)

* Cited by examiner, † Cited by third party
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
US8621101B1 (en) 2000-09-29 2013-12-31 Alacritech, Inc. Intelligent network storage interface device
US6226680B1 (en) 1997-10-14 2001-05-01 Alacritech, Inc. Intelligent network interface system method for protocol processing
US8539112B2 (en) 1997-10-14 2013-09-17 Alacritech, Inc. TCP/IP offload device
US6434620B1 (en) * 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
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
US6697868B2 (en) * 2000-02-28 2004-02-24 Alacritech, Inc. Protocol processing stack for use with intelligent network interface device
US8782199B2 (en) * 1997-10-14 2014-07-15 A-Tech Llc Parsing a packet header
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
US8019901B2 (en) 2000-09-29 2011-09-13 Alacritech, Inc. Intelligent network storage interface system
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
US7543087B2 (en) * 2002-04-22 2009-06-02 Alacritech, Inc. Freeing transmit memory on a network interface device prior to receiving an acknowledgement that transmit data has been received by a remote device
US7007103B2 (en) * 2002-04-30 2006-02-28 Microsoft Corporation Method to offload a network stack
US7558873B1 (en) * 2002-05-08 2009-07-07 Nvidia Corporation Method for compressed large send
US7437548B1 (en) 2002-07-11 2008-10-14 Nvidia Corporation Network level protocol negotiation and operation
US7934021B2 (en) 2002-08-29 2011-04-26 Broadcom Corporation System and method for network interfacing
US7346701B2 (en) 2002-08-30 2008-03-18 Broadcom Corporation System and method for TCP offload
US7313623B2 (en) 2002-08-30 2007-12-25 Broadcom Corporation System and method for TCP/IP offload independent of bandwidth delay product
EP1554842A4 (en) 2002-08-30 2010-01-27 Corporation Broadcom SYSTEM AND METHOD FOR TREATING FRAMES OUTSIDE THE ORDER
US8180928B2 (en) 2002-08-30 2012-05-15 Broadcom Corporation Method and system for supporting read operations with CRC for iSCSI and iSCSI chimney
US7058797B2 (en) * 2002-09-10 2006-06-06 Veritas Operating Corporation Use of off-motherboard resources in a computer system
US7177790B2 (en) * 2002-11-13 2007-02-13 Hewlett-Packard Development Company, L.P. Method and apparatus for providing virtual devices
US7596634B2 (en) * 2002-12-12 2009-09-29 Millind Mittal Networked application request servicing offloaded from host
US7680944B1 (en) * 2003-02-28 2010-03-16 Comtrol Corporation Rapid transport service in a network to peripheral device servers
US7370082B2 (en) * 2003-05-09 2008-05-06 Microsoft Corporation Remote invalidation of pre-shared RDMA key
US7913294B1 (en) 2003-06-24 2011-03-22 Nvidia Corporation Network protocol processing for filtering packets
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
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
US6996070B2 (en) * 2003-12-05 2006-02-07 Alacritech, Inc. TCP/IP offload device with reduced sequential processing
US8549170B2 (en) 2003-12-19 2013-10-01 Nvidia Corporation Retransmission system and method for a transport offload engine
US7636372B2 (en) * 2003-12-19 2009-12-22 Broadcom Corporation Method and system for providing smart offload and upload
US7349999B2 (en) * 2003-12-29 2008-03-25 Intel Corporation Method, system, and program for managing data read operations on network controller with offloading functions
US8359349B2 (en) * 2004-03-18 2013-01-22 Nokia Corporation System and associated terminal, method and computer program product for uploading content
US20050246443A1 (en) * 2004-03-31 2005-11-03 Intel Corporation Management of offload operations in a network storage driver
US7783769B2 (en) * 2004-03-31 2010-08-24 Intel Corporation Accelerated TCP (Transport Control Protocol) stack processing
KR100587560B1 (ko) * 2004-05-07 2006-06-08 삼성전자주식회사 링크 로컬 주소를 가지는 시스템에서 외부 시스템과통신하는 방법 및 장치
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
US20050281262A1 (en) * 2004-06-17 2005-12-22 Zur Uri E Method and system for supporting read operations for iSCSI and iSCSI chimney
US7493427B2 (en) * 2004-07-14 2009-02-17 International Business Machines Corporation Apparatus and method for supporting received data processing in an offload of network protocol processing
US7930422B2 (en) * 2004-07-14 2011-04-19 International Business Machines Corporation Apparatus and method for supporting memory management in an offload of network protocol processing
US7533176B2 (en) * 2004-07-14 2009-05-12 International Business Machines Corporation Method for supporting connection establishment in an offload of network protocol processing
US7386566B2 (en) * 2004-07-15 2008-06-10 Microsoft Corporation External metadata processing
US7165118B2 (en) * 2004-08-15 2007-01-16 Microsoft Corporation Layered message processing model
US8248939B1 (en) 2004-10-08 2012-08-21 Alacritech, Inc. Transferring control of TCP connections between hierarchy of processing mechanisms
US7730196B2 (en) * 2004-12-03 2010-06-01 Microsoft Corporation Efficient transfer of messages using reliable messaging protocols for web services
US20060153215A1 (en) * 2004-12-20 2006-07-13 Linden Cornett Connection context prefetch
US8219622B2 (en) * 2005-02-09 2012-07-10 Verizon Business Global Llc Systems and methods for providing extended peering
US7568056B2 (en) * 2005-03-28 2009-07-28 Nvidia Corporation Host bus adapter that interfaces with host computer bus to multiple types of storage devices
US7475167B2 (en) * 2005-04-15 2009-01-06 Intel Corporation Offloading data path functions
US7516252B2 (en) * 2005-06-08 2009-04-07 Intel Corporation Port binding scheme to create virtual host bus adapter in a virtualized multi-operating system platform environment
US7724658B1 (en) 2005-08-31 2010-05-25 Chelsio Communications, Inc. Protocol offload transmit traffic management
US7715436B1 (en) 2005-11-18 2010-05-11 Chelsio Communications, Inc. Method for UDP transmit protocol offload processing with traffic management
US7660306B1 (en) 2006-01-12 2010-02-09 Chelsio Communications, Inc. Virtualizing the operation of intelligent network interface circuitry
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
US7660264B1 (en) 2005-12-19 2010-02-09 Chelsio Communications, Inc. Method for traffic schedulign in intelligent network interface circuitry
US7760733B1 (en) 2005-10-13 2010-07-20 Chelsio Communications, Inc. Filtering ingress packets in network interface circuitry
US7895646B2 (en) * 2006-05-25 2011-02-22 International Business Machines Corporation IKE daemon self-adjusting negotiation throttle
US8112803B1 (en) * 2006-12-22 2012-02-07 Symantec Corporation IPv6 malicious code blocking system and method
US8935406B1 (en) 2007-04-16 2015-01-13 Chelsio Communications, Inc. Network adaptor configured for connection establishment offload
US20080263171A1 (en) * 2007-04-19 2008-10-23 Alacritech, Inc. Peripheral device that DMAS the same data to different locations in a computer
US7826350B1 (en) 2007-05-11 2010-11-02 Chelsio Communications, Inc. Intelligent network adaptor with adaptive direct data placement scheme
US8060644B1 (en) 2007-05-11 2011-11-15 Chelsio Communications, Inc. Intelligent network adaptor with end-to-end flow control
US8589587B1 (en) 2007-05-11 2013-11-19 Chelsio Communications, Inc. Protocol offload in intelligent network adaptor, including application level signalling
US7831720B1 (en) 2007-05-17 2010-11-09 Chelsio Communications, Inc. Full offload of stateful connections, with partial connection offload
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
US8539513B1 (en) 2008-04-01 2013-09-17 Alacritech, Inc. Accelerating data transfer in a virtual computer system with tightly coupled TCP connections
US8341286B1 (en) 2008-07-31 2012-12-25 Alacritech, Inc. TCP offload send optimization
PL2312807T3 (pl) * 2008-08-04 2019-04-30 Zte Corp Sposób i system umożliwiający transmisję danych mediów strumieniowych bez kopiowania
US20100058082A1 (en) * 2008-08-27 2010-03-04 Lenovo (Singapore) Ple., Ltd. Maintaining network link during suspend state
US9306793B1 (en) 2008-10-22 2016-04-05 Alacritech, Inc. TCP offload device that batches session layer headers to reduce interrupts as well as CPU copies
WO2011152593A1 (en) * 2010-05-31 2011-12-08 Hyo-Hwan Bae Data upload method using shortcut
KR101145385B1 (ko) 2010-05-31 2012-05-15 (주)이앤비소프트 단축 명령을 통한 데이터 업로드 방법
US8582581B2 (en) * 2010-09-28 2013-11-12 Cooper Technologies Company Dual-port ethernet traffic management for protocol conversion
CN102148748B (zh) * 2010-10-26 2014-05-21 华为技术有限公司 伪线路由扩散方法、系统和汇聚节点设备
CN102571912B (zh) * 2010-12-08 2014-09-10 中国科学院声学研究所 一种实现基于多核处理器和混合操作系统的卸载协议栈的方法
US8868710B2 (en) * 2011-11-18 2014-10-21 Amazon Technologies, Inc. Virtual network interface objects
US9581675B2 (en) * 2012-08-24 2017-02-28 Tektronix, Inc. Virtual model adapter removal and substitution technique for cascaded networks
US9191209B2 (en) * 2013-06-25 2015-11-17 Google Inc. Efficient communication for devices of a home network
US10063407B1 (en) 2016-02-08 2018-08-28 Barefoot Networks, Inc. Identifying and marking failed egress links in data plane
US10313231B1 (en) * 2016-02-08 2019-06-04 Barefoot Networks, Inc. Resilient hashing for forwarding packets
WO2017213654A1 (en) * 2016-06-09 2017-12-14 Intel Corporation Offloading processing from user equipment to network
US20180152393A1 (en) * 2016-11-28 2018-05-31 Microsoft Technology Licensing, Llc Application resource usage reduction
US20180150256A1 (en) * 2016-11-29 2018-05-31 Intel Corporation Technologies for data deduplication in disaggregated architectures
US10404619B1 (en) 2017-03-05 2019-09-03 Barefoot Networks, Inc. Link aggregation group failover for multicast
US10237206B1 (en) 2017-03-05 2019-03-19 Barefoot Networks, Inc. Equal cost multiple path group failover for multicast
CN110460544B (zh) 2018-05-08 2021-09-07 华为技术有限公司 一种堆叠中交换机的标识分配方法、光缆及相关设备
US11032367B2 (en) 2018-07-16 2021-06-08 Microsoft Technology Licensing, Llc Long upload time detection and management
KR102151987B1 (ko) * 2018-11-23 2020-09-04 한국과학기술원 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버
CN110113407B (zh) * 2019-04-30 2021-08-17 上海连尚网络科技有限公司 小程序状态同步方法、设备和计算机存储介质
CN113748648A (zh) 2019-05-23 2021-12-03 慧与发展有限责任合伙企业 权重路由
US11855834B2 (en) * 2020-06-02 2023-12-26 Apple Inc. Traffic sink interface
US11368361B2 (en) 2020-06-05 2022-06-21 Microsoft Technology Licensing, Llc Tamper-resistant service management for enterprise systems
WO2022051985A1 (en) * 2020-09-10 2022-03-17 Qualcomm Incorporated Managing a communication link for transfer control protocol communications
RU208657U1 (ru) * 2021-04-23 2021-12-29 Российская Федерация, от имени которой выступает ФОНД ПЕРСПЕКТИВНЫХ ИССЛЕДОВАНИЙ Модель бортового вычислителя авиационного средства поражения

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010027496A1 (en) * 1997-10-14 2001-10-04 Alacritech, Inc. Passing a communication control block to a local device such that a message is processed on the device
JP2002517855A (ja) * 1998-06-12 2002-06-18 マイクロソフト コーポレイション 処理タスクをソフトウエアからハードウエアにオフロードする方法およびコンピュータ・プログラム製品

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5727142A (en) * 1996-05-03 1998-03-10 International Business Machines Corporation Method for a non-disruptive host connection switch after detection of an error condition or during a host outage or failure
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
KR19980063990A (ko) * 1996-12-11 1998-10-07 윌리엄비.켐플러 로컬 다지점 분배 서비스 시스템 내에서 전송 자원을 할당 및할당해제하는 방법
US6434620B1 (en) * 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
US6389479B1 (en) * 1997-10-14 2002-05-14 Alacritech, Inc. Intelligent network interface device and system for accelerated communication
US7133940B2 (en) 1997-10-14 2006-11-07 Alacritech, Inc. Network interface device employing a DMA command queue
US6591302B2 (en) * 1997-10-14 2003-07-08 Alacritech, Inc. Fast-path apparatus for receiving data corresponding to a TCP connection
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
US6697868B2 (en) * 2000-02-28 2004-02-24 Alacritech, Inc. Protocol processing stack for use with intelligent network interface device
US6427171B1 (en) * 1997-10-14 2002-07-30 Alacritech, Inc. Protocol processing stack for use with intelligent network interface device
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
US6904519B2 (en) 1998-06-12 2005-06-07 Microsoft Corporation Method and computer program product for offloading processing tasks from software to hardware
JP2001230812A (ja) * 2000-02-14 2001-08-24 Hitachi Ltd 通信開始処理をオフロードするネットワーク接続装置およびそれを用いた方法
CN1276372C (zh) 2000-09-29 2006-09-20 艾拉克瑞技术公司 智能网络存储接口系统和装置
US7007103B2 (en) * 2002-04-30 2006-02-28 Microsoft Corporation Method to offload a network stack

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010027496A1 (en) * 1997-10-14 2001-10-04 Alacritech, Inc. Passing a communication control block to a local device such that a message is processed on the device
US6334153B2 (en) * 1997-10-14 2001-12-25 Alacritech, Inc. Passing a communication control block from host to a local device such that a message is processed on the device
JP2002517855A (ja) * 1998-06-12 2002-06-18 マイクロソフト コーポレイション 処理タスクをソフトウエアからハードウエアにオフロードする方法およびコンピュータ・プログラム製品

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010136414A (ja) * 2003-06-05 2010-06-17 Nvidia Corp オフロードユニットを使用したtcp接続のためのデータ処理
JP2006191537A (ja) * 2004-11-12 2006-07-20 Microsoft Corp 統合ホストプロトコルスタック管理を使用するセキュアなインターネットプロトコル(ispec)オフロードのための方法および装置
KR101201187B1 (ko) 2004-11-12 2012-11-13 마이크로소프트 코포레이션 통합된 호스트 프로토콜 관리를 이용한 보안 인터넷 프로토콜 (ipsec) 오프로드를 위한 방법 및 시스템
JP2007272628A (ja) * 2006-03-31 2007-10-18 Nec Corp 情報検知処理方法及び装置
JP2012510126A (ja) * 2008-11-26 2012-04-26 マイクロソフト コーポレーション リモートデスクトッププロトコルのためのハードウェアアクセラレーション
US8850027B2 (en) 2008-11-26 2014-09-30 Microsoft Corporation Hardware acceleration for remote desktop protocol

Also Published As

Publication number Publication date
ATE396453T1 (de) 2008-06-15
AU2003203727B2 (en) 2009-04-23
AU2003203727A1 (en) 2003-11-13
US7171489B2 (en) 2007-01-30
US20030204631A1 (en) 2003-10-30
US20050182854A1 (en) 2005-08-18
JP4638658B2 (ja) 2011-02-23
EP1361512A3 (en) 2005-11-30
MXPA03003787A (es) 2005-08-26
DE60321082D1 (de) 2008-07-03
US7181531B2 (en) 2007-02-20
CN100552626C (zh) 2009-10-21
CA2425706C (en) 2010-02-16
EP1361512A2 (en) 2003-11-12
CA2425706A1 (en) 2003-10-30
AU2003203727A8 (en) 2003-11-13
CN1458590A (zh) 2003-11-26
JP2011018373A (ja) 2011-01-27
BR0301035A (pt) 2004-08-17
EP1361512B1 (en) 2008-05-21
RU2336652C2 (ru) 2008-10-20
KR100938519B1 (ko) 2010-01-25
KR20030085484A (ko) 2003-11-05

Similar Documents

Publication Publication Date Title
JP4638658B2 (ja) オフロードされたネットワークスタックの状態オブジェクトをアップロードする方法及びそれを同期する方法
JP4327496B2 (ja) ネットワークスタックをオフロードする方法
US7526577B2 (en) Multiple offload of network state objects with support for failover events
JP5025941B2 (ja) 統合ホストプロトコルスタック管理を使用するセキュアなインターネットプロトコル(ipsec)オフロードのための方法および装置
US7685287B2 (en) Method and system for layering an infinite request/reply data stream on finite, unidirectional, time-limited transports
JP5442755B2 (ja) リモートデスクトッププロトコルのためのハードウェアアクセラレーション
US7535907B2 (en) TCP engine
JP4504977B2 (ja) オフロードユニットを使用したtcp接続のためのデータ処理
JP4658546B2 (ja) フェイルオーバーイベントをサポートするネットワーク状態オブジェクトの多重オフロード
US20050038899A1 (en) Method, system and article for client application control of network transmission loss tolerance
JP2017049850A (ja) 通信装置、通信方法およびプログラム

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060425

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060425

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20081222

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081226

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090325

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090911

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091211

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100608

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101008

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20101012

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20101012

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20101101

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: 20101119

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: 20101126

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131203

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees