(57)【特許請求の範囲】
【請求項１】
送信ユニット（７００、１０００）が第一データ送信速度を有し、第一の送り先（７１０、１０２０）が第一データ受信速度を有し、第一データ送信速度が第一データ受信速度よりも速い、送信ユニット（７００、１０００）からデータ・ネットワーク（１０２）を介して第一の送り先（７１０、１０２０）にデータの第一セグメント（１０１）を送信するための手段であって、当該手段は肯定応答、ＡＣＫ、を用いない通信手段であり、かつ
・  前記第一セグメントの少なくとも一部分を一つ以上のデータ・パケットとして第一の送り先に送信し、その送信が送信ユニットから第一の送り先の方向にだけ向いていることと、
・  少なくとも第二セグメント（１０１）の少なくとも一部分を一つ以上のデータ・パケットとして一つ以上の追加した送り先（７１０、１０２２）に送信し、その送信が送信ユニットから一つ以上の追加した送り先の方向にだけ向いており、前記第一セグメント（１０１）および／または少なくとも前記第二セグメントを送信し終えるまでスイッチングが繰り返されること
との間で前記スイッチングによって、送信ユニット（７００、１０００）から第一の送り先（７１０、１０２２）への第一送信速度を効果的に低減すること、
二次元リスト構造が前記第一セグメント（１０１）の送信を制御し、前記二次元リスト構造が
・  前記第一セグメントのデータに関して少なくとも一つのデータ記述子（３０２）に関連する第一コンテキスト記述子（３０１）と、
・  少なくとも二つのデータ記述子（３０２）に関連し、各データ記述子（３０２）が二つの異なった送り先（７１０）のためのヘッダー・データ（３０３）に関連する第二コンテキスト記述子（３０１）
を含み、ここで前記手段が
・  前記第一セグメント（１０１）の少なくとも一部分を得るために前記第一コンテキスト記述子（３０１）を処理することと、
・  前記二つの異なった送り先（７１０）のうちの一つのためのヘッダー・データ（３０４）を得ることと前記二つの異なった送り先（７１０）のうちの他の一つのためのヘッダー・データ（３０４）を得るために前記第二コンテキスト記述子（３０１）を処理することと前記第一セグメントの得られた部分を前記二つの異なった送り先（７１０）の一つに送信することと前記第一セグメントの得られた部分を前記二つの異なった送り先（７１０）の他の一つに送信すること
を含む手段。
【請求項２】
第一の送り先（７１０）に送信される前記少なくとも第一セグメント（１０１）のデータ・パケットの間に一つ以上の待ち状態を挿入することを、さらに含む請求項１に記載の手段。
【請求項３】
請求項１または２に記載の手段であって、
・  スイッチングが行われる前に、如何に多くの前記第一セグメントが送信されたかを明示する前記第一セグメント（１０１）の中の第一ポジションを保存すること、および／または保存された各々の位置から送信を再開するために、如何に多くの前記第二セグメントが送信されたか、そして何時前記第一セグメントまたは前記第二セグメントに再びスイッチ・バックされるかを明示する前記第二セグメントの位置を保存することを更に含む手段。
【請求項４】
前記スイッチングが送信パターンに従って行われる、請求項１〜３の何れか一項に記載の手段。
【請求項５】
前記送信パターンが第一送り先（７１０）の受信速度および／または前記追加した送り先（７１０）の少なくとも一つの受信速度に基づいて決定される、請求項４に記載の手段。
【請求項６】
データ（１０１）の前記少なくとも第一セグメントが前記送信ユニット（７００）のメモリに保存され、ここで前記第一セグメントのデータが、前記メモリ（７０１）からダイレクト・メモリ・アクセス・コントローラ（７０３）によって読み出され、そして前記ダイレクト・メモリ・アクセス・コントローラ（７０３）と前記ダイレクト・メモリ・アクセス装置（７０４）が前記送信ユニット（７００）の中央処理装置（７０２）をオフロードするネットワーク・インターフェイス（７０５）を介して前記ネットワーク（１０２）に前記第一セグメントの前記データを更に供給するダイレクト・メモリ・アクセス装置（７０４）に供給される、請求項１〜５の何れか一項に記載の手段。
【請求項７】
前記ダイレクト・メモリ・アクセス装置（７０４）が前記ダイレクト・メモリ・アクセス・コントローラ（７０３）から前記ダイレクト・メモリ・アクセス装置（７０４）に供給されるデータのチェックサムを計算するチェックサム計算ユニット（８０５）を含む、請求項６に記載の手段。
【請求項８】
送信ユニット（７００，１０００）が第一データ送信速度を有し、第一の送り先（７１０，１０２０）が第一データ受信速度を有し、ここで第一送信速度が第一受信速度よりも大きい、送信ユニット（７００、１０００）から第一の送り先（７１０、１０２０）にデータ・ネットワーク（１０２）を介してデータの第一セグメント（１０１）を送信するための装置（７００）であって、当該装置は肯定応答、ＡＣＫ、を用いない通信用に構成された装置であり、
・  送信が送信ユニットから第一の送り先の方向だけに向いている第一の送り先に一つ以上のデータ・パケットとして前記第一セグメント（１０１）の少なくとも一部を送信することと、
・  少なくとも第二セグメント（１０１）の少なくとも一部を一つ以上のデータ・パケットとして送信が送信ユニットから一つ以上の追加した送り先の方向だけに向いている一つ以上の追加した送り先（７１０，１０２２）に送信すること
との間でスイッチングし、前記スイッチングは前記第一セグメント（１０１）および／または少なくとも第二セグメントが送信し終わるまで反復されることによって、
送信ユニット（７００，１０００）から第一の送り先（７１０、１０２０）への第一送信速度を効果的に低減するのに適応したダイレクト・メモリ・アクセス装置（７０４、１００４）と、
前記装置が前記第一セグメント（１０１）の送信を制御する二次元リスト構造を含み、かつ前記二次元リスト構造が
・  前記第一セグメントのデータに関する少なくとも一つのデータ記述子（３０２）に関連する第一コンテキスト記述子（３０１）と、
・  各々のデータ記述子（３０２）が二つの異なった送り先（７１０）のヘッダー・データ（３０４）に関連する、少なくとも二つのデータ記述子（３０２）に関連する第二コンテキスト記述子（３０１）
を含み、前記イレクト・メモリ・アクセス装置（７０４）が
・  前記第一セグメント（１０１）の少なくとも一部分を得るために前記第一コンテキスト（３０１）を処理することと、
・  前記二つの異なった送り先（７１０）の一方のためのヘッダー・データ（３０４）を獲得し、かつ前記二つの送り先のもう一方のためのヘッダー・データ（３０４）を獲得し、かつ前記二つの異なった送り先（７１０）の一つへ前記第一セグメントの獲得された部分を送信し、前記二つの異なった送り先（７１０）の他の一つへ前記第一セグメントの獲得された部分を送信するために前記第二コンテキスト（３０１）を処理すること
に適応する、
ことを含む装置。
【請求項９】
・  第一の送り先（７１０）に送信される前記少なくとも第一セグメント（１０１）のデータ・パケットの間に一つ以上の待ち状態を挿入すること
に前記ダイレクト・メモリ・アクセス装置（７０４）が更に適応した、請求項８に記載の装置。
【請求項１０】
スイッチングが行われる前に、如何に多くの前記第一セグメントが送信されたかを明示する前記第一セグメント（１０１）の第一ポジションを保存すること、および／または如何に多くの前記第二セグメントが送信されたかを明示する前記第二セグメントのポジションを保存すること、そして前記第一セグメントまたは前記第二セグメントの送信が再びスイッチ・バックされるとき各保存されたポジションから送信を再開すること
にダイレクト・メモリ・アクセス装置（７０４）が更に適応した、請求項８または９に記載の装置。
【請求項１１】
前記スイッチングが送信パターンに従って行われる、請求項８〜１０の何れか一項に記載の装置。
【請求項１２】
前記送信パターンが第一送り先（７１０）の受信速度、および／または前記追加の送り先（７１０）の少なくとも一つの受信速度に基づいて決定される、請求項１１に記載の装置。
【請求項１３】
前記装置（７００）がデータ（１０１）の前記少なくとも第一セグメントをその中に保存したメモリ（７０１）と前記メモリ（７０１）から前記第一セグメントのデータを読み、そして前記ダイレクト・メモリ・アクセス装置（７０４）にそれを供給するのに適応したダイレクト・メモリ・アクセス・コントローラ（７０３）を含み、前記ダイレクト・メモリ・アクセス装置（７０４）が前記第一セグメントを前記ネットワーク（１０２）にネットワーク（７０５）を介して供給するのに適応しており、前記ダイレクト・メモリ・アクセス・コントローラ（７０３）と前記ダイレクト・メモリ・アクセス装置（７０４）が前記送信ユニット（７００）の中央処理装置（７０２）を効果的にオフロードする、請求項８〜１２の何れか一項に記載の装置。
【請求項１４】
前記ダイレクト・メモリ・アクセス装置（７０４）が前記ダイレクト・メモリ・アクセス・コントローラ（７０３）から前記ダイレクト・メモリ・アクセス装置（７０４）に供給されたデータの上でチェックサムを計算するチェックサム計算ユニット（８０５）を含む、請求項１３に記載の装置。
【請求項１５】
一つ以上の処理ユニットに請求項１〜７の何れか一項に従って該手段を実行させるために、その上に保存された命令を有するコンピュータ読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般にネットワーク・オフローデングに関わるものである。
【０００２】
特に、本発明はデータ・ネットワークを介してデータの第一セグメントを送信ユニットから第一送り先に送信する手段とデータ・ネットワークを介してデータの第一セグメントを送信ユニットから第一送り先に送信する装置に関係する。
【０００３】
更に、本発明は一つ以上の処理ユニットに本発明による手段を実行させるために、その上に保存された命令を有するコンピュータ読み取り可能な媒体に関係する。
【背景技術】
【０００４】
ネットワーク割り込み可能な装置が比較的大きなデータの塊（以後、セグメントと言う）、例えばＪＰＥＧ画像あるいは何か他種のデータをネットワーク上に送信するとき、物理的な媒体に送信される前にネットワーク割り込み可能な装置によってそのセグメントは普通いくつかのデータ・パケットに分割される。一例として、イーサネット（登録商標）・パケットの最大ペイロード・サイズは１５００バイトである。追加として、ＴＣＰとＩＰヘッダーのようなプロトコル・ヘッダーが各データ・パケットに対して生成されなければならず、そしていくつかのプロトコル・スタック（ＴＣＰ／ＩＰ）に対して、一つまたはいくつかのチェックサムが各データ・パケットに関して計算されなければならない。ここで、その一つ以上のチェックサムはデータ・パケットのヘッダーに保存される。
【０００５】
普通、データの塊またはセグメントはペイロードのサイズよりも大きい（原理的には、セグメント・サイズは例えば１バイト程度に小さいこともある）。しばしば、それはペイロード・サイズの数倍になる。
【０００６】
ヘッダーとチェックサムを含むこれらのパケットを生成するプロセスは伝統的にはソフトウェアで行われる。これは相当な量のＣＰＵ動作を使用することがあり、それはＣＰＵの性能とネットワーク・スピードに依存する。
【０００７】
これに向けたいろいろな解決法がハードウェアの中でいろいろな機能を実装することによって提案されてきた。そのような処理はまた、しばしばネットワーク・オフローデング（ハードウェア）と言われている。
【０００８】
ネットワーク・オフローデングを行うために利用できるハードウェア解決法がいくつか存在する。ハードウェアでネットワーク・オフローデングを行うための従来の方法は以下のように要約することが出来る。
−  メモリからデータの１ＭＴＵ（最大転送単位、すなわち使用したネットワーク媒体上の１パケットの最大ペイロード・サイズ）を読む。
−  メモリから読んでいる間にペイロードの上でチェックサムを計算する。
−  ヘッダーを生成する。
−  ヘッダーとペイロードを含むパケットを送信する。
−  送信している間に、メモリから１つの追加ＭＴＵのデータを読む。
−  セグメント、即ちデータの塊における全てのパケットが送信されるまで続ける。
【０００９】
この解決法の欠点は多くのパケットを高速で送ることがあって、比較的低速で結合された受信クライアントにとって問題を引き起こすかもしれないということである。例として、比較的低速なネットワーク（例えば、１メガビット／秒のネットワーク）に接続されたクライアントに大きなセグメントを送信したいと思っている比較的高速なネットワーク（例えば、１ギガビット／秒のネットワーク）に接続された装置を考えてみよう。この場合には、装置とクライアント間の転送パスにあるルータはクライアントがそれを全部読み終わるまでデータをバッファしなければならない。これはルータ内のバッファの疲労を来たすかも知れない。更に、ルータのバッファ・サイズは制限されていて、かつ他の転送パスのためにデータをバッファする必要もあるとき、このことはデータ・パケットを欠落させ、かつそれによって再送を要求するようになるかも知れない。パケット欠落の可能性はセグメント・サイズが大きくなればなるほど増加する。
【００１０】
この問題に対して以前に知られている解決法は、普通ソフトウェアで実施され、各送り先へは限られた数のパケットのみを送り、かつ追加のデータ・パケットを送る前にデータ確認（ＡＣＫ）のための待機を含むものである。しかしながら、これはＣＰＵの使用を増加し、かつその待機のためにデータを送信するに必要な全体の時間を遅らせることもあるかも知れない。
【００１１】
例えば、特許文献１はＡＣＫを使用したハードウェア実施について述べている。この欠点はＡＣＫの使用を頼りにするＴＣＰ／ＩＰのようなプロトコルのみがサポートされうるということである。
【００１２】
それ故に、ルータ・バッファの疲労やデータ・パケットの欠落の問題に対処する必要がある。
【００１３】
これは、どこでパケットが同じ、または同様な速度でインターリーブされるかということを除いて、パケットを異なった送り先にインターリーブすることによって少なくともある範囲までは対処されてきた。
【００１４】
特許文献２は殆どの大きな多重パケット・メッセージと低速パス・メッセージに関するプロトコル処理を避ける高速パスを提供するデータ通信用の通信処理装置（ＣＰＤ）を開示している。ネットワーク・プロセッサはホストのプロトコル・スタックを含む低速パスからのメッセージか、またはホストのプロトコル・スタックを迂回する高速パスからのメッセージかのどちらかを選択する。
【００１５】
特許文献３は、殆どのメッセージを処理し、データ転送を加速し、ホストＣＰＵからの時間集中的な処理問題をオフロードするプロトコルを避ける高速パスを提供するデータ通信のためにホスト・コンピュータと共に動作する装置を開示している。ホストは高速パスか、または低速パスか、どちらかの処理のために選択されたメッセージを有効にするための処理能力を有している。
【００１６】
特許文献４は、ＴＣＰ／ＩＰプロトコル処理演算を並列で行う状態マシーンを含むＴＣＰオフロード・エンジン（ＴＯＥ）装置を開示している。三つの異なった観点から、それはＴＣＰ変数とヘッダーの値、多重ＴＣＰ状態変数の更新を保存し、ＤＭＡ手段を設定する。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】米国特許出願公開第２００６／０３４１７６号明細書
【特許文献２】米国特許第７，１７４，３９３号明細書
【特許文献３】米国特許第７，１６７，９２６号明細書
【特許文献４】米国特許第６，９９６，０７０号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１８】
本発明の目的はルータ・バッファの疲労とデータ・パケットの欠落、またはそれらの何れかを避けるか、または最小化する手段（そして対応する装置）を提供することである。
【００１９】
更なる目的はセグメント化処理のためのＣＰＵ使用を低減することである。
【課題を解決するための手段】
【００２０】
これはデータ・ネットワークを介してデータの第一セグメントを送信ユニットから第一の送り先に送る手段によって達成され、その送信ユニットは第一のデータ送信速度を有しており、第一の送り先は第一のデータ受信速度を有しており、ここでは第一のデータ送信速度が第一のデータ受信速度よりも大きい。その手段は、前記第一セグメントの少なくとも一部分を一つ以上のデータ・パケットとして第一の送り先へ送信している間に送信ユニットから第一の送り先への第一送信速度を、スイッチングすることによって第一送信速度を効果的に低減することと、その送信は送信ユニットから第一の送り先の方向だけに向いていることと、少なくとも第二セグメントの少なくとも一部分を一つ以上のデータ・パケットとして一つ以上の追加の送り先に送ることと、その送信は送信ユニットから一つ以上の追加の送り先の方向だけに向いていることと、前記スイッチングは前記第一セグメントと少なくとも前記第二セグメントが送り終わるまで反復されることを包含する。
【００２１】
一つ以上の待ち状態を前記の少なくとも第一セグメントのデータ・パケットを第一の送り先に送られている間に挿入することが可能である。
【００２２】
この方法で、送信システムの総合パケット速度が維持されている間、クライアントまたは送り先へのパケット速度が低減される。それによって比較的低速のクライアントへのデータが最高速度で送られることがないのでパケット・ロスとルータ・バッファの疲労、またはそれらの何れかの発生する確率の低減が達成される。
【００２３】
加えるに、前のクライアントに与えられたデータが完全に送信し終えるまで他のクライアントへの送信は待たないので、全ての送り先は（多重の送り先に送るとき）早くデータを獲得する。クライアントはこの方法で受信データの処理を早く始めることができる。
【００２４】
このような方法の有利性は任意のプロトコルに対してサポートを可能にすることにある。即ち、それはＡＣＫを用いないプロトコルと同様にＡＣＫを用いるプロトコルをサポートする。例えば、ＵＤＰの上でＲＴＰのサポートが提供される。これは前述の米国特許出願公開第２００６／０３４１７６号明細書で記述されているＡＣＫに基づいた通信に比べて有利な点である。
【００２５】
一実施態様において、この手段は更に、スイッチングが行われる前に、如何に多くの前記第一セグメントが送信されたかを定義する前記第一セグメントの第一ポジションを保存すること、および／または如何に多くの第二セグメントが送信されたか、そしていつ前記第一セグメントまたは第二セグメントの送信が再び切り替えられるかを定義する前記第二ポジションの位置を保存することと、各保存した位置から送信を再開することと、を包含する。
【００２６】
一実施態様において、スイッチングは送信するパターンに従って行われる。
【００２７】
一実施態様において、送信するパターンは第一送り先の受信速度および／または少なくとも一つの前記の追加送り先の受信速度に基づいて決定される。
【００２８】
一実施態様において、少なくとも第一セグメントのデータは前記送信ユニットのメモリに保存される。ここで、前記第一セグメントのデータは前記メモリからダイレクト・メモリ・コントローラ（または、オフローデング装置）によって読まれ、そして前記第一セグメントの前記データをネットワーク・インターフェイスを介して更に与えるダイレクト・メモリ・アクセス装置に与えられる。ここでは、前記ダイレクト・メモリ・コントローラと前記ダイレクト・メモリ・アクセス装置が前記送信ユニットの中央処理装置をオフロードする。
【００２９】
一実施態様において、ダイレクト・メモリ・アクセス装置は前記ダイレクト・メモリ・コントローラから前記ダイレクト・メモリ・アクセス装置に与えられたデータの上でチェックサムを計算するチェックサム・ユニットを包含する。
【００３０】
一実施態様において、二次元リスト構造は前記スイッチングを制御し、前記二次元リスト構造はメモリ内のヘッダー・データについて少なくとも一つのデータ記述子に関する第一のコンテキスト記述子と、前記第一セグメントのデータについての少なくとも一つのデータ記述子に関係する第二のコンテキスト記述子を包含する。ここで、前記第二のコンテキスト記述子は前記第一セグメントの何バイトがスイッチングの前に送られるかの表示を包含する。そこで前記手段は前記ヘッダー・データを得るための前記第一のコンテキスト記述子の処理と、前記第一セグメントのデータを得るための前記第二のコンテキスト記述子の処理と、前記表示に従って多数バイトのデータを送信することとを包含する。
【００３１】
一実施態様において、二次元リスト構造は前記第一セグメントの送信を制御し、前記二次元リスト構造は前記第一セグメントのデータについて少なくとも一つのデータ記述子に関する第一のコンテキスト記述子と、少なくとも二つのデータ記述子に関する第二のコンテキスト記述子と、二つの異なった送り先のためのヘッダー・データに関する各データ記述子とを包含する。ここで前記手段は、前記第一セグメントの少なくとも一部分を得るために前記第一のコンテキスト記述子を処理することと、前記二つの異なった送り先の内の一つのためのヘッダー・データを得るためと前記二つの異なった送り先のもう一つのためのヘッダー・データを得るために前記第二のコンテキスト記述子を処理することと、前記二つの異なった送り先のもう一方に前記第一セグメントの得られた部分を送ることと、を包含する。
【００３２】
本発明はまた送信ユニットから第一の送り先へデータ・ネットワークを介してデータの第一セグメントを送信するための装置に関係する。送信ユニットは第一データ送信速度を有し、第一の送り先は第一データ受信速度を有している。ここで、第一データ送信速度は第一データ受信速度よりも大きい。その装置は、前記第一セグメントの少なくとも一部分を一つ以上のデータ・パケットとして第一の送り先に送信する間にスイッチングすることによって送信ユニットから第一の送り先への第一送信速度を効果的に低減するのに適合したダイレクト・メモリ・アクセス装置と、送信が送信ユニットから第一の送り先の方向だけに向いていることと、一つ以上の追加的な送り先に一つ以上のデータ・パケットとして少なくとも第二セグメントの少なくとも一部分を送信することと、送信が送信ユニットから一つ以上の追加的な送り先にだけ向いていることと、前記第一セグメントおよび／または少なくとも前記第二セグメントが送信し終わるまで前記スイッチングが反復されることと、を包含する。
【００３３】
本装置の実施態様は本手段の実施態様に対応し、同じ理由によって同じ有利性を有する。本装置の有利な実施態様は請求項で定義され、以下に詳細に記述される。
【００３４】
更に、本発明は、本発明にしたがって一つ以上の処理ユニットに本手段を実行させるための命令を保存したコンピュータ読み取り可能な媒体にも関わるものである。
【００３５】
本発明のこれらと他の態様は、図で示される実例となる実施態様から明らかであり、また参照することによって明らかになる。
【図面の簡単な説明】
【００３６】
【図１】送信中に二つのセグメントをインターリーブするプロセスの実例を図示している。
【図２ａ】本発明にしたがってインターリーブするプロセスの実例を図示している。
【図２ｂ】本発明にしたがってインターリーブするプロセスの実例を図示している。
【図２ｃ】本発明にしたがってインターリーブするプロセスの実例を図示している。
【図３】一実施態様にしたがっていろいろなインターリーブされた送信のトラックを保つための構造の概観を図示している。
【図４】インターリーブされた送信のトラックを保つための構造の特殊な一例を図示している。
【図５】本発明によるインターリーブ・プロセスの一実施態様のフロー・チャートを図示している。
【図６】メモリから一度だけデータを読んでいる間に同じセグメントをいくつかのクライアントに送るのに有利なリスト構造例の実施態様を図示している。
【図７】ハードウェア・ネットワーク・オフローデングを持つ送信ユニットまたはシステムのブロック図を示している。
【図８】ＤＭＡコントローラの一実施態様のブロック図を示している。
【図９】ハードウェア・ネットワーク・オフローデングを有する送信ユニットまたはシステムと、ネットワークに接続された一つ以上のクライアントを含むシステムのブロック図を示している。
【図１０】送信ユニットから受信機への送信の信号伝達図である。
【発明を実施するための形態】
【００３７】
図１は送信中に二つのセグメント１０１をインターリーブするプロセスの一例を概略的に示している。第一セグメント（セグメント１）１０１と第二セグメント（セグメント２）１０１および各セグメントのパケットがネットワーク１０２を介して時間とともに送信される方法が示されている。
【００３８】
一例として、各セグメントは１０キロバイトのペイロードを含んでおり、ここで第一セグメントのペイロード・データは第一クライアント（示されていない）に送られ、これは比較的遅い。そして第二セグメントのデータは第二クライアント（示されていない）に送られる。これは比較的速い。この例ではＭＴＵは１キロバイトである。
【００３９】
そのとき、パケットはインターリーブ送信によって（ｐｘ＝クライアントｘ）：ｐ２  ｐ２  ｐ２  ｐ１  ｐ２  ｐ２  ｐ２  ｐ１  ｐ２  ｐ２  ｐ２  ｐ１  ｐ２  ｐ１  ｐ１  ｐ１  ｐ１  ｐ１  ｐ１  ｐ１として送信される。この方法で、クライアント１へのパケット速度が低減されるが、この間送信システムの総合パケット速度は維持されている。送信されるデータ・パケットの特定の順序付けが適切な送信パターンに従って行われる。クライアント１へのパケット送信速度の低減はルータ・バッファの疲労および／またはデータ・パケットの欠落の可能性を避けるか、または少なくとも最小化するだろう。これはパケットがクライアント１へ‘遅れないでついて行ける’ことができるペースで送られるからである。更に、クライアント２へ全てのパケットが送られると、パケット送信速度を低く抑えておくために（それによって、更にバッファの疲労と、送信システムとクライアント１の間でのデータ・パケットの欠落を生じさせるのを避けるために、あるいは少なくともこの突発事故が起こる確率を低減するために）クライアント１への残りのパケットの間に一つ以上の待ち状態を挿入することが可能であろう。一つ以上の待ち状態を挿入する代わりに別の方法として、一つ以上の他のセグメントのためのデータ送信を開始することができる。例えば、今の例では、クライアントへの全てのパケットが送られたとき、クライアント３へのパケット（あるいは、クライアント２への新しいセグメント）がクライアント１への残りのパケットとインターリーブすることもあり得る。
【００４０】
パケットはハードウェアでネットワーク・オフローデングを行う従来の方法に従って（前に述べたもののように）ｐ１  ｐ１  ｐ１  ｐ１  ｐ１  ｐ１  ｐ１  ｐ１  ｐ１  ｐ１  ｐ２  ｐ２  ｐ２  ｐ２  ｐ２  ｐ２  ｐ２  ｐ２  ｐ２  ｐ２として送られる（第一セグメントが最初に送られるものと仮定すると）ことになる。
【００４１】
もしプロセスがハードウェアで実施されるならば、ＣＰＵの使用はハードウェア・オフロードなしの解決方法と較べて劇的に低減される。
【００４２】
更なる利点はクライアント２（第一セグメントが従来の方法にしたがって最初に送られるものと仮定すると）が、もしクライアント２へのパッケージの送信が始まる前に全てのパケットがクライアント１に送り終えるまでクライアント２が待つとするならば、それよりも早くデータを取得し、そして、それによって早くデータ処理を始めることができることである。
【００４３】
図２ａ−２ｃは本発明にしたがってインターリーブするプロセスの実例を概略的に示している。インターリーブ送信中で時間内での三つの異なった点で三つのセグメント１０１（セグメント１、セグメント２、セグメント３）が示されている。三つのセグメント１０１は三つの異なったクライアント装置（示されていない）に送られる可能性がある。時間内の最初の点（図２ａ）は送信が始まる前である。時間内の第二の点（図２ｂ）は送信中であり、時間内の第三の点（図２ｃ）は送信が完了した後である。
【００４４】
図２ａ−２ｃに於いて、表示が現在のセグメントに与えられている。即ち、そのセグメントが現在送信されるデータを持っている。更に、時間内の各点での各セグメントの黒い矢は既定のセグメントの如何に多くのデータがずっと送信されてきたか、ということを示している。送信された既定のセグメントのデータ量を示す点はネットワーク利用の減少を避けるために完全なパケット境界に位置している。
【００４５】
ＤＭＡ（ダイレクト・メモリ・アクセス）コントローラとＤＭＡ装置、ＤＭＡクライアント、あるいはネットワーク・オフローデング・ユニット（示されていない。以後、単にＤＭＡ装置と示す）は、以下にもっと詳細に説明するように、メモリ内でいくつかのデータ領域へのアクセス（例えば、各セグメントについて一つ）を行う。ＤＭＡ装置は各データ領域において現在位置のトラックを保持する。送信、またはスイッチング・パターン（以後、単に送信パターンと示す）が得られるか、または導出される。そしてこの点において情報はそれを指示するＤＭＡコントローラに与えられる。つまり、いつデータ領域をスイッチするか、−そしてそれによって他のセグメントへ向けてデータ送信を始める（もし、何か残っているならば）かということである。次にもっと詳細に説明するようにインターリーブ送信は比較的遅いクライアントへの送信速度を効果的に減少するので、その固有の送信パターンは低減されたパケット・ロスと共にネットワークをオフロードする。スイッチングするとき、ＤＭＡ装置は自動的に送信されるべきデータを更に多く有する次のデータ領域を選択する。
【００４６】
図２ａはまだ何も行われていない状態を示している。ここで、各セグメントのデータが如何ほど送信されたかを示している、各指示が各セグメントを開始する場所にある。即ち、データはまだ何も送信されていない。セグメント１は、この特別な例では、現在のセグメントとして示されている。
【００４７】
図２ｂはネットワーク・オフローデングとデータの送信が、ある時間行われた状況を示している。ここで、セグメント１の殆ど半分とセグメント３の全データがそれらの各クライアント装置または送り先（以後、単にクライアントとして示す）にネットワークを介して送信されている。現在、データはセグメント２から送信される。これは現在のセグメントとして示されている。ＤＭＡコントローラがＤＭＡ装置によってスイッチするように指示された後、それはセグメント１からデータを送信するようにスイッチする（セグメント３が完了して、現在は他のセグメントがないので）、そしてセグメント１からのデータの最後の送信の間に停止したところから取り出すことになる。
【００４８】
このスイッチは、特定の送信に依存し、セグメント２の全てのデータが送信し終わった時、またはその前に行われる。もし前ならば、セグメント２に戻るときに送信がその点から再開できるようにセグメント２の現在位置が保存される。
【００４９】
図２ｃは三つのセグメントの全てのデータが送信し終わったときの状態を示している。その時、ＤＭＡコントローラは仕事が終了したことをＤＭＡ装置に知らせ、つぎの命令を待つことになる。
【００５０】
説明したように、三つのセグメントからデータを送信する間のジャンプやスイッチは特定の送信パターンに従って行われる。特定の送信パターンはデータを受信するいろいろなクライアントの能力によって影響をうける。考慮すべき一つのパラメータは例えば、いろいろなクライアントのネットワーク速度である。例えば、テストデータ・パケットをクライアントに送り、そして確認を待ちうけることによって、これは容易に測定することができる。代わりには、それは他の方法でも測定できるであろう。
【００５１】
特別な例として、クライアント１と２のネットワーク（受信）速度を約２メガビット／秒、そしてクライアント３の（受信）速度を約４メガビット／秒としよう、その時（平均で、または一般に）セグメント３（クライアント３へ）からデータが多くの場合の約２倍送信されるはずである（即ち、セグメント３が現在のセグメントになる）。そして、例えば送信パターンはセグメント１からＸデータを送信、セグメント３からＸデータを送信、セグメント２からＸデータを送信、セグメント３からＸデータを送信、セグメント１からＸデータを送信、などとなるはずである。
【００５２】
他の例としては、二つの異なったクライアントに対して二つのセグメントを取ろう。ここで、一つのクライアントは他のクライアントよりも３倍速い。この時、送信パターンは例えば、セグメント１からＸデータを送信、セグメント２から３＊Ｘデータを送信、それから全てのデータが送信されるまで反復されるはずである。
【００５３】
前に述べたように、送信速度を低く維持し、かつそうすることによって更にバッファの疲労やデータ・パケットの欠落を避けるために他のセグメントが完全に送信され終わったときに、待ち状態もまた一つ以上のセグメントに対して挿入されることが可能である。代わりに、一つ以上の追加セグメントに関するデータ送信が（例えば、同じまたは新しいクライアントに対して）開始されるはずである。
【００５４】
図３は、実施態様に従っていろいろなインターリーブ送信のトラックを保持するための構造の概要を概略的に示している。
【００５５】
一つ以上のクライアントにデータ・パケットとして送られるべき、メモリに保存されたデータへのアクセスを制御する記述子３０１、３０２を包含する二次元リスト構造が示されている。各記述子はＤＭＡ装置にそれがどのデータ型であるか（例えば、ヘッダー・データか、それともペイロード・データか）、かつそれをどのように扱うかを指示するメタデータを含むことがある。記述子はまた、セグメントの終点（ＥＯＳ）やリストの終点（ＥＯＬ）のようないろいろな状況を知らせるために一つ以上の制御フラッグを含むことがある。そのようなリスト構造はまた一般にスキャッタ・ギャザー・リスト（ＳＧＬｓ）として知られており、データを不連続なメモリからフェッチできるようにするものである。
【００５６】
一つのタイプの記述子は、例えばデータ記述子３０２であり、それは実際のデータ・バッファ３０３のトラック、即ちメモリまたは保存ユニットと保存データはどのセグメントに属するか、を保持するために使用される。他のタイプの記述子は例えばコンテキスト３０１であり、それは（この実施態様によれば）データ記述子３０２を含む或る状態のリストのトラックを保持するために使用される。
【００５７】
ＤＭＡの制御の下で、ＤＭＡコントローラはいくつかのコンテキストをスイッチすることができる。各コンテキストは、図３と以下の説明から分かるように一個のクライアントと例えば、その一個のクライアントに関するいくつかのセグメントと関連することがある。更に、いくつかのセグメントは同じセグメントに関連することがある−与えられたセグメントのヘッダー・データに関係するコンテキストと同じセグメントのペイロードに関係する他のコンテキストについては後で分かる。
【００５８】
各スイッチで、ＤＭＡ装置はリストの状態を保存する（または、しない）ように指示されることが可能である。リストの中でＥＯＬに到達すると、与えられたコンテキストは無効になり（または、代わりに除去され）、そしてＤＭＡ装置は二度とそのコンテキストにスイッチしない。ＤＭＡ装置は好ましくも一つ（あるいは、それ以上）のコンテキスト記述子を記憶することもある（普通は保存要求を低減するには、単に一個で充分である）。
【００５９】
図３で示される特殊な例では、コンテキスト１とコンテキスト２はコンテキスト記述子３０１であり、一方においてデータ１、データ２、データ３、データ４はデータ記述子３０２である。
【００６０】
それ故に、コンテキスト記述子コンテキスト１とコンテキスト２によって与えられるように、典型的なリスト構造は二つのコンテキストを包含する。
【００６１】
コンテキスト１は、データ記述子データ１とデータ３によってそれぞれバッファ１およびバッファ２の３０３に対してどの点であるかが示されるので、データの一個のセグメントを識別する。もし、セグメントが一個のバッファに保存することができるならば、たった一個のデータ記述子がコンテキスト・リストに存在するだろう。データ記述子データ３は更に二つのセットフラッグを包含する。即ち、ＥＯＳとＥＯＬであり、セグメントはもはやコンテキスト１の一部分ではなく（ＥＯＳ）、そしてデータ３はコンテキスト１の最後のリスト要素である（ＥＯＬ）であることを伝えている。
【００６２】
コンテキスト１が単にデータの一個のセグメントに関係しているということはリスト・コンテキスト１がＥＯＬに到達する前に唯一のＥＯＳのみを言及し、含んでいるということから理解できる。
【００６３】
同様な方法によって、データ記述子３０２データ２とデータ４によってバッファ３とバッファ４の３０３に対してそれぞれどの点かが示されるので、コンテキスト２は二つのセグメントを識別する。もし、二つのセグメントが単一のバッファに保存されるならば、データ２とデータ４は同じバッファを指定するだろう（しかし、二つの異なった位置で）。データ２はセットＥＯＳフラッグを含み、データ４はセットＥＯＳとセットＥＯＬフラッグを包含する。
【００６４】
コンテキスト２記述子はまた、現在もはやＤＭＡ装置に処理されているコンテキストはない、即ち現在送信されるべき付加データはない、ということを伝達するセットＥＯＬフラッグを含んでいる。
【００６５】
コンテキスト２がデータの二つのセグメントに関係しているということはリスト・コンテキスト２がＥＯＬに到達する前に二つのＥＯＳを含んでいるということから理解できる。
【００６６】
最も簡単な場合、一つの送り先に送信されている唯一のセグメントがある。そして、これは最速で（即ち、待ち状態が必要ない）パケットを受信することができ、そのリスト構造は二つのデータ記述子を有する一次元リストに‘収縮する’。二つのデータ記述子のうちの一つはヘッダー・データを指定し、もう一つはセグメントのペイロード・データを指定している。この場合には、インターリーブ送信は必要なく、コンテキスト記述子も必要ない。
【００６７】
図４はインターリーブ送信のトラックを保持するための特別な構造の一例を概略的に示している。
【００６８】
ここでは、特別なリスト構造が設定され、一例として、四つのコンテキスト３０１であるコンテキスト１、コンテキスト２、コンテキスト３、コンテキスト４を含んでいる。
【００６９】
コンテキスト記述子３０１のコンテキスト１はデータ記述子３０２のデータ１とコンテキスト記述子３０１のコンテキスト２を参照する。データ記述子３０２のデータ１はメタデータとしてＥＯＬとＥＯＳフラッグを含み、そしてデータがバッファまたは他の適当なメモリに保存されている既知のセグメントであるセグメント１のヘッダー・データ３０４を参照する。
【００７０】
コンテキスト記述子３０１のコンテキスト２はデータ記述子３０２のデータ２とコンテキスト記述子３０１のコンテキスト３を参照する。データ記述子３０２のデータ２はＥＯＬとＥＯＳフラッグをメタデータとして含み、そしてデータがバッファまたは他の適当なメモリに保存されているセグメントであるセグメント１に関してペイロード・データ３０５を参照する。
【００７１】
コンテキスト記述子３０１のコンテキスト３はデータ記述子３０２のデータ３とコンテキスト記述子３０１のコンテキスト４を参照する。データ記述子のデータ３はＥＯＬとＥＯＳフラッグをメタデータとして含み、そしてデータがバッファまたは他の適当なメモリに保存されているセグメントであるセグメント２に関してヘッダー・データ３０４を参照する。
【００７２】
コンテキスト記述子３０１のコンテキスト４はデータ記述子３０２のデータ４とコンテキスト記述子３０１のコンテキスト１をもう一度戻って参照する。データ記述子３０２のデータ４はＥＯＬとＥＯＳフラッグをメタデータとして含み、そしてデータがバッファまたは他の適当なメモリに保存されているセグメントであるセグメント２に関してペイロード・データ３０５を参照する。
【００７３】
インターリーブ送信のためのリスト構造は本発明にしたがって送信中に処理され、そしてどう動作するか、どこからデータを読み出すか（ＤＭＡコントローラを介して）、データは何の型か、いつセグメントをスイッチするか、などをＤＭＡ装置に指示する。
【００７４】
示されている典型的な構造について得られたプロセスはそのとき例えば以下のように要約できるだろう。
【００７５】
１．そのとき、ＤＭＡコントローラにセグメント１に属しているヘッダー・データをＤＭＡ装置への配信を始めさせ、そして、それからネットワークを介してそれぞれのクライアントまたは送り先に供給できる、コンテキスト１を処理しなさい。
【００７６】
２．ヘッダー・データが送信された後、ＤＭＡコントローラはコンテキスト２にスイッチするようにＤＭＡ装置に指示される。セグメント２へのデータ送信（即ち、コンテキスト３と４）にスイッチする前に、セグメント１の全てのペイロード・データが送信されるか、されないかに依存するのでコンテキスト１、即ちヘッダー・データが再び必要とされるかどうか、ということはこの段階では知られていない。それ故に、ＤＭＡコントローラは現在のコンテキストの位置を保存しているＤＭＡ装置なしでコンテキスト２にスイッチするように指示される。ＤＭＡ装置はこのコンテキスト、即ちコンテキスト１を思い出すように指示される。
【００７７】
３．コンテキスト２にスイッチした後、ＤＭＡコントローラはセグメント１のペイロード・データ（一つ以上のＭＴＵ）をＤＭＡ装置に配信し、それから各クライアントまたは送り先にネットワークを介してそれを供給することができる。
【００７８】
４．例えば、特定の送信パターンに依存するある量のデータを送った後、ＤＭＡ装置はコンテキスト３にスイッチするように指示される。例えば、スイッチング時間は、ある特定数のＭＴＵが送信された後で決定される。そうような数はコンテキスト記述子メタデータで特定される。その数は全ての、またはいくつかのいろいろなコンテキストに関して同じであるか、または好ましい送信パターンによって特定されたものとは異なることもある。各送信パケットに関して、内部カウンターがインクリメントされることもある。内部カウンターの値がコンテキスト記述子に保存された値に一致するとＤＭＡ装置はコンテキストをスイッチし、内部カウンターをクリアするように指示される。もしスイッチングがセグメント１の全ペイロード・データが送信され終わる前に行われると、コンテキスト２にもう一度戻った時に送信がその点から再開できるようにＤＭＡ装置は現在の位置を保存する。例えば、ＤＭＡ装置はコンテキスト記述子、即ちコンテキスト２の中の変数、フィールドまたは同様なものの中に、位置を保存することができる。一例として、あるフィールドが使用された最後のデータ記述子を保存するために使用され、他のフィールドはそのデータ記述子の中へ如何に深くデータが処理されたかを保存することもある。セグメントの終わりに到達すると、すべてのペイロード・データは送信されており、それ故にコンテキスト１とコンテキスト２はもはや必要とされない。コンテキスト２でＥＯＳフラッグがセットされる。コンテキスト１を無効にするために、ＤＭＡ装置は前に思い出した（前のステップ２を参照せよ）コンテキストを修復するように指示され、そしてそのコンテキストは再び無効にされる（セグメント１のペイロード・データが送信されてしまうとセグメント１のヘッダー・データもまた必要とされないので）。コンテキスト１はまたＥＯＳフラッグを設定することによって無効にすることができる。コンテキスト１とコンテキスト２を無効にした後、ＤＭＡ装置は次のコンテキストにスイッチする。この例では、それはコンテキスト３である。
【００７９】
５．コンテキスト５で、ＤＭＡコントローラはセグメント２に属するヘッダー・データを（セグメント１に関して前のステップ１に従って）ＤＭＡ装置に配信する。それから、ネットワークを介して各クライアントまたは送り先にそれを供給することができる。
【００８０】
６．ヘッダー・データが送信されると、ＤＭＡ装置はクライアント４にスイッチし、ここで、セグメント２のペイロード・データが送信される。コンテキスト４にスイッチする前に、コンテキスト３は思い出されるが（前のステップ２と同じように）、コンテキスト３の位置は保存されない。
【００８１】
７．コンテキスト４にスイッチした後、ＤＭＡコントローラはセグメント２のペイロード・データ（一つ以上のＭＴＵ）をＤＭＡ装置に配信する。それから、ネットワークを介して各クライアントまたは送り先にそれを供給することができる。
【００８２】
８．送信パターンに依存する特定の時刻に、ＤＭＡ装置は次のコンテキストにスイッチする（この例では、コンテキスト１）、ここで、もしセグメント２の全てのペイロード・データが送信される前にスイッチングが起これば、コンテキスト４の送信データの現在の位置が保存される。さもなければ、コンテキスト３は呼び戻されて、無効にされる。そして、コンテキスト４もまた無効にされる（前のステップ４と同じように）。
【００８３】
９．コンテキスト１で、ＤＭＡ装置はセグメント１に関連するヘッダー・データを受信し、かつ送信する。そして保存された位置はなかったので、全ヘッダーは再び送信される。ヘッダー・データが送信された後、プロセスはコンテキスト２にスイッチし、コンテキスト１の位置は保存されない。
【００８４】
１０．コンテキスト２で、送信が保存された位置から再開される（それは、ステップ４で保存されている）、そしてセグメント１の追加されたペイロード・データの一つ以上のＭＴＵが送信される。
【００８５】
プロセスはセグメント１とセグメント２の全てのペイロード・データが送信し終えるまで継続する。述べたように、他が終わる前にセグメントのペイロード・データが送信されると一つ以上の待ち状態が挿入されることがある。
【００８６】
一実施態様に於いて、データ記述子３０２は、データ・バッファの始めと終わり（即ち、関連するデータ（ヘッダーまたはペイロード）が保存されている所定のセグメントのメモリ位置を表わす変数を含む構造を有している。更に、データ記述子の構造はＥＯＳとＥＯＬ、および次の記述子を示すポインタと、ＤＭＡ装置が次に何をしたら良いかを指示するためのメタデータ・フィールドなどを示すための制御フラッグを含むことがある。
【００８７】
一実施態様において、コンテキスト記述子の構造はデータ記述子リストの位置のトラックを保持するための変数を保存することがある。コンテキストがスイッチされる時、ＤＭＡ装置（示されていない。例えば、図７と図８を参照せよ）はコンテキストの中にある位置を更新するように指示される。次回、同じコンテキストが使用されるとき、ＤＭＡ装置はＤＭＡコントローラに保存された位置で開始するように指示をする。
【００８８】
この工程を一般的に図５に関連して示し、そして説明する。
【００８９】
図５は本発明によるインターリーブ・プロセスの一実施態様のフロー・チャートを概略的に示している。装置または手段はステップ５０１でアイドル状態にある。データが送信に利用できるか、どうか、テスト５０２が行われる（割り込み、リクエスト、タイマーなどによって）。そうでないならば、アイドル状態が再開される。
【００９０】
もしデータが転送に利用できるならば、一つのＭＴＵのペイロードを含むデータ・パケットはステップ５０２で第一クライアントに送信される。その時、コンテキスト中でスイッチが行われるか、どうか（即ち、他のクライアントのために他のセグメントにスイッチされるべきか、どうか）がステップ５０４でチェックされる。スイッチが行なわれるべきか、どうかということは各コンテキストにあるリスト終点（ＥＯＬ）への到達、または特定量のデータ（送信パターンに従って）が送信されたことによって始動されることがある。前に説明したように、例えばそのようなデータ量はコンテキスト記述子メタデータの中で特定されることがある。その数は全ての、またはいくつかのいろいろなコンテキストにとって同じかも知れないが、あるいは好ましい送信パターンによって指定された通りに変化することも可能である。
【００９１】
もしスイッチが行われないときは、工程はステップ５０３にも戻り、そして他のＭＴＵのデータを送信し続ける。
【００９２】
もしスイッチが行われると、現在のコンテキストがペイロード・データを有するコンテキストか、ヘッダー・データを有するものであるかがステップ５０５でチェックされる。もし、それがヘッダー・データを有するコンテキストならば、全ての関連するペイロード・データが次のステップで送信されるかどうか（この場合には、後で再び必要とされない）、またはセグメントの一つ以上の追加されたスイッチが全てのペイロード・データが送信し終わる前に行われ（この場合には、ヘッダー・データが必要とされる）、そのために後で説明するように作業が次のコンテキストにスイッチするステップ５０６に進むかどうかに、これが依存するのでヘッダー・データが再び必要とされるか、どうかに関する情報はない。
【００９３】
もし現在のコンテキストがペイロード・データを含むならば、現在のコンテキストに関してリスト終了（ＥＯＬ）点に到達しているか、どうかをチェックするステップ５０７で他のテストが行われる。もしコンテキストのリスト終了点でないならば、現在のコンテキストはステップ５０８で、後で使用するために保存される。そして現在の位置は（即ち、所定のセグメントでデータが送信し終えるまで）ステップ５０９で保存される。後で説明するように、ステップ５０９の後、作業は次のコンテキストへスイッチするステップ５０６に進行する。
【００９４】
リスト終了点に到達すると、その時は一つのコンテキストに関して全てのセグメント（単に一つであることもある）が送信し終わっており、ヘッダーとペイロード・データはもはや必要ではない。この場合は、ＤＭＡ装置はステップ５１０で現在のコンテキストを保存するように指示され、そしてリスト終了点に到達したのでこのコンテキストもまた無効にされる。
【００９５】
それからＤＭＡ装置は、前にステップ５０８の間で保存されたコンテキストを修復し、ステップ５１２でそのコンテキストを無効にするように、ステップ５１１で指示され、そしてヘッダー・コンテキストを無効にする。この結果、ヘッダーとペイロードのコンテキストは無効にされる。
【００９６】
ステップ５１２の後、作業は次のコンテキストにスイッチするステップ５０６に進行する。
【００９７】
ステップ５０６の後、次のコンテキストが存在するか、どうかのテスト５１３がその時行われる。もし無いならば、即ち全てのコンテキストが十分に処理され、それによって全てのセグメントが送信し終わっているならば、ステップ５０１で待機状態が再開される。
【００９８】
もし、コンテキストが存在するならば、そのコンテキストがまだ有効であるか、どうかがチェック５１４される。もし無いならば、ステップ５０６が再び行われ、それによって新しいコンテキストを選択する。もし新しいコンテキストが有効ならば（即ち、完全には処理されていないならば）更なるデータを送信するためにステップ５０３が再開される。
【００９９】
ステップ５０６と二つの次のテスト５１３と５１４はＤＭＡ装置に有効なものが見つかるまでコンテキストを自動的にロードさせる。または、有効なものに会うこと無しに無効なコンテキストが再開されるか、どうかを例えばチェックすることによって、全てのコンテキストが無効であることが決定される。全てのコンテキストが無効であるとき、送信は完了している。
【０１００】
図６は、メモリからデータを一度だけ読んでいる間に、同じセグメントをいくつかのクライアントへ送るのに有利なリスト構造例の実施態様を概略的に示している。二つのコンテキスト記述子３０１コンテキスト１とコンテキスト２を含む二次元リスト構造が示されている。ここで、コンテキスト１はコンテキスト２を参照し、コンテキスト２はコンテキスト１を参照し返している。
【０１０１】
コンテキスト１は、所定のセグメント１のペイロード・データ３０５を含むバッファを指示するデータ記述子３０３データ１を含んでいる。
【０１０２】
コンテキスト２は二つのデータ記述子３０３のデータ２とデータ３を含んでいる。ここで、データ２は第一クライアントまたは送り先である送り先１のセグメント１に関するヘッダー・データ３０４を含むバッファ、または他の適切なメモリ位置を指示しており、そしてデータ３は第二クライアントまたは送り先である送り先２のセグメント１に関するヘッダー・データ３０４を含むバッファ、または他の適切なメモリ位置を指示している。
【０１０３】
作業中、次のシーケンスが実施される。
【０１０４】
１．コンテキスト１がアクセスされ、ＤＭＡコントローラはセグメント１のペイロード・データの一つ以上のＭＴＵ（例えば、コンテキスト１のコンテキスト記述子メタデータの中で定義されるように）をバッファまたはメモリから取得、または読み取る。
【０１０５】
２．ＤＭＡ装置は現在の位置を保存し、コンテキスト２にスイッチする。
【０１０６】
３．コンテキスト２を処理すると、ＤＭＡコントローラはデータ記述子データ２を用いた第一送り先へのヘッダー・データを取得する。それから、ステップ１で得られたセグメント１のペイロード・データはＤＭＡ装置（示されていない。例えば、図７と図８の７０４を参照せよ）によって送り先１と定義されるクライアント１に送信される。
【０１０７】
４．データ２はＥＯＬセットを持っていないので、そのときデータ記述子データ３が処理され、これは第二の送り先、送り先２にヘッダー・データを供与する。そして、それから既に獲得され、セグメント１に向けて送信されたペイロード・データは（ステップ１で与えられたように）ＤＭＡ装置によって送り先２によって定義されたとおりにクライアントに送信される。データ３のＥＯＬとＥＯＳフラッグが設定されると、次のコンテキストへのスイッチングが行われる。ヘッダーの情報はそのまま再び必要とされるので、位置は保存されない。次のコンテキストはこの例ではコンテキスト１であり、セグメント１の全てのペイロード・データが両方の送り先に送信し終えるまでそのステップが繰り返される。
【０１０８】
プロセスが二つ以上の送り先にデータを送信することを含むことがあると理解されるべきである。これは各送り先に関連するヘッダー情報を指定する一個のデータ記述子を必要するだけである。
【０１０９】
図７はハードウェア・ネットワーク・オフローデング７００を有する送信ユニットまたはシステムの概略のブロック図を示している。送信ユニットまたはシステムがネットワークに接続される。ここにはまた少なくとも一つのクライアントが接続される（例えば、アド・ホック）。このネットワークは例えば、ローカル、リモート、有線、無線などである。
【０１１０】
送信されるべきセグメントを含むメモリおよび／または一つ以上のバッファ７０１（以後、単にメモリと称する）が示されている。ここで、このメモリは送信ユニットまたはシステムの操作を担当している中央処理装置（ＣＰＵ）７０２に接続されている。このメモリはまたメモリの中の一つ以上のデータ領域（例えば、一セグメントに一個）に、前に説明したようにインターリーブ風に、アクセスを提供するＤＭＡコントローラ７０３に接続されている。そして、各データ領域は保存されたセグメントを含んでいる。
【０１１１】
ＤＭＡコントローラはＤＭＡ装置、ＤＭＡクライアント、あるいは本発明によってＤＭＡコントローラを制御することを担当するネットワーク・オフローダに接続されている。ＤＭＡ装置は、それを制御するメインＣＰＵと所定のネットワークの上でデータの送信を可能にするネットワーク・インターフェイス７０５に接続されている。データを送信するとき、送信ユニットまたはシステムはＤＭＡ装置を設定してデータを送信する。そしてＤＭＡ装置はメインＣＰＵをオフロードするためにセグメンテーション、スイッチングなどを引き受ける。そして、データをネットワーク・インターフェイスに送信する。このネットワーク・インターフェイスは一つ以上のクライアント・ネットワーク・インターフェイスによって受信されるべきネットワークの上でデータを送信する。
【０１１２】
主ＣＰＵはＤＭＡ装置を設定するためのインターフェイスを有し、そしてＤＭＡ装置はそのときＤＭＡコントローラを用いて説明したように送信データを読む。
【０１１３】
ＤＭＡ装置の制御の下でＤＭＡコントローラは各データ領域の中の現在の位置のトラックを保持する。送信パターンが得られるか、または導出され、この点における情報がＤＭＡコントローラに供給される。そしてデータ領域をスイッチする時を指示し、−そして、それによって、他のセグメントのためにデータ送信を始める（もし、何か残っていれば）。次にもっと詳しく説明するようにインターリーブ送信が比較的遅いクライアントへの送信速度を効果的に低減するので特定の送信パターンがパケット・ロスを低減した状態でネットワークをオフロードする。スイッチすると、ＤＭＡ装置に指示された通りに、前に説明したように、送信されるべきデータを多く持っている次のデータ領域をＤＭＡコントローラは自動的に選択する。
【０１１４】
ＤＭＡ装置とＤＭＡコントローラはハードウェアで実施され、ソフトウェアを基にした解決方法に較べて、それよりもオフローデングをネットワーク化するためのＣＰＵの使用を劇的に低減することができる。
【０１１５】
図８はＤＭＡ装置の一実施態様の概略ブロック図を示している。
【０１１６】
送信イン（ＴＸ  ｉｎ）ユニット８０３と送信アウト（ＴＸ  ｏｕｔ）ユニット８０４に接続されている送信（ＴＸ）メモリ８０２に接続されたＣＰＵ８０１が示されている。チェックサム計算ユニット８０５はＴＸ  ｉｎユニット８０３に接続されている。データはＴＸ  ｉｎユニット８０３によってＤＭＡコントローラからＴＸメモリ８０２に読み込まれる（示されていない。例えば、図７の７０３を参照せよ）（そして、同時にチェックサム・ユニットは読み取りデータ・パケットのチェックサムを計算する）。それから、ＣＰＵ８０１によって処理され、ネットワーク・インターフェイス（示されていない。図７の７０５を参照せよ）にＴＸ  ｏｕｔユニット８０４によって送出される。
【０１１７】
図９は、送信ユニットまたはハードウェア・ネットワーク・オフローデングとネットワークの中で接続された一つ以上のクライアントを有するシステムを含むシステムの概略ブロック図を示している。送信ユニットまたはハードウェア・ネットワーク・オフローデング７００を有するシステムが示されている。これはＤＭＡ装置７０４と所定のネットワークの上でデータ送信を可能にするネットワーク・インターフェイス７０５を含んでおり、一つ以上のクライアント７１０もまたネットワーク・インターフェイス７０５を含んでいる。クライアント７１０と送信ユニットまたはシステムはネットワーク１０２を介して接続されている。
【０１１８】
図１０は図７と関連して説明した送信に類似したハードウェア・ネットワーク・オフローデングを利用した送信ユニット１０００からの送信の信号伝達図である。送信ユニット１０００はネットワークに接続されている。これには多くの受信機１０２０、１０２２もまた接続されている。これらの通信構成要素が接続されているネットワークは、例えばローカル、リモート、有線、無線などである。
【０１１９】
送信ユニット１０００は送信されるべきセグメントを保存するメモリ１００１とＤＭＡオフローデング・コントローラ１００４を含んでいる。図１０で概略的に示されているように、メモリ１００１とＤＭＡオフローダ１００４は、図７の場合と同じように、処理ユニット１００２に接続されている。メモリ１００１は、前に述べたようにインターリーブの方法で、メモリ１００１内の一つ以上のデータ領域（例えば、各セグメントに一つ）にアクセスを与えるＤＭＡオフローデング・コントローラ１００４に接続されている。そして、各データ領域は保存されたセグメントを含んでいる。
【０１２０】
ＤＭＡオフローダはネットワーク上でデータの送信を可能にしている。そしてデータを送信するとき、送信ユニット１０００は、処理ユニット１００２で実行する送信ソフトウェアによって、処理ユニット１００２をオフロードするためにデータ、セグメンテーション、スイッチングなどを送信するようにＤＭＡオフローダ１００４を設定する。そして、一つ以上の受信機１０２０、１０２２ネットワーク・インターフェイスによって受信されるべきデータをネットワーク上に送信する。
【０１２１】
以下の信号伝達ステップのシーケンスは送信ユニット１０００の中で行われる：
第一の信号伝達ステップ１０５１では、送信ソフトウェア１０１０はＤＭＡオフローダ１００４にセグメントＳ１とＳ２について教える。実際のデータは何も送信されないが、セグメントについてメタデータだけが送信される。送信パターンの例は、図１０に示されるように、ｐ１  ｐ１  ｐ２  ｐ１で始まり、ｐ１で終わるものである。
【０１２２】
第二の信号伝達ステップ１０５２では、ＤＭＡオフローダ１００４はセグメント１からＭＴＵを読み、第一受信機１０２０にデータを送る。第三の信号伝達ステップ１０５４では、ＤＭＡオフローダ１００４はメモリからセグメント１の第二ＭＴＵを読み、第一受信機１０２０にデータを送る。第四の信号伝達ステップ１０５６では、ＤＭＡオフローダはセグメント２にスイッチする。そして第一ＭＴＵを読む。第一パケットは第二受信機１０２２に送られ、そしてそのデータを送っている間に、ＤＭＡオフローダ１００４は第一セグメントに戻り、読み、そして第五の信号伝達ステップ１０５８の第三ＭＴＵを送信する。第六の信号伝達ステップ１０５９によって示されるように、これは全てのパケットが送られるまで続く。そして、ＡＣＫまたは同様な形式で受信機からの帰還は必要ではない。信号伝達ステップ１０５２、１０５４、１０５６、１０５８、１０５９でＭＴＵの読み取りが受信機へのデータの送信と同時に行われることがあるということに注目すべきである。
【０１２３】
インターリーブ送信は比較的遅いクライアントに対して、確認（ＡＣＫ）信号を用いないで、送信速度を効果的に低減するので特定の送信パターンは低減されたパケット・ロスでネットワークをオフロードすることができる。
【０１２４】
請求項で、括弧内に置かれた如何なる引用符号も請求を制限すると解釈してはならない。“含んでいる”という言葉は請求項で取り上げたもの以外の要素やステップの存在を除外するものではない。要素に先行する“ａ”または“ａｎ”はそのような要素の複数の存在を除外するものではない。
【０１２５】
本発明は、いくつかの個別部品を含むハードウェアによって、そして適切にプログラムされたコンピュータによって実施することができる。装置請求において、いくつかの手段を列挙すると、これらのいくつかの手段は一つまたは同じ項目のハードウェアによって具現化することができる。ある手段が相互に異なった従属した請求で列挙されているという単なる事実はこれらの手段の組み合わせが有利に用いることができないということを示すものではない。
【図１】
0005552522.tif 000002
【図２ａ】
0005552522.tif 000003
【図２ｂ】
0005552522.tif 000004
【図２ｃ】
0005552522.tif 000005
【図３】
0005552522.tif 000006
【図４】
0005552522.tif 000007
【図５】
0005552522.tif 000008
【図６】
0005552522.tif 000009
【図７】
0005552522.tif 000010
【図８】
0005552522.tif 000011
【図９】
0005552522.tif 000012
【図１０】
0005552522.tif 000013