(57)【要約】【課題】  ネットワーク再送信のためのコスト効果のある技術を提供すること。【解決手段】  ネットワークにおいてデータの再送信を実行するためのシステムおよび方法が提供される。含まれるのは、システムメモリおよびネットワークでの通信におけるオフロードエンジンである。このオフロードエンジンは、ネットワークにおいて送信されるデータの再送信を管理するよう働く。ネットワークにおいて、オフロードエンジンを利用してデータの再送信を実行するための方法であって、再送信されるデータを識別する工程と再送信される該データを検索する工程であって、該データはシステムメモリ中に格納される工程と、該検索されたデータを再送信する工程とを包含する、方法もまた提供される。【選択図】  図２
2005192216.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークのデータ再送信を実行するためのオフロードエンジンシステムであって、以下：
システムメモリおよびネットワークと通信するオフロードエンジンを備え、
ここで、該オフロードエンジンは、該ネットワークにおいて送信されるデータの再送信を管理する、システム。
【請求項２】
前記オフロードエンジンは、プロセッサと通信し、そして前記データの前記再送信を以下の工程：
再送信される該データを識別する工程と、
再送信される該データを検索する工程であって、該データが前記システムメモリに格納される工程と、
該検索されたデータを再送信する工程と
によって管理する、請求項１に記載のシステム。
【請求項３】
前記オフロードエンジンは、前記プロセッサにステータスメッセージを送信して再送信される前記データの前記検索をトリガし、そして該ステータスメッセージは、少なくとも１つの受取りまたはその欠如の受信に基づいて送信される、請求項２に記載のシステム。
【請求項４】
前記オフロードエンジンは、前記プロセッサにステータスメッセージを送信して、再送信されるデータの検索をトリガし、そして該ステータスメッセージは、タイムアウトに基づいて送信される、請求項２に記載のシステム。
【請求項５】
前記オフロードエンジンは、ステータスメッセージを前記プロセッサに送信して、再送信される前記データの前記検索をトリガし、そして該ステータスメッセージは、ソケットに関する制御ブロックのためのハンドルを含む、請求項２に記載のシステム。
【請求項６】
前記オフロードエンジンは、ステータスメッセージを前記プロセッサに送信して、再送信される前記データの前記検索をトリガし、そして該ステータスメッセージはシーケンス数を含む、請求項２に記載のシステム。
【請求項７】
前記オフロードエンジンは、ステータスメッセージを前記プロセッサに送信して、再送信される前記データの前記検索をトリガし、そして該ステータスメッセージは、再送信データのサイズを含む、請求項２に記載のシステム。
【請求項８】
前記オフロードエンジンは、ステータスメッセージを前記プロセッサに送信して、再送信される前記データの前記検索をトリガし、そして該プロセッサは、前記ステータスメッセージに応答して、該オフロードエンジンに再送信指示メッセージを送信する、請求項２に記載のシステム。
【請求項９】
前記再送信指示メッセージは、シーケンス数を含む、請求項８に記載のシステム。
【請求項１０】
前記再送信指示メッセージは、少なくとも１つのホストバッファに対して少なくとも１つのポインタを含む、請求項８に記載のシステム。
【請求項１１】
前記ポインタは、前記オフロードエンジンによって維持される、請求項１０に記載のシステム。
【請求項１２】
前記ポインタは、前記プロセッサによって維持される、請求項１０に記載のシステム。
【請求項１３】
前記再送信指示メッセージは、前記ポインタとともに用いて再送信される前記データを識別するためのオフセットを含む、請求項１０に記載のシステム。
【請求項１４】
前記オフセットは、再送信される前記データについてのバッファリスト中における開始位置を特定するために含まれる、請求項１３に記載のシステム。
【請求項１５】
前記再送信指示メッセージは、ソケットのための制御ブロックのためのハンドルを含む、請求項８に記載のシステム。
【請求項１６】
前記制御ブロックは、最近受け取ったデータと関連する情報を含む、請求項１５に記載のシステム。
【請求項１７】
前記オフロードエンジンは、前記再送信指示メッセージに応答して、再送信される前記データを検索するためのダイレクトメモリアクセスを要求する、請求項８に記載のシステム。
【請求項１８】
前記オフロードエンジンは、再送信される前記データの受信に応答して、シーケンス数を含む比較をトリガする、請求項１７に記載のシステム。
【請求項１９】
前記オフロードエンジンは、前記比較に基づいて前記データを再送信する、請求項１８に記載のシステム。
【請求項２０】
前記オフロードエンジンは、送信されたデータのための受け取りがリモートホストから受け取られたことを示すステータスメッセージをプロセッサに送信する、請求項１に記載のシステム。
【請求項２１】
前記ステータスメッセージは、ソケットについての制御ブロックのためのハンドルを含む、請求項２０に記載のシステム。
【請求項２２】
前記ステータスメッセージは、受取り数を含む、請求項２０に記載のシステム。
【請求項２３】
ネットワークにおいてデータの再送信を実行するためのオフロードエンジンサブシステムであって、以下：
プロセッサおよびネットワークと通信するオフロードエンジンを備え、
ここで、該オフロードエンジンは、該ネットワークにおいて送信されるデータを以下の工程：
再送信される該データを識別する工程と、
再送信される該データを検索する工程であって、該データが前記プロセッサに格納される工程と、
該検索されたデータを再送信する工程と
によって管理する、請求項１に記載のシステム。
【請求項２４】
ネットワークにおいて、オフロードエンジンを利用してデータの再送信を実行するための方法であって、
再送信されるデータを識別する工程と
再送信される該データを検索する工程であって、該データはシステムメモリ中に格納される工程と、
該検索されたデータを再送信する工程と
を包含する、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トランスポートオフロードエンジンに関し、より特定すると、トランスポートオフロードエンジンを利用して再送信要求を処理することに関する。
【背景技術】
【０００２】
トランスポートオフロードエンジン（ＴＯＥ）は、スループットを最適化する目的のために、およびプロセッサ利用を低くするために高速システムにおいて人気を集めつつある技術を含む。ＴＯＥコンポーネントは、しばしば、種々のプリント回路ボードのひとつ（例えば、ネットワークインタフェースカード（ＮＩＣ）、ホストバスアダプタ（ＨＢＡ）、マザーボードまたは他の任意の所望のオフロードコンテクスト）に組み込まれている。
【０００３】
最近、システムにおける通信速度は、プロセッサ速度よりも速く増大してきた。このことは、入力／出力（Ｉ／Ｏ）のボトルネックを生じた。Ｉ／Ｏではなく計算のために主に設計されるプロセッサは、代表的には、ネットワークを通じたデータのフローについていけない。結果として、データフローがネットワークの速度よりも遅い速度で処理される。ＴＯＥ技術は、この課題を、プロセッサおよび／またはＩ／Ｏサブシステムからの負荷（すなわちオフロード）を取り除くことによって解決する。
【０００４】
ＴＯＥの例示的な操作１００を、先行技術の図１に示す。図１の先行技術図において示されるように、ローカルプロセッサ（どんな種類でも）は、まず、ＴＯＥにデータを送信するよう命令を送り、付属するＴＯＥを有するプロセッサから、ネットワークを介してリモートプロセッサへの通信制御プロトコール（ＴＣＰ）接続に対応するデータを送信する。操作１０２を参照のこと。
【０００５】
次に、操作１０４において、ＴＯＥは、データを取得し、それをセグメントに分割し、そしてイーサネット（登録商標）、ＴＣＰおよびインターネットプロトコール（ＩＰ）ヘッダを、各々のデータセグメントに加えて、各セグメントに対応するＴＣＰ／ＩＰパケットを作成する。その後、ＴＯＥは、操作１０６において示されるように、得られたパケットをネットワークに送信する。
【０００６】
リモートプロセッサがパケットを受信およびバリデートした後、リポートプロセッサは、受取り（ＡＣＫ）をローカルプロセッサに返信し、どれだけのデータが首尾よく受信されたかを指示する。送信されたすべてのデータについてＡＣＫを受信すると（決定１０８を参照）、ＴＯＥは、命令コンプリートをローカルプロセッサに送信してＴＯＥのトランスポート機能によって送信命令が完了したことを示す。操作１１０を参照。ついで、操作１１２に示されるように、さらなるデータが送信され得る。
【０００７】
対応するパケットが送信された後所定の時間以内にＡＣＫがＴＯＥによって受信されない、エラー状態を示す場合について、ＴＣＰデータは、ＴＯＥメモリから再度取得される。操作１１４を参照。ついで、操作１１６において、ＴＯＥは、受け取られていないパケットのいくつかまたはすべての再送信を行い得る。
【０００８】
従って、データを、パケットスイッチ付ネットワークを介して送信する場合、データが喪失され得、そしてそのようなデータが再送信されねばならない。この理由から、ＴＯＥは、すべての受け取っていないデータを格納する。しかし、ワイドエリアネットワーク（ＷＡＮ）における１０Ｇｂｐｓのリンクおよび可能な２００ｍｓの往復の遅れにより、これは、情報のうち１０Ｇｂｐｓ＊２００ｍｓまで、あるいは、２ギガビットまでをもが格納されねばならないことを意味し得る。不幸にも、これは、集積ＴＯＥにおいてコスト効果のある様式で格納するには多すぎるデータである。なぜなら、ＴＯＥにおける集積オンボードメモリは、コストがかかり得る。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
従って、ネットワーク再送信のためのコスト効果のある技術に対する必要性が存在する。
【課題を解決するための手段】
【００１０】
（発明の要旨）
ネットワークにおいてデータの再送信を実行するためのシステムおよび方法が提供される。含まれるのは、システムメモリおよびネットワークでの通信におけるオフロードエンジンである。このオフロードエンジンは、ネットワークにおいて送信されるデータの再送信を管理するよう働く。
【００１１】
これを達成するために、オフロードエンジンは、再送信されるデータを識別し、システムメモリに格納される再送信されるデータを検索し、そしてこの検索されたデータを再送信する。このシステムメモリをこのような様式により利用することによって、ネットワーク再送信を実行するためにコスト効果のある技術が提供される。
【００１２】
１つの実施形態において、オフロードエンジンは、ステータスメッセージをプロセッサに送信して、再送信されるデータの検索をトリガー（ｉｎｉｔｉａｔｅ）することができる。必要に応じて、そのようなステータスメッセージは、少なくとも１つの受取りまたはその欠如の受信に基づき、タイムアウトなどにもとづき送信され得る。さらに、ステータスメッセージは、ソケットに関する制御ブロックのためのハンドル、シーケンス数、および／または再送信要求に関連する再送信データサイズを含み得る。
【００１３】
さらに、プロセッサは、ステータスメッセージに応答して再送信指示メッセージをオフロードエンジンに送信することができる。そのような再送信指示メッセージは、シーケンス数、ホストバッファに対するポインタなどを含み得る。このポインタは、オフロードエンジンおよび／またはプロセッサにより維持され得ることが理解されるべきである。
【００１４】
必要に応じて、再送信指示メッセージはまた、ポインタとともに使用して再送信されるデータを識別するためのオフセットを備え得る。そのようなオフセットは、必要に応じて、再送信されるべきデータバッファが部分的に受け取られたのみである場合に含まれ得る。なお、再送信指示メッセージは、ソケットについて制御ブロックのためのハンドルを含み得る。
【００１５】
使用時には、オフロードエンジンは、再送信指示メッセージに応答して、直接メモリアクセス（ＤＭＡ）を要求して、再送信されるデータを検索し得る。再送信されるデータの受信に応答して、オフロードエンジンは、シーケンス数を含む比較をトリガすることができる。その後、オフロードエンジンは、この比較に基づいてデータを送信することができる。
【００１６】
このシステムメモリは、バスを介してプロセッサと接続され得るか、および／またはプロセッサ内に存在し得る。なおさらに、オフロードエンジンは、ポーラー（ｐｏｌｌｅｒ；ポーリングする機器）、メモリ、ステータスメッセージ生成器；パーサ、送信リクエスタ、ＤＭＡキュー、データパケット生成器、および／または任意の他の所望のコンポーネントを含み得る。
【００１７】
従って、本発明は、以下を提供する。
（１）  ネットワークのデータ再送信を実行するためのオフロードエンジンシステムであって、以下：
システムメモリおよびネットワークと通信するオフロードエンジンを備え、
ここで、上記オフロードエンジンは、上記ネットワークにおいて送信されるデータの再送信を管理する、システム。
（２）  上記オフロードエンジンは、プロセッサと通信し、そして上記データの上記再送信を以下の工程：
再送信される上記データを識別する工程と、
再送信される上記データを検索する工程であって、上記データが上記システムメモリに格納される工程と、
上記検索されたデータを再送信する工程と
によって管理する、項１に記載のシステム。
（３）  上記オフロードエンジンは、上記プロセッサにステータスメッセージを送信して再送信される上記データの上記検索をトリガし、そして上記ステータスメッセージは、少なくとも１つの受取りまたはその欠如の受信に基づいて送信される、項２に記載のシステム。
（４）上記オフロードエンジンは、上記プロセッサにステータスメッセージを送信して、再送信されるデータの検索をトリガし、そして上記ステータスメッセージは、タイムアウトに基づいて送信される、項２に記載のシステム。
（５）上記オフロードエンジンは、ステータスメッセージを上記プロセッサに送信して、再送信される上記データの上記検索をトリガし、そして上記ステータスメッセージは、ソケットに関する制御ブロックのためのハンドルを含む、項２に記載のシステム。
（６）上記オフロードエンジンは、ステータスメッセージを上記プロセッサに送信して、再送信される上記データの上記検索をトリガし、そして上記ステータスメッセージはシーケンス数を含む、項２に記載のシステム。
（７）上記オフロードエンジンは、ステータスメッセージを上記プロセッサに送信して、再送信される上記データの上記検索をトリガし、そして上記ステータスメッセージは、再送信データのサイズを含む、項２に記載のシステム。
（８）上記オフロードエンジンは、ステータスメッセージを上記プロセッサに送信して、再送信される上記データの上記検索をトリガし、そして上記プロセッサは、上記ステータスメッセージに応答して、上記オフロードエンジンに再送信指示メッセージを送信する、項２に記載のシステム。
（９）上記再送信指示メッセージは、シーケンス数を含む、項８に記載のシステム。
（１０）上記再送信指示メッセージは、少なくとも１つのホストバッファに対して少なくとも１つのポインタを含む、項８に記載のシステム。
（１１）上記ポインタは、上記オフロードエンジンによって維持される、項１０に記載のシステム。
（１２）上記ポインタは、上記プロセッサによって維持される、項１０に記載のシステム。
（１３）上記再送信指示メッセージは、上記ポインタとともに用いて再送信される上記データを識別するためのオフセットを含む、項１０に記載のシステム。
（１４）上記オフセットは、再送信される上記データについてのバッファリスト中における開始位置を特定するために含まれる、項１３に記載のシステム。
（１５）上記再送信指示メッセージは、ソケットのための制御ブロックのためのハンドルを含む、項８に記載のシステム。
（１６）上記制御ブロックは、最近受け取ったデータと関連する情報を含む、項１５に記載のシステム。
（１７）上記オフロードエンジンは、上記再送信指示メッセージに応答して、再送信される上記データを検索するためのダイレクトメモリアクセスを要求する、項８に記載のシステム。
（１８）上記オフロードエンジンは、再送信される上記データの受信に応答して、シーケンス数を含む比較をトリガする、項１７に記載のシステム。
（１９）上記オフロードエンジンは、上記比較に基づいて上記データを再送信する、項１８に記載のシステム。
（２０）上記オフロードエンジンは、送信されたデータのための受け取りがリモートホストから受け取られたことを示すステータスメッセージをプロセッサに送信する、項１に記載のシステム。
（２１）上記ステータスメッセージは、ソケットについての制御ブロックのためのハンドルを含む、項２０に記載のシステム。
（２２）上記ステータスメッセージは、受取り数を含む、項２０に記載のシステム。
（２３）ネットワークにおいてデータの再送信を実行するためのオフロードエンジンサブシステムであって、以下：
プロセッサおよびネットワークと通信するオフロードエンジンを備え、
ここで、上記オフロードエンジンは、上記ネットワークにおいて送信されるデータを以下の工程：
再送信される上記データを識別する工程と、
再送信される上記データを検索する工程であって、上記データが上記プロセッサに格納される工程と、
上記検索されたデータを再送信する工程と
によって管理する、項１に記載のシステム。
（２４）ネットワークにおいて、オフロードエンジンを利用してデータの再送信を実行するための方法であって、
再送信されるデータを識別する工程と
再送信される上記データを検索する工程であって、上記データはシステムメモリ中に格納される工程と、
上記検索されたデータを再送信する工程と
を包含する、方法。
【発明の効果】
【００１８】
ネットワーク再送信のためのコスト効果のある技術が提供される。
【発明を実施するための最良の形態】
【００１９】
（詳細な説明）
図２は、１つの実施形態に従うネットワークシステム２００を示す。示されるように、ネットワーク２０２が提供される。このネットワークシステム２００のコンテクストにおいて、ネットワーク２０２は、任意の形態を採り得、その形態としては、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）（例えば、インターネット）などが挙げられるがそれらに限定されない。
【００２０】
ネットワーク２０２に接続されるのは、ローカルホスト２０４およびリモートホスト２０６であり、これらホストは、ネットワーク２０２を介して通信することができる。本明細書のコンテクストにおいて、そのようなホスト２０４および２０６は、ウェブサーバ、デスクトップコンピュータ、ラップトップコンピュータ、ハンドヘルドコンピュータ、プリンタまたは他の任意のハードウェア／ソフトウェアを含み得る。上記の各々のコンポーネントおよび任意の他の示されていないデバイスは、１または複数のネットワークにより相互接続され得ることに留意すべきである。
【００２１】
図３は、例示のアーキテクチャ３００を示す。このアーキテクチャでは、１つの実施形態が実行され得る。１つの実施形態において、アーキテクチャ３００は、図２のホスト２０４および２０６の一つを表し得る。しかし、当然、アーキテクチャ３００は、任意の所望のコンテクストにおいて実行され得ることに留意すべきである。
【００２２】
例えば、アーキテクチャ３００は、汎用コンピュータシステム、回路基板システム、娯楽目的のゲームコンソールシステム、セットトップボックス、ルータ、ネットワークシステム、格納システム、アプリケーション特異的なシステム、またはネットワーク２０２に関連する任意の他の所望のシステムのコンテクストにおいて実行され得る。
【００２３】
示されるように、このアーキテクチャ３００は、バス３０２を介して接続される複数のコンポーネントを備える。含まれるのは、データ処理のための少なくとも１つのプロセッサ３０４である。プロセッサ３０４は、任意の形態を採り得るが、１つの実施形態において、このプロセッサは、中央処理ユニット（ＣＰＵ）、チップセット（すなわち、関連する機能を実行するために１つのユニットとして作動し販売されるように設計される一群の集積回路など）またはデータ処理能力を有する任意の他の所望の処理デバイス（単数または複数）の形態を採り得る。
【００２４】
さらに、プロセッサシステムメモリ３０６が含まれる。このメモリは、データを格納するためのプロセッサ３０４との通信において役割を果たす。そのようなプロセッサシステムメモリ３０６は、オンボードまたはオフボードのランダムアクセスメモリ（ＲＡＭ）、ハードディスクドライブ、リムーバブル記憶ドライブ（すなわち、フロッピー（登録商標）ディスク（登録商標）ドライブ、磁気テープドライブ、コンパクトディスクドライブなど）、および／またはデータを格納する能力を有する任意の型の所望のメモリの形態を採れ得る。
【００２５】
使用時には、プログラムまたは制御論理アルゴリズムは、必要に応じて、プロセッサシステムメモリ３０６に格納され得る。そのようなプログラムは、実行されるとき、アーキテクチャ３００が種々の機能を実行することを可能にする。当然、アーキテクチャ３００は、単にハードワイヤ化され得る。
【００２６】
さらに示されるのは、プロセッサ３０４およびネットワーク（例えば、図２のネットワーク２０２を参照）と通信するにおけるオフロードエンジン３１２である。１つの実施形態において、オフロードエンジン３１２は、プロセッサ３０４と、バス３０２を介して通信したままであり得る。しかい、当然、オフロードエンジン３１２は、それらの間の通信を提供する任意の機構を介して、プロセッサ３０４と通信したままであり得る。オフロードエンジン３１２は、トランスポート（すなわち、ＴＣＰ／ＩＰ）オフロードエンジン（ＴＯＥ）、またはネットワーク上で送信されたデータを管理する能力を有する他の集積回路を備え得る。
【００２７】
操作中、ネットワーク再送信を実行するためのコスト効果技術を提供するために、オフロードエンジン３１２は、再送信されるデータを識別するように作動して、システムメモリ（例えば、プロセッサシステムメモリ３０６を参照）に格納される再送信されるデータを検索し、そして検索されたデータを再送信する。再送信されるそのようなデータを格納するためのシステムメモリを用いることによって、オフロードエンジン３１２は、集積メモリがほとんど伴わずまたはそれなしに製造されることが可能であり、その結果、よりコスト効果のある技術を提供する。今や、より多くの情報が、オフロードエンジン３１２が上記の様式でシステムメモリを利用する例示の方法に関して示される。
【００２８】
図４は、１つの実施形態に従い、ネットワークにおけるデータの再送信を実行するための例示的な方法４００を示す。オプションとして、方法４００は、図３の例示的なアーキテクチャ３００のコンテクストにおいて実施され得る。しかし、当然、この方法４００は、任意の所望のコンテクストにおいて実施され得ることに留意すべきである。さらに、種々の機能が例示のコンポーネント（すなわち、上記に示したようなコンポーネント）に割り当てられ得るが、そのような種々の機能は、任意の所望のエンティティによって実施され得ることを理解することが重要である。
【００２９】
示されるように、決定４０１において、データの再送信を保証するため基準に合致するかどうかが判定される。単なる例示であるが、そのような基準は、少なくとも１つの受け取り（ＡＣＫ）またはその欠如、二重のＡＣＫ閾値、タイムアウト、種々のタイミングのパラメータ、および／または他の任意の所望の基準に基づき得る。例えば、基準が二重ＡＣＫ閾値を含む例において、二重ＡＣＫ閾値は、任意の所定のまたはユーザーが構成した、受信ＡＣＫ数値、あるいは任意の他のＡＣＫに関連するパラメータであり得る。本記載のコンテクストにおいて、ＡＣＫは、そのデータが首尾よく送信されたことを示す、受信ホストから送信ホストに送信した任意の信号を含む。
【００３０】
再送信基準が合致したことが決定４０１によって決定される場合、操作４０２において示されているように、ステータスメッセージが生成され、これがプロセッサに送信される（例えば、図３のプロセッサ３０４を参照）。１つの実施形態において、このステータスメッセージは、オフロードエンジンを利用して生成される（例えば、図３のオフロードエンジン３１２を参照）。さらに、ステータスメッセージは、システムメモリ中に格納されるデータの再送信を要求することができる任意の形態を採り得る（例えば、図３のメモリ３０６を参照）。
【００３１】
オプションとして、ステータスメッセージは、データの再送信を要求することを容易にするための種々の情報を含み得る。例えば、ステータスメッセージは、シーケンス数を含み得る。このコンテクストにおいて、そのようなシーケンス数は、送信されるデータに関連する数値を含み得、ここでそのような数は、他の送信されたデータに関してそのようなデータが送信されるシーケンスを反映する。
【００３２】
さらなるオプションとして、ステータスメッセージは、再送信データサイズを含み得る。代表的には、再送信データサイズは、例えば、リモートホストが単一のフラグメントしていないピースで処理することができる、バイトで特定されるデータの最大量である。再送信データサイズはまた、ローカルホストによって受信されるＡＣＫにおけるリモートホストによって特定され得る。この場合、多重ＴＣＰパケットは、リモートホストによって、再送信について要求され得る。なおさらに、ステータスメッセージは、ソケットに関して制御ブロック（ＣＢ）ハンドル、または任意の他の所望の情報を含み得る。ＣＢは、最近受け取ったデータに関する情報のような種々の情報を含み得る。
【００３３】
表１は、例示的なステータスメッセージフォーマットを示す。そのようなフォーマットは、例示の目的のために示され、そして、いかなる様式においても限定すると考慮されるべきではない。
【００３４】
【表１】
2005192216.tif 000003
【００３５】
次に、ステータスメッセージに応答して、再送信指示メッセージは、プロセッサによって生成され、そしてオフロードエンジンに送信される。操作４０４を参照。この記載のコンテクストにおいて、再送信指示メッセージは、直下に示す様式で、再送信されるデータの検索を容易にすることができる任意の情報を含む。そのような再送信指示メッセージに関するより多くの情報は、図５を参照してより詳細に説明される。
【００３６】
再送信指示メッセージに応答して、直接メモリアクセス（ＤＭＡ）がオフロードエンジンによって要求される。操作４０６を参照。そのようなＤＭＡは、システムメモリにおいて格納される再送信されるデータを検索するように要求される。この記載のコンテクストにおいて、ＤＭＡは、データがメモリから直接送信されることを可能にする能力を有し、その結果、プロセッサがデータの特定の移動に関与することから解放され、従って全体の操作がスピードアップされることに留意すべきである。
【００３７】
一旦ＤＭＡが首尾よく完了し、そしてデータが受信されると、種々の上記操作が実施される間にＡＣＫが現在のデータに関して受信されたかどうかが判定される。決定４０８を参照。このことは、任意の所望の様式で達成され得るが、このことは、必要に応じて、上記シーケンス数を含む比較をトリガすることによって達成され得る。具体的には、ＡＣＫが以前に収集したシーケンス数より大きなシーケンス数を有する場合、そのデータのいくつかまたはすべてがリモートホストによって首尾よく受信されたと仮定することができる。
【００３８】
従って、決定４０８における上記比較に基づいて、データがネットワークを介して、オフロードエンジンを利用して再送信される。操作４１０を参照。特に、データが首尾よく受信されたと確認されなかった場合は、データが再送信される。
【００３９】
図５は、１つの実施形態に従って再送信指示メッセージを生成するための例示の方法５００を示す。オプションとして、方法５００は、図４の操作４０４のコンテクストにおいて実施され得る。しかし、当然、方法５００は、任意の所望のコンテクストにおいて実行され得ることに留意すべきである。さらに、種々の機能が、例示のコンポーネント（すなわち、上記に示したようなもの）に割り当てられ得るが、種々の機能は、任意の所望のエンティティによって実施され得ることを理解することが重要である。
【００４０】
示されるように、操作５０２において、バッファがプロセッサによって識別される（図３のプロセッサ３０４を参照のこと）。バッファは、表１における例示のステータスメッセージに示されるようなＣＢハンドルを介して識別され得る。再送信されるべきバッファは、通常、上記ＣＢハンドルに関連して受け取られていない最も古いバッファである。
【００４１】
ついで、決定５０４において、バッファがリモートホストによって部分的に受信されたかどうかが判定される。換言すれば、プロセッサによって、再送信されるべき識別されたバッファにおけるデータが首尾よい様式で部分的に受信されたかどうかが判定される。データバッファが少なくとも部分的に受け取られた場合、オフセットは、上記ＤＭＡに関連する出発アドレスをオフセットするために識別される（図４の操作４０６に留意）。操作５０６を参照。オフセットが必要でない場合、操作５０６はスキップされる。あるいは、上記ＤＭＡに関連する出発アドレスは、オフセットの量によって改変されることによって、別個のオフセットインジケータを送信する必要が回避され得る。
【００４２】
次に、データが上記ステータスメッセージによって示される再送信データサイズよりも小さいかどうかが判定される。この条件が正しい場合、さらなるバッファが含まれ得る。操作５１０を参照。しかし、そうでない場合、操作５１０がスキップされる。
【００４３】
従って、表１のステータスメッセージに類似して、再送信指示メッセージは、種々の情報を含み得る。例えば、ＤＭＡ送信のための出発アドレスは、ソケットに関連するスキャッタギャザリスト（ＳＧＬ）へのオフセットであり得る。なおさらに含まれ得るのは、上記シーケンス数であり得る。なおさらに、再送信指示メッセージは、ソケットに関するＣＢハンドル、または任意の他の所望の情報を含み得る。
【００４４】
表２は、例示の再送信指示メッセージフォーマットを示す。そのようなフォーマットは、例示の目的のみで示され、そしていかなる様式でも限定であると考慮されるべきでない。
【００４５】
【表２】
2005192216.tif 000004
【００４６】
従って、再送信指示メッセージは、図４の操作４０４に続く操作において用いられ得る（例えば、図４の操作４０６−４１０を参照）。
【００４７】
図６は、例示的な実施形態に従って、再送信要求を処理するための例示的な設計および操作６００を示す。オプションとして、設計およびオプション６００は、以前の図の開示のコンテクストにおいて実施され得る。しかし、当然、設計および操作６００が任意の所望のコンテクストにおいて実行され得ることに留意すべきである。最も重要なことに、例示的な設計および操作６００は、例示的な目的のみで示され、そしていかなる様式でも限定するとは考慮されるべきでない。
【００４８】
示されるように、例示的な設計および操作６００は、プロセッサに関するホストドライバ６１８を含む。これは、ついで、複数の例示的なコンポーネントを含むオフロードエンジン６０１と通信する。例えば、オフロードエンジン６０１は、受信機６０４、ＣＢポーラー（ｐｏｌｌｅｒ）６０２、ステータスメッセージ生成器６０６、指示ブロック（ＩＢ）キュー６２０、ＩＢパーサ６０８、送信リクエスタ６１０、ＤＭＡキュー６１２、ＣＢメモリ６１４、およびデータパケット生成器６１６を含むことが示され、これらの組み合わせが示されている。種々のコンポーネントの機能は、本明細書以下、例示的な設計および操作６００を用いた説明において、より詳細に説明される。
【００４９】
示されるように、ＣＢポーラー６０２は、ソケットが、ＣＢメモリ６１４において再送信タイムスタンプを試験することによって再送信を必要とするかどうかを検出する。ついで、再送信ステータスメッセージは、ステータスメッセージ生成器６０６によって生成され、そしてホストドライバ６１８を介してローカルホストに送信される。以前に説明したように、ステータスメッセージは、再送信要求に関連するシーケンス数を含み得、そしてＣＢメモリ６１４からの最後の受け取っていないシーケンス数フィールドから得られる。ステータスメッセージはまた、再送信要求に関連する再送信データサイズを含み得る。
【００５０】
ローカルホスト（または、これに関するオフロードエンジン６０１）は、ソケットに関してＳＧＬを維持し得る。ローカルホストが、ステータスメッセージを受信するとき、ドライバ６１８は、リストから最も古いバッファを採用し得、そしてこれを再送信指示メッセージにおいて使用することができる。以前に説明したように、最も古いバッファにおけるデータ量は、リモートホストによって要求される再送信データサイズよりも小さい場合、ローカルホストは、必要に応じて、再送信指示メッセージにおける多くのバッファを含み得る。
【００５１】
ローカルホストは、ステータスメッセージを介してソケットに関するすべてのＡＣＫ進行イベントが報告されるから、リモートホストが、バッファにおいてデータを部分的にＡＣＫした（受け取った）かどうかを知ることができる。この場合、以前に説明したように、ローカルホストは、適切な量によってバッファ中の出発アドレスをオフセットすることができる。表３は、例示的なＡＣＫステータスメッセージフォーマットを示す。そのようなフォーマットは、例示の目的で示され、そしていかなる様式でも限定であると考慮されるべきでない。
【００５２】
【表３】
2005192216.tif 000005
【００５３】
ローカルホストがステータスメッセージを受信した後、ローカルホストは、再送信指示メッセージを生成する。このメッセージは、オフロードエンジン６０１に送信され、そしてバッファ中に、ローカルでキューに組み入れられる（ｑｕｅｕｅｄ）。ＩＢキュー６２０を参照。
【００５４】
ＩＢパーサ６０８は、再送信指示メッセージを受信するとき、このパーサは、指示メッセージをパース（ｐａｒｓｅ）し、そしてそのタイプが再送信指示であると決定する場合、パーサは、送信リクエスタ６１０に要求を転送（ｆｏｒｗａｒｄ）する。ついで、送信リクエスタ６１０が必要なパラメータをＣＢメモリ６１４から検索し、そしてＤＭＡ操作を要求して、ホストメモリから再送信データを検索する。ついで、ＤＭＡの要求は、ＤＭＡキュー６１２におけるＦＩＦＯ中のキューに組み入れられ得る。ＤＭＡ操作は、正常データ送信要求に類似し得る。再送信指示メッセージからのシーケンス数がさらなるビットとともに送信され得、さらに、データ要求が再送信のために存在することを指示するためにＤＭＡ要求もまた送信され得る。
【００５５】
ＤＭＡが完了したとき、データパケット生成器６１６は、その要求が再送信要求であることを識別することができる。なぜなら、再送信ビットは、ＤＭＡデータが利用可能なインジケータとともに確認されるからである。データパケット生成器６１６がこのことに遭遇する場合、このデータパケット生成器６１６は、ＣＢメモリ６１４における受け取られていない（ｕｎＡＣＫｅｄ）最も古いシーケンス数を有する再送信パケットについてのシーケンス数と比較され得る。適合が存在する場合、再送信は、なおも有効であり、そしてパケットが再送信される。ＣＢメモリ６１４におけるシーケンス数のバージョンが再送信データについてのシーケンス数よりも大きい場合、リモートホストは、再送信要求がなされた時と、ＤＭＡが完了された時との間の時間においてデータのすべてまたは部分を受け取る（ＡＣＫｅｄ）。この場合、このデータ再送信要求は、受け取られたデータ量に依存して破棄または継続され得る。
【００５６】
使用中に、重複ＡＣＫまたは選択的受け取り（ＳＡＣＫ）オプションによってトリガされた再送信はまた、ローカルホストにステータスメッセージを用いて起動され得る（ｉｎｓｔｉｇａｔｅ）。ローカルホスト側か見た場合、必ずしも、種々の再送信タイプの間に相違が観察されない。これらの場合について、ステータスメッセージを要求するようにレシーバ６０４が装着され得る。二重ＡＣＫの受信した閾値数に達すると、レシーバ６０４は、再送信ステータスメッセージを要求し、そしてソケットＣＢメモリ６１４に二重ＡＣＫ状態ビットを設定する。レシーバがさらなる重複ＡＣＫを受信し、そしてこのビットがなおも設定されていることを観察するとき、さらなる再送信はされない。データパケット生成器６１６が再送信パケットを送信するとき、これは、上記ビットを消去し得る。
【００５７】
レシーバ６０４がリモートホストから、ＳＡＣＫオプションを含むパケットを受信するとき、このレシーバは、再送信ステータスメッセージを要求し得る。二重ＡＣＫの場合とは異なり、再送信ステータスメッセージは、受信したすべてのＳＡＣＫオプションについて要求され得る。再送信データサイズもまた、ＳＡＣＫオプションにおいて受信されたパラメータから分かる。
【００５８】
図７は、各々のソケットについて維持されるＳＧＬリストの例示的な設計を示す。ＳＧＬ７００は、ソケットにおいて送信されるデータを特定するエントリリストを含む。
【００５９】
各々のＳＧＬエントリが、送信されたデータが格納されるホストメモリにおける位置に対するポインタを、送信されるべきデータ量とともに含む。表４は、例示的なＳＧＬエントリフォーマットを示す。このようなフォーマットは、例示の目的のためにのみ示され、そしていかなる様式においても限定であると考慮されるべきでない。
【００６０】
【表４】
2005192216.tif 000006
【００６１】
２つのポインタが各々のＳＧＬについて維持される。第一のポインタは、次のエントリが書き込まれるＳＧＬ内の位置を示す。７０１を参照。より多くのデータがソケットに送信されるとき、このポインタによって示されるＳＧＬ位置が、そのデータが配置される位置およびデータが送信される量が含まれるホストアドレスを含むＳＧＬエントリとともに書き込まれる。
【００６２】
ＳＧＬのために維持される第二のポインタは、受け取られていない最も古いデータバッファに対するポインタである。７０２を参照。このポインタを使用して、再送信ステータスメッセージが受信されたとき、どのデータが再送信されるべきかの追跡を維持する。ローカルホストが、リモートホストが首尾よく受信されたデータ量を示すＡＣＫステータスメッセージを受信したとき、このポインタが増分される。最も古いＳＧＬエントリにおけるすべてのデータがピアによって受け取られたとき、上記エントリによって示されたバッファは、ローカルホストから解放されそして再利用され得る。このようにして、ローカルホストは、再送信ステータスメッセージを受信したときに再送信されるべきデータを迅速に見いだすことができる。
【００６３】
種々の実施形態が上記されてきたが、それらは、例示の目的にのみ提示されたのであり、限定ではないことが理解されるべきである。従って、好ましい実施形態の広さおよび範囲は、上記例示的な実施例によっては何ら限定されるべきでなく、むしろ、別紙の特許請求の範囲およびその等価物にしたがってのみ限定されるべきである。
【００６４】
（発明の要旨）
ネットワークにおけるデータの再送信を実行するためのシステムおよび方法が提供される。本発明に包含されるのは、システムメモリおよびネットワークと通信するオフロードエンジンである。オフロードエンジンは、ネットワークにおいてデータ送信の再送信を管理するように働く。
【産業上の利用可能性】
【００６５】
本発明は、ネットワークにおけるデータの再送信を実行するためのシステムおよび方法を利用する任意の産業において有用である。
【図面の簡単な説明】
【００６６】
【図１】図１は、オフロードエンジンのようなインターフェイスデバイスを備えるホストからデータを送信および再送信するための先行技術方法のフローチャートである。
【図２】図２は、１つの実施形態に従うネットワークシステムを例示する。
【図３】図３は、１つの実施形態が実施され得る例示的なアーキテクチャを示す。
【図４】図４は、１つの実施形態に従う、ネットワークにおけるデータの再送信を実施するための例示的な方法を例示する。
【図５】図５は、１つの実施形態に従う、再送信指示メッセージを生成するための例示的な方法を例示する。
【図６】図６は、１つの実施形態に従って、再送信要求を処理するための例示的な設計および操作を例示する。
【図７】図７は、１つの実施形態に従って、データ送信を追跡するために使用されるＳＧＬの例示的設計を示す。
【図１】
2005192216.tif 000007
【図２】
2005192216.tif 000008
【図３】
2005192216.tif 000009
【図４】
2005192216.tif 000010
【図５】
2005192216.tif 000011
【図６】
2005192216.tif 000012
【図７】
2005192216.tif 000013