(57)【要約】      （修正有）【課題】送信制御ブロックに関連する帯域幅ボトルネックを軽減し、２以上のコンピュータがコンピュータネットワークを介してＴＣＰ／ＩＰプロトコルを使用して通信するとき、データ送信速度を改良するための改良された方法および装置。【解決手段】第１のホストコンピュータ202から第２のホストコンピュータ204への双方向データフローでの第１のデータの送信を容易にするために第１のＴｘ送信制御ブロック（ＴｘＴＣＢ）206を使用しＴＣＰプロトコルを使用して送信され、第１のデータの送信に関連する送信補助パラメータを記憶するように構成されている。第２のホストコンピュータ204は第１のＲｘ送信制御ブロック（ＲｘＴＣＢ）210を使用する。第１のＴｘＴＣＢ206と第１のＲｘＴＣＢ210は第１のデータに関する送信リクエストと第２のデータに関する受信リクエストを同時にサービスするために使用される。【選択図】図２
2010016838.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークに結合された第１のホストコンピュータで、前記ネットワークに結合された第２のホストコンピュータとデータの交換を行う方法において、
前記第１のホストコンピュータから前記第２のホストコンピュータへ双方向データフローに関連する第１のデータの送信を行うために第１のＴｘ送信制御ブロック（Ｔｘ  ＴＣＢ）を使用し、前記第１のデータはＴＣＰプロトコルを使用して送信され、前記第１のＴｘ  ＴＣＢは前記第１のホストコンピュータに関連され、前記ＴＣＰプロトコルを使用する前記第１のデータの送信に関連する送信補助パラメータを記憶するように構成されており、
前記双方向データフローに関連する第２のデータの受信を行うために第１のＲｘ送信制御ブロック（Ｒｘ  ＴＣＢ）を使用し、前記第２のデータは前記第２のホストコンピュータから前記第１のホストコンピュータへ前記ＴＣＰプロトコルを使用して送信され、前記第１のＲｘ  ＴＣＢは前記第１のホストコンピュータに関連され、前記ＴＣＰプロトコルを使用して前記第２のデータの前記受信に関連する受信補助パラメータを記憶するように構成されており、前記第１のＴｘ  ＴＣＢと前記第１のＲｘ  ＴＣＢは前記第１のデータに関する送信リクエストと前記第２のデータに関する受信リクエストを同時にサービスするために使用されるデータ交換方法。
【請求項２】
ネットワークに結合された第１のホストコンピュータに関連し、ネットワークによりデータの交換を行う回路において、前記ネットワークはまた第２のホストコンピュータに結合され、前記回路は、
ＴＣＰプロトコルを使用して送信され、前記第１のホストコンピュータから前記第２のホストコンピュータへの双方向データフローに関連する第１のデータの送信を行い、前記第１のホストコンピュータに関連され、前記ＴＣＰプロトコルを使用して前記第１のデータの送信に関連する送信補助パラメータを記憶するように構成されている送信を行う手段と、
前記第２のホストコンピュータから前記第１のホストコンピュータへ前記ＴＣＰプロトコルを使用して送信され、前記双方向データフローに関連する第２のデータの受信を行い、前記第１のホストコンピュータに関連され、前記ＴＣＰプロトコルを使用して前記第２のデータの前記受信に関連する受信補助パラメータを記憶するように構成されている受信を行う手段とを具備し、前記送信を行う手段と前記受信を行う手段は前記回路による前記第１のデータの送信と前記第２のデータの受信とを同時に行うように使用される回路。
【請求項３】
第１のホストコンピュータへ結合されたネットワークインターフェースカード（ＮＩＣカード）上で、第１のホストコンピュータと第２のホストコンピュータに結合されたネットワークを介してデータを交換する方法において、
前記ＮＩＣカードに関連する第１のＴｘ送信制御ブロック（Ｔｘ  ＴｃＢ）に記憶された送信補助パラメータを使用して、双方向データフローに関連している第１のデータを送信し、この第１のデータは前記第１のホストコンピュータから前記第２のホストコンピュータへ送信され、前記第１のデータはＴＣＰプロトコルを使用して送信され、
前記ＮＩＣカードに関連する第１のＲｘ送信制御ブロック（Ｒｘ  ＴｃＢ）に記憶された受信補助パラメータを使用して、前記双方向データフローに関連する第２のデータを受信するステップを含んでおり、前記第２のデータは前記第２のホストコンピュータから前記第１のホストコンピュータへ送信され、前記第２のデータはＴＣＰプロトコルを使用して送信され、前記Ｔｘ  ＴｃＢと前記Ｒｘ  ＴｃＢは、前記ＮＩＣカードにより前記第１のデータの送信と前記第２のデータの受信を同時に行うために使用される方法。
【請求項４】
コンピュータネットワークを介して結合されている第１のホストコンピュータと第２のホストコンピュータとの間で双方向データフローに関連する送信データを送信する方法において、
前記第１のホストコンピュータ中に構成され、前記双方向データフローに関連する第１の制御ブロックからの送信ウィンドウサイズパラメータを確認し、前記第１の制御ブロックはＴＣＰプロトコルを使用して前記双方向データフローに関連する前記送信データを送信するために使用される送信補助パラメータを追跡するように構成されており、
前記送信ウィンドウサイズパラメータが、送信ウィンドウが前記送信データの少なくとも最小のセグメントサイズを送信するのに利用可能であることを示しているならば、前記第１の制御ブロックを使用して再送信待ち行列中の送信データの第１の部分を追跡し、前記ＴＣＰプロトコルを使用して前記送信データの前記第１の部分の前記第２のホストコンピュータへの送信を行うために前記送信データの前記第１の部分に少なくとも１つのＴＣＰヘッダを処理し、前記送信データの前記第１の部分は前記送信ウィンドウサイズパラメータを考慮して送信されることができる送信データ量を表しており、
前記第１のホストコンピュータはまた前記送信データの前記第１の部分の前記送信と同時に、前記第２のホストコンピュータから前記双方向データフローに関連する受信データを受信するように構成されており、前記受信データの受信を行うために使用される受信補助パラメータは前記送信データの送信に使用される送信補助パラメータが前記第１の制御ブロックで追跡されるのと同時に第２の制御ブロックで追跡され、前記第２の制御ブロックは前記第１のホストコンピュータ中に構成され、前記双方向データフローに関連されている方法。
【請求項５】
コンピュータネットワークを介して結合されている第１のホストコンピュータと第２のホストコンピュータとの間で双方向データフローに関連する送信データを送信する方法において、
前記送信データの前記送信に使用される送信補助パラメータを第１の制御ブロックに記憶し、前記第１の制御ブロックは前記第１のホストコンピュータ中に構成され、前記双方向データフローに関連され、前記送信データの送信はＴＣＰプロトコルにしたがって行われ、
前記第１のホストコンピュータから前記第２のコンピュータへの前記送信データの所定部分に関する送信リクエストのサービスを行うために前記第１の制御ブロック中の前記送信補助パラメータの使用を含んでおり、前記送信リクエストの前記サービスは、前記第１のホストコンピュータによる前記第２のホストコンピュータからの前記双方向データフローに関連するデータの受信に関する受信リクエストのサービスと同時に行われ、前記受信データは前記第１のホストコンピュータ中に構成された第２の制御ブロックに記憶されている受信補助パラメータを使用して受信され、前記受信データは前記ＴＣＰプロトコルにしたがって受信される方法。
【請求項６】
ネットワークを介して結合された第１のホストコンピュータに関連し、ネットワークを介してデータの交換を促す回路において、前記ネットワークは第２のホストコンピュータに結合され、前記回路は、
前記第１のホストコンピュータから前記第２のホストコンピュータへの双方向データフローに関連する送信データをＴＣＰプロトコルを使用して送信するために使用される送信補助パラメータを記憶し、前記第１のホストコンピュータ中に構成されている記憶手段と、
前記送信補助パラメータを使用して、前記送信データの所定の部分に関する送信リクエストをサービスする手段とを具備し、前記送信リクエストの前記サービスは前記第１のホストコンピュータにより前記第２のコンピュータからの前記双方向データフローに関連されるデータの受信に関する受信リクエストのサービスと同時に行われ、前記受信データは受信補助パラメータを記憶する手段中で追跡されるパラメータを使用して受信され、受信補助パラメータを記憶する前記手段はまた前記第１のホストコンピュータ中に構成され、前記受信データは前記ＴＣＰプロトコルにしたがって受信される回路。
【請求項７】
ネットワークに結合された第１のホストコンピュータに関連し、ネットワークを介してデータの交換を行う回路において、前記ネットワークは第２のホストコンピュータに結合され、前記回路は、
前記第１のホストコンピュータから前記第２のホストコンピュータへの双方向データフローに関係する送信データをＴＣＰプロトコルを使用して送信するために使用される送信補助パラメータを記憶するように構成され、前記第１のホストコンピュータ中に構成される第１の制御ブロックと、
前記送信補助パラメータを使用して、前記送信データの所定の部分に関する送信リクエストをサービスするように構成された回路とを具備し、前記送信リクエストの前記サービスは前記第１のホストコンピュータにより前記第２のコンピュータからの前記双方向データフローに関連されるデータの受信に関する受信リクエストのサービスと同時に行われ、前記受信データは第２の制御ブロックで追跡されたパラメータを使用して受信され、前記第２の制御ブロックは前記第１のホストコンピュータ中に構成され、前記受信データは前記ＴＣＰプロトコルにしたがって受信される回路。
【請求項８】
コンピュータネットワークを介して結合されている第１のホストコンピュータと第２のホストコンピュータとの間で双方向データフローに関連する受信データで第１のホストコンピュータで受信する方法において、
前記第１のホストコンピュータで受信された前記双方向データフローに関連するパケットの第１のセットの受信に応答して、予測されたシーケンス番号パラメータを確認し、前記予測されたシーケンス番号パラメータは前記第１のホストコンピュータ中に構成された第１の制御ブロックに記憶され、前記第１の制御ブロックはＴＣＰプロトコルを使用して前記受信データを受信するために使用される受信補助パラメータを記憶するように構成されており、
前記予測されたシーケンス番号パラメータが、前記第１のホストコンピュータで受信されたパケットの第１のセットが順序付けられたパケットを表していることを示しているならば、前記第１の制御ブロックにおいて前記予測されたシーケンスパラメータを更新し、
前記第１のホストコンピュータはまたＴＣＰプロトコルを使用して、前記第１のホストコンピュータから前記第２のコンピュータへ前記双方向データフローに関連される送信データを送信するように構成され、前記送信データの一部を送信するリクエストはパケットの前記第１のセットの受信と同時にサービスされ、前記送信データの送信に使用される送信補助パラメータは、前記受信補助パラメータが前記第１の制御ブロックに記憶されるのと同時に第２の制御ブロックに記憶され、前記第２の制御ブロックは前記第１のホストコンピュータ中に構成され、前記双方向データフローに関連されている受信方法。
【請求項９】
コンピュータネットワークを介して結合されている第１のホストコンピュータと第２のホストコンピュータとの間で双方向データフローに関連する受信データを受信する方法において、
第１の制御ブロックにおいて前記受信データの前記受信に使用される受信補助パラメータを記憶し、前記第１の制御ブロックは前記第１のホストコンピュータ中に構成され、前記双方向データフローに関連され、前記受信データの前記受信はＴＣＰプロトコルにしたがって行われ、
前記第２のホストコンピュータから前記第１のホストコンピュータで前記受信データの所定部分を受信することを促進するために前記第１の制御ブロック中の前記受信補助パラメータを使用し、前記受信データの前記所定部分の前記受信は、前記第１のホストコンピュータから前記第２のホストコンピュータへの前記双方向データフローに関連される送信データに関する送信リクエストのサービスと同時に行われ、前記送信データは前記第１のホストコンピュータ中に構成された第２の制御ブロックに記憶されている送信補助パラメータを使用して送信され、前記送信データは前記ＴＣＰプロトコルにしたがって送信される方法。
【請求項１０】
ネットワークに結合された第１のホストコンピュータに関連し、ネットワークを介してデータの交換を行う回路において、前記ネットワークは第２のホストコンピュータに結合され、前記回路は、
前記第２のホストコンピュータから前記第１のホストコンピュータにおいて双方向データフローに関係する受信データをＴＣＰプロトコルの使用により受信するために使用される受信補助パラメータを記憶するように構成され、前記第１のホストコンピュータに構成される第１の制御ブロックと、
前記受信補助パラメータを使用して、前記受信データの所定の部分を受信するように構成された回路とを具備し、前記受信データの前記所定の部分の前記受信は、前記第１のホストコンピュータから前記第２のコンピュータへの前記双方向データフローに関連される送信データに関する送信リクエストのサービスと同時に行われ、前記送信データは第２の制御ブロックに記憶されたパラメータを使用して送信され、前記第２の制御ブロックはまた前記第１のホストコンピュータ中に構成され、前記送信データは前記ＴＣＰプロトコルにしたがって送信される回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータネットワークを使用するデータ通信に関し、特に複数のコンピュータシステム間でデータを送信するための改良された方法および装置に関する。
【背景技術】
【０００２】
１以上のネットワークによる２以上のコンピュータシステム間の情報送信を容易にするための送信制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）の使用はよく知られている。所定のネットワーク化されたコンピュータが別のネットワーク化されたコンピュータと情報を交換しようとするとき、情報が１つのコンピュータから送信され、他のコンピュータにより受信されることを可能にするために、双方向データフローが設定される。通常は、情報は送信プロセスを容易にするためにパケットへ分解される。ＴＣＰ／ＩＰプロトコルスーツは、転送される情報が適切にセグメント化されパケットとして送信コンピュータから送信され、受信コンピュータで適切に受信され完全なデータファイルに組み立てられることを確実にする。
【０００３】
よく知られているように、送信制御プロトコル（ＴＣＰ）はＯＳＩ基準モデルの転送層（層４）に対応する。送信制御プロトコルはしばしば、とりわけストリームデータ転送、多重化、全二重動作、セグメント化、リアセンブリ、効率的なフロー制御を提供する。インターネットプロトコル（ＩＰ）はとりわけ、アドレス情報および、パケットがルート設定されることを可能にする幾つかの制御情報を提供するネットワーク層（層３）プロトコルである。ＩＰプロトコルは２つの主要な義務を有する。即ち、ネットワークへの接続のない最良のデータグラムの転送と、異なる最大の送信単位（ＭＴＵ）サイズでデータリンクをサポートするためにデータグラムの断片化とリアセンブリを行うことである。これらの２つのプロトコルは共にネットワークを介する確実なデータ転送を可能にするインターネットプロトコルスーツのコアを形成する。
【０００４】
２つのコンピュータがＴＣＰ／ＩＰプロトコルを使用してコンピュータネットワークにより通信するとき、送信制御ブロック（ＴＣＢ）として知られているデータ構造は典型的に、通信コンピュータ間の双方向データフローにおけるデータグラムのデータ送信、セグメント化、リアセンブリ、再送信、承認等を行うために使用される。ＴＣＢは所定のデータフローでデータ送信および受信プロセスに関連する種々のパラメータを追跡するために使用される。通常、各ホストコンピュータシステム（即ちデータフローの各端部での通信に含まれるコンピュータシステム）ではデータフロー当り１つの送信制御ブロックが存在する。各ＴＣＢはＴＣＰソースポート、ＴＣＰ目的地ポート、ＩＰソースアドレス、および／またはＩＰ目的地アドレスにより特有に識別される。
【０００５】
従来技術では、ホストコンピュータの送信制御ブロックは、ホストコンピュータからのデータ送信とホストコンピュータへのデータ受信の両者を行うために所定のデータフローに対して使用される。図１はこの状態を示しており、ここではＴＣＢ102はホストコンピュータ104のデータ送信および受信の両者を容易にするために使用される。同様に、ＴＣＢ106はホストコンピュータ108のデータ送信および受信の両者を容易にするために使用される。しかしながら、送信制御ブロックがホストコンピュータ中で送信リクエストのサービスで忙しいときには、送信タスクが終了するまで、そのホストコンピュータでデータの受信を行うための使用が利用可能ではない。したがって２つのホストコンピュータ間の送信帯域幅を限定するボトルネックが存在する。
【０００６】
ホストコンピュータ104とホストコンピュータ108との間のデータ送信速度がデータがホストコンピュータ内で処理される速度と比較して比較的低速度であるならば、このボトルネックは許容可能である。ホストコンピュータ間の送信帯域幅が増加すると、この帯域幅のボトルネックは臨界的な問題になる。帯域幅が企業ネットワーク化において１Ｇビット／秒、１０Ｇビット／秒、またはそれ以上に近づき、ネットワークルータ間で４０Ｇビット／秒またはそれ以上までになると、ＴＣＰ／ＩＰがネットワーク化を進めるのに有効なプロトコルスーツでありつづけるならば、帯域幅のボトルネックは解決される必要があることが明白である。
【０００７】
上記の説明を考慮すると、従来技術の送信制御ブロックに関連する帯域幅ボトルネックを軽減し、２以上のコンピュータがコンピュータネットワークを介してＴＣＰ／ＩＰプロトコルを使用して通信するとき、データ送信速度を改良するための改良された方法および装置が要望されている。
【発明の概要】
【０００８】
本発明は１実施形態において、ネットワークに結合された第１のホストコンピュータにおけるデータの交換方法に関する。ネットワークはまた第２のホストコンピュータにも結合されている。本発明の方法は、第１のホストコンピュータから第２のホストコンピュータへの双方向データフローに関連する第１のデータの送信を容易に行うための第１のＴｘ送信制御ブロック（Ｔｘ  ＴＣＢ）の使用を含んでいる。第１のデータはＴＣＰプロトコルを使用して送信される。第１のＴｘ  ＴＣＢは第１のホストコンピュータに関連され、ＴＣＰプロトコルを使用する第１のデータの送信に関連する送信補助パラメータを記憶するように構成されている。方法はまた、双方向データ流に関連する第２のデータの受信を行うために第１のＲｘ送信制御ブロック（Ｒｘ  ＴＣＢ）を使用する。第２のデータは第２のホストコンピュータから第１のホストコンピュータへＴＣＰプロトコルを使用して送信される。第１のＲｘ  ＴＣＢは第１のホストコンピュータに関連され、ＴＣＰプロトコルを使用して第２のデータの受信に関連する受信補助パラメータを記憶するように構成されている。本発明のこの実施形態によれば、第１のＴｘ  ＴＣＢと第１のＲｘ  ＴＣＢは第１のデータに関する送信リクエストと第２のデータに関する受信リクエストを同時にサービスするために使用される。
【０００９】
別の実施形態では、本発明は、ネットワークを介してデータ交換を促進するための回路に関する。回路は前記ネットワークに結合された第１のホストコンピュータに関連している。ネットワークはまた第２のホストコンピュータに結合されている。回路は、第１のホストコンピュータから第２のホストコンピュータへ双方向データフローに関連する第１のデータの送信を行うための手段を含んでいる。第１のデータはＴＣＰプロトコルを使用して送信される。送信を行う手段は第１のホストコンピュータに関連され、ＴＣＰプロトコルを使用して第１のデータの送信に関連する送信補助パラメータを記憶するように構成されている。回路はまた、双方向データフローに関連する第２のデータの受信を行うための手段も含んでいる。第２のデータは第２のホストコンピュータから第１のホストコンピュータへＴＣＰプロトコルを使用して送信される。受信を促進する手段は第１のホストコンピュータに関連され、ＴＣＰプロトコルを使用して第２のデータの受信に関連する受信補助パラメータを記憶するように構成されている。本発明のこの実施形態によれば、送信を促進する手段と受信を促進する手段は回路による第１のデータの送信と第２のデータの受信を同時に行うために使用される。
【００１０】
さらに別の実施形態では、本発明は、第１のホストコンピュータと第２のホストコンピュータに結合されたネットワークを介してデータを交換するため第１のホストコンピュータへ結合されたネットワークインターフェースカード（ＮＩＣカード）における方法に関する。この方法はＮＩＣカードに関連する第１のＴｘ送信制御ブロック（Ｔｘ  ＴｃＢ）に記憶された送信補助パラメータを使用して、双方向データフローに関連する第１のデータを送信するステップを含んでいる。第１のデータは第１のホストコンピュータから第２のホストコンピュータへ送信される。第１のデータはＴＣＰプロトコルを使用して送信される。この方法はまた、ＮＩＣカードに関連する第１のＲｘ送信制御ブロック（Ｒｘ  ＴｃＢ）に記憶された受信補助パラメータを使用して、双方向データフローに関連する第２のデータを受信する。第２のデータは第２のホストコンピュータから第１のホストコンピュータへ送信される。第２のデータはＴＣＰプロトコルを使用して送信される。本発明のこの実施形態によれば、Ｔｘ  ＴｃＢとＲｘ  ＴｃＢは、ＮＩＣカードにより第１のデータの送信と第２のデータの受信を同時に行うように使用される。
【００１１】
本発明のこれらおよび他の特徴を添付図面を伴った以下の本発明の詳細な説明でさらに詳細に説明する。
【図面の簡単な説明】
【００１２】
【図１】従来技術のＴＣＢがホストコンピュータの送信および受信プロセスの両者を容易にするために使用され、したがって１つのプロセスだけが任意の所定の時間で行われることが可能である状態を示す図。
【図２】本発明の１実施形態にしたがって、本発明の送信制御ブロック（Ｔｘ  ＴＣＢ）と本発明の受信制御ブロック（Ｒｘ  ＴＣＢ）を使用して第２のホストコンピュータとデータを交換する第１のホストコンピュータを示す簡略図。
【図３】本発明の１実施形態にしたがって、データ送信を容易にするための送信制御ブロックデータ構造を示す図。
【図４】本発明の１実施形態にしたがって、任意の所定の時間に所定のデータフローで送信ホストコンピュータからの送信を可能にされたデータ量を概略的に表している送信ウィンドウを示す図。
【図５】本発明の１特徴にしたがって、再送信待ち行列と送信保留待ち行列を示す図。
【図６】本発明の１実施形態にしたがって、本発明の送信制御ブロックを含む送信動作を示すブロック図。
【図７】本発明の１実施形態にしたがって、送信ネットワークプロトコルプロセッサが送信ホストコンピュータに関連されるホストアプリケーションプログラムからデータを送信するリクエストをサービスするために送信制御ブロックを使用する態様を示す簡単なフローチャート。
【図８】本発明の１実施形態にしたがって、送信ネットワークプロトコルプロセッサが再送信待ち行列からデータを再送信するリクエストをサービスするために送信制御ブロックを使用する態様を示す簡単なフローチャート。
【図９】本発明の１実施形態にしたがって、送信ネットワークプロトコルプロセッサが他の送信ホストコンピュータへ承認を送信するために送信制御ブロックを使用する態様を示す簡単なフローチャート。
【図１０】本発明の１実施形態にしたがって、送信ネットワークプロトコルプロセッサが送信ウィンドウを更新し、他の送信ホストコンピュータから送信されて受信された承認メッセージに応答して性能データを計算する送信制御ブロックを含む態様を示す簡単なフローチャート。
【図１１】本発明の１実施形態にしたがって、例示的な受信制御ブロック（Ｒｘ  ＴＣＢ）データ構造を示す図。
【図１２Ａ】本発明の１実施形態にしたがって、受信制御ブロック（Ｒｘ  ＴＣＢ）を使用してデータパケットを受信する例示的なステップを示す図。
【図１２Ｂ】本発明の１実施形態にしたがって、受信制御ブロック（Ｒｘ  ＴＣＢ）を使用してデータパケットを受信する例示的なステップを示す図。
【図１３】本発明の１実施形態にしたがって、承認パケットの受信に応答して、受信プロセスにより取られるステップを示す図。
【図１４】本発明の１実施形態にしたがって、先に送信されたデータの承認以外のデータを含む１以上のデータパケットの受信に応答して、受信プロセスにより取られるステップを示す図。
【図１５】本発明の１実施形態にしたがって、ターゲット装置でデータの受信を容易にするための受信送信制御ブロック（Ｒｘ  ＴＣＢ）データ構造を示す図。
【図１６】本発明の１実施形態にしたがって、順番に並んでいないパケットが部分的に再度順序付けされているＲｘ  ＴＣＢを示す簡潔図。
【図１７】本発明の別の実施形態にしたがって、順番に並んでいないパケットの部分的な再順序付け特性を含んでいる例示的なＲｘ  ＴＣＢを示す簡略化された図。
【図１８】本発明の別の実施形態にしたがって、Ｒｘ  ＴＣＢの順番に並んでいないパケットの部分的な再順序付けに関する予見特性を示す簡略化された図。
【図Ａ１】従来技術のＴＣＰデータセグメントのエレメントを示すブロック図。
【図Ａ２ａ】本発明の好ましい実施形態にしたがって、ＴＣＢデータ構造のメモリのレイアウトを示す図。
【図Ａ２ｂ】再順序付けバッファ（ＲＯＢ）更新および処理を示すフローチャート。
【図Ａ３ａ】ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙した図。
【図Ａ３ｂ】ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙した図。
【図Ａ３ｃ】ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙した図。
【図Ａ３ｄ】ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙した図。
【図Ａ３ｅ】ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙した図。
【図Ａ３ｆ】ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙した図。
【図Ａ３ｇ】ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙した図。
【図Ａ４】本発明の好ましい実施形態にしたがって、送信コンピュータから受信コンピュータへ、複数のデータセグメントを具備するデータストリームを有するステップを示すフロー図。
【図Ａ５】本発明にしたがって、ＴＣＰ／ＩＰ処理のマイクロコード駆動処理エンジンを有するＡＳＩＣを示すブロック図。
【図Ａ６】ファイバチャンネルフレームとギガビットイーサネット（登録商標）フレーム処理が図Ａ５のＡＳＩＣで行われる態様を示す図。
【図Ａ７】ギガビットイーサネットフレームとファイバチャンネルフレーム処理が図Ａ５のＡＳＩＣで行われる態様を示す図。
【詳細な説明】
【００１３】
本発明は添付図面により説明を限定するものではなく、例示として示されており、同一の参照符号は類似の素子を示している。  
本発明を添付図面で示されている幾つかの好ましい実施形態を参照にして詳細に説明する。以下の説明では、複数の特別な詳細は本発明を徹底的に理解するために説明される。しかしながら、当業者には本発明がこれらの幾つかまたは全ての特別な詳細なしに実施されることが明白であろう。他の例で、よく知られたプロセスステップおよび／または構造は本発明を不必要に不明瞭にしないために詳細には説明しない。
【００１４】
図２は、本発明の１実施形態にしたがって、本発明の送信制御ブロック（Ｔｘ  ＴＣＢ）と本発明の受信制御ブロック（Ｒｘ  ＴＣＢ）とを使用してホストコンピュータ204とデータを交換するホストコンピュータ202を示す簡略図を示している。図２で示されているように、各ホストコンピュータの各データフローには１つの送信制御ブロックＴｘ  ＴＣＢが存在する。送信制御ブロックＴｘ  ＴＣＢはホストコンピュータに設けられ、データ送信プロセス中に使用される。したがってデータフローの２つの端部の両ホストコンピュータが相互にデータの送信に係わるならば、各双方向のデータフローは２つの送信制御ブロック（Ｔｘ  ＴＣＢ）に関連される。これはそれぞれホストコンピュータ202と204の送信制御ブロック206と208により示されている。受信データでは、双方向データフローの２つの端部の各ホストコンピュータも受信制御ブロックＲｘ  ＴＣＢを有する。したがって、データフローの２つの端部の両ホストコンピュータが相互にデータを受信することを許容されているならば、各双方向データフローは２つの受信制御ブロック（Ｒｘ  ＴＣＢ）に関連される。これはそれぞれホストコンピュータ202と204の受信制御ブロック210と212により示されている。
【００１５】
各ホストコンピュータ内で、各双方向データフローは送信プロセスで別々のデータ制御ブロック（即ち送信制御ブロックまたはＴｘ  ＴＣＢ）と受信プロセスで別々のデータ制御ブロック（即ち受信制御ブロックまたはＲｘ  ＴＣＢ）が与えられているので、ホストコンピュータは同時に送信および受信リクエストを２つの異なるデータ制御ブロックを使用して処理できる。例えば、ホストコンピュータ202はＴｘ  ＴＣＢ206を使用して送信リクエストを、Ｒｘ  ＴＣＢ210を使用して受信リクエストを同時にサービスできる。ここで使用されているように、用語「同時に行われるプロセス」は１つのプロセスのサブステップまたはサブプロセスが他のプロセスが終了される前でさえも実行されることができることを示している。例えば２つの異なるプロセス回路（２つの並列プロセッサ等）で実行されることができる２つのプロセスは同時に行われることができる。さらに単一の処理回路により２つの異なるスレッドで実行される２つのプロセスは、処理回路がその特性によって一度に一つの命令だけを実行できる場合であっても、同時に行われると考えることができる。
【００１６】
本発明の文脈では、双方向のデータフローに関連したあるパケットに関する送信リクエストは双方向のデータフローの他のパケットに関する受信リクエストのサービスと同時にサービスされることができる。これはホストコンピュータ104のようなホストコンピュータが送信リクエストのサービスが行われ、受信リクエストをサービスするために（またはその逆）そのＴＣＢへアクセスする前に従来技術のＴＣＢ（ＴＶＢ102等）が解除されるまで待機しなければならない図１の状態と異なっている。
【００１７】
ここで使用されているように、用語ホストコンピュータはプロセッサと、データの送信および受信のための少なくとも１つのＩ／Ｏポートを有する（したがって“ホスト“と言う）コンピュータが実行する装置を指している。用語がここで使用されるとき、ホストコンピュータはキーボードまたは他のユーザデータ入力装置を有する必要はない。このように、ホストコンピュータは、ここでその用語が使用されているホストコンピュータはコンピュータディスプレイスクリーンのようなデータ表示装置を有することは必要ではない。このように、ここで使用されている用語ホストコンピュータは、記憶領域ネットワーク（ＳＡＮ）装置、ネットワークに取付けられた記憶装置（ＮＡＳ）、ネットワークにより他の装置と通信するためのプロセッサを有するデータ記憶装置、および／またはプロセッサを有しネットワークにより通信できる任意の他のコンピュータが実行する装置を含んでいてもよい。
【００１８】
図３は、本発明の１実施形態にしたがって、データ送信を容易にするための送信制御ブロック（Ｔｘ  ＴＣＢ）300のデータ構造を示している。図３を参照すると、送信制御ブロック（Ｔｘ  ＴＣＢ）300は特に、送信補助パラメータ（即ち送信プロセスを促すために使用されるパラメータ）の４つの主要なグループ、即ちＴＸヘッダ、ＴＸウィンドウ管理、ＴＸ待ち行列管理、ＴＸタイマ管理を有している。さらに重要なＴＸヘッダパラメータはＴＣＰソースポート（ＴＣＰ  ＳＰ）302、ＴＣＰ目的地ポート（ＴＣＰ  ＤＰ）304、ＩＰソースアドレス（ＩＰ  ＳＡ）366、ＩＰ目的地アドレス（ＩＰ  ＤＡ）306、次へ送信されるためのシーケンス番号（ＳＮＤ＿ＮＸＴ）322、送信ホストコンピュータのウィンドウサイズ（ＳＮＤ＿ＷＩＮ）316、最適な最大セグメントサイズ（ＳＥＧ＿ＯＰＴ＿ＭＳＳ）318、現在の過密ウィンドウ（ＩＣＮＧ＿ＷＩＮ／ＣＮＧ＿ＷＩＮ）324を含んでいる。
【００１９】
より重要なＴＸウィンドウ管理パラメータは現在の過密ウィンドウ（ＩＣＮＧ＿ＷＩＮ／ＣＮＧ＿ＷＩＮ）324、古い承認されていないシーケンス番号（ＯＬＤ＿ＵＮＡ）320、次へ送信されるためのシーケンス番号（ＳＮＤ＿ＮＸＴ）322、送信される最大のシーケンス番号（ＳＮＤ＿ＭＡＸ）326、送信ホストコンピュータのウィンドウサイズ（ＳＮＤ＿ＷＩＮ）316を含んでいる。
【００２０】
さらに重要なＴＸ待ち行列管理パラメータは送信保留読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）346、送信保留書込みポインタ（ＴＸＰ＿ＷＲ＿ＰＴＲ）344、再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350、再送信読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）348、送信待ち行列ベースアドレス（ＴＸＰ＿ＢＡＳＥ＿ＡＤＤＲ）330、送信待ち行列最大アドレス（ＭＡＸ＿ＴＸＰ＿ＡＤＤＥＲ）342を含んでいる。
【００２１】
さらに重要なＴＸタイマ管理パラメータは再送信タイムアウト値ＲＴＯ334、フレーム送信タイマＦＳＴ340、円滑にされた往復時間（ＳＲＴＴ）338、測定された往復時間（ＭＲＴＴ）336、タイマの測定がキックオフされるセグメントのシーケンス番号（ＴＭＲ＿ＳＥＱ＿ＮＵＭ）332を含んでいる。
【００２２】
送信制御ブロック（Ｔｘ  ＴＣＢ）300の動作は以下、図面を参照して良好に理解されるであろう。送信制御ブロック（Ｔｘ  ＴＣＢ）の概念には送信ウィンドウ管理および待ち行列管理の概念が一体化されている。図４は、任意の所定の時間に所定のデータフローで送信ホストコンピュータから送信されることを可能にされたデータ量を概念的に表している送信ウィンドウ402を簡単なフォーマットで示している。送信ウィンドウ402は例えば６４Ｋｂのサイズを有するが、正確な値は構成により変化できる。（通常、ホストアプリケーションソフトウェアから）パケットを送信するリクエストが存在するときにはいつでも、パケットはバッファされ、送信ウィンドウ402はパケットを送出するのに十分な送信帯域幅が存在するか否かを見るために（送信制御ブロック300のパラメータＳＮＤ＿ＷＩＮ316により）チェックされる。
【００２３】
送信ウィンドウ402は遅いスタート特性を有し、即ち送信ウィンドウ402は例えば第１のウィンドウサイズ404までのかなり小さい状態（通常、１ＭＳＳまたは１の最大セグメントサイズ）でスタートする。これは少量のデータがスタート時にホストコンピュータから送信されることを可能にする。他の端部のホストコンピュータがタイムリーに承認を送信するならば、送信ウィンドウ402は最大のウィンドウサイズ406により示される最大のサイズまでさらに多くのデータが送信されることを可能にするため漸進的に開く。予測された承認がタイムリーに受信されないならば、送信ウィンドウ402はその最小サイズに再度収縮するかまたは承認期間の満了時に有した値よりも小さいある値へ収縮される。この方法で、送信ウィンドウ402は送信ホストコンピュータにおける過密制御の機能を行う。
【００２４】
図５は本発明の１特徴にしたがって、再送信待ち行列502と送信保留待ち行列504を示している。送信保留待ち行列504は送信エレメントを待ち行列するのに使用され、これは送信制御ブロック（Ｔｘ  ＴＣＢ）に関連するホストコンピュータから送信されるパケットか、またはさらに共通して、そのパケットへのポインタかを含んでいる。送信エレメントはまた開始シーケンス番号とそのパケットの長さ等のような、送信されるパケットに関連するデータを含んでいる。
【００２５】
送信ウィンドウサイズがパケットの送信に十分であるならば、パケットは送信され、コピー（またはそのポインタおよび／または関連するデータ）は再送信待ち行列502へ配置される。他方で、送信されるパケット（またはそのポインタおよび／または関連するデータ）は送信ウィンドウサイズがそのパケットの送信に不十分であるときには送信保留待ち行列504へ配置される。送信保留待ち行列504は２つのポインタ、即ち送信保留読取ポインタ（ＴＸＰ＿ＲＤ＿ＰＴＲ）346、送信保留書込みポインタ（ＴＸＰ＿ＷＲ＿ＰＴＲ）344により管理される。送信保留読取ポインタ（ＴＸＰ＿ＲＤ＿ＰＴＲ）346は送信待ち行列の上部を指し、特に送信ウィンドウが利用可能であるときに次に送信される待ち行列エレメントを指す。送信保留書込みポインタ（ＴＸＰ＿ＷＲ＿ＰＴＲ）344は送信待ち行列の末尾であり、最後に挿入された送信エレメントを表している。パケットが送信保留待ち行列504から送出されるとき、送信保留読取ポインタ（ＴＸＰ＿ＲＤ＿ＰＴＲ）346は送信保留書込みポインタ（ＴＸＰ＿ＷＲ＿ＰＴＲ）344の方向へ移動する。したがって送信保留書込みポインタ（ＴＸＰ＿ＷＲ＿ＰＴＲ）344と送信保留読取ポインタ（ＴＸＰ＿ＲＤ＿ＰＴＲ）346の差は任意の所定の時点における送信待ち行列のサイズを表しており、これは送信される保留パケット数を示している。
【００２６】
送信後パケットは再送信待ち行列502へ移動される。再送信待ち行列502では、パケットは待ち行列を解除される前に他のホストコンピュータからの承認を待機する。再送信待ち行列502は２つのポインタ、即ち再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350と再送信読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）348により管理される。
【００２７】
多くの場合、再送信読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）348と再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350は同一の再送信待ち行列エレメントを指す。再送信中、再送信読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）348は前進し、再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350はとどまり、シャドウポインタとして作用する。再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350は再送信された点に対して承認が受信されるときのみ前進される。全ての再送信パケットが承認されるならば、再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350と再送信読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）348は相互に追いつき、同一の待ち行列エレメントを再度指す。
【００２８】
便宜上、再送信待ち行列502と送信保留待ち行列504は回路待ち行列として共に構成され、メモリの隣接ブロックを占有する。しかしながら、再送信読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）348、再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350、送信保留読取ポインタ（ＴＸＰ＿ＲＤ＿ＰＴＲ）346、送信保留書込みポインタ（ＴＸＰ＿ＷＤ＿ＰＴＲ）344の使用は再送信待ち行列502と送信保留待ち行列504が２つの異なる論理待ち行列として管理されることを可能にする。
【００２９】
図６は、本発明の１実施形態にしたがって、本発明の送信制御ブロック（Ｔｘ  ＴＣＢ）を含む送信動作を示すブロック図である。図６を参照すると、送信動作をサービスするプロセッサを表す送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602が示されている。図６の例では、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602は１つのマイクロコード駆動エンジン、または複数のマイクロコード駆動エンジンを表しており、これはとりわけ４つの異なるタイプのリクエスト、即ちデータ送信のリクエスト、再送信のリクエスト、承認（ＡＣＫ）を送信するためのリクエスト、受信された承認に基づいて送信ウィンドウを更新するリクエストを取る。通常、これらの４つのリクエストは４つの独立して実行するスレッドを使用して送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602により同時にサービスされる。
【００３０】
データ送信のリクエストは典型的に送信ホストコンピュータに関連するアプリケーションソフトウェアにより発生される。これらのリクエストは送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602によりサービスされるのを待機しながら、待ち行列604で待ち行列されている。１実施形態では、待ち行列604の各待ち行列エレメントの内容はデータフローに関連する送信制御ブロック（Ｔｘ  ＴＣＢ）へのポインタと、データが記憶されている場所のバッファエレメントへのポインタと、送信されるデータの長さを含んでいる。
【００３１】
所定のホストコンピュータと別のホストコンピュータまたは他のホストコンピュータ間には多数のデータフローが存在するので、各ホストコンピュータはデータフローにそれぞれ関連する多数の送信制御ブロック（Ｔｘ  ＴＣＢ）を有する。多数の送信制御ブロック（Ｔｘ  ＴＣＢ）は参照符号612により図６に示されている。所定のデータフローに対する送信制御ブロック（Ｔｘ  ＴＣＢ）は例えばＴＣＰソースポート（ＴＣＰ  ＳＰ）、ＴＣＰ目的地ポート（ＴＰＣ  ＤＰ）、ＩＰ目的地アドレス（ＩＰ  ＤＡ）および／またはＩＰソースアドレス（ＩＰ  ＳＡ）を使用して発見される。
【００３２】
再送信のリクエストは典型的に、所定のパケットが再送信されて以来、再送信タイマがある予め規定された時間後に満了し、承認がまだ受信されていないときに発生される。所定のホストコンピュータと別のホストコンピュータとの間または他のホストコンピュータ間に多数のデータフローが存在するので、各ホストコンピュータは多数の再送信タイマを有する。複数の再送信タイマは参照符号614により図６で示されている。これらのリクエストは、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602によりサービスされるのを待機しながら、待ち行列606で行列して待っている。１実施形態では、待ち行列606の各待ち行列エレメントの内容はデータフローに関連する送信制御ブロック（Ｔｘ  ＴＣＢ）へのポインタを含んでいる。
【００３３】
承認（ＡＣＫ）を送信するためのリクエストは、他のホストコンピュータから送信されたデータの受信の成功に応答して発生される。これらのリクエストは、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602によりサービスされるのを待機しながら、待ち行列608で行列して待っている。１実施形態では、待ち行列608の各待ち行列エレメントの内容はデータフローに関連する送信制御ブロック（Ｔｘ  ＴＣＢ）へのポインタ、受信されたデータに関連する承認番号、受信されたデータに関連するウィンドウサイズを含んでいる。
【００３４】
受信された承認に基づいて送信ウィンドウを更新するリクエストは、受信された承認に応答して発生される。これらのリクエストは、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602によりサービスされるのを待機しながら、待ち行列610で待ち行列されている。１実施形態では、待ち行列610の各待ち行列エレメントの内容は受信ウィンドウサイズ、受信された承認番号、Ｔｘ  ＴＣＢへのポインタ、随意選択的なタイムスタンプ、ＳＡＣＫ情報を含んでいる。
【００３５】
１実施形態では、これらの待ち行列604、606、608、610はラウンドロビン方法で送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602によりサービスされるが、これらの待ち行列中のリクエストが効率的な方法でサービスされることを確実にするための任意の他の方式が使用されてもよい。
【００３６】
送信動作に関連するリクエストのサービスにおける送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602の動作と送信制御ブロック（Ｔｘ  ＴＣＢ）の役割はここで図７、８、９、１０のフローチャートを参照して良好に理解されることができるであろう。１実施形態では、図７−１０で示されているプロセスはデータのスループットを改良するためにホストコンピュータのホストプロセッサからオフロードされる処理を表している。例示により、これらのプロセスはホストコンピュータのホストプロセッサと並列に動作する１以上のネットワークプロセッサおよび／または埋設されたプロセッサおよび／または共同プロセッサを具備する回路によって実行される。前述の回路はホストコンピュータと一体化した方法で構成されるか、ホストプロセッサのバスに取外し可能に結合されるように構成されたネットワークインターフェースカード（ＮＩＣ）等のプラグインカードに構成される。
【００３７】
図７は、本発明の１実施形態によって、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602が送信ホストコンピュータに関連されるホストアプリケーションプログラムからデータを送信するリクエストをサービスするために送信制御ブロック（Ｔｘ  ＴＣＢ）を使用する動作を示す簡単なフローチャートである。一度、アプリケーションがデータを送出するようにリクエストすると、そのデータはフェッチされバッファメモリ中に位置される。各リクエストは特定のデータフローに関係し、したがって特定の送信制御ブロック（Ｔｘ  ＴＣＢ）に関連される。ＴＣＰソースポート（ＴＣＰ  ＳＰ）、ＴＣＰ目的地ポート（ＴＰＣ  ＤＰ）、ＩＰ目的地アドレス（ＩＰ  ＤＡ）および／またはＩＰソースアドレス（ＩＰ  ＳＡ）を使用して、リクエストに関連する送信制御ブロック（Ｔｘ  ＴＣＢ）が得られる。リクエストはその後、前述したように送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602によりサービスされるように待ち行列604に位置される。
【００３８】
ブロック702では、方法は最初に、送信ウィンドウがリクエストされたデータを送信するのに利用可能であるか否かをチェックする。図３を参照して、現在のウィンドウサイズは送信制御ブロック（Ｔｘ  ＴＣＢ）から、特に関連された送信制御ブロック（Ｔｘ  ＴＣＢ）のパラメータＳＮＤ＿ＷＩＮ316から得られる。ウィンドウがリクエストされたデータパケットの送信に利用可能であるならば、方法はリクエストされたデータパケットが送出されるように送信する前にあるホウスキーピング機能を実行する。したがって方法はブロック704へ進み、送信ホストコンピュータの送信ウィンドウサイズ（ＳＮＤ＿ＷＩＮ）316を更新する。即ち送信ウィンドウ管理部分としての送信ウィンドウのサイズを減少する。さらに方法は次に送信されるシーケンス番号（ＳＮＤ＿ＮＸＴ）322を更新し、それによって次に送信されるシーケンス番号（ＳＮＤ＿ＮＸＴ）322は次のパケットの送信に使用される次のシーケンス番号を示すことができる。さらに方法はＴＭＲ＿ＳＥＱ＿ＮＵＭ332を更新し、それによって一度承認が受信されると、遅延が測定されることができるようにタイマを開始する。
【００３９】
ブロック706では、方法はまた送信されたパケットを再送信待ち行列502へ位置付け、そこにこれらは承認が受信されるまで留まる。したがって送信保留読取ポインタ（ＴＸＰ＿ＲＤ＿ＰＴＲ）346が進められる。さらにフレーム送信タイマＦＳＴ340もまた更新される。
【００４０】
ブロック708では、再送信タイマ614はこれが早期に開始されていないならば、このデータフローで開始される。ブロック710では、リクエストは送信制御ブロック（Ｔｘ  ＴＣＢ）ポインタと共に、データと共にヘッダが受信ホストコンピュータへ送信する処理をするために、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602からヘッダ準備ネットワークプロトコルプロセッサ（ＨＤＲ  ＮＰＰ）616（図６参照）へ送信される。
【００４１】
１実施形態では、送信のための（パケットヘッダを含む）データパケットの処理を容易にするために、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602からヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616へ以下の情報、即ちデータが存在するバッファへのポインタ、送信制御ブロック（Ｔｘ  ＴＣＢ）ポインタ、シーケンス＃、長さ、承認＃、ウィンドウサイズ、および（ＴＣＰヘッダで使用される）ＰＳＨとＡＣＫまたはＵＲＧ等のフラグが送信される。一度、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602がこの情報をヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616へ送信すると、現在の送信リクエストをサービスするプロセスは終了する。
【００４２】
他方で、（ブロック702で決定されるように）送信ウィンドウが利用可能ではないならば、パケットを送信保留待ち行列に行列させて待ったために方法はブロック702からブロック714へ進む。したがって送信保留書込みポインタ（ＴＸＰ＿ＷＲ＿ＰＴＲ）344はパケットが保留送信待ち行列の末尾で待ち行列されていることを示すように更新される。
【００４３】
図８は、本発明の１実施形態にしたがって、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602が再送信待ち行列502からデータを再送信するリクエストをサービスするために送信制御ブロック（Ｔｘ  ＴＣＢ）を使用する態様を示す簡単化されたフローチャートである。図８のプロセスはこのデータフローに関連される再送信タイマＲＴＸ  ＴＭＲ614の期間が満了するときに呼び出される。この場合、プロセスは１以上のＭＳＳサイズのパケット（最大セグメントサイズ）を送信待ち行列から送出し、送信されるＭＳＳの正確な番号は過密を追跡するＩＣＮＧ＿ＷＮＤ（324）に依存する。
【００４４】
ブロック804では、再送信されるパケット（その正確な番号はブロック802で決定されている）は送出される。再送信待ち行列502の管理に関する限り、これは再送信待ち行列502の再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350を維持し、再送信読取ポインタ（ＴＸＰ＿ＲＸＴ＿ＰＴＲ）348を移動して、送出されるパケットの番号を示すことを含んでいる。
【００４５】
ブロック806で、データセットは再送信されるパケットに関連する再送信待ち行列エレメントと、関連する送信制御ブロック（Ｔｘ  ＴＣＢ）の両者から得られる。例えばバッファポインタ、シーケンス番号、再送信されるデータの長さ等のデータは再送信待ち行列エレメントから得られる。この関連される送信制御ブロック（Ｔｘ  ＴＣＢ）から、得られるデータは承認番号、受信ウィンドウサイズ（図３の354参照）を含んでいる。さらに、再送信が行われようとするので、プロセスは現在の過密ウィンドウ（ＩＣＮＧ＿ＷＩＮ／ＣＮＧ＿ＷＩＮ）324を調節する。先に説明したように、送信ウィンドウはデータが送信または再送信された後に承認が受信されるまで減少される。
【００４６】
ブロック808では、送信制御ブロック（Ｔｘ  ＴＣＢ）ポインタと共に再送信リクエストは再送信データを伴ったヘッダが受信ホストコンピュータへ送信する準備をするために送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602からヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616（図６参照）へ送信される。１実施形態では、送信のための（パケットヘッダを含む）データパケットの準備を促すため、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602からヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616へ以下の情報、即ちデータが存在するバッファへのポインタ、送信制御ブロック（Ｔｘ  ＴＣＢ）ポインタ、シーケンス＃、長さ、承認＃、ウィンドウサイズ、ＰＳＨとＡＣＫまたはＵＲＧ等のＴＣＰに関連されるフラグが送信される。一度、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602がこの情報をヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616へ送信すると、図８の現在の再送信リクエストをサービスするプロセスは終了する。
【００４７】
図９は、本発明の１実施形態にしたがって、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602が承認を他の送信ホストコンピュータへ送信するために送信制御ブロック（Ｔｘ  ＴＣＢ）を使用する態様を示す簡単化されたフローチャートである。図８のプロセスはホストコンピュータが他の送信ホストコンピュータから適切にデータパケットを受信した後に呼び出される。ブロック902では、１以上のデータパケットがホストコンピュータで適切に受信されていることが認識される。受信されたデータシーケンスに基づいて、ＲｘプロセスはＡＣＫ＃が送信されるように準備し、受信ウィンドウサイズと待ち行列に基づいてＡＣＫを送信するためのＴＸ  ＮＰＰへのリクエストを準備する。さらに、受信されたデータパケット中の情報もまたこのデータフローに関連する送信制御ブロック（Ｔｘ  ＴＣＢ）へのポインタを得るために使用される。ブロック904では、現在のシーケンス番号は次に送信されるシーケンス番号（ＳＮＤ＿ＮＸＴ）322から得られる。
【００４８】
ブロック906では、ブロック902と904で得られる情報は他の送信ホストコンピュータへ送信されるための特別の承認パケットを準備するためにヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616へ送信される。１実施形態では、（パケットヘッダを含む）送信のための承認パケットの準備を促すために、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602からヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616へ以下の情報、即ち送信制御ブロック（Ｔｘ  ＴＣＢ）ポインタ、シーケンス＃、長さ、承認＃、ウィンドウサイズが送信される。一度、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602がこの情報をヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616へ送信すると、図９の承認を送信するプロセスは終了する。
【００４９】
図１０は、本発明の１実施形態にしたがって、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602が送信ウィンドウを更新し、他の送信ホストコンピュータから送信され受信された承認メッセージに応答して性能データを計算する送信制御ブロック（Ｔｘ  ＴＣＢ）を含んでいる態様を示す簡単化されたフローチャートである。一般的に、２つの主要なタスクが処理される必要があり、タスクは即ち（１）送信ウィンドウを管理するパラメータを更新し、結果として更新されたウィンドウサイズがこのような送信を可能にするならばデータパケットを送出し、（２）送信制御ブロック（Ｔｘ  ＴＣＢ）の情報および承認メッセージで受信された情報に基づいて性能データを計算する。
【００５０】
ブロック1002では、ＴＸウィンドウパラメータが更新される。示されているように、更新されるパラメータは送信ホストコンピュータ（ＳＮＤ＿ＷＩＮ）316のウィンドウサイズ、古い承認されていないシーケンス番号（ＯＬＤ＿ＵＮＡ）320、フレーム送信タイマＦＳＴ340、ＴＭＲ＿ＳＥＱ＿ＮＵＭ332である。ブロック1004では、性能データは計算され、以下のパラメータ、即ち再送信タイムアウト値ＲＴＯ334、スムースにされた往復時間（ＳＲＴＴ）338、測定された往復時間（ＭＲＴＴ）336が更新される。
【００５１】
ブロック1006では、プロセスは、このようなデータパケットが受信された承認メッセージに関係しているならば、（送信保留待ち行列504または再送信待ち行列502からの早期の送信の結果として）再送信のために保持されている任意のデータパケットを解放する。したがって、プロセスは再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350および／または再送信読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）348を適切であるように更新する。ブロック1008では、プロセスは保留データパケットが送出されるために送信保留待ち行列504に存在しているか否かを決定する。
【００５２】
１実施形態では、送信保留待ち行列504の先頭（即ち送信読取ポインタ（ＴＸＰ＿ＲＤ＿ＰＴＲ）346）と送信保留待ち行列504の末尾（即ち送信書込みポインタ（ＴＸＰ＿ＷＲ＿ＰＴＲ）344）との差がゼロよりも大きいならば、プロセスは送信を待機する保留データパケットが存在していると考える。この場合、プロセスは送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）にデータ送信を行うための図７のプロセスを呼び出させるリクエストを出力する。これはブロックブロック1010に示されている。他方で、（ブロック1008で決定されたように）送信保留待ち行列504に保留データパケットがもはや存在しないならば、図１０のプロセスはブロック1012で終了する。
【００５３】
前述したように、所定のデータフローで所定のホストコンピュータにおいて送信および受信タスクを同時に処理するための別々の送信制御ブロック（Ｔｘ  ＴＣＢ）および別々の受信制御ブロック（Ｒｘ  ＴＣＢ）の使用は、送信制御ブロックがデータフローの送信および受信タスクの両者で使用されるとき従来技術で見られた帯域幅ボトルネックの問題を消去する。図１１は、本発明の１実施形態にしたがって、例示的な受信制御ブロック（Ｒｘ  ＴＣＢ）データ構造1100を示している。Ｒｘ  ＴＣＢ1100は受信補助パラメータ、即ち受信プロセスを容易にするのに使用されるパラメータを記憶するために使用される。受信制御ブロック（Ｒｘ  ＴＣＢ）1100は特に複数の機能を可能にするパラメータを有し、複数の機能には順番になっていないパケットを再度順序付けし、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）の代わりに受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）が承認パケットを送信することを可能にし、接続毎を基礎としてＲｘウィンドウサイズを維持する機能が含まれている。
【００５４】
順番になっていないパケットの再順序付けに関しては、本発明の１特徴にしたがって、パケット受信プロセスがさらに帯域幅を実効的にするように順番になっていないパケットを部分的に再度順序付けする方法が与えられる。受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）がシーケンス番号１乃至１０００を有するパケットを予測していたことを仮定する。しかしながら、シーケンス番号１乃至１０００を有するパケットが受信される前に、受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）はシーケンス番号１００２乃至６４，０００を有する代わりのパケットを受信する。幾つかの従来技術の構成では，これらの順番になっていないパケットは破棄され，予測されたパケット（即ちシーケンス番号１乃至１０００を有するパケット）が受信された後、送信ホストコンピュータがこれらを再度送信することを必要とする。
【００５５】
本発明の１特徴にしたがって，受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）はシーケンス番号１００２乃至６４，０００を有するパケットを維持し，必要なときにそれらを部分的に再度順序付けするが，受信ホストコンピュータ内のホストソフトウェアへこれらを送信する代わりに順番に並んでいないバッファにこれらを記憶する。部分的に順序付けされたパケットは例えばキーとしてパケットのシーケンス番号を使用して連結されたリストに記憶する。
【００５６】
順番に並んでいないパケットを部分的に順序付けすることにより（シーケンス番号１乃至１０００を有するパケットは依然として欠落しているので、再順序付けは部分的である）、シーケンス番号１乃至６４，０００を有するパケットは，一度シーケンス番号１乃至１０００を有するパケットが到着すると非常に迅速に組立てられることができる。この迅速な組立ては受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）がさらに迅速に完成したデータを高い層のソフトウェアへ送信することを許容する。さらに，送信ホストコンピュータが実行しなければならない再送信量を減少することによって，本発明は２つのホストコンピュータ間の通信チャンネルの帯域幅を効率的に増加する。本発明のこの特徴は同時出願の明細書（発明の名称“Methods And Apparatus For Handling Out-Of-Order Packets”）で詳細に説明されており，ここで参考文献とされている。
【００５７】
受信制御ブロック（Ｒｘ  ＴＣＢ）1100では、複数の再順序バッファ（ＲＯＢ）、即ちＲＯＢ１、ＲＯＢ２、ＲＯＢ３、ＲＯＢ４が示されている。所望な数の再順序バッファが存在することができるが、４つだけが示されている。各ＲＯＢは順番に並んでいないパケットに関連するパラメータを記憶するために使用される。各ＲＯＢに関連するパラメータはデータへのポインタ（ＰＫＴ＿ＰＴＲ）、記憶転送層ヘッダ（ＳＴＬ、これはファイバチャンネルフレームリアセンブリに使用される）、現在のパケットの長さ（ＰＫＴ＿ＬＥＮ）、現在のパケットのシーケンス番号（ＳＥＱ＿ＮＵＭ）を含んでいる。
【００５８】
ＲＯＢ１を参照すると、これらの４つのパラメータは参照番号1104、1106、1108、1110によりそれぞれ示されている。記憶のフレキシブル性を与え、各受信制御ブロック（Ｒｘ  ＴＣＢ）を過度に大きくすることを避けるために、順番で並んでいないバッファはホストコンピュータシステムのメモリスペースに拡張される。したがって、より多数の再順序バッファが受信制御ブロック（Ｒｘ  ＴＣＢ）データ構造で与えられる以上に必要とされるならば、ポインタ（ＲＯＢ  ＥＸＴＥＮＴＩＯＮ  ＰＴＲ）1112が与えられ、これは拡張の再順序バッファが発見されるホストコンピュータシステムのメモリスペースの位置を指している。
【００５９】
データ受信動作における受信制御ブロック（Ｒｘ  ＴＣＢ）の役割は以下の図１２Ａ−１４を参照して良好に理解されるであろう。１実施形態では、図１２Ａ−１４で示されているプロセスはデータのスループットを改良するためにホストコンピュータのホストプロセッサからオフロードされたプロセスを表している。例示により、これらのプロセスはホストコンピュータのホストプロセッサと並列で動作する１以上のネットワークプロセッサおよび／または埋設されたプロセッサおよび／またはコプロセッサにより構成される。前述の回路はホストコンピュータと一体化した方法で構成されるか、ホストプロセッサのバスに取外し可能に結合されるように構成された上述のネットワークインターフェースカード（ＮＩＣ）等のプラグインカードに構成される。
【００６０】
図１２Ａは、本発明の１実施形態にしたがって、受信制御ブロック（Ｒｘ  ＴＣＢ）を使用してデータパケットを受信する例示的なステップを示している。ブロック1202では、受信されたデータパケットのシーケンス番号は受信制御ブロック（Ｒｘ  ＴＣＢ）のＲＣＶ＿ＮＸＴ1120により記憶されている予測されたシーケンス番号と比較される。受信されたパケットの受信制御ブロック（Ｒｘ  ＴＣＢ）は、ＴＣＰソースポート、ＴＣＰ目的地ポート、ＩＰソースアドレス、および／またはＩＰ目的地アドレスのような情報を使用して発見される。２つが一致するならば、受信されたパケットは順序付けされていると考えられ、方法はブロック1204へ進む。他方で、不一致が存在するならば、受信されたパケットは順番になっていないと考えられ、方法はブロック1248へ進み、これについてはさらに図１２Ｂで説明する。
【００６１】
ブロック1204では、方法はＲＣＶ＿ＮＸＴ1120を更新し、これは受信される次のパケットで予測されるシーケンス番号を更新する。さらに受信ウィンドウはＲＣＶ＿ＷＩＮ1122により更新され、これはデータが受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）から受信ホストコンピュータのアプリケーションソフトウェアへ送信されるまで一時的に受信ウィンドウサイズを減少する。
【００６２】
一度、更新がブロック1204で行われると、方法はブロック1206へ進み、ここで方法は受信されたパケットがこのホストコンピュータから以前に送信されたデータの受信された承認に関するか否か、または受信されたデータパケットが他の送信ホストコンピュータから送信された承認以外のデータに関するか否かを決定する。受信されたパケットがこのホストコンピュータから以前に送信されたデータの受信された承認に関するものであるならば、方法はブロック1208へ進み、ここで受信された承認は送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）へ送信され、それによって送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）はそのウィンドウを更新し、性能データを計算する等の動作を行う。この特徴はここでは図１０に関連して前述した。
【００６３】
他方で、受信されたデータパケットが他の送信ホストコンピュータから送信された承認以外のデータに関するならば、方法はブロック1210へ進み、データはホストコンピュータのメモリへ、即ちホストソフトウェアアプリケーションにより使用されるためにホストバッファメモリスペースへ移動される。ブロック1212および1214では、承認手順は管理されない。１実施形態では、累積承認方式が使用される（しかし全ての構造で必要とされるわけではない）。累積承認方式下では、承認は帯域幅を最適にするために受信された１つおきのパケット毎に送出される。したがってブロック1212では、既に開始されていないならば、遅延された承認タイマが開始される。
【００６４】
他方で、ブロック1214でにおいて、遅延された承認タイマが既にスタートされているならば、方法はタイマを停止し、承認を他の送信ホストコンピュータへ送出するように処理する。いずれにせよ、遅延された承認タイマの期間が満了したならば、承認は送信ホストコンピュータへ送出され、この場合、承認は受信された（２つの代わりに）１つのパケットだけに関する。一般的に、遅延された承認タイマは所定の値、例えば１００ｍｓに設定される。遅延された承認タイマの期間が満了するとき、リクエストはＲｘ  ＮＰＰ待ち行列に行列して並べられる。
【００６５】
ブロック1216で、方法は承認を送出するために承認パケットを生成するのに必要なデータをホストコンピュータの送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）へ送信する。このデータは例えば承認番号、ウィンドウサイズ、送信制御ブロック（Ｔｘ  ＴＣＢ）へのポインタを含んでいる。この手順はこの明細書では図９に関連して先に説明した。Ｒｘ  ＮＰＰはまたそれ自体で承認を送出するための選択肢を有する。例えばＲｘ  ＮＰＰはそれが順番になっていないデータ、重複データまたはＲｘウィンドウプローブを受信するならば直ちに承認を送信する。
【００６６】
ブロック1218で、方法は新しく受信されたデータパケットが再順序バッファに記憶されている以前に部分的に再度順序付けされたパケットを順序付けしているか否かを決定するチェックを行う。ノーであるならば、プロセスはブロック1218に戻る。他方で、新しく受信されたデータパケットの受信が前に部分的に再順序付けされたパケットを順序付けしているならば、方法は全ての順序付けされたパケットをホストアプリケーションバッファスペースに送出し、その承認を送出するために再度ブロック1204へ進む。
【００６７】
図１２Ｂは、受信されたパケットは（図１２Ａのブロック1202により決定されるように）順番になっていないことが発見されている図１２Ａの状態を表している。ブロック1250で、受信されたパケットはそれがこのホストコンピュータにより先に送信されたデータについての他の送信ホストコンピュータからの承認であるか、または他の送信ホストコンピュータにより送信される承認以外のデータであるかを決定するために試験される。受信されたパケットが承認であることが発見されたならば、方法は図１２Ａのステップ1208へ進み、即ち承認データは送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）がその他のタスクの中でそのウィンドウを更新し、性能データを計算するなどを可能にするために送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）へ送信される。
【００６８】
他方で、受信されたパケットが他の送信ホストコンピュータから送信された承認以外の順番になっていないデータであることが発見されたならば、方法は受信されたデータが受信ウィンドウ内に適合するか否かを決定するためにブロック1252へ進む。ホストコンピュータが前にデータのチャンクを受信し、前に受信されたデータをアプリケーションバッファメモリへ完全に移動しておらず、したがって限定された量のみの新しいデータを受取ることができるので、受信ウィンドウは現在狭い可能性がある。受信されたデータが受信ウィンドウ内に適合しないならば、方法はブロック1254へ進み、ここで受信されたデータは単に破棄される。その後、方法は新しいデータの到着を待機するために戻る。これはブロック1256で示されている。
【００６９】
他方で、受信されたデータが受信ウィンドウ内に適合するならば、方法は図１２Ａのブロック1216へ進み、即ち承認パケットを準備させ送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）により送出させるために、受信されたデータを受信制御ブロック（Ｒｘ  ＴＣＢ）と共に送信する。承認はこの場合、パケットが受信されるがこれらは順番になっていないことを他のコンピュータへ示す。
【００７０】
各ＲＯＢは順番になっていないパケットに関連するパラメータを記憶するために使用される。各ＲＯＢに関連するパラメータは、データへのポインタ（ＰＫＴ＿ＰＴＲ  1104）、記憶転送層ヘッダ（ＳＴＬ  1106）、現在のパケットの長さ（ＰＫＴ＿ＬＥＮ  1108）、現在のパケットのシーケンス番号（ＳＥＱ＿ＮＵＭ  1110）を含んでいる。
【００７１】
さらに、受信されたデータはブロック1258で示されているように順番になっていないバッファに記憶される。前述したように、この順番になっていないバッファは再順序バッファの連結されたリストのＰＫＴ＿ＰＴＲ  1104、ＳＴＬ  1106、ＰＫＴ＿ＬＥＮ  1108、ＳＥＱ＿ＮＵＭ  1110等のパラメータにより管理され、バッファの連結されたリストは受信制御ブロック（Ｒｘ  ＴＣＢ）中に維持され、必要なときにバッファ拡張ポインタＲＯＢ  ＥＸＴＥＮＴＩＯＮ  ＰＴＲ  1112の使用によりホストコンピュータのメモリに拡張される。したがってブロック1260では、受信制御ブロック（Ｒｘ  ＴＣＢ）の再順序付けバッファに関連するパラメータは更新される。再順序バッファに関連する記憶転送層ヘッダ（ＳＴＬ）パラメータは（受信制御ブロック（Ｒｘ  ＴＣＢ）のＰＲＯＴＯＣＯＬ  1124により示されるように）プロトコルが現在のプロトコルがＴＣＰ／ＩＰでＩＰ（ＦＣ／ＩＰ）にわたるファイバチャンネルであることを示しさえすれば変更されることに注意する。その後、方法は新しいデータの到着を待機するために戻る。これはブロック1262で示されている。
【００７２】
受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）からの送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）の分離は、受信制御ブロック（Ｒｘ  ＴＣＢ）からの送信制御ブロック（Ｔｘ  ＴＣＢ）の分離に加えて、ホストコンピュータが高い送信帯域幅で通信することを有効に可能にする利点がある。前述したように、各送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）と受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）は種々のリクエストを処理するためにそれ自体のスレッドを実行する。送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）と受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）との間には、実質的な量の必要な調節が存在する。
【００７３】
本発明の１つの特徴にしたがって、受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）はデータを、送信制御ブロック（Ｔｘ  ＴＣＢ）と、送信プロセスに関連する他のパラメータとを更新するために少なくとも２つの機会で送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）へ転送する。これらの２つの機会は他の送信ホストコンピュータからの承認の受信と、データシーケンス情報の受信とを含んでおり、これは送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）が他方の送信ホストコンピュータへ承認を送信することを可能にする。
【００７４】
図１３で示されている例示的な実施形態では、他の送信ホストコンピュータからの１以上の承認パケットの受信は受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）に受信された承認パケットに関連するデータを待ち行列1304中に待ち行列させる。送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）1306は送信制御ブロック（Ｔｘ  ＮＰＰ）と、ウィンドウサイズとを更新し、性能データを計算し、再送信バッファを更新するように待ち行列1304から待ち行列エレメントを取る。ＴＸ  ＮＰＰはその後、受信された承認に基づいてＲｘウィンドウを更新する。さらに送信されたＡＣＫ＃とウィンドウサイズを更新する。
【００７５】
受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）1302により送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）1306へ送信される情報の中には、承認番号、承認が送信されるパケットが他の送信ホストコンピュータにより受信される時間を示すタイムスタンプ値（タイムスタンプ値は現在の時間値に基づいて遅延を計算するために送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）により使用される）、開始シーケンス番号（ＳＴＡＲＴ＿ＳＥＱ）および関連する長さのような選択的な承認ブロックに関連する情報、他のホスト送信コンピュータからのウィンドウサイズ情報、送信制御ブロック（Ｔｘ  ＴＣＢ）へのポインタが含まれる。
【００７６】
図１４により示されている例示的な実施形態では、受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）は承認を送出するために送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）へ情報を送信する。これは遅延された承認タイマが満了されるか、背中合わせの２つのパケットが受信され、承認が送信されるべきであるために生じる。受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）1402は承認を待ち行列1404へ送信するためにリクエストを待ち行列する。送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）1406は承認の送出と送信制御ブロック（Ｔｘ  ＴＣＢ）の更新のために必要なパラメータを計算するために待ち行列1404から待ち行列エレメントを受取る（例えば送信された３つの最新のＡＣＫおよびウィンドウサイズ）。
【００７７】
受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）1402により送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）1406へ送信される情報の中には、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）1406が承認番号を計算することを可能にするシーケンス番号およびその長さが存在する。他の情報は他の送信ホストコンピュータへ送信されるウィンドウサイズ、送信制御ブロック（Ｔｘ  ＴＣＢ）へのポインタを含んでいる。待ち行列1404の上部から取られたこの情報は送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）1406によりヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）へ転送され、他のホスト送信コンピュータへ送信されるための承認パケットを生成する。
【００７８】
部分的に再順序付けされたパケットに関しては、本発明は送信および受信の両者を処理するＴＣＢと、（前述したように）別々の送信ＴＣＢと別々の受信ＴＣＢとが存在する制御ブロックアレンジメントの両者でパケットを部分的に再順序付けする技術および構成を含んでいる。以下の説明は送信および受信の両者を処理するＴＣＢの部分的に再順序付けパケットの１構成に関するが、ここでの本発明の実施形態は別々の送信ＴＣＢ（Ｔｘ  ＴＣＢ）と別々の受信ＴＣＢ（Ｒｘ  ＴＣＢ）とが各ネットワーク化装置に対して存在する制御ブロックアレンジメントにも適用されることに注意する。
【００７９】
図１５は、本発明の１実施形態にしたがって、ターゲット装置でデータの受信を容易にするための受信制御ブロック（Ｒｘ  ＴＣＢ）1502データ構造を示している。送信ＴＣＢ（Ｔｘ  ＴＣＢ）と共に、受信ＴＣＢ（Ｒｘ  ＴＣＢ）1502は、ウィンドウ管理とも呼ばれる任意の所定の時間で通過するパケットの番号のようなデータ転送の種々の特徴の管理、およびパケットの待ち行列およびタイミングの管理によってターゲット装置で受信プロセスを容易にする。
【００８０】
入来パケット自体はＲｘ  ＴＣＢ1502の再順序バッファ（ＲＯＢ）中に直接維持されない。パケットは可変のサイズであるので、ＲＯＢポインタ（“ｐｋｔ＿ｐｔｒｓ”）1506をＲＯＢ1504中のパケットへ記憶し、実際には幾つかまたは全てのパケット自体を外部メモリ位置に記憶することはさらに効率的である。各ポインタ1506と共に、パケット長（“ＰＫＴ＿ＬＥＮ［１０：０］”）1508とシーケンス番号（“ＳＥＱ＿ＮＵＭ”）1510が記憶される。勿論、パケット長1508のサイズは構成にしたがって変化されてもよい。
【００８１】
Ｒｘ  ＴＣＢ1502はパケットのオーバーフローのためにＲＯＢ拡張ポインタ（“ＲＯＢ拡張ｐｔｒ”）1512も含んでいる。即ちそのＲＯＢポインタ1506がＲＯＢ1504に適合できない到着するパケットはそれ自体、ＲＯＢ拡張ポインタ1512により参照されるメモリ位置に記憶される。基本的に他のポインタを含む位置へのポインタがパケットを参照できる。
【００８２】
Ｒｘ  ＴＣＢはＲＯＢポインタをシーケンス番号順にそのＲＯＢ1504に記憶する。例えば最小のシーケンス番号を有するＲＯＢポインタはＲＯＢ1504の上部1516に記憶され、最大のシーケンス番号を有するＲＯＢポインタはＲＯＢ1504の下部1522に記憶されるか、またはＲＯＢ拡張ポインタ1512によりメモリ位置で参照される。メモリ位置のＲＯＢポインタはまたシーケンス番号により記憶されてもよい。新しいパケットが到着するときＲＯＢはＲＯＢポインタがシーケンス番号により順番に維持されることを確実にすることが必要なときに再順序付けされる。またパケットは再調節後、ＲＯＢポインタがもはやＲＯＢ1504にまたはＲＯＢ拡張ポインタ1512と適合できないときに破棄される。
【００８３】
図１６は、本発明の１実施形態にしたがって、順番になっていないパケットが部分的に再度順序付けされているＲｘ  ＴＣＢを示す簡単化された図を示している。再順序付けされる全てのパケットが連続的に番号付けされていなくても、再順序付けは行われるので部分的のみである。例えば再順序パケットはそれらの番号が隣接していなくてもバッファで生じる。図１６の例におけるＴＣＢはそれぞれ３つのエントリ、即ち第１のエントリ1604、第２のエントリ1606、第３のエントリ1608でＲＯＢ1624に３つのスロットを含んでいる。勿論、スロットの番号は所望により変化されることができる。各エントリはＲＯＢに記憶されている受信されたパケットへのポインタ、パケットの長さ、パケットのシーケンス番号を含んでいる。ＴＣＢはまたターゲット装置に到着した順番になっていないパケットの番号を追跡するカウンタ1601を含んでいる。
【００８４】
一度、予測されたシーケンス番号1602を有するパケットがターゲット装置に到着すると、Ｒｘ  ＴＣＢはそれをＲＯＢ中で発見された全ての連続して隣接するパケットと共にアプリケーションへ転送する。ＴＣＢは順番になっていないカウンタ1601を受信され記憶されたパケットの総量から差し引くことによりメモリバッファ1624の最後の連続して隣接するエントリを決定する。
【００８５】
３つのパケットがソース装置からターゲット装置へ送信されることを仮定する。第１の送信されたパケットは１００のシーケンス番号を有し、第２の送信されたパケットは１０００のシーケンス番号を有し、第３の送信されたシーケンスパケットは２０００のシーケンス番号を有する。
【００８６】
しかしながらパケットは順番になっていない状態で到着する。受信された第１のパケットはシーケンス番号２０００を有する第３の送信されたパケットである。受信された第２のパケットはシーケンス番号１０００を有する第２の送信されたパケットである。受信された第３のパケットはシーケンス番号１００を有する第１の送信されたパケットである。
【００８７】
最初に、任意のパケットの到着前の時間＝Ｎ（３２２）においては、ＲＯＢ1624は空である。予測されたシーケンス番号1602は１００であり、これはまたＴＣＰ／ＩＰデータ転送がまだ開始されていないので、ソース装置から送信される第１のパケットの番号である。
【００８８】
時間＝Ｎ＋１（３１０）で、第３の送信されたパケットはシーケンス番号２０００で到着する。これは“１００”の予測されたシーケンス番号1602と一致しないので、第３の送信されたパケットはメモリに位置され、ＲＯＢポインタ1616はその長さおよびシーケンス番号と共に第１のエントリ1604のＲＯＢ1624に記憶される。順番になっていないカウンタ1601は“１”に変更される。即ち１つのエントリが存在し、それは適切な順序ではない。
【００８９】
時間＝Ｎ＋２（３１２）で、第２の送信されたパケットはシーケンス番号１０００で到着する。これは“１００”の予測されたシーケンス番号と一致しないので、第２の送信されたパケットはメモリ中に位置され、ＲＯＢポインタ1618はその長さおよびシーケンス番号と共にＲＯＢ1624に記憶される。第２の送信されたパケットは先に到着した第３の送信されたパケットよりも小さいシーケンス番号を有するので、ＲＯＢ1624のＲＯＢポインタエントリは再順序付けされる。第２の送信されたパケットへのＲＯＢポインタは第１のエントリ1604に配置され、第３の送信されたパケットへのＲＯＢポインタは第２のエントリ1606へ移動される。順番になっていないカウンタ1601は“２”に変更される。即ち２つのエントリが存在し、ＲＯＢ1624では再順序付けされているにもかかわらず、部分的にこれらは両者とも順番になっていない。
【００９０】
時間＝Ｎ＋３（３１４）で、第１の送信されたパケットは“１００”の予測されたシーケンス番号1602に一致するシーケンス番号で最後に到着する。この時点で、ＴＣＢは第１の送信されたパケットをメモリ中に位置させ、ＲＯＢポインタ1620をその長さおよびシーケンス番号と共に第１のエントリ1606のＲＯＢ1624に記憶する。ＲＯＢ1624は再順序付けされる。第２の送信されたパケットへのＲＯＢポインタは第２のエントリ1606へ移動され、第３の送信されたパケットへのＲＯＢポインタは再度第３のエントリ1608へ移動される。３つのエントリが存在するが、全て正しい順序であるので、順番になっていないカウンタ1601は“０”である。
【００９１】
ＴＣＢはその後、シーケンス番号により全ての３つの適切に順序付けされたパケットをターゲット装置のアプリケーションへ転送し、ＲＯＢをクリアし、その後次の予測されたシーケンス番号1602を決定する。
【００９２】
本発明の文脈では、到着するパケットにＲＯＢを与えることは再送信パケットによりネットワークをフラッドする必要性を減少する。またシーケンス番号によるＲＯＢポインタの再順序付けは各パケットのシーケンス番号を連続して再検査する必要性をなくし、それによってアプリケーションのネットワーク待ち時間が減少する。
【００９３】
図１７は、本発明の別の実施形態にしたがって、順番になっていないパケットの部分的な再順序付け特性を含んでいる例示的なＲｘ  ＴＣＢを示す簡単化された図を示している。図１７の実施形態では、次に予測されるシーケンス番号を有するパケットと順次連続しているパケットはターゲット装置のアプリケーションに転送され、転送されたパケットと順次連続していないパケットはその後続して到着するパケットと再順序付けされるようにバッファに維持される。図１７の例では、Ｒｘ  ＴＣＢは各３つの順序付けされたエントリ、即ち第１のエントリ1704、第２のエントリ1706、第３のエントリ1708に対してＲＯＢ1724に３つのスロットを含んでいる。各エントリはＲＯＢに記憶されている受信されたパケットへのポインタ、パケットの長さ、パケットのシーケンス番号を含んでいる。図１６のように、ＴＣＢはまたターゲット装置に到着した順番になっていないパケットの番号を追跡するカウンタ1701を含んでいる。
【００９４】
この例では、４つのパケットがソース装置からターゲット装置へ送信される。第１の送信されたパケットは１００のシーケンス番号を有し、第２の送信されたパケットは１０００のシーケンス番号を有し、第３の送信されたシーケンスパケットは２０００のシーケンス番号を有し、第４の送信されたパケットは３０００のシーケンス番号を有している。
【００９５】
しかしながらパケットは順番になっていない状態で到着する。受信された第１のパケットはシーケンス番号３０００を有する第４の送信されたパケットである。受信された第２のパケットはシーケンス番号１０００を有する第２の送信されたパケットである。受信された第３のパケットはシーケンス番号１００を有する第２の送信されたパケットである。
【００９６】
送信された第３のパケットは到着していない。
【００９７】
最初に、任意のパケットの到着前の時間＝Ｎ（４２２）で、ＲＯＢ1724は空である。予測されたシーケンス番号1702は１００であり、これはまたＴＣＰ／ＩＰデータ転送がまだ開始されていないので、ソース装置から送信される第１のパケットのシーケンス番号である。
【００９８】
時間＝Ｎ＋１（４１０）で、第４の送信されたパケットはシーケンス番号３０００で到着する。これは“１００”の予測されたシーケンス番号と一致しないので、第４の送信されたパケットはメモリに位置され、ＲＯＢポインタ1716はその長さおよびシーケンス番号と共に第１のエントリ1704でメモリバッファ1724に記憶される。順番になっていないカウンタ1701は“１”に変更される。即ち１つのエントリが存在し、それは適切な順序ではない。
【００９９】
時間＝Ｎ＋２（４１２）で、第２の送信されたパケットはシーケンス番号１０００で到着する。これも予測されたシーケンス番号“１００”と一致しないので、第２の送信されたパケットはメモリに位置され、ＲＯＢポインタ1718はその長さおよびシーケンス番号と共にメモリバッファ1724に記憶される。第２の送信されたパケットは先に到着した第４の送信されたパケットよりも小さいシーケンス番号を有するので、第２の送信されたパケットへのＲＯＢポインタは第１のエントリ1704中に位置され、第４の送信されたパケットへのＲＯＢポインタは第２のエントリ1706へ移動される。２つのエントリが存在し、両者とも順番になっていないので、順番になっていないカウンタ1701は“２”に変更される。
【０１００】
時間＝Ｎ＋４（４１４）で、第１の送信されたパケットは予測されたシーケンス番号1702に一致するシーケンス番号で最後に到着する。この時点で、ＴＣＢは第１の送信されたパケットをメモリ中に位置し、ＲＯＢポインタ1720をその長さおよびシーケンス番号と共に第１のエントリ1706のＲＯＢ1724に記憶する。第２の送信されたパケットへのＲＯＢポインタは第２のエントリ1706へ移動され、第４の送信されたパケットへのＲＯＢポインタは第３のエントリ1708へ移動される。全部で３つのエントリが存在するが、最初の２つは適切な順序であるが、最後の１つは順番になっていないので、順番になっていないカウンタ1701は“１”に変更される。
【０１０１】
ＴＣＢはその後、シーケンス番号により最初の２つの適切な順序のエントリ、即ち第１および第２の送信されたパケットをターゲット装置のアプリケーションへ転送する。その後、第４の送信されたパケットへのＲＯＢポインタを第１のエントリ1704へ移動する。ＴＣＢはその後、次の予測されたシーケンス番号1702を決定する。
【０１０２】
本発明の文脈では、ＲＯＢポインタの部分的な再順序付けと、連続して再検査せずにシーケンス番号によるアプリケーションへのパケットグループの転送は、図１５で示されている従来技術に比較して、アプリケーションのネットワーク待ち時間を減少する。
【０１０３】
図１８は、本発明の別の実施形態によるＴＣＢ  1802中の順番になっていないパケットの部分的な再順序付けに関する予見アルゴリズムを示す簡単化された図を示している。ＴＣＢは全部で５つのＲＯＢポインタエントリを保持できるＲＯＢ  1824を表示している。
【０１０４】
ソース装置はそれぞれシーケンス番号１００、１０００、２０００、３０００、４０００、５０００を有する６つのパケットを送信する。ターゲット装置はそれぞれシーケンス番号２０００、３０００、４０００を有する丁度３つのパケットを受信する。対応するＲＯＢポインタはＲＯＢ  1824にシーケンス番号により記憶される。
【０１０５】
ＴＣＢ予見アルゴリズムは、既に到着したパケットの長さおよびシーケンス番号と、次に予測されるシーケンス番号1808および／または最大の転送ユニット（ＭＴＵ）に基づいて、到着していないパケットの番号を予測し、そのバッファにスペースを割当てる。ＭＴＵは典型的に、例えば、開始プロセス中（例えば発見中）に決定される。例えばＭＴＵが１，５００バイトであると仮定する。この場合、予見アルゴリズムは少なくとも２つのパケットが最初の１，９００バイト（即ち２０００の最小の受信されたシーケンス番号から１００の予測されたシーケンス番号を減算する）を転送するのに必要とされることを予測する。
【０１０６】
したがって、予見アルゴリズムは予測された２つのパケットに対してＲＯＢの次の２つのエントリを割当てる。そのシーケンス番号が２０００の最小の受信されたシーケンス番号と１００の予測されたシーケンス番号との間ではない任意のパケットが到着すると、それは単に破棄される。例えばシーケンス番号５，０００のパケットが次に到着するならば、これは残りの２つのエントリが既に割当てられているために破棄される。他方で、予測されたシーケンス番号１００を有するパケットまたはシーケンス番号１，０００を有するパケットが次に到着するならば、そのパケットはＲＯＢに置かれ、再順序付け中に考慮される。
【０１０７】
本発明の文脈では、ＴＣＢ予見アルゴリズムはＲＯＢポインタの不必要な再順序付けを減少する。ＴＣＢが最高のシーケンス番号を有するパケットが他の予測されるパケットのための余地をつくるために将来破棄されることを必要とされると考えるならば、ターゲット装置にそれが到着するときにそのパケットを破棄する。それによって、これは現在、正しく順序付けされたパケットのグループが、行われることを必要とされる再順序付けステップの量を減少することによって効率的にアプリケーションに転送されることができるので、アプリケーションのネットワークの待ち時間全体が減少する。
【０１０８】
［付録Ａ：本発明の別の実施形態］  
本発明は１以上のコンピュータネットワークを横切ってデータを送信および受信するためのプロトコルに関し、特に２つのコンピュータ間でデータを転送するために使用される送信制御プロトコル／インターネットプロトコルをハードウェアで構成することに関する。
【０１０９】
送信制御プロトコル／インターネットプロトコル（“ＴＣＰ／ＩＰ”）はコンピュータ（または“ホスト”）が１以上のネットワークを横切って情報を通信することを可能にするプロトコルの組み合わせである。ＴＣＰ／ＩＰ内では、各プロトコルは特別なタスクを割当てられ、プロトコルは典型的に“スタック”と呼ばれる層設計で構成され、即ち高いレベルのプロトコルはそのタスクを実行するために低いレベルのプロトコルを使用する。ＴＣＰとＩＰ間で、ＴＣＰは高いレベルのプロトコルである。さらにＴＣＰ／ＩＰ処理は典型的にソフトウェアで実行される。ＴＣＰとＩＰはそれらに特有のタスクを実行する多数の異なるプロトコルのファミリのうちの２つであるが、ＴＣＰとＩＰはこれらのプロトコルで最もよく知られているので、ＴＣＰ／ＩＰとしてプロトコルのファミリ全体を指すことが慣例になっている。
【０１１０】
インターネットプロトコル（“ＩＰ”）はデータグラムと呼ばれるデータの６４Ｋバイトのパケットを１つのホストから別のホストへの不確実な送信を行うプロトコルである。このプロトコルは送信パケットが失われ、重複しまたは崩壊しているかについて注意していないので不確実である。ＩＰは確実な送信を確実にするために高いレベルのプロトコルに依存する。ＩＰの主要なタスクはアドレス、ルート設定、断片化である。ＩＰの別の仕事は古いパケットをネットワークから除去することである。
【０１１１】
ＩＰはデータパケットの目的地を決定するために、インターネットヘッダ中で伝送されるアドレスを使用する。送信のパスの選択はルート設定と呼ばれる。ルートは静止または動的なテーブルに基づいている。断片化はデータのブロックが大きくてＩＰ下のネットワークに適合できないときに必要とされる。データの大きいブロックがネットワークによる送信のためにＩＰレベルで到着するならば、ＩＰはそれらをネットワークへ送信する前に、ブロックを小さい断片に分解する。データの断片がネットワークから受信されるとき、ＩＰはもとのブロックに対応するようにデータの断片を再構成する。
【０１１２】
転送制御プロトコル（“ＴＣＰ”）はインターネットプロトコルを使用して異なるネットワークを横切って２つのホスト間の確実な接続を行うように設計される。ＴＣＰ／ＩＰで送信されるデータは、根本的なプロトコルにより小さいパケットに分割されても、バイト流であると考えられる。ＴＣＰは損傷、紛失、重複またはインターネット通信システムにより順番になっていない状態で転送されるデータを回復しなければならない。ＴＣＰはまた受信機が送信機により送信されるデータの量を支配する方法を提供し、即ちフローまたは過密の制御を行う。ＴＣＰプロトコルの別の応答性は接続処理であり、ここではＴＣＰは同時に複数の接続を管理する。
【０１１３】
ＴＣＰプロトコルソフトウェアを使用して２つのホストマシン間で転送されるユニットはセグメントと呼ばれる。セグメントは接続の設定、データの転送、データが受信された承認（“ＡＣＫ”）の送信、ウィンドウサイズの規定、接続を閉じるために交換される。各セグメントは２つの部分、即ちヘッダとデータに分割される。ＴＣＰヘッダは識別および制御情報を有し、データの安全な転送を確実にし、フロー制御を管理し、接続を処理するのに必要な情報全てを含んでいる。図Ａ１は、データおよびヘッダのエレメントを有する通常のＴＣＰセグメントを示しており、以下詳しく説明される。
【０１１４】
図Ａ１で見られるように、ソースポートはＴＣＰセグメントが送信ホスト内から発生した場所を識別する１６ビット数であり、目的地ポートはＴＣＰセグメントが受信ホストの目的の場所を識別する１６ビット数である。シーケンス番号はＴＣＰ接続に対する全バイトストリーム内のセグメント中の第１のデータバイトの現在位置を識別する３２ビット数である。承認番号は送信機が受信機から予測する次のデータバイトを識別する３２ビット数である。
【０１１５】
ＨＬＥＮはヘッダの長さであり、ＴＣＰヘッダの全長を特定する４ビットフィールドである。保留として識別されているフィールドは現在未使用の６ビットフィールドであり、将来使用するために保留されている。コードビットはある変数がＴＣＰセッション中に実行されることを送信ホストまたは受信ホストに通知する単一ビットのフラグである。ウィンドウはデータ送信ウィンドウサイズの形態でフロー制御のためにＴＣＰにより使用される１６ビット数であり、受信機が受け取ろうとしているデータの量を送信機に通知する。チェックサムは好ましくはＴＣＰヘッダとデータフィールドの内容に基づいて、ＴＣＰ送信ホストにより計算される１６ビット値である。この３２ビットチェックサムは受信機によって受信機が同じ計算を使用して発生する値と比較される。値が一致するならば、受信機は到着したセグメントが完全であることを確証される。
【０１１６】
ＴＣＰ送信機が受信機に緊急のデータが受信アプリケーションにより可能な限り処理されるべきであることを通知することが必要である場合、緊急ポインタが使用される。１６ビットフィールドがセグメントの緊急のデータの最後のバイトが終了するときを受信機に通知する。付加的な機能を行うため、幾つかの随意選択的なパラメータがＴＣＰ送信機と受信機との間で使用される。選択肢はサイズが変化するので、パッディングフィールドを使用してゼロでＴＣＰヘッダを“パッド”することが必要とされ、それによってセグメントは標準で規定されているように３２ビットワードの境界で終了する。データフィールドは幾つかの状態（例えば逆方向ではデータをもたないＡＣＫセグメント）では使用されないので、この可変長のフィールドはＴＣＰ送信機から受信機へアプリケーションデータを伝送する。
【０１１７】
構内網（“ＬＡＮ”）、都市域ネットワーク（“ＭＡＮ”）または広域網（“ＷＡＮ”）は典型的に１つのコンピュータから別のコンピュータへデータを転送するためにＴＣＰ／ＩＰを使用し、ギガビットイーサネットはこれらの環境の物理的な媒体として広く使用されている。ギガビットイーサネットと類似の技術は一度ワイヤで使用されるとＩＰデータの高速度送信を可能にする。しかしながら従来技術は専門的にソフトウェアでＴＣＰ／ＩＰを実行し、したがって高速度のＴＣＰ／ＩＰプロトコル処理の実行により転送速度の潜在的な増加を使用することができない。それ故、必要なことはソフトウェアとハードウェアの両者でＴＣＰ／ＩＰプロトコルを実行する方法である。
【０１１８】
本発明は複数のデータセグメントを含むデータストリームを送信コンピュータから受信コンピュータへ送信制御プロトコルを使用して送信する方法に関し、この方法は、（ａ）データ構造の複数の変数を初期化し、データ構造は送信コンピュータから受信コンピュータへデータストリームのデータセグメントを送信するために使用され、データ構造の複数の変数は、（１）初期シーケンス番号と（２）送信されるデータセグメントの総数とを含んでおり、（ｂ）複数のマイクロコード駆動処理エンジンを使用してデータセグメントを送信するステップを含んでいる。処理エンジンは好ましくは送信されたセグメントが再送信されるべきか否かを決定する送信コンピュータの再送信エンジンと、送信されたセグメントが受信コンピュータにより受信されたか否かを決定し、送信コンピュータへ承認信号を送信するための受信コンピュータの承認エンジンと、任意の送信されたデータセグメントが順番にならずに受信されたか否かを決定し、順番にならずに受信されたならば、データセグメントを正しい順序に再度順番付けするための受信コンピュータの順序違い検出器とを具備している。データセグメントを送信するステップは、（１）データセグメントが送信コンピュータから受信コンピュータへ送信される速度を決定し、（２）送信されるデータセグメントの１つを識別し、選択されたデータセグメントへシーケンス番号を割当て、選択されたデータセグメントを受信コンピュータへ送信し、（３）選択されたデータセグメントが送信されたときの時間の関数として再送信タイマを使用し、再送信タイマの継続時間値を計算し、（４）再送信タイマの継続時間が受信コンピュータからの選択されたデータセグメントに対する承認信号を受信する前に満了されているか否かを決定し、満了されているならば、データセグメントを再送信し、ステップ（３）に戻り、（５）付加的にデータセグメントが受信コンピュータへ送信されるか否かを決定し、送信されるならば、ステップ（１）−（５）を全てのデータセグメントが適切に送信されるまで反復するこ
とを含んでいる。
【０１１９】
本発明の目的はハードウェアでＴＣＰ／ＩＰプロトコルを実行するために使用される新しいデータ構造（ＴＣＢ）を規定することである。本発明の重要な利点は、全体的にソフトウェアによりＴＣＰ／ＩＰプロトコルを実行する代わりに、例えば特定用途用集積回路（ＡＳＩＣ）チップのような１以上の集積回路チップに含まれるマイクロコード駆動処理エンジンによってＴＣＰ／ＩＰプロトコルを実行するためにＴＣＢデータ構造を使用することによりＴＣＰ／ＩＰプロトコルのデータ転送速度を増加することである。それ故、効率の向上はデータの送信および任意の必要な再送信、データが受信されたことの承認、フローおよび密集制御において実現される。
【０１２０】
本発明の前述の特徴および付随する利点は添付図面を伴った以下の詳細な説明の参照により容易に明白になるであろう。  
図Ａ１は、従来技術のＴＣＰデータセグメントのエレメントを示しているブロック図である。
【０１２１】
図Ａ２ａは、本発明の好ましい実施形態にしたがって、ＴＣＢデータ構造のメモリのレイアウトを示している。
【０１２２】
図Ａ２ｂは、再順序付けバッファ（ＲＯＢ）更新および処理を示すフローチャートである。
【０１２３】
図Ａ３ａ―Ａ３ｇは、ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙している。
【０１２４】
図Ａ４は、本発明の好ましい実施形態にしたがって、送信コンピュータから受信コンピュータへ、複数のデータセグメントを具備するデータストリームを送信するステップを示すフロー図である。
【０１２５】
図Ａ５は、本発明にしたがって、ＴＣＰ／ＩＰ処理のマイクロコード駆動処理エンジンを有するＡＳＩＣを示すブロック図である。
【０１２６】
図Ａ６は、ファイバチャンネルフレームとギガビットイーサネットフレーム処理が図Ａ５のＡＳＩＣで行われる態様を示している。
【０１２７】
図Ａ７は、ギガビットイーサネットフレームとファイバチャンネルフレーム処理が図Ａ５のＡＳＩＣで行われる態様を示している。
【０１２８】
本発明はソフトウェアマイクロコード処理エンジンによりＴＣＰ／ＩＰを実行する新しいデータ構造（ＴＣＢ）を規定することによりＴＣＰ／ＩＰプロトコルのデータ転送速度を増加する。ＴＣＢは好ましくは予め定められたサイズのメモリの隣接するブロックを占有する。図Ａ２は、本発明の好ましい実施形態にしたがって、ＴＣＢデータ構造のメモリの例示的なレイアウトを示している。各ＴＣＢはそれにメモリの３つの隣接ブロックへのポインタを関連させ、それは“送信、保留および承認”保留待ち行列（ＴＸＰ）、“受信されＴデータセグメント処理”保留待ち行列（ＲＸＰ）、これらが順番になっていない状態で受信された場合に、データセグメントを再度順序付けするバッファを記憶している。
【０１２９】
さらに、全てのＴＣＰセッションにより共有される送信待ち行列（ＴＸ）と受信待ち行列（ＲＸ）と呼ばれる２つの待ち行列が存在する。送信待ち行列は受信ホストへ送信されるデータへのポインタを記憶し、Ｒｘ待ち行列は受信ホストにより受信されておりメモリでの処理を待機しているデータへのポインタを記憶している。送信待ち行列は送信保留待ち行列へのポインタに維持されるポインタ、即ち書込みインデックス―ＴｘＱＷｒＩｎｄｅｘ、読取インデックス―ＴｘＱＲｄＩｎｄｅｘ、再送信インデックス―ＴｘＱＲｔｘＩｎｄｅｘを含んでいる。最後に、受信待ち行列は受信待ち行列の開始を指すように維持されているポインタを含んでいる。
【０１３０】
送信保留待ち行列はメモリの隣接ブロックであり、そのサイズは管理されることができる保留エントリの最大番号を決定する。この待ち行列は円形の待ち行列として維持される。各エントリは実際のデータセグメントへのポインタと、データセグメントの総数と、開始シーケンス番号とからなる。メモリはデータが６４バイトチャンクで読み取られるならば最良に使用され、各６４バイトのチャンクは４ほどのエントリを含んでいる。この待ち行列にアクセスするため、ＲｄＩｎｄｅｘ、ＲｔｘＩｎｄｅｘ、ＷｒｔＩｎｄｅｘとして識別される３つのポインタが維持される。最初に、これらのポインタはゼロを指している。
【０１３１】
ＴＸＰの機能は以下のステップにより説明される。  
１．データブロックがＦＣ層から受信され、送信されようとするとき、ＷｒＩｎｄｅｘにより与えられる送信保留待ち行列位置に置かれ、その後ＷｒＩｎｄは更新される。  
２．ＴＣＰセッションのウィンドウサイズが１以上のデータセグメントを送信するのに十分であるとき、データセグメントはＲｄＩｎｄｅｘ位置から開始して取られ、ＴＸ待ち行列に置かれる。ＲｄＩｎｄｅｘをその後更新される。  
３．承認が受信されたとき、承認によりカバーされているこれらのデータセグメント以上にＲｄＩｎｄｅｘポインタをインクリメントする。  
４．ミスした承認のためにタイムアウトが経験されるときにはいつでも、ＲｘｔＩｎｄｅｘポインタにより示されるデータセグメントをＴＸ待ち行列におき、次のＲＴＴ値でタイマを再度初期化する。（指数関数的なバックオフ方式は再送信が同一のデータセグメントで行われる度に使用される。）  
ＲＸＰの機能を以下のステップにより説明する。  
１．特定のＴＣＢを意味するように識別されたＲｘ待ち行列の任意のデータセグメントは特定のＴＣＢの受信保留待ち行列（ＲＸＰ）へ置かれるべきである。受信シーケンス変数は、受信されたデータが順番になっているならば更新されなければならない。  
２．受信保留待ち行列のアイテムはこの特定のＴＣＰセッションでデータを記憶するが、これらは順番になっていない。またデータセグメントの幾つかはＴＣＰがＦＣデータブロックを分解するので、ＦＢデータブロックの部分だけを含んでいる。  
３．受信保留待ち行列中のアイテムの再順序付けが行われなければならない。パケットを再順序付けするために、受信されるパケットは連結されたリストの形態で記憶される。シーケンス番号はキーとして使用される。パケットが順番に到着しないとき、これらはシーケンス番号の昇順に記憶される。図Ａ２ｂは、本発明にしたがって、再順序付けバッファ（ＲＯＢ）更新および処理を示すフローチャートである。  
４．さらに多くのデータが適切な順序で得られるときはいつでも、ＡＣＫは受信される付加的なデータを承認するために生成されなければならない。  
５．新しいウィンドウはメモリにある受信されたデータの量と、既にＦＣエンドへ転送されている量に基づいて計算されなければならない。したがってＦＣデータブロックが受信機に送信されるときにはいつでも、この情報はＡＣＫの次の送信でリリースされるようにＴＣＰのウィンドウを更新することに使用されるべきである。メモリのこれらの隣接するブロックはＴＣＢが実際のＴＣＰセッションをセットアップしたときに割当てられた。
【０１３２】
図Ａ３ａ―Ａ３ｇは、ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される好ましい送信変数、受信変数、再順序付け変数を列挙している。図Ａ４は、本発明の好ましい実施形態にしたがって、送信コンピュータから受信コンピュータへ、複数のデータセグメントを含むデータストリームを送信するステップ40を示すフロー図である。
【０１３３】
図Ａ３ａ―Ａ３ｇに示されているように、３つのタイマ、即ち再送信タイマ、アイドルタイマ、持続タイマが存在する。再送信タイマが終了するときにはいつでも、再送信プロセスが動作するようにＴＣＢへのポインタのエントリをタスク待ち行列に置くべきである。アイドルタイマはアイドルセッションをチェックすることに使用され、タイマが終了するならば、ダミーパケットがセッションを生きた状態に維持するために送信される。
【０１３４】
往復遅延を計算するために必要とされる往復ＴＣＢ変数は、値―１６ビット値（ｒｘｔｃｕｒ）、指数関数的バックオフ―１６ビット値（ｒｘｔｓｈｉｆｔ）のログ（２）、往復時間―１６ビット値（ｒｔｔ）、ルート特性（ｒｔｔｍｉｎ）から計算される最小のＲＴＴ値―１６ビット値、現在のＲＴシーケンス番号―３２ビット値（ｒｔｓｅｑ）、スムースにされた往復時間―１６ビット値―（ｓｒｔｔ）、往復の変数―１６ビット値（ｒｔｔｖａｒ）を含んでいる。
【０１３５】
ＴＣＰおよびＩＰヘッダパラメータは、ＩＰＤＡ（３２ビット値）ＩＰ目的地アドレス、サービスのタイプを特定するＩＰ  Ｄｉｆｆｓｅｒｖ（８ビット）、ＴＣＰソースと目的地ポート番号を記憶するためのソースおよび目的地ポート値（１６ビット値）を含んでいる。
【０１３６】
送信シーケンス変数は、最も古い非認証のシーケンス番号を示す送信非認証（３２ビット値）、次の送信に使用されるシーケンス番号を示す次の送信（３２ビット値）、送信されるパケットに幾つかの緊急データが存在することを他のエンドに通信するために使用される緊急データが存在するデータの１６ビットオフセットを示す送信緊急ポインタ（３２ビット値）、再送信に使用される送信最大―送信された最高シーケンス番号（３２ビット値）、初期シーケンス番号（３２ビット）値を含んでいる。受信シーケンス変数は、受信ウィンドウ（１６ビット値）、次の受信（３２ビット値）、受信緊急ポインタ（３２ビット値）、初期受信シーケンス番号（３２ビット値）を含んでいる。
【０１３７】
受信コンピュータが図４Ａに示されているプロセス40に従って受信コンピュータへデータストリームを送信することを望むとき、ＴＣＰセッションを設定する。ステップ41で、ＴＣＢ変数はソフトウェアにより、図Ａ３ａ―Ａ３ｇで示されていることにしたがって、好ましくは送信コンピュータで開始される。例えば、有効フラグ変数はこれが有効なＴＣＢであるか否かを示し、ＴＣＢが割当てられるとき、このフラグは１に設定される。しかしながら、先の接続から存在するあるフィールドをクリアことに注意しなければならない。さらに、接続状態変数はＴＣＰ層の現在の状態を示し、次の状態、即ちＳＴＡＴＥ＿ＣＬＯＳＥＤ、ＳＴＡＴＥ＿ＬＩＳＴＥＮ、ＳＴＡＴＥ＿ＳＹＮ＿ＳＥＮＴ、ＳＴＡＴＥ＿ＳＹＮ＿ＲＥＣＥＩＶＥＤ、ＳＴＡＴＥ＿ＥＳＴＡＢＬＩＳＨＥＤ、ＳＴＡＴＥ＿ＣＬＯＳＥ＿ＷＡＩＴ、ＳＴＡＴＥ＿ＦＩＮ＿ＷＡＩＴ１、ＳＴＡＴＥ＿ＣＬＯＳＩＮＧ、ＳＴＡＴＥ＿ＬＡＳＴ＿ＡＣＫ、ＳＴＡＴＥ＿ＦＩＮ＿ＷＡＩＴ２、ＳＴＡＴＥ＿ＴＩＭＥ＿ＷＡＩＴのうちの１つである。接続状態はＴＣＰ層により変更され、特定のＴＣＰセッションの状態を理解するために全ての他のブロックにより読み取られる。開始される他の変数は送信されるセグメントの初期シーケンス番号と、送信されるセグメントの総数に関するものである。
【０１３８】
図Ａ４を再度参照すると、１つのＴＣＢデータ構造はステップ42で開始され、データストリームのデータセグメントは複数のマイクロコード駆動処理エンジンを使用して、ステップ43-48にしたがって送信される。マイクロコード駆動エンジンは送信されたセグメントが再送信されるべきであるか否かを決定する前記送信コンピュータの再送信エンジンと、送信されたセグメントが前記受信コンピュータにより受信されたか否かを決定し、承認信号を前記送信コンピュータへ送信するための前記受信コンピュータの承認エンジンと、任意の前記送信されたデータセグメントが順番になっていない状態で受信されたか否かを検出し、順番になっていない状態で受信されたならば、前記データセグメントをそれらの正しい順序に再度順序付けするための前記受信コンピュータの順序違い検出器とを具備している。
【０１３９】
データセグメントが送信される速度はステップ43で決定される。密集制御エンジンはこの速度の決定に使用され、マイクロコード駆動エンジンの１つであり、前述の受信シーケンス変数は計算され、使用される。密集制御方式全体はマイクロコードで実行される。ユーザは環境にしたがってこれを構成する。現在の構成を以下説明する。ＲＴＯが満了するとき、過密ウィンドウは２＊ＭＳＳ（最大のセグメントサイズ）に変換される。スロースタートプロセスを使用して回復が行われ、ここでは過密ウィンドウはＡＣＫが受信される毎に二重にされる。重複のＡＣＫパケットは過密ウィンドウサイズを２＊ＭＳＳに変更することに使用される。第１のセグメントは再送信される。全てのこれらのプロセスはマイクロコード駆動エンジンのハードウェアで行われる。
【０１４０】
ステップ44で、データセグメントは送信されるように識別され、シーケンス番号はデータセグメントに割当てられ、データセグメントは送信される。このステップでは、前述の送信シーケンス変数は計算され使用され、送信保留待ち行列が使用される。例えば新しいデータブロックが低いプロトコル層から到着するときはいつでも、１以上のノードはデータ送信を可能にするために送信保留待ち行列に付加される。ノードの付加はこれらのステップからなる。  
１．（ＷｒｔＩｎｄｅｘ＋１）％ＭＡＸ＿ＴＸ＿ＰＥＮＤＩＮＧ＿ＥＮＴＲＩＥＳ＝ＲｔｘＩｎｄｅｘであるならば、これはオーバーフロー状態である。  
２．書込みのためのメモリオフセット＝待ち行列ベースポインタ＋（（ＷｒｔＩｎｄｅｘ＊１６）／６４）＊６４である。  
３．前述のオフセットを使用して６４バイトブロック読取を行う。  
４．付加オフセット＝（（ＷｒｔＩｎｄｅｘ＊１６）％６４）である。  
５．データブロックへのポインタと全長は付加オフセットを使用して付加されることができる。  
６．“書込みのためのメモリオフセット”を使用して６４バイトブロックを書込む。  
７．インクリメントＷｒｔＩｎｄｅｘ＝（ＷｒｔＩｎｄｅｘ＋１）％ＭＡＸ＿ＴＸ＿ＰＥＮＤＩＮＧ＿ＥＮＴＲＩＥＳである。
【０１４１】
ノードの消去は以下のステップからなる。  
１．ＲｄＩｎｄｅｘ＝＝ＷｒｔＩｎｄｅｘならば、ブロックは空であり、読み取るものはない。  
２．読取るためのメモリオフロード＝待ち行列ベースポインタ＋（（ＲｄＩｎｄｅｘ＊１６）／６４）＊６４である。  
３．前述のオフセットを使用して６４バイトブロック読取を行う。  
４．読取オフセット＝（（ＲｄＩｎｄｅｘ＊１６）％６４）である。  
５．データブロックポインタと全長を読取る。  
６．このノードを消去する動作が取られるならば、ＲｄＩｎｄｅｘは変更されなければならない。  
７．ＲｄＩｎｄｅｘ＝（ＲｄＩｎｄｅｘ＋１）％ＭＡＸ＿ＴＸ＿ＰＥＮＤＩＮＧ＿ＥＮＴＲＩＥＳである。
【０１４２】
セグメントが一度送信されると、再送信エンジンは再送信変数の計算と、ステップ45における再送信タイマの設定のために使用される。再送信タイマの再送信アルゴリズムを以下説明する。セグメントが送信される度に、ＴＣＰエンジンはタイマをスタートし、承認を待機する。タイマが承認の受信前に満了するならば、ＴＣＰエンジンはセグメントが失われ、または崩壊されることを想定しそれを再送信する。再送信タイマ値は次式のように計算される。  
ＳＲＴＴ＝０．９＊ＯＬＤ＿ＳＲＴＴ＋０．１＊ＭＲＴＴ  
ＲＴＯ＝２＊ＳＲＴＴ  
ＲＴＯ→再送信タイムアウトである場合には、ＳＲＴＴ→スムースにされた往復時間である。  
ＭＲＴＴ→測定された往復時間である。
【０１４３】
全てのこれらの計算はハードウェアのプロトコル処理エンジンで行われる。ステップ46で、再送信時間がＡＣＫが選択されたセグメントで受信される前に満了するか否かを決定し、その結果がイエスならば、セグメントはステップ47で再送信され、ステップ45と46が反復される。ノーであるならばＡＣＫは送信される。さらに、データストリームの全てのデータセグメントがステップ43で送信されたか否かが決定され、ノーであるならば、ステップ43-48が全てのデータセグメントが適切に送信されるまで反復される。
【０１４４】
データセグメントの承認機能はマイクロコード駆動処理エンジンで行われる。ＡＣＫがＴＣＢで受信されるときはいつでも、送信ウィンドウパラメータは変更し、付加的なウィンドウ空間は利用可能になる。ＡＣＫが受信されるたびに、スライディングウィンドウ（以下説明する）は移動され、パケットの次のステップが送信される。セグメントを適切に受信するとき（チェックサムがＯＫであるならば）、ＡＣＫパケット更新されたシーケンス番号で送信される。受信バッファがフルであるならば、ウィンドウサイズ０を有するＡＣＫパケットが送信される。
【０１４５】
ＴＸＰとＡＣＫはそれぞれ次のデータセグメントがメモリに記憶される場所の追跡を維持し、これは送信待ち行列（ＴＸ）に置かれる次のデータセグメントであり、これはＡＣＫを待機しながら、ＴＣＰセッションがタイムアウトを受ける場合に再試行される次のデータセグメントである。以下の動作はＡＣＫ受信で取られる。  
１．ＡＣＫが受信されるとき、幾つかのデータセグメントは適切に承認された全てのデータセグメントを超えてＲｔｘＩｎｄｅｘを移動することにより送信保留待ち行列から除去されなければならない。  
２．送信シーケンス変数は最高のシーケンス番号承認を使用し、新しく示されたウィンドウサイズを使用して適切に更新されなければならない。  
３．ＡＣＫを伴ったデータが存在するならば、（データが順番になっているならば）受信シーケンス変数も更新されるべきであり、データセグメントへメモリに記憶されるべきであり、そのポインタはＴＣＢのＲＸＰ待ち行列に付加されるべきである。
【０１４６】
データセグメントの再送信により、１以上のセグメントは順序になっておらずに受信される。順序違い検出器はこのような状態で使用されるマイクロコード駆動処理エンジンである。例えば、以下のようにそれらのバイトストリームを有する７つのセグメントを仮定する。  
【数１】
2010016838.tif 000003
【０１４７】
セグメント１は受信機に到着し、それはＡＣＫ＝１０００とＷＩＮ＝１６００（ウィンドウサイズ１６００）を送信することによりそれを承認する。ＡＣＫ＋ＷＩＮ＝２６００なので、送信機はセグメント２、３、４を送信できる。セグメント２と３は送信される。セグメント３は到着するがセグメント２は遅延されている。受信機はＡＣＫ＝１０００とＷＩＮ＝１６００を有する別のＡＣＫセグメントを送信する。送信機はセグメント４を送信する。セグメント４は到着するがセグメント２は依然として未決定である。受信機は再びＡＣＫ＝１０００とＷＩＮ＝１６００を送信する。しかしながら、ＡＣＫ＋ＷＩＮよりも大きい２８００へシーケンス番号を送信するので、送信機はセグメント５を送信できない。送信機はセグメント５がウィンドウの残りの部分を使用するためさらに小さいセグメントへ分割される。セグメント２は受信機に到達し、受信機は新しいＡＣＫ値を知らせる。遅延されたセグメント２は受信機に到達し、受信機はＡＣＫ＝２４００とＷＩＮ＝１６００を送信し、送信機が４０００まで送信することを可能にする。
【０１４８】
シーケンス番号の最初の値は接続設定シーケンス期間に交換される。前述のこのフロー制御機構は通常、スライディングウィンドウプロトコルと呼ばれる。パケットが順序違いで受信されるとき、これは再順序付けバッファに記憶される。これらのパケットは分類され外部メモリに記憶される。
【０１４９】
ＴＣＰエンジンのハードウェア実行はプロトコル処理エンジンのセットを使用して行われ、これはマイクロコード駆動である。処理の初期パラメータは外部ＣＰＵによりソフトウェアによってセットアップされる。アルゴリズムの計算は前述のマイクロコード駆動エンジンを使用して行われる。この方法は変更に対してフレキシブル性を与える。
【０１５０】
図Ａ５は、本発明にしたがって、ＴＣＰ／ＩＰ処理のマイクロコード駆動処理エンジンを有するＡＳＩＣを示すブロック図である。
【０１５１】
図Ａ６は、ファイバチャンネルフレームとギガビットイーサネットフレーム処理が図Ａ５のＡＳＩＣで行われる態様を示している。
【０１５２】
図Ａ７は、ギガビットイーサネットフレームとファイバチャンネルフレーム処理が図Ａ５のＡＳＩＣで行われる態様を示している。
【０１５３】
したがって、本発明は１実施形態で、複数のデータセグメントを含むデータストリームを送信コンピュータから受信コンピュータへ送信制御プロトコルを使用して送信する方法に関し、この方法は、データ構造の複数の変数を初期化し、データ構造は送信コンピュータから受信コンピュータへデータストリームのデータセグメントを送信するために使用され、データ構造中の複数の変数は、初期シーケンス番号と送信されるデータセグメントの総数とを含んでいる。本発明の方法はさらに、複数のマイクロコード駆動処理エンジンを使用してデータセグメントを送信するステップを含み、処理エンジンは送信されたセグメントが再送信されるべきか否かを決定する送信コンピュータ中の再送信エンジンと、送信されたセグメントが受信コンピュータにより受信されたか否かを決定し、送信コンピュータへ承認信号を送信するための受信コンピュータ中の承認エンジンと、データセグメントが送信コンピュータから受信コンピュータへ送信される速度を決定する過密制御エンジンと、任意の送信されたデータセグメントが順番でなく受信されたか否かを決定し、順番でなく受信されたならば、データセグメントを正しい順序に再度順番付けするための受信コンピュータ中の順序違い検出器とを具備している。データセグメントを送信するステップは、（１）データセグメントが送信コンピュータから受信コンピュータへ送信される速度を決定し、（２）送信されるデータセグメントの１つを識別し、選択されたデータセグメントへシーケンス番号を割当て、選択されたデータセグメントを受信コンピュータへ送信し、（３）選択されたデータセグメントが送信されたときの時間の関数として再送信タイマを初期化し、再送信タイマの継続時間値を計算し、（４）再送信タイマの継続時間が受信コンピュータからの選択されたデータセグメントの承認信号を受信する前に満了されているか否かを決定し、満了されているならば、そのデータセグメントを再送信し、ステップ（３）に戻り、（５）付加的にデータセグメントが受信コンピュータへ送信されるか否かを決定し、送信されるならば、ステップ（１）−（５）を全てのデータセグメントが適切に送信されるまで反復するステップを含んでいる。
【０１５４】
１実施形態では、マイクロコード駆動再送信エンジンは再送信タイマ値を計算するための再送信タイマアルゴリズムを具備し、そのアルゴリズムはスムースにされた往復時間値および測定された往復時間値に基づいている。
【０１５５】
別の実施形態では、マイクロ駆動承認エンジンは少なくとも１つのアルゴリズムを具備し、その少なくとも１つのアルゴリズムはデータセグメントが受信コンピュータにより適切に受信されるときに承認信号を送信し、スライディングウィンドウを移動し、送信コンピュータが承認信号を受信するときデータストリーム中の次のデータセグメントの送信を命令し、承認信号を送信するように構成されており、ウィンドウサイズのヘッダエレメントは受信バッファが満杯であるときにはゼロである。
【０１５６】
別の実施形態では、マイクロコード駆動過密制御エンジンは複数のアルゴリズムを具備し、その複数のアルゴリズムは各承認信号が送信コンピュータにより受信されるとき過密ウィンドウのサイズを二倍にするためのスロースタートアルゴリズムと、再送信タイマの期間が満了するとき過密ウィンドウのサイズを変更するアルゴリズムと、重複した承認信号が送信コンピュータにより受信されるとき過密ウィンドウのサイズを変更するアルゴリズムと、最大のセグメントサイズに応じるアルゴリズムとを含んでいる。
【０１５７】
さらに別の実施形態では、マイクロコード駆動の順序違い検出器はスライディングウィンドウプロトコルを実行するフロー制御アルゴリズムを具備している。
【０１５８】
１実施形態では、送信制御プロトコルを使用して、複数のデータセグメントを有するデータストリームを送信コンピュータから受信コンピュータへ送信する方法が開示されている。この方法は、データ構造中の複数の変数を初期化し、初期化された変数を処理しこれらの変数を更新するためのアルゴリズムをそれぞれ実行する複数のマイクロコード駆動処理エンジンを使用して、データセグメントを送信するために使用されるステップを含んでいる。
【０１５９】
先の説明で示したハードウェアでＴＣＰ／ＩＰプロトコルを実行する方法の実行例は本発明の最良のモードの説明として選択された。前述の本発明の好ましい実施形態は本発明の原理の説明であり、本発明の技術的範囲を説明した特定の実施形態に限定するものではない。したがって、本発明の好ましい実施形態を示し説明したが、種々の変更は本発明の技術的範囲を逸脱せずに行われることができることが認識されるであろう。
【０１６０】
以上、本発明は幾つかの好ましい実施形態に関して説明したが、変更、交換、等化は本発明の技術的範囲内で可能である。本発明の方法および装置を実行するための多数の代わりの方法が存在することにも注意すべきである。それ故、以下の特許請求の範囲は本発明の技術的範囲内であるとしてこのような変更、交換、等化を全て含むものとして解釈されることを意図している。
【図１】
2010016838.tif 000004
【図２】
2010016838.tif 000005
【図３】
2010016838.tif 000006
【図４】
2010016838.tif 000007
【図５】
2010016838.tif 000008
【図６】
2010016838.tif 000009
【図７】
2010016838.tif 000010
【図８】
2010016838.tif 000011
【図９】
2010016838.tif 000012
【図１０】
2010016838.tif 000013
【図１１】
2010016838.tif 000014
【図１２Ａ】
2010016838.tif 000015
【図１２Ｂ】
2010016838.tif 000016
【図１３】
2010016838.tif 000017
【図１４】
2010016838.tif 000018
【図１５】
2010016838.tif 000019
【図１６】
2010016838.tif 000020
【図１７】
2010016838.tif 000021
【図１８】
2010016838.tif 000022
【図Ａ１】
2010016838.tif 000023
【図Ａ２ａ】
2010016838.tif 000024
【図Ａ２ｂ】
2010016838.tif 000025
【図Ａ３ａ】
2010016838.tif 000026
【図Ａ３ｂ】
2010016838.tif 000027
【図Ａ３ｃ】
2010016838.tif 000028
【図Ａ３ｄ】
2010016838.tif 000029
【図Ａ３ｅ】
2010016838.tif 000030
【図Ａ３ｆ】
2010016838.tif 000031
【図Ａ３ｇ】
2010016838.tif 000032
【図Ａ４】
2010016838.tif 000033
【図Ａ５】
2010016838.tif 000034
【図Ａ６】
2010016838.tif 000035
【図Ａ７】
2010016838.tif 000036
【手続補正書】
【提出日】平成21年8月28日(2009.8.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ネットワークに結合された第１のホストコンピュータに関連し、ネットワークによりデータの交換を行う回路において、前記ネットワークはまた第２のホストコンピュータに結合され、前記回路は、
ＴＣＰプロトコルを使用して送信され、前記第１のホストコンピュータから前記第２のホストコンピュータへの双方向データフローに関連する第１のデータの送信を行い、前記第１のホストコンピュータに関連され、前記ＴＣＰプロトコルを使用して前記第１のデータの送信に関連する送信補助パラメータを記憶するように構成されている送信を行う手段と、
前記第２のホストコンピュータから前記第１のホストコンピュータへ前記ＴＣＰプロトコルを使用して送信され、前記双方向データフローに関連する第２のデータの受信を行い、前記第１のホストコンピュータに関連され、前記ＴＣＰプロトコルを使用して前記第２のデータの前記受信に関連する受信補助パラメータを記憶するように構成されている受信を行う手段と、
前記第２のホストコンピュータから送信され受信された承認メッセージに応答して複数のパラメータを更新する手段とを具備し、前記複数のパラメータは少なくとも再送信タイムアウト値と、スムースにされた往復時間と、測定された往復時間とを含んでおり、前記更新する手段は前記受信した承認メッセージの情報を少なくとも用いて前記更新を実行し、
前記回路はさらに、
前記第２のデータの順番に並んでいないパケットを記憶する１以上のバッファを具備し、前記送信を行う手段と前記受信を行う手段は前記回路による前記第１のデータの送信と前記第２のデータの受信とを同時に行うように使用され、前記受信補助パラメータは前記順番に並んでいないパケットを少なくとも部分的に再順序付ける少なくとも１以上の再順序付けパラメータを含んでいる回路。
【請求項２】
前記送信を行なう手段と前記受信を行なう手段は、前記第１のホストコンピュータのバスに取外し可能に結合されるように構成されたネットワークインターフェースカード（ＮＩＣカード）に構成されている請求項１記載の回路。
【請求項３】
順序付けされたパケットを生成するために、１以上の順序付けパラメータを使用して、正しいパケットの番号を有するパケットが第１のホストコンピュータに到着する前に、前記第１のホストコンピュータで受信される前記順番に並んでいないパケットを少なくとも部分的に順序付ける手段をさらには含んでいる請求項１記載の回路。
【請求項４】
前記順番に並んでいないパケットを少なくとも順序付ける前記手段は、前記１以上のバッファに前記順序付けされたパケットを記憶するようにさらに構成されており、前記順序付けされたパケットは、他のパケットと組立てられる前には前記第１のホストコンピュータのホストソフトウェアに送信されない請求項３記載の回路。
【請求項５】
コンピュータネットワークを介して結合されている第１のホストコンピュータと第２のホストコンピュータとの間で双方向データフローに関連する送信データを送信する方法において、
前記送信データの前記送信に使用される送信補助パラメータを第１の制御ブロックに記憶し、前記第１の制御ブロックは前記第１のホストコンピュータ中に構成され、前記双方向データフローに関連され、前記送信データの送信はＴＣＰプロトコルにしたがって行われ、
前記第１のホストコンピュータから前記第２のコンピュータへの前記送信データの所定部分に関する送信リクエストのサービスを行うために前記第１の制御ブロック中の前記送信補助パラメータの使用を含んでおり、前記送信リクエストの前記サービスは、前記第１のホストコンピュータによる前記第２のホストコンピュータからの前記双方向データフローに関連するデータの受信に関する受信リクエストのサービスと同時に行われ、前記受信データは前記第１のホストコンピュータ中に構成された第２の制御ブロックに記憶されている受信補助パラメータを使用して受信され、前記受信データは前記ＴＣＰプロトコルにしたがって受信され、
前記第２のホストコンピュータから送信され受信された承認メッセージに応答して複数のパラメータを更新し、前記複数のパラメータは少なくとも再送信タイムアウト値と、スムースにされた往復時間と、測定された往復時間とを含んでおり、前記更新は前記受信した承認メッセージの情報を少なくとも用いて前記更新を実行し、
前記受信データの順番に並んでいないパケットを１以上のバッファに記憶し、前記受信補助パラメータは前記順番に並んでいないパケットを少なくとも部分的に再順序付ける少なくとも１以上の再順序付けパラメータを含んでいる方法。
【請求項６】
ネットワークを介して結合された第１のホストコンピュータに関連し、ネットワークを介してデータの交換を促す回路において、前記ネットワークは第２のホストコンピュータに結合され、前記回路は、
前記第１のホストコンピュータから前記第２のホストコンピュータへの双方向データフローに関連する送信データをＴＣＰプロトコルを使用して送信するために使用される送信補助パラメータを記憶し、前記第１のホストコンピュータ中に構成されている記憶手段と、
前記送信補助パラメータを使用して、前記送信データの所定の部分に関する送信リクエストをサービスし、前記送信リクエストの前記サービスは前記第１のホストコンピュータにより前記第２のコンピュータからの前記双方向データフローに関連されるデータの受信に関する受信リクエストのサービスと同時に行われ、前記受信データは受信補助パラメータを記憶する手段中で追跡されるパラメータを使用して受信され、受信補助パラメータを記憶する前記手段はまた前記第１のホストコンピュータ中に構成され、前記受信データは前記ＴＣＰプロトコルにしたがって受信される、送信リクエストをサービスする手段と、
前記第２のホストコンピュータから送信され受信された承認メッセージに応答して複数のパラメータを更新する手段とを具備し、前記複数のパラメータは少なくとも再送信タイムアウト値と、スムースにされた往復時間と、測定された往復時間とを含んでおり、前記更新する手段は前記受信した承認メッセージの情報を少なくとも用いて前記更新を実行し、
前記回路はさらに、
前記受信データの順番に並んでいないパケットを記憶する１以上のバッファを具備し、前記受信補助パラメータは前記順番に並んでいないパケットを少なくとも部分的に再順序付ける少なくとも１以上の再順序付けパラメータを含んでいる回路。
【請求項７】
ネットワークに結合された第１のホストコンピュータに関連し、ネットワークを介してデータの交換を行う回路において、前記ネットワークは第２のホストコンピュータに結合され、前記回路は、
前記第１のホストコンピュータから前記第２のホストコンピュータへの双方向データフローに関係する送信データをＴＣＰプロトコルを使用して送信するために使用される送信補助パラメータを記憶するように構成され、前記第１のホストコンピュータ中に構成される第１の制御ブロックと、
前記送信補助パラメータを使用して、前記送信データの所定の部分に関する送信リクエストをサービスするように構成され、前記送信リクエストの前記サービスは前記第１のホストコンピュータにより前記第２のコンピュータからの前記双方向データフローに関連されるデータの受信に関する受信リクエストのサービスと同時に行われ、前記受信データは第２の制御ブロックで追跡されたパラメータを使用して受信され、前記第２の制御ブロックは前記第１のホストコンピュータ中に構成され、前記受信データは前記ＴＣＰプロトコルにしたがって受信され、前記ＴＣＰプロトコルを使用して前記受信データの前記受信に関連する受信補助パラメータを記憶するように構成されている回路と、
前記第２のホストコンピュータから送信され受信された承認メッセージに応答して複数のパラメータを更新する手段とを具備し、前記複数のパラメータは少なくとも再送信タイムアウト値と、スムースにされた往復時間と、測定された往復時間とを含んでおり、前記更新する手段は前記受信した承認メッセージの情報を少なくとも用いて前記更新を実行し、
前記ネットワークを介してデータの交換を行う回路はさらに、
前記受信データの順番に並んでいないパケットを記憶する１以上のバッファを具備し、前記受信補助パラメータは前記順番に並んでいないパケットを少なくとも部分的に再順序付ける少なくとも１以上の再順序付けパラメータを含んでいる回路。
【請求項８】
コンピュータネットワークを介して結合されている第１のホストコンピュータと第２のホストコンピュータとの間で双方向データフローに関連する受信データで第１のホストコンピュータで受信する方法において、
前記第１のホストコンピュータで受信された前記双方向データフローに関連するパケットの第１のセットの受信に応答して、予測されたシーケンス番号パラメータを確認し、前記予測されたシーケンス番号パラメータは前記第１のホストコンピュータ中に構成された第１の制御ブロックに記憶され、前記第１の制御ブロックはＴＣＰプロトコルを使用して前記受信データを受信するために使用される受信補助パラメータを記憶するように構成されており、
前記予測されたシーケンス番号パラメータが、前記第１のホストコンピュータで受信されたパケットの第１のセットが順序付けられたパケットを表していることを示しているならば、前記第１の制御ブロックにおいて前記予測されたシーケンスパラメータを更新し、
前記第１のホストコンピュータはまたＴＣＰプロトコルを使用して、前記第１のホストコンピュータから前記第２のコンピュータへ前記双方向データフローに関連される送信データを送信するように構成され、前記送信データの一部を送信するリクエストはパケットの前記第１のセットの受信と同時にサービスされ、前記送信データの送信に使用される送信補助パラメータは、前記受信補助パラメータが前記第１の制御ブロックに記憶されるのと同時に第２の制御ブロックに記憶され、前記第２の制御ブロックは前記第１のホストコンピュータ中に構成され、前記双方向データフローに関連され、
前記第２のホストコンピュータから送信され受信された承認メッセージに応答して複数のパラメータを更新し、前記複数のパラメータは少なくとも再送信タイムアウト値と、スムースにされた往復時間と、測定された往復時間とを含んでおり、前記更新は前記受信した承認メッセージの情報を少なくとも用いて前記更新を実行し、
前記受信データの順番に並んでいないパケットを１以上のバッファに記憶し、前記受信補助パラメータは前記順番に並んでいないパケットを少なくとも部分的に再順序付ける少なくとも１以上の再順序付けパラメータを含んでいる受信方法。
【請求項９】
コンピュータネットワークを介して結合されている第１のホストコンピュータと第２のホストコンピュータとの間で双方向データフローに関連する受信データを受信する方法において、
第１の制御ブロックにおいて前記受信データの前記受信に使用される受信補助パラメータを記憶し、前記第１の制御ブロックは前記第１のホストコンピュータ中に構成され、前記双方向データフローに関連され、前記受信データの前記受信はＴＣＰプロトコルにしたがって行われ、
前記第２のホストコンピュータから前記第１のホストコンピュータで前記受信データの所定部分を受信することを促進するために前記第１の制御ブロック中の前記受信補助パラメータを使用し、前記受信データの前記所定部分の前記受信は、前記第１のホストコンピュータから前記第２のホストコンピュータへの前記双方向データフローに関連される送信データに関する送信リクエストのサービスと同時に行われ、前記送信データは前記第１のホストコンピュータ中に構成された第２の制御ブロックに記憶されている送信補助パラメータを使用して送信され、前記送信データは前記ＴＣＰプロトコルにしたがって送信され、
前記第２のホストコンピュータから送信され受信された承認メッセージに応答して複数のパラメータを更新し、前記複数のパラメータは少なくとも再送信タイムアウト値と、スムースにされた往復時間と、測定された往復時間とを含んでおり、前記更新は前記受信した承認メッセージの情報を少なくとも用いて前記更新を実行し、
前記受信データの順番に並んでいないパケットを１以上のバッファに記憶し、前記受信補助パラメータは前記順番に並んでいないパケットを少なくとも部分的に再順序付ける少なくとも１以上の再順序付けパラメータを含んでいる方法。
【請求項１０】
ネットワークに結合された第１のホストコンピュータに関連し、ネットワークを介してデータの交換を行う回路において、前記ネットワークは第２のホストコンピュータに結合され、前記回路は、
前記第２のホストコンピュータから前記第１のホストコンピュータにおいて双方向データフローに関係する受信データをＴＣＰプロトコルの使用により受信するために使用される受信補助パラメータを記憶するように構成され、前記第１のホストコンピュータに構成される第１の制御ブロックと、
前記受信補助パラメータを使用して、前記受信データの所定の部分を受信するように構成され、前記受信データの前記所定の部分の前記受信は、前記第１のホストコンピュータから前記第２のコンピュータへの前記双方向データフローに関連される送信データに関する送信リクエストのサービスと同時に行われ、前記送信データは第２の制御ブロックに記憶されたパラメータを使用して送信され、前記第２の制御ブロックはまた前記第１のホストコンピュータ中に構成され、前記送信データは前記ＴＣＰプロトコルにしたがって送信される回路と、
前記第２のホストコンピュータから送信され受信された承認メッセージに応答して複数のパラメータを更新する手段とを具備し、前記複数のパラメータは少なくとも再送信タイムアウト値と、スムースにされた往復時間と、測定された往復時間とを含んでおり、前記更新する手段は前記受信した承認メッセージの情報を少なくとも用いて前記更新を実行し、
前記ネットワークを介してデータの交換を行う回路はさらに、
前記受信データの順番に並んでいないパケットを記憶する１以上のバッファを具備し、前記受信補助パラメータは前記順番に並んでいないパケットを少なくとも部分的に再順序付ける少なくとも１以上の再順序付けパラメータを含んでいる回路。
【手続補正書】
【提出日】平成21年9月8日(2009.9.8)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータネットワークを使用するデータ通信に関し、特に複数のコンピュータシステム間でデータを送信するための改良された方法および装置に関する。
【背景技術】
【０００２】
１以上のネットワークによる２以上のコンピュータシステム間の情報送信を容易にするための送信制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）の使用はよく知られている。所定のネットワーク化されたコンピュータが別のネットワーク化されたコンピュータと情報を交換しようとするとき、情報が１つのコンピュータから送信され、他のコンピュータにより受信されることを可能にするために、双方向データフローが設定される。通常は、情報は送信プロセスを容易にするためにパケットへ分解される。ＴＣＰ／ＩＰプロトコルスーツは、転送される情報が適切にセグメント化されパケットとして送信コンピュータから送信され、受信コンピュータで適切に受信され完全なデータファイルに組み立てられることを確実にする。
【０００３】
よく知られているように、送信制御プロトコル（ＴＣＰ）はＯＳＩ基準モデルの転送層（層４）に対応する。送信制御プロトコルはしばしば、とりわけストリームデータ転送、多重化、全二重動作、セグメント化、リアセンブリ、効率的なフロー制御を提供する。インターネットプロトコル（ＩＰ）はとりわけ、アドレス情報および、パケットがルート設定されることを可能にする幾つかの制御情報を提供するネットワーク層（層３）プロトコルである。ＩＰプロトコルは２つの主要な義務を有する。即ち、ネットワークへの接続のない最良のデータグラムの転送と、異なる最大の送信単位（ＭＴＵ）サイズでデータリンクをサポートするためにデータグラムの断片化とリアセンブリを行うことである。これらの２つのプロトコルは共にネットワークを介する確実なデータ転送を可能にするインターネットプロトコルスーツのコアを形成する。
【０００４】
２つのコンピュータがＴＣＰ／ＩＰプロトコルを使用してコンピュータネットワークにより通信するとき、送信制御ブロック（ＴＣＢ）として知られているデータ構造は典型的に、通信コンピュータ間の双方向データフローにおけるデータグラムのデータ送信、セグメント化、リアセンブリ、再送信、承認等を行うために使用される。ＴＣＢは所定のデータフローでデータ送信および受信プロセスに関連する種々のパラメータを追跡するために使用される。通常、各ホストコンピュータシステム（即ちデータフローの各端部での通信に含まれるコンピュータシステム）ではデータフロー当り１つの送信制御ブロックが存在する。各ＴＣＢはＴＣＰソースポート、ＴＣＰ目的地ポート、ＩＰソースアドレス、および／またはＩＰ目的地アドレスにより特有に識別される。
【０００５】
従来技術では、ホストコンピュータの送信制御ブロックは、ホストコンピュータからのデータ送信とホストコンピュータへのデータ受信の両者を行うために所定のデータフローに対して使用される。図１はこの状態を示しており、ここではＴＣＢ102はホストコンピュータ104のデータ送信および受信の両者を容易にするために使用される。同様に、ＴＣＢ106はホストコンピュータ108のデータ送信および受信の両者を容易にするために使用される。しかしながら、送信制御ブロックがホストコンピュータ中で送信リクエストのサービスで忙しいときには、送信タスクが終了するまで、そのホストコンピュータでデータの受信を行うための使用が利用可能ではない。したがって２つのホストコンピュータ間の送信帯域幅を限定するボトルネックが存在する。
【０００６】
ホストコンピュータ104とホストコンピュータ108との間のデータ送信速度がデータがホストコンピュータ内で処理される速度と比較して比較的低速度であるならば、このボトルネックは許容可能である。ホストコンピュータ間の送信帯域幅が増加すると、この帯域幅のボトルネックは臨界的な問題になる。帯域幅が企業ネットワーク化において１Ｇビット／秒、１０Ｇビット／秒、またはそれ以上に近づき、ネットワークルータ間で４０Ｇビット／秒またはそれ以上までになると、ＴＣＰ／ＩＰがネットワーク化を進めるのに有効なプロトコルスーツでありつづけるならば、帯域幅のボトルネックは解決される必要があることが明白である。
【０００７】
上記の説明を考慮すると、従来技術の送信制御ブロックに関連する帯域幅ボトルネックを軽減し、２以上のコンピュータがコンピュータネットワークを介してＴＣＰ／ＩＰプロトコルを使用して通信するとき、データ送信速度を改良するための改良された方法および装置が要望されている。
【発明の概要】
【０００８】
本発明は１実施形態において、ネットワークに結合された第１のホストコンピュータにおけるデータの交換方法に関する。ネットワークはまた第２のホストコンピュータにも結合されている。本発明の方法は、第１のホストコンピュータから第２のホストコンピュータへの双方向データフローに関連する第１のデータの送信を容易に行うための第１のＴｘ送信制御ブロック（Ｔｘ  ＴＣＢ）の使用を含んでいる。第１のデータはＴＣＰプロトコルを使用して送信される。第１のＴｘ  ＴＣＢは第１のホストコンピュータに関連され、ＴＣＰプロトコルを使用する第１のデータの送信に関連する送信補助パラメータを記憶するように構成されている。方法はまた、双方向データ流に関連する第２のデータの受信を行うために第１のＲｘ送信制御ブロック（Ｒｘ  ＴＣＢ）を使用する。第２のデータは第２のホストコンピュータから第１のホストコンピュータへＴＣＰプロトコルを使用して送信される。第１のＲｘ  ＴＣＢは第１のホストコンピュータに関連され、ＴＣＰプロトコルを使用して第２のデータの受信に関連する受信補助パラメータを記憶するように構成されている。本発明のこの実施形態によれば、第１のＴｘ  ＴＣＢと第１のＲｘ  ＴＣＢは第１のデータに関する送信リクエストと第２のデータに関する受信リクエストを同時にサービスするために使用される。
【０００９】
別の実施形態では、本発明は、ネットワークを介してデータ交換を促進するための回路に関する。回路は前記ネットワークに結合された第１のホストコンピュータに関連している。ネットワークはまた第２のホストコンピュータに結合されている。回路は、第１のホストコンピュータから第２のホストコンピュータへ双方向データフローに関連する第１のデータの送信を行うための手段を含んでいる。第１のデータはＴＣＰプロトコルを使用して送信される。送信を行う手段は第１のホストコンピュータに関連され、ＴＣＰプロトコルを使用して第１のデータの送信に関連する送信補助パラメータを記憶するように構成されている。回路はまた、双方向データフローに関連する第２のデータの受信を行うための手段も含んでいる。第２のデータは第２のホストコンピュータから第１のホストコンピュータへＴＣＰプロトコルを使用して送信される。受信を促進する手段は第１のホストコンピュータに関連され、ＴＣＰプロトコルを使用して第２のデータの受信に関連する受信補助パラメータを記憶するように構成されている。本発明のこの実施形態によれば、送信を促進する手段と受信を促進する手段は回路による第１のデータの送信と第２のデータの受信を同時に行うために使用される。
【００１０】
さらに別の実施形態では、本発明は、第１のホストコンピュータと第２のホストコンピュータに結合されたネットワークを介してデータを交換するため第１のホストコンピュータへ結合されたネットワークインターフェースカード（ＮＩＣカード）における方法に関する。この方法はＮＩＣカードに関連する第１のＴｘ送信制御ブロック（Ｔｘ  ＴｃＢ）に記憶された送信補助パラメータを使用して、双方向データフローに関連する第１のデータを送信するステップを含んでいる。第１のデータは第１のホストコンピュータから第２のホストコンピュータへ送信される。第１のデータはＴＣＰプロトコルを使用して送信される。この方法はまた、ＮＩＣカードに関連する第１のＲｘ送信制御ブロック（Ｒｘ  ＴｃＢ）に記憶された受信補助パラメータを使用して、双方向データフローに関連する第２のデータを受信する。第２のデータは第２のホストコンピュータから第１のホストコンピュータへ送信される。第２のデータはＴＣＰプロトコルを使用して送信される。本発明のこの実施形態によれば、Ｔｘ  ＴｃＢとＲｘ  ＴｃＢは、ＮＩＣカードにより第１のデータの送信と第２のデータの受信を同時に行うように使用される。
【００１１】
本発明のこれらおよび他の特徴を添付図面を伴った以下の本発明の詳細な説明でさらに詳細に説明する。
【図面の簡単な説明】
【００１２】
【図１】従来技術のＴＣＢがホストコンピュータの送信および受信プロセスの両者を容易にするために使用され、したがって１つのプロセスだけが任意の所定の時間で行われることが可能である状態を示す図。
【図２】本発明の１実施形態にしたがって、本発明の送信制御ブロック（Ｔｘ  ＴＣＢ）と本発明の受信制御ブロック（Ｒｘ  ＴＣＢ）を使用して第２のホストコンピュータとデータを交換する第１のホストコンピュータを示す簡略図。
【図３】本発明の１実施形態にしたがって、データ送信を容易にするための送信制御ブロックデータ構造を示す図。
【図４】本発明の１実施形態にしたがって、任意の所定の時間に所定のデータフローで送信ホストコンピュータからの送信を可能にされたデータ量を概略的に表している送信ウィンドウを示す図。
【図５】本発明の１特徴にしたがって、再送信待ち行列と送信保留待ち行列を示す図。
【図６】本発明の１実施形態にしたがって、本発明の送信制御ブロックを含む送信動作を示すブロック図。
【図７】本発明の１実施形態にしたがって、送信ネットワークプロトコルプロセッサが送信ホストコンピュータに関連されるホストアプリケーションプログラムからデータを送信するリクエストをサービスするために送信制御ブロックを使用する態様を示す簡単なフローチャート。
【図８】本発明の１実施形態にしたがって、送信ネットワークプロトコルプロセッサが再送信待ち行列からデータを再送信するリクエストをサービスするために送信制御ブロックを使用する態様を示す簡単なフローチャート。
【図９】本発明の１実施形態にしたがって、送信ネットワークプロトコルプロセッサが他の送信ホストコンピュータへ承認を送信するために送信制御ブロックを使用する態様を示す簡単なフローチャート。
【図１０】本発明の１実施形態にしたがって、送信ネットワークプロトコルプロセッサが送信ウィンドウを更新し、他の送信ホストコンピュータから送信されて受信された承認メッセージに応答して性能データを計算する送信制御ブロックを含む態様を示す簡単なフローチャート。
【図１１】本発明の１実施形態にしたがって、例示的な受信制御ブロック（Ｒｘ  ＴＣＢ）データ構造を示す図。
【図１２Ａ】本発明の１実施形態にしたがって、受信制御ブロック（Ｒｘ  ＴＣＢ）を使用してデータパケットを受信する例示的なステップを示す図。
【図１２Ｂ】本発明の１実施形態にしたがって、受信制御ブロック（Ｒｘ  ＴＣＢ）を使用してデータパケットを受信する例示的なステップを示す図。
【図１３】本発明の１実施形態にしたがって、承認パケットの受信に応答して、受信プロセスにより取られるステップを示す図。
【図１４】本発明の１実施形態にしたがって、先に送信されたデータの承認以外のデータを含む１以上のデータパケットの受信に応答して、受信プロセスにより取られるステップを示す図。
【図１５】本発明の１実施形態にしたがって、ターゲット装置でデータの受信を容易にするための受信送信制御ブロック（Ｒｘ  ＴＣＢ）データ構造を示す図。
【図１６】本発明の１実施形態にしたがって、順番に並んでいないパケットが部分的に再度順序付けされているＲｘ  ＴＣＢを示す簡潔図。
【図１７】本発明の別の実施形態にしたがって、順番に並んでいないパケットの部分的な再順序付け特性を含んでいる例示的なＲｘ  ＴＣＢを示す簡略化された図。
【図１８】本発明の別の実施形態にしたがって、Ｒｘ  ＴＣＢの順番に並んでいないパケットの部分的な再順序付けに関する予見特性を示す簡略化された図。
【図１９】従来技術のＴＣＰデータセグメントのエレメントを示すブロック図。
【図２０】本発明の好ましい実施形態にしたがって、ＴＣＢデータ構造のメモリのレイアウトを示す図。
【図２１】再順序付けバッファ（ＲＯＢ）更新および処理を示すフローチャート。
【図２２】ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙した図。
【図２３】ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙した図。
【図２４】ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙した図。
【図２５】ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙した図。
【図２６】ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙した図。
【図２７】ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙した図。
【図２８】ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙した図。
【図２９】本発明の好ましい実施形態にしたがって、送信コンピュータから受信コンピュータへ、複数のデータセグメントを具備するデータストリームを有するステップを示すフロー図。
【図３０】本発明にしたがって、ＴＣＰ／ＩＰ処理のマイクロコード駆動処理エンジンを有するＡＳＩＣを示すブロック図。
【図３１】ファイバチャンネルフレームとギガビットイーサネット（登録商標）フレーム処理が図３０のＡＳＩＣで行われる態様を示す図。
【図３２】ギガビットイーサネットフレームとファイバチャンネルフレーム処理が図３０のＡＳＩＣで行われる態様を示す図。
【詳細な説明】
【００１３】
本発明は添付図面により説明を限定するものではなく、例示として示されており、同一の参照符号は類似の素子を示している。  
本発明を添付図面で示されている幾つかの好ましい実施形態を参照にして詳細に説明する。以下の説明では、複数の特別な詳細は本発明を徹底的に理解するために説明される。しかしながら、当業者には本発明がこれらの幾つかまたは全ての特別な詳細なしに実施されることが明白であろう。他の例で、よく知られたプロセスステップおよび／または構造は本発明を不必要に不明瞭にしないために詳細には説明しない。
【００１４】
図２は、本発明の１実施形態にしたがって、本発明の送信制御ブロック（Ｔｘ  ＴＣＢ）と本発明の受信制御ブロック（Ｒｘ  ＴＣＢ）とを使用してホストコンピュータ204とデータを交換するホストコンピュータ202を示す簡略図を示している。図２で示されているように、各ホストコンピュータの各データフローには１つの送信制御ブロックＴｘ  ＴＣＢが存在する。送信制御ブロックＴｘ  ＴＣＢはホストコンピュータに設けられ、データ送信プロセス中に使用される。したがってデータフローの２つの端部の両ホストコンピュータが相互にデータの送信に係わるならば、各双方向のデータフローは２つの送信制御ブロック（Ｔｘ  ＴＣＢ）に関連される。これはそれぞれホストコンピュータ202と204の送信制御ブロック206と208により示されている。受信データでは、双方向データフローの２つの端部の各ホストコンピュータも受信制御ブロックＲｘ  ＴＣＢを有する。したがって、データフローの２つの端部の両ホストコンピュータが相互にデータを受信することを許容されているならば、各双方向データフローは２つの受信制御ブロック（Ｒｘ  ＴＣＢ）に関連される。これはそれぞれホストコンピュータ202と204の受信制御ブロック210と212により示されている。
【００１５】
各ホストコンピュータ内で、各双方向データフローは送信プロセスで別々のデータ制御ブロック（即ち送信制御ブロックまたはＴｘ  ＴＣＢ）と受信プロセスで別々のデータ制御ブロック（即ち受信制御ブロックまたはＲｘ  ＴＣＢ）が与えられているので、ホストコンピュータは同時に送信および受信リクエストを２つの異なるデータ制御ブロックを使用して処理できる。例えば、ホストコンピュータ202はＴｘ  ＴＣＢ206を使用して送信リクエストを、Ｒｘ  ＴＣＢ210を使用して受信リクエストを同時にサービスできる。ここで使用されているように、用語「同時に行われるプロセス」は１つのプロセスのサブステップまたはサブプロセスが他のプロセスが終了される前でさえも実行されることができることを示している。例えば２つの異なるプロセス回路（２つの並列プロセッサ等）で実行されることができる２つのプロセスは同時に行われることができる。さらに単一の処理回路により２つの異なるスレッドで実行される２つのプロセスは、処理回路がその特性によって一度に一つの命令だけを実行できる場合であっても、同時に行われると考えることができる。
【００１６】
本発明の文脈では、双方向のデータフローに関連したあるパケットに関する送信リクエストは双方向のデータフローの他のパケットに関する受信リクエストのサービスと同時にサービスされることができる。これはホストコンピュータ104のようなホストコンピュータが送信リクエストのサービスが行われ、受信リクエストをサービスするために（またはその逆）そのＴＣＢへアクセスする前に従来技術のＴＣＢ（ＴＶＢ102等）が解除されるまで待機しなければならない図１の状態と異なっている。
【００１７】
ここで使用されているように、用語ホストコンピュータはプロセッサと、データの送信および受信のための少なくとも１つのＩ／Ｏポートを有する（したがって“ホスト“と言う）コンピュータが実行する装置を指している。用語がここで使用されるとき、ホストコンピュータはキーボードまたは他のユーザデータ入力装置を有する必要はない。このように、ホストコンピュータは、ここでその用語が使用されているホストコンピュータはコンピュータディスプレイスクリーンのようなデータ表示装置を有することは必要ではない。このように、ここで使用されている用語ホストコンピュータは、記憶領域ネットワーク（ＳＡＮ）装置、ネットワークに取付けられた記憶装置（ＮＡＳ）、ネットワークにより他の装置と通信するためのプロセッサを有するデータ記憶装置、および／またはプロセッサを有しネットワークにより通信できる任意の他のコンピュータが実行する装置を含んでいてもよい。
【００１８】
図３は、本発明の１実施形態にしたがって、データ送信を容易にするための送信制御ブロック（Ｔｘ  ＴＣＢ）300のデータ構造を示している。図３を参照すると、送信制御ブロック（Ｔｘ  ＴＣＢ）300は特に、送信補助パラメータ（即ち送信プロセスを促すために使用されるパラメータ）の４つの主要なグループ、即ちＴＸヘッダ、ＴＸウィンドウ管理、ＴＸ待ち行列管理、ＴＸタイマ管理を有している。さらに重要なＴＸヘッダパラメータはＴＣＰソースポート（ＴＣＰ  ＳＰ）302、ＴＣＰ目的地ポート（ＴＣＰ  ＤＰ）304、ＩＰソースアドレス（ＩＰ  ＳＡ）366、ＩＰ目的地アドレス（ＩＰ  ＤＡ）306、次へ送信されるためのシーケンス番号（ＳＮＤ＿ＮＸＴ）322、送信ホストコンピュータのウィンドウサイズ（ＳＮＤ＿ＷＩＮ）316、最適な最大セグメントサイズ（ＳＥＧ＿ＯＰＴ＿ＭＳＳ）318、現在の過密ウィンドウ（ＩＣＮＧ＿ＷＩＮ／ＣＮＧ＿ＷＩＮ）324を含んでいる。
【００１９】
より重要なＴＸウィンドウ管理パラメータは現在の過密ウィンドウ（ＩＣＮＧ＿ＷＩＮ／ＣＮＧ＿ＷＩＮ）324、古い承認されていないシーケンス番号（ＯＬＤ＿ＵＮＡ）320、次へ送信されるためのシーケンス番号（ＳＮＤ＿ＮＸＴ）322、送信される最大のシーケンス番号（ＳＮＤ＿ＭＡＸ）326、送信ホストコンピュータのウィンドウサイズ（ＳＮＤ＿ＷＩＮ）316を含んでいる。
【００２０】
さらに重要なＴＸ待ち行列管理パラメータは送信保留読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）346、送信保留書込みポインタ（ＴＸＰ＿ＷＲ＿ＰＴＲ）344、再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350、再送信読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）348、送信待ち行列ベースアドレス（ＴＸＰ＿ＢＡＳＥ＿ＡＤＤＲ）330、送信待ち行列最大アドレス（ＭＡＸ＿ＴＸＰ＿ＡＤＤＥＲ）342を含んでいる。
【００２１】
さらに重要なＴＸタイマ管理パラメータは再送信タイムアウト値ＲＴＯ334、フレーム送信タイマＦＳＴ340、円滑にされた往復時間（ＳＲＴＴ）338、測定された往復時間（ＭＲＴＴ）336、タイマの測定がキックオフされるセグメントのシーケンス番号（ＴＭＲ＿ＳＥＱ＿ＮＵＭ）332を含んでいる。
【００２２】
送信制御ブロック（Ｔｘ  ＴＣＢ）300の動作は以下、図面を参照して良好に理解されるであろう。送信制御ブロック（Ｔｘ  ＴＣＢ）の概念には送信ウィンドウ管理および待ち行列管理の概念が一体化されている。図４は、任意の所定の時間に所定のデータフローで送信ホストコンピュータから送信されることを可能にされたデータ量を概念的に表している送信ウィンドウ402を簡単なフォーマットで示している。送信ウィンドウ402は例えば６４Ｋｂのサイズを有するが、正確な値は構成により変化できる。（通常、ホストアプリケーションソフトウェアから）パケットを送信するリクエストが存在するときにはいつでも、パケットはバッファされ、送信ウィンドウ402はパケットを送出するのに十分な送信帯域幅が存在するか否かを見るために（送信制御ブロック300のパラメータＳＮＤ＿ＷＩＮ316により）チェックされる。
【００２３】
送信ウィンドウ402は遅いスタート特性を有し、即ち送信ウィンドウ402は例えば第１のウィンドウサイズ404までのかなり小さい状態（通常、１ＭＳＳまたは１の最大セグメントサイズ）でスタートする。これは少量のデータがスタート時にホストコンピュータから送信されることを可能にする。他の端部のホストコンピュータがタイムリーに承認を送信するならば、送信ウィンドウ402は最大のウィンドウサイズ406により示される最大のサイズまでさらに多くのデータが送信されることを可能にするため漸進的に開く。予測された承認がタイムリーに受信されないならば、送信ウィンドウ402はその最小サイズに再度収縮するかまたは承認期間の満了時に有した値よりも小さいある値へ収縮される。この方法で、送信ウィンドウ402は送信ホストコンピュータにおける過密制御の機能を行う。
【００２４】
図５は本発明の１特徴にしたがって、再送信待ち行列502と送信保留待ち行列504を示している。送信保留待ち行列504は送信エレメントを待ち行列するのに使用され、これは送信制御ブロック（Ｔｘ  ＴＣＢ）に関連するホストコンピュータから送信されるパケットか、またはさらに共通して、そのパケットへのポインタかを含んでいる。送信エレメントはまた開始シーケンス番号とそのパケットの長さ等のような、送信されるパケットに関連するデータを含んでいる。
【００２５】
送信ウィンドウサイズがパケットの送信に十分であるならば、パケットは送信され、コピー（またはそのポインタおよび／または関連するデータ）は再送信待ち行列502へ配置される。他方で、送信されるパケット（またはそのポインタおよび／または関連するデータ）は送信ウィンドウサイズがそのパケットの送信に不十分であるときには送信保留待ち行列504へ配置される。送信保留待ち行列504は２つのポインタ、即ち送信保留読取ポインタ（ＴＸＰ＿ＲＤ＿ＰＴＲ）346、送信保留書込みポインタ（ＴＸＰ＿ＷＲ＿ＰＴＲ）344により管理される。送信保留読取ポインタ（ＴＸＰ＿ＲＤ＿ＰＴＲ）346は送信待ち行列の上部を指し、特に送信ウィンドウが利用可能であるときに次に送信される待ち行列エレメントを指す。送信保留書込みポインタ（ＴＸＰ＿ＷＲ＿ＰＴＲ）344は送信待ち行列の末尾であり、最後に挿入された送信エレメントを表している。パケットが送信保留待ち行列504から送出されるとき、送信保留読取ポインタ（ＴＸＰ＿ＲＤ＿ＰＴＲ）346は送信保留書込みポインタ（ＴＸＰ＿ＷＲ＿ＰＴＲ）344の方向へ移動する。したがって送信保留書込みポインタ（ＴＸＰ＿ＷＲ＿ＰＴＲ）344と送信保留読取ポインタ（ＴＸＰ＿ＲＤ＿ＰＴＲ）346の差は任意の所定の時点における送信待ち行列のサイズを表しており、これは送信される保留パケット数を示している。
【００２６】
送信後パケットは再送信待ち行列502へ移動される。再送信待ち行列502では、パケットは待ち行列を解除される前に他のホストコンピュータからの承認を待機する。再送信待ち行列502は２つのポインタ、即ち再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350と再送信読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）348により管理される。
【００２７】
多くの場合、再送信読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）348と再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350は同一の再送信待ち行列エレメントを指す。再送信中、再送信読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）348は前進し、再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350はとどまり、シャドウポインタとして作用する。再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350は再送信された点に対して承認が受信されるときのみ前進される。全ての再送信パケットが承認されるならば、再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350と再送信読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）348は相互に追いつき、同一の待ち行列エレメントを再度指す。
【００２８】
便宜上、再送信待ち行列502と送信保留待ち行列504は回路待ち行列として共に構成され、メモリの隣接ブロックを占有する。しかしながら、再送信読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）348、再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350、送信保留読取ポインタ（ＴＸＰ＿ＲＤ＿ＰＴＲ）346、送信保留書込みポインタ（ＴＸＰ＿ＷＤ＿ＰＴＲ）344の使用は再送信待ち行列502と送信保留待ち行列504が２つの異なる論理待ち行列として管理されることを可能にする。
【００２９】
図６は、本発明の１実施形態にしたがって、本発明の送信制御ブロック（Ｔｘ  ＴＣＢ）を含む送信動作を示すブロック図である。図６を参照すると、送信動作をサービスするプロセッサを表す送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602が示されている。図６の例では、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602は１つのマイクロコード駆動エンジン、または複数のマイクロコード駆動エンジンを表しており、これはとりわけ４つの異なるタイプのリクエスト、即ちデータ送信のリクエスト、再送信のリクエスト、承認（ＡＣＫ）を送信するためのリクエスト、受信された承認に基づいて送信ウィンドウを更新するリクエストを取る。通常、これらの４つのリクエストは４つの独立して実行するスレッドを使用して送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602により同時にサービスされる。
【００３０】
データ送信のリクエストは典型的に送信ホストコンピュータに関連するアプリケーションソフトウェアにより発生される。これらのリクエストは送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602によりサービスされるのを待機しながら、待ち行列604で待ち行列されている。１実施形態では、待ち行列604の各待ち行列エレメントの内容はデータフローに関連する送信制御ブロック（Ｔｘ  ＴＣＢ）へのポインタと、データが記憶されている場所のバッファエレメントへのポインタと、送信されるデータの長さを含んでいる。
【００３１】
所定のホストコンピュータと別のホストコンピュータまたは他のホストコンピュータ間には多数のデータフローが存在するので、各ホストコンピュータはデータフローにそれぞれ関連する多数の送信制御ブロック（Ｔｘ  ＴＣＢ）を有する。多数の送信制御ブロック（Ｔｘ  ＴＣＢ）は参照符号612により図６に示されている。所定のデータフローに対する送信制御ブロック（Ｔｘ  ＴＣＢ）は例えばＴＣＰソースポート（ＴＣＰ  ＳＰ）、ＴＣＰ目的地ポート（ＴＰＣ  ＤＰ）、ＩＰ目的地アドレス（ＩＰ  ＤＡ）および／またはＩＰソースアドレス（ＩＰ  ＳＡ）を使用して発見される。
【００３２】
再送信のリクエストは典型的に、所定のパケットが再送信されて以来、再送信タイマがある予め規定された時間後に満了し、承認がまだ受信されていないときに発生される。所定のホストコンピュータと別のホストコンピュータとの間または他のホストコンピュータ間に多数のデータフローが存在するので、各ホストコンピュータは多数の再送信タイマを有する。複数の再送信タイマは参照符号614により図６で示されている。これらのリクエストは、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602によりサービスされるのを待機しながら、待ち行列606で行列して待っている。１実施形態では、待ち行列606の各待ち行列エレメントの内容はデータフローに関連する送信制御ブロック（Ｔｘ  ＴＣＢ）へのポインタを含んでいる。
【００３３】
承認（ＡＣＫ）を送信するためのリクエストは、他のホストコンピュータから送信されたデータの受信の成功に応答して発生される。これらのリクエストは、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602によりサービスされるのを待機しながら、待ち行列608で行列して待っている。１実施形態では、待ち行列608の各待ち行列エレメントの内容はデータフローに関連する送信制御ブロック（Ｔｘ  ＴＣＢ）へのポインタ、受信されたデータに関連する承認番号、受信されたデータに関連するウィンドウサイズを含んでいる。
【００３４】
受信された承認に基づいて送信ウィンドウを更新するリクエストは、受信された承認に応答して発生される。これらのリクエストは、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602によりサービスされるのを待機しながら、待ち行列610で待ち行列されている。１実施形態では、待ち行列610の各待ち行列エレメントの内容は受信ウィンドウサイズ、受信された承認番号、Ｔｘ  ＴＣＢへのポインタ、随意選択的なタイムスタンプ、ＳＡＣＫ情報を含んでいる。
【００３５】
１実施形態では、これらの待ち行列604、606、608、610はラウンドロビン方法で送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602によりサービスされるが、これらの待ち行列中のリクエストが効率的な方法でサービスされることを確実にするための任意の他の方式が使用されてもよい。
【００３６】
送信動作に関連するリクエストのサービスにおける送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602の動作と送信制御ブロック（Ｔｘ  ＴＣＢ）の役割はここで図７、８、９、１０のフローチャートを参照して良好に理解されることができるであろう。１実施形態では、図７−１０で示されているプロセスはデータのスループットを改良するためにホストコンピュータのホストプロセッサからオフロードされる処理を表している。例示により、これらのプロセスはホストコンピュータのホストプロセッサと並列に動作する１以上のネットワークプロセッサおよび／または埋設されたプロセッサおよび／または共同プロセッサを具備する回路によって実行される。前述の回路はホストコンピュータと一体化した方法で構成されるか、ホストプロセッサのバスに取外し可能に結合されるように構成されたネットワークインターフェースカード（ＮＩＣ）等のプラグインカードに構成される。
【００３７】
図７は、本発明の１実施形態によって、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602が送信ホストコンピュータに関連されるホストアプリケーションプログラムからデータを送信するリクエストをサービスするために送信制御ブロック（Ｔｘ  ＴＣＢ）を使用する動作を示す簡単なフローチャートである。一度、アプリケーションがデータを送出するようにリクエストすると、そのデータはフェッチされバッファメモリ中に位置される。各リクエストは特定のデータフローに関係し、したがって特定の送信制御ブロック（Ｔｘ  ＴＣＢ）に関連される。ＴＣＰソースポート（ＴＣＰ  ＳＰ）、ＴＣＰ目的地ポート（ＴＰＣ  ＤＰ）、ＩＰ目的地アドレス（ＩＰ  ＤＡ）および／またはＩＰソースアドレス（ＩＰ  ＳＡ）を使用して、リクエストに関連する送信制御ブロック（Ｔｘ  ＴＣＢ）が得られる。リクエストはその後、前述したように送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602によりサービスされるように待ち行列604に位置される。
【００３８】
ブロック702では、方法は最初に、送信ウィンドウがリクエストされたデータを送信するのに利用可能であるか否かをチェックする。図３を参照して、現在のウィンドウサイズは送信制御ブロック（Ｔｘ  ＴＣＢ）から、特に関連された送信制御ブロック（Ｔｘ  ＴＣＢ）のパラメータＳＮＤ＿ＷＩＮ316から得られる。ウィンドウがリクエストされたデータパケットの送信に利用可能であるならば、方法はリクエストされたデータパケットが送出されるように送信する前にあるホウスキーピング機能を実行する。したがって方法はブロック704へ進み、送信ホストコンピュータの送信ウィンドウサイズ（ＳＮＤ＿ＷＩＮ）316を更新する。即ち送信ウィンドウ管理部分としての送信ウィンドウのサイズを減少する。さらに方法は次に送信されるシーケンス番号（ＳＮＤ＿ＮＸＴ）322を更新し、それによって次に送信されるシーケンス番号（ＳＮＤ＿ＮＸＴ）322は次のパケットの送信に使用される次のシーケンス番号を示すことができる。さらに方法はＴＭＲ＿ＳＥＱ＿ＮＵＭ332を更新し、それによって一度承認が受信されると、遅延が測定されることができるようにタイマを開始する。
【００３９】
ブロック706では、方法はまた送信されたパケットを再送信待ち行列502へ位置付け、そこにこれらは承認が受信されるまで留まる。したがって送信保留読取ポインタ（ＴＸＰ＿ＲＤ＿ＰＴＲ）346が進められる。さらにフレーム送信タイマＦＳＴ340もまた更新される。
【００４０】
ブロック708では、再送信タイマ614はこれが早期に開始されていないならば、このデータフローで開始される。ブロック710では、リクエストは送信制御ブロック（Ｔｘ  ＴＣＢ）ポインタと共に、データと共にヘッダが受信ホストコンピュータへ送信する処理をするために、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602からヘッダ準備ネットワークプロトコルプロセッサ（ＨＤＲ  ＮＰＰ）616（図６参照）へ送信される。
【００４１】
１実施形態では、送信のための（パケットヘッダを含む）データパケットの処理を容易にするために、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602からヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616へ以下の情報、即ちデータが存在するバッファへのポインタ、送信制御ブロック（Ｔｘ  ＴＣＢ）ポインタ、シーケンス＃、長さ、承認＃、ウィンドウサイズ、および（ＴＣＰヘッダで使用される）ＰＳＨとＡＣＫまたはＵＲＧ等のフラグが送信される。一度、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602がこの情報をヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616へ送信すると、現在の送信リクエストをサービスするプロセスは終了する。
【００４２】
他方で、（ブロック702で決定されるように）送信ウィンドウが利用可能ではないならば、パケットを送信保留待ち行列に行列させて待ったために方法はブロック702からブロック714へ進む。したがって送信保留書込みポインタ（ＴＸＰ＿ＷＲ＿ＰＴＲ）344はパケットが保留送信待ち行列の末尾で待ち行列されていることを示すように更新される。
【００４３】
図８は、本発明の１実施形態にしたがって、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602が再送信待ち行列502からデータを再送信するリクエストをサービスするために送信制御ブロック（Ｔｘ  ＴＣＢ）を使用する態様を示す簡単化されたフローチャートである。図８のプロセスはこのデータフローに関連される再送信タイマＲＴＸ  ＴＭＲ614の期間が満了するときに呼び出される。この場合、プロセスは１以上のＭＳＳサイズのパケット（最大セグメントサイズ）を送信待ち行列から送出し、送信されるＭＳＳの正確な番号は過密を追跡するＩＣＮＧ＿ＷＮＤ（324）に依存する。
【００４４】
ブロック804では、再送信されるパケット（その正確な番号はブロック802で決定されている）は送出される。再送信待ち行列502の管理に関する限り、これは再送信待ち行列502の再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350を維持し、再送信読取ポインタ（ＴＸＰ＿ＲＸＴ＿ＰＴＲ）348を移動して、送出されるパケットの番号を示すことを含んでいる。
【００４５】
ブロック806で、データセットは再送信されるパケットに関連する再送信待ち行列エレメントと、関連する送信制御ブロック（Ｔｘ  ＴＣＢ）の両者から得られる。例えばバッファポインタ、シーケンス番号、再送信されるデータの長さ等のデータは再送信待ち行列エレメントから得られる。この関連される送信制御ブロック（Ｔｘ  ＴＣＢ）から、得られるデータは承認番号、受信ウィンドウサイズ（図３の354参照）を含んでいる。さらに、再送信が行われようとするので、プロセスは現在の過密ウィンドウ（ＩＣＮＧ＿ＷＩＮ／ＣＮＧ＿ＷＩＮ）324を調節する。先に説明したように、送信ウィンドウはデータが送信または再送信された後に承認が受信されるまで減少される。
【００４６】
ブロック808では、送信制御ブロック（Ｔｘ  ＴＣＢ）ポインタと共に再送信リクエストは再送信データを伴ったヘッダが受信ホストコンピュータへ送信する準備をするために送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602からヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616（図６参照）へ送信される。１実施形態では、送信のための（パケットヘッダを含む）データパケットの準備を促すため、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602からヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616へ以下の情報、即ちデータが存在するバッファへのポインタ、送信制御ブロック（Ｔｘ  ＴＣＢ）ポインタ、シーケンス＃、長さ、承認＃、ウィンドウサイズ、ＰＳＨとＡＣＫまたはＵＲＧ等のＴＣＰに関連されるフラグが送信される。一度、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602がこの情報をヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616へ送信すると、図８の現在の再送信リクエストをサービスするプロセスは終了する。
【００４７】
図９は、本発明の１実施形態にしたがって、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602が承認を他の送信ホストコンピュータへ送信するために送信制御ブロック（Ｔｘ  ＴＣＢ）を使用する態様を示す簡単化されたフローチャートである。図８のプロセスはホストコンピュータが他の送信ホストコンピュータから適切にデータパケットを受信した後に呼び出される。ブロック902では、１以上のデータパケットがホストコンピュータで適切に受信されていることが認識される。受信されたデータシーケンスに基づいて、ＲｘプロセスはＡＣＫ＃が送信されるように準備し、受信ウィンドウサイズと待ち行列に基づいてＡＣＫを送信するためのＴＸ  ＮＰＰへのリクエストを準備する。さらに、受信されたデータパケット中の情報もまたこのデータフローに関連する送信制御ブロック（Ｔｘ  ＴＣＢ）へのポインタを得るために使用される。ブロック904では、現在のシーケンス番号は次に送信されるシーケンス番号（ＳＮＤ＿ＮＸＴ）322から得られる。
【００４８】
ブロック906では、ブロック902と904で得られる情報は他の送信ホストコンピュータへ送信されるための特別の承認パケットを準備するためにヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616へ送信される。１実施形態では、（パケットヘッダを含む）送信のための承認パケットの準備を促すために、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602からヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616へ以下の情報、即ち送信制御ブロック（Ｔｘ  ＴＣＢ）ポインタ、シーケンス＃、長さ、承認＃、ウィンドウサイズが送信される。一度、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602がこの情報をヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）616へ送信すると、図９の承認を送信するプロセスは終了する。
【００４９】
図１０は、本発明の１実施形態にしたがって、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）602が送信ウィンドウを更新し、他の送信ホストコンピュータから送信され受信された承認メッセージに応答して性能データを計算する送信制御ブロック（Ｔｘ  ＴＣＢ）を含んでいる態様を示す簡単化されたフローチャートである。一般的に、２つの主要なタスクが処理される必要があり、タスクは即ち（１）送信ウィンドウを管理するパラメータを更新し、結果として更新されたウィンドウサイズがこのような送信を可能にするならばデータパケットを送出し、（２）送信制御ブロック（Ｔｘ  ＴＣＢ）の情報および承認メッセージで受信された情報に基づいて性能データを計算する。
【００５０】
ブロック1002では、ＴＸウィンドウパラメータが更新される。示されているように、更新されるパラメータは送信ホストコンピュータ（ＳＮＤ＿ＷＩＮ）316のウィンドウサイズ、古い承認されていないシーケンス番号（ＯＬＤ＿ＵＮＡ）320、フレーム送信タイマＦＳＴ340、ＴＭＲ＿ＳＥＱ＿ＮＵＭ332である。ブロック1004では、性能データは計算され、以下のパラメータ、即ち再送信タイムアウト値ＲＴＯ334、スムースにされた往復時間（ＳＲＴＴ）338、測定された往復時間（ＭＲＴＴ）336が更新される。
【００５１】
ブロック1006では、プロセスは、このようなデータパケットが受信された承認メッセージに関係しているならば、（送信保留待ち行列504または再送信待ち行列502からの早期の送信の結果として）再送信のために保持されている任意のデータパケットを解放する。したがって、プロセスは再送信シャドウポインタ（ＴＸＰ＿ＳＨＤ＿ＲＤ＿ＰＴＲ）350および／または再送信読取ポインタ（ＴＸＰ＿ＲＴＸ＿ＰＴＲ）348を適切であるように更新する。ブロック1008では、プロセスは保留データパケットが送出されるために送信保留待ち行列504に存在しているか否かを決定する。
【００５２】
１実施形態では、送信保留待ち行列504の先頭（即ち送信読取ポインタ（ＴＸＰ＿ＲＤ＿ＰＴＲ）346）と送信保留待ち行列504の末尾（即ち送信書込みポインタ（ＴＸＰ＿ＷＲ＿ＰＴＲ）344）との差がゼロよりも大きいならば、プロセスは送信を待機する保留データパケットが存在していると考える。この場合、プロセスは送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）にデータ送信を行うための図７のプロセスを呼び出させるリクエストを出力する。これはブロックブロック1010に示されている。他方で、（ブロック1008で決定されたように）送信保留待ち行列504に保留データパケットがもはや存在しないならば、図１０のプロセスはブロック1012で終了する。
【００５３】
前述したように、所定のデータフローで所定のホストコンピュータにおいて送信および受信タスクを同時に処理するための別々の送信制御ブロック（Ｔｘ  ＴＣＢ）および別々の受信制御ブロック（Ｒｘ  ＴＣＢ）の使用は、送信制御ブロックがデータフローの送信および受信タスクの両者で使用されるとき従来技術で見られた帯域幅ボトルネックの問題を消去する。図１１は、本発明の１実施形態にしたがって、例示的な受信制御ブロック（Ｒｘ  ＴＣＢ）データ構造1100を示している。Ｒｘ  ＴＣＢ1100は受信補助パラメータ、即ち受信プロセスを容易にするのに使用されるパラメータを記憶するために使用される。受信制御ブロック（Ｒｘ  ＴＣＢ）1100は特に複数の機能を可能にするパラメータを有し、複数の機能には順番になっていないパケットを再度順序付けし、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）の代わりに受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）が承認パケットを送信することを可能にし、接続毎を基礎としてＲｘウィンドウサイズを維持する機能が含まれている。
【００５４】
順番になっていないパケットの再順序付けに関しては、本発明の１特徴にしたがって、パケット受信プロセスがさらに帯域幅を実効的にするように順番になっていないパケットを部分的に再度順序付けする方法が与えられる。受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）がシーケンス番号１乃至１０００を有するパケットを予測していたことを仮定する。しかしながら、シーケンス番号１乃至１０００を有するパケットが受信される前に、受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）はシーケンス番号１００２乃至６４，０００を有する代わりのパケットを受信する。幾つかの従来技術の構成では，これらの順番になっていないパケットは破棄され，予測されたパケット（即ちシーケンス番号１乃至１０００を有するパケット）が受信された後、送信ホストコンピュータがこれらを再度送信することを必要とする。
【００５５】
本発明の１特徴にしたがって，受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）はシーケンス番号１００２乃至６４，０００を有するパケットを維持し，必要なときにそれらを部分的に再度順序付けするが，受信ホストコンピュータ内のホストソフトウェアへこれらを送信する代わりに順番に並んでいないバッファにこれらを記憶する。部分的に順序付けされたパケットは例えばキーとしてパケットのシーケンス番号を使用して連結されたリストに記憶する。
【００５６】
順番に並んでいないパケットを部分的に順序付けすることにより（シーケンス番号１乃至１０００を有するパケットは依然として欠落しているので、再順序付けは部分的である）、シーケンス番号１乃至６４，０００を有するパケットは，一度シーケンス番号１乃至１０００を有するパケットが到着すると非常に迅速に組立てられることができる。この迅速な組立ては受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）がさらに迅速に完成したデータを高い層のソフトウェアへ送信することを許容する。さらに，送信ホストコンピュータが実行しなければならない再送信量を減少することによって，本発明は２つのホストコンピュータ間の通信チャンネルの帯域幅を効率的に増加する。本発明のこの特徴は同時出願の明細書（発明の名称“Methods And Apparatus For Handling Out-Of-Order Packets”）で詳細に説明されており，ここで参考文献とされている。
【００５７】
受信制御ブロック（Ｒｘ  ＴＣＢ）1100では、複数の再順序バッファ（ＲＯＢ）、即ちＲＯＢ１、ＲＯＢ２、ＲＯＢ３、ＲＯＢ４が示されている。所望な数の再順序バッファが存在することができるが、４つだけが示されている。各ＲＯＢは順番に並んでいないパケットに関連するパラメータを記憶するために使用される。各ＲＯＢに関連するパラメータはデータへのポインタ（ＰＫＴ＿ＰＴＲ）、記憶転送層ヘッダ（ＳＴＬ、これはファイバチャンネルフレームリアセンブリに使用される）、現在のパケットの長さ（ＰＫＴ＿ＬＥＮ）、現在のパケットのシーケンス番号（ＳＥＱ＿ＮＵＭ）を含んでいる。
【００５８】
ＲＯＢ１を参照すると、これらの４つのパラメータは参照番号1104、1106、1108、1110によりそれぞれ示されている。記憶のフレキシブル性を与え、各受信制御ブロック（Ｒｘ  ＴＣＢ）を過度に大きくすることを避けるために、順番で並んでいないバッファはホストコンピュータシステムのメモリスペースに拡張される。したがって、より多数の再順序バッファが受信制御ブロック（Ｒｘ  ＴＣＢ）データ構造で与えられる以上に必要とされるならば、ポインタ（ＲＯＢ  ＥＸＴＥＮＴＩＯＮ  ＰＴＲ）1112が与えられ、これは拡張の再順序バッファが発見されるホストコンピュータシステムのメモリスペースの位置を指している。
【００５９】
データ受信動作における受信制御ブロック（Ｒｘ  ＴＣＢ）の役割は以下の図１２Ａ−１４を参照して良好に理解されるであろう。１実施形態では、図１２Ａ−１４で示されているプロセスはデータのスループットを改良するためにホストコンピュータのホストプロセッサからオフロードされたプロセスを表している。例示により、これらのプロセスはホストコンピュータのホストプロセッサと並列で動作する１以上のネットワークプロセッサおよび／または埋設されたプロセッサおよび／またはコプロセッサにより構成される。前述の回路はホストコンピュータと一体化した方法で構成されるか、ホストプロセッサのバスに取外し可能に結合されるように構成された上述のネットワークインターフェースカード（ＮＩＣ）等のプラグインカードに構成される。
【００６０】
図１２Ａは、本発明の１実施形態にしたがって、受信制御ブロック（Ｒｘ  ＴＣＢ）を使用してデータパケットを受信する例示的なステップを示している。ブロック1202では、受信されたデータパケットのシーケンス番号は受信制御ブロック（Ｒｘ  ＴＣＢ）のＲＣＶ＿ＮＸＴ1120により記憶されている予測されたシーケンス番号と比較される。受信されたパケットの受信制御ブロック（Ｒｘ  ＴＣＢ）は、ＴＣＰソースポート、ＴＣＰ目的地ポート、ＩＰソースアドレス、および／またはＩＰ目的地アドレスのような情報を使用して発見される。２つが一致するならば、受信されたパケットは順序付けされていると考えられ、方法はブロック1204へ進む。他方で、不一致が存在するならば、受信されたパケットは順番になっていないと考えられ、方法はブロック1248へ進み、これについてはさらに図１２Ｂで説明する。
【００６１】
ブロック1204では、方法はＲＣＶ＿ＮＸＴ1120を更新し、これは受信される次のパケットで予測されるシーケンス番号を更新する。さらに受信ウィンドウはＲＣＶ＿ＷＩＮ1122により更新され、これはデータが受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）から受信ホストコンピュータのアプリケーションソフトウェアへ送信されるまで一時的に受信ウィンドウサイズを減少する。
【００６２】
一度、更新がブロック1204で行われると、方法はブロック1206へ進み、ここで方法は受信されたパケットがこのホストコンピュータから以前に送信されたデータの受信された承認に関するか否か、または受信されたデータパケットが他の送信ホストコンピュータから送信された承認以外のデータに関するか否かを決定する。受信されたパケットがこのホストコンピュータから以前に送信されたデータの受信された承認に関するものであるならば、方法はブロック1208へ進み、ここで受信された承認は送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）へ送信され、それによって送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）はそのウィンドウを更新し、性能データを計算する等の動作を行う。この特徴はここでは図１０に関連して前述した。
【００６３】
他方で、受信されたデータパケットが他の送信ホストコンピュータから送信された承認以外のデータに関するならば、方法はブロック1210へ進み、データはホストコンピュータのメモリへ、即ちホストソフトウェアアプリケーションにより使用されるためにホストバッファメモリスペースへ移動される。ブロック1212および1214では、承認手順は管理されない。１実施形態では、累積承認方式が使用される（しかし全ての構造で必要とされるわけではない）。累積承認方式下では、承認は帯域幅を最適にするために受信された１つおきのパケット毎に送出される。したがってブロック1212では、既に開始されていないならば、遅延された承認タイマが開始される。
【００６４】
他方で、ブロック1214でにおいて、遅延された承認タイマが既にスタートされているならば、方法はタイマを停止し、承認を他の送信ホストコンピュータへ送出するように処理する。いずれにせよ、遅延された承認タイマの期間が満了したならば、承認は送信ホストコンピュータへ送出され、この場合、承認は受信された（２つの代わりに）１つのパケットだけに関する。一般的に、遅延された承認タイマは所定の値、例えば１００ｍｓに設定される。遅延された承認タイマの期間が満了するとき、リクエストはＲｘ  ＮＰＰ待ち行列に行列して並べられる。
【００６５】
ブロック1216で、方法は承認を送出するために承認パケットを生成するのに必要なデータをホストコンピュータの送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）へ送信する。このデータは例えば承認番号、ウィンドウサイズ、送信制御ブロック（Ｔｘ  ＴＣＢ）へのポインタを含んでいる。この手順はこの明細書では図９に関連して先に説明した。Ｒｘ  ＮＰＰはまたそれ自体で承認を送出するための選択肢を有する。例えばＲｘ  ＮＰＰはそれが順番になっていないデータ、重複データまたはＲｘウィンドウプローブを受信するならば直ちに承認を送信する。
【００６６】
ブロック1218で、方法は新しく受信されたデータパケットが再順序バッファに記憶されている以前に部分的に再度順序付けされたパケットを順序付けしているか否かを決定するチェックを行う。ノーであるならば、プロセスはブロック1218に戻る。他方で、新しく受信されたデータパケットの受信が前に部分的に再順序付けされたパケットを順序付けしているならば、方法は全ての順序付けされたパケットをホストアプリケーションバッファスペースに送出し、その承認を送出するために再度ブロック1204へ進む。
【００６７】
図１２Ｂは、受信されたパケットは（図１２Ａのブロック1202により決定されるように）順番になっていないことが発見されている図１２Ａの状態を表している。ブロック1250で、受信されたパケットはそれがこのホストコンピュータにより先に送信されたデータについての他の送信ホストコンピュータからの承認であるか、または他の送信ホストコンピュータにより送信される承認以外のデータであるかを決定するために試験される。受信されたパケットが承認であることが発見されたならば、方法は図１２Ａのステップ1208へ進み、即ち承認データは送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）がその他のタスクの中でそのウィンドウを更新し、性能データを計算するなどを可能にするために送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）へ送信される。
【００６８】
他方で、受信されたパケットが他の送信ホストコンピュータから送信された承認以外の順番になっていないデータであることが発見されたならば、方法は受信されたデータが受信ウィンドウ内に適合するか否かを決定するためにブロック1252へ進む。ホストコンピュータが前にデータのチャンクを受信し、前に受信されたデータをアプリケーションバッファメモリへ完全に移動しておらず、したがって限定された量のみの新しいデータを受取ることができるので、受信ウィンドウは現在狭い可能性がある。受信されたデータが受信ウィンドウ内に適合しないならば、方法はブロック1254へ進み、ここで受信されたデータは単に破棄される。その後、方法は新しいデータの到着を待機するために戻る。これはブロック1256で示されている。
【００６９】
他方で、受信されたデータが受信ウィンドウ内に適合するならば、方法は図１２Ａのブロック1216へ進み、即ち承認パケットを準備させ送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）により送出させるために、受信されたデータを受信制御ブロック（Ｒｘ  ＴＣＢ）と共に送信する。承認はこの場合、パケットが受信されるがこれらは順番になっていないことを他のコンピュータへ示す。
【００７０】
各ＲＯＢは順番になっていないパケットに関連するパラメータを記憶するために使用される。各ＲＯＢに関連するパラメータは、データへのポインタ（ＰＫＴ＿ＰＴＲ  1104）、記憶転送層ヘッダ（ＳＴＬ  1106）、現在のパケットの長さ（ＰＫＴ＿ＬＥＮ  1108）、現在のパケットのシーケンス番号（ＳＥＱ＿ＮＵＭ  1110）を含んでいる。
【００７１】
さらに、受信されたデータはブロック1258で示されているように順番になっていないバッファに記憶される。前述したように、この順番になっていないバッファは再順序バッファの連結されたリストのＰＫＴ＿ＰＴＲ  1104、ＳＴＬ  1106、ＰＫＴ＿ＬＥＮ  1108、ＳＥＱ＿ＮＵＭ  1110等のパラメータにより管理され、バッファの連結されたリストは受信制御ブロック（Ｒｘ  ＴＣＢ）中に維持され、必要なときにバッファ拡張ポインタＲＯＢ  ＥＸＴＥＮＴＩＯＮ  ＰＴＲ  1112の使用によりホストコンピュータのメモリに拡張される。したがってブロック1260では、受信制御ブロック（Ｒｘ  ＴＣＢ）の再順序付けバッファに関連するパラメータは更新される。再順序バッファに関連する記憶転送層ヘッダ（ＳＴＬ）パラメータは（受信制御ブロック（Ｒｘ  ＴＣＢ）のＰＲＯＴＯＣＯＬ  1124により示されるように）プロトコルが現在のプロトコルがＴＣＰ／ＩＰでＩＰ（ＦＣ／ＩＰ）にわたるファイバチャンネルであることを示しさえすれば変更されることに注意する。その後、方法は新しいデータの到着を待機するために戻る。これはブロック1262で示されている。
【００７２】
受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）からの送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）の分離は、受信制御ブロック（Ｒｘ  ＴＣＢ）からの送信制御ブロック（Ｔｘ  ＴＣＢ）の分離に加えて、ホストコンピュータが高い送信帯域幅で通信することを有効に可能にする利点がある。前述したように、各送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）と受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）は種々のリクエストを処理するためにそれ自体のスレッドを実行する。送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）と受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）との間には、実質的な量の必要な調節が存在する。
【００７３】
本発明の１つの特徴にしたがって、受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）はデータを、送信制御ブロック（Ｔｘ  ＴＣＢ）と、送信プロセスに関連する他のパラメータとを更新するために少なくとも２つの機会で送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）へ転送する。これらの２つの機会は他の送信ホストコンピュータからの承認の受信と、データシーケンス情報の受信とを含んでおり、これは送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）が他方の送信ホストコンピュータへ承認を送信することを可能にする。
【００７４】
図１３で示されている例示的な実施形態では、他の送信ホストコンピュータからの１以上の承認パケットの受信は受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）に受信された承認パケットに関連するデータを待ち行列1304中に待ち行列させる。送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）1306は送信制御ブロック（Ｔｘ  ＮＰＰ）と、ウィンドウサイズとを更新し、性能データを計算し、再送信バッファを更新するように待ち行列1304から待ち行列エレメントを取る。ＴＸ  ＮＰＰはその後、受信された承認に基づいてＲｘウィンドウを更新する。さらに送信されたＡＣＫ＃とウィンドウサイズを更新する。
【００７５】
受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）1302により送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）1306へ送信される情報の中には、承認番号、承認が送信されるパケットが他の送信ホストコンピュータにより受信される時間を示すタイムスタンプ値（タイムスタンプ値は現在の時間値に基づいて遅延を計算するために送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）により使用される）、開始シーケンス番号（ＳＴＡＲＴ＿ＳＥＱ）および関連する長さのような選択的な承認ブロックに関連する情報、他のホスト送信コンピュータからのウィンドウサイズ情報、送信制御ブロック（Ｔｘ  ＴＣＢ）へのポインタが含まれる。
【００７６】
図１４により示されている例示的な実施形態では、受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）は承認を送出するために送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）へ情報を送信する。これは遅延された承認タイマが満了されるか、背中合わせの２つのパケットが受信され、承認が送信されるべきであるために生じる。受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）1402は承認を待ち行列1404へ送信するためにリクエストを待ち行列する。送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）1406は承認の送出と送信制御ブロック（Ｔｘ  ＴＣＢ）の更新のために必要なパラメータを計算するために待ち行列1404から待ち行列エレメントを受取る（例えば送信された３つの最新のＡＣＫおよびウィンドウサイズ）。
【００７７】
受信ネットワークプロトコルプロセッサ（ＲＣＶ  ＮＰＰ）1402により送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）1406へ送信される情報の中には、送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）1406が承認番号を計算することを可能にするシーケンス番号およびその長さが存在する。他の情報は他の送信ホストコンピュータへ送信されるウィンドウサイズ、送信制御ブロック（Ｔｘ  ＴＣＢ）へのポインタを含んでいる。待ち行列1404の上部から取られたこの情報は送信ネットワークプロトコルプロセッサ（ＴＸ  ＮＰＰ）1406によりヘッダ処理プロセッサ（ＨＤＲ  ＮＰＰ）へ転送され、他のホスト送信コンピュータへ送信されるための承認パケットを生成する。
【００７８】
部分的に再順序付けされたパケットに関しては、本発明は送信および受信の両者を処理するＴＣＢと、（前述したように）別々の送信ＴＣＢと別々の受信ＴＣＢとが存在する制御ブロックアレンジメントの両者でパケットを部分的に再順序付けする技術および構成を含んでいる。以下の説明は送信および受信の両者を処理するＴＣＢの部分的に再順序付けパケットの１構成に関するが、ここでの本発明の実施形態は別々の送信ＴＣＢ（Ｔｘ  ＴＣＢ）と別々の受信ＴＣＢ（Ｒｘ  ＴＣＢ）とが各ネットワーク化装置に対して存在する制御ブロックアレンジメントにも適用されることに注意する。
【００７９】
図１５は、本発明の１実施形態にしたがって、ターゲット装置でデータの受信を容易にするための受信制御ブロック（Ｒｘ  ＴＣＢ）1502データ構造を示している。送信ＴＣＢ（Ｔｘ  ＴＣＢ）と共に、受信ＴＣＢ（Ｒｘ  ＴＣＢ）1502は、ウィンドウ管理とも呼ばれる任意の所定の時間で通過するパケットの番号のようなデータ転送の種々の特徴の管理、およびパケットの待ち行列およびタイミングの管理によってターゲット装置で受信プロセスを容易にする。
【００８０】
入来パケット自体はＲｘ  ＴＣＢ1502の再順序バッファ（ＲＯＢ）中に直接維持されない。パケットは可変のサイズであるので、ＲＯＢポインタ（“ｐｋｔ＿ｐｔｒｓ”）1506をＲＯＢ1504中のパケットへ記憶し、実際には幾つかまたは全てのパケット自体を外部メモリ位置に記憶することはさらに効率的である。各ポインタ1506と共に、パケット長（“ＰＫＴ＿ＬＥＮ［１０：０］”）1508とシーケンス番号（“ＳＥＱ＿ＮＵＭ”）1510が記憶される。勿論、パケット長1508のサイズは構成にしたがって変化されてもよい。
【００８１】
Ｒｘ  ＴＣＢ1502はパケットのオーバーフローのためにＲＯＢ拡張ポインタ（“ＲＯＢ拡張ｐｔｒ”）1512も含んでいる。即ちそのＲＯＢポインタ1506がＲＯＢ1504に適合できない到着するパケットはそれ自体、ＲＯＢ拡張ポインタ1512により参照されるメモリ位置に記憶される。基本的に他のポインタを含む位置へのポインタがパケットを参照できる。
【００８２】
Ｒｘ  ＴＣＢはＲＯＢポインタをシーケンス番号順にそのＲＯＢ1504に記憶する。例えば最小のシーケンス番号を有するＲＯＢポインタはＲＯＢ1504の上部1516に記憶され、最大のシーケンス番号を有するＲＯＢポインタはＲＯＢ1504の下部1522に記憶されるか、またはＲＯＢ拡張ポインタ1512によりメモリ位置で参照される。メモリ位置のＲＯＢポインタはまたシーケンス番号により記憶されてもよい。新しいパケットが到着するときＲＯＢはＲＯＢポインタがシーケンス番号により順番に維持されることを確実にすることが必要なときに再順序付けされる。またパケットは再調節後、ＲＯＢポインタがもはやＲＯＢ1504にまたはＲＯＢ拡張ポインタ1512と適合できないときに破棄される。
【００８３】
図１６は、本発明の１実施形態にしたがって、順番になっていないパケットが部分的に再度順序付けされているＲｘ  ＴＣＢを示す簡単化された図を示している。再順序付けされる全てのパケットが連続的に番号付けされていなくても、再順序付けは行われるので部分的のみである。例えば再順序パケットはそれらの番号が隣接していなくてもバッファで生じる。図１６の例におけるＴＣＢはそれぞれ３つのエントリ、即ち第１のエントリ1604、第２のエントリ1606、第３のエントリ1608でＲＯＢ1624に３つのスロットを含んでいる。勿論、スロットの番号は所望により変化されることができる。各エントリはＲＯＢに記憶されている受信されたパケットへのポインタ、パケットの長さ、パケットのシーケンス番号を含んでいる。ＴＣＢはまたターゲット装置に到着した順番になっていないパケットの番号を追跡するカウンタ1601を含んでいる。
【００８４】
一度、予測されたシーケンス番号1602を有するパケットがターゲット装置に到着すると、Ｒｘ  ＴＣＢはそれをＲＯＢ中で発見された全ての連続して隣接するパケットと共にアプリケーションへ転送する。ＴＣＢは順番になっていないカウンタ1601を受信され記憶されたパケットの総量から差し引くことによりメモリバッファ1624の最後の連続して隣接するエントリを決定する。
【００８５】
３つのパケットがソース装置からターゲット装置へ送信されることを仮定する。第１の送信されたパケットは１００のシーケンス番号を有し、第２の送信されたパケットは１０００のシーケンス番号を有し、第３の送信されたシーケンスパケットは２０００のシーケンス番号を有する。
【００８６】
しかしながらパケットは順番になっていない状態で到着する。受信された第１のパケットはシーケンス番号２０００を有する第３の送信されたパケットである。受信された第２のパケットはシーケンス番号１０００を有する第２の送信されたパケットである。受信された第３のパケットはシーケンス番号１００を有する第１の送信されたパケットである。
【００８７】
最初に、任意のパケットの到着前の時間＝Ｎ（３２２）においては、ＲＯＢ1624は空である。予測されたシーケンス番号1602は１００であり、これはまたＴＣＰ／ＩＰデータ転送がまだ開始されていないので、ソース装置から送信される第１のパケットの番号である。
【００８８】
時間＝Ｎ＋１（３１０）で、第３の送信されたパケットはシーケンス番号２０００で到着する。これは“１００”の予測されたシーケンス番号1602と一致しないので、第３の送信されたパケットはメモリに位置され、ＲＯＢポインタ1616はその長さおよびシーケンス番号と共に第１のエントリ1604のＲＯＢ1624に記憶される。順番になっていないカウンタ1601は“１”に変更される。即ち１つのエントリが存在し、それは適切な順序ではない。
【００８９】
時間＝Ｎ＋２（３１２）で、第２の送信されたパケットはシーケンス番号１０００で到着する。これは“１００”の予測されたシーケンス番号と一致しないので、第２の送信されたパケットはメモリ中に位置され、ＲＯＢポインタ1618はその長さおよびシーケンス番号と共にＲＯＢ1624に記憶される。第２の送信されたパケットは先に到着した第３の送信されたパケットよりも小さいシーケンス番号を有するので、ＲＯＢ1624のＲＯＢポインタエントリは再順序付けされる。第２の送信されたパケットへのＲＯＢポインタは第１のエントリ1604に配置され、第３の送信されたパケットへのＲＯＢポインタは第２のエントリ1606へ移動される。順番になっていないカウンタ1601は“２”に変更される。即ち２つのエントリが存在し、ＲＯＢ1624では再順序付けされているにもかかわらず、部分的にこれらは両者とも順番になっていない。
【００９０】
時間＝Ｎ＋３（３１４）で、第１の送信されたパケットは“１００”の予測されたシーケンス番号1602に一致するシーケンス番号で最後に到着する。この時点で、ＴＣＢは第１の送信されたパケットをメモリ中に位置させ、ＲＯＢポインタ1620をその長さおよびシーケンス番号と共に第１のエントリ1606のＲＯＢ1624に記憶する。ＲＯＢ1624は再順序付けされる。第２の送信されたパケットへのＲＯＢポインタは第２のエントリ1606へ移動され、第３の送信されたパケットへのＲＯＢポインタは再度第３のエントリ1608へ移動される。３つのエントリが存在するが、全て正しい順序であるので、順番になっていないカウンタ1601は“０”である。
【００９１】
ＴＣＢはその後、シーケンス番号により全ての３つの適切に順序付けされたパケットをターゲット装置のアプリケーションへ転送し、ＲＯＢをクリアし、その後次の予測されたシーケンス番号1602を決定する。
【００９２】
本発明の文脈では、到着するパケットにＲＯＢを与えることは再送信パケットによりネットワークをフラッドする必要性を減少する。またシーケンス番号によるＲＯＢポインタの再順序付けは各パケットのシーケンス番号を連続して再検査する必要性をなくし、それによってアプリケーションのネットワーク待ち時間が減少する。
【００９３】
図１７は、本発明の別の実施形態にしたがって、順番になっていないパケットの部分的な再順序付け特性を含んでいる例示的なＲｘ  ＴＣＢを示す簡単化された図を示している。図１７の実施形態では、次に予測されるシーケンス番号を有するパケットと順次連続しているパケットはターゲット装置のアプリケーションに転送され、転送されたパケットと順次連続していないパケットはその後続して到着するパケットと再順序付けされるようにバッファに維持される。図１７の例では、Ｒｘ  ＴＣＢは各３つの順序付けされたエントリ、即ち第１のエントリ1704、第２のエントリ1706、第３のエントリ1708に対してＲＯＢ1724に３つのスロットを含んでいる。各エントリはＲＯＢに記憶されている受信されたパケットへのポインタ、パケットの長さ、パケットのシーケンス番号を含んでいる。図１６のように、ＴＣＢはまたターゲット装置に到着した順番になっていないパケットの番号を追跡するカウンタ1701を含んでいる。
【００９４】
この例では、４つのパケットがソース装置からターゲット装置へ送信される。第１の送信されたパケットは１００のシーケンス番号を有し、第２の送信されたパケットは１０００のシーケンス番号を有し、第３の送信されたシーケンスパケットは２０００のシーケンス番号を有し、第４の送信されたパケットは３０００のシーケンス番号を有している。
【００９５】
しかしながらパケットは順番になっていない状態で到着する。受信された第１のパケットはシーケンス番号３０００を有する第４の送信されたパケットである。受信された第２のパケットはシーケンス番号１０００を有する第２の送信されたパケットである。受信された第３のパケットはシーケンス番号１００を有する第２の送信されたパケットである。
【００９６】
送信された第３のパケットは到着していない。
【００９７】
最初に、任意のパケットの到着前の時間＝Ｎ（４２２）で、ＲＯＢ1724は空である。予測されたシーケンス番号1702は１００であり、これはまたＴＣＰ／ＩＰデータ転送がまだ開始されていないので、ソース装置から送信される第１のパケットのシーケンス番号である。
【００９８】
時間＝Ｎ＋１（４１０）で、第４の送信されたパケットはシーケンス番号３０００で到着する。これは“１００”の予測されたシーケンス番号と一致しないので、第４の送信されたパケットはメモリに位置され、ＲＯＢポインタ1716はその長さおよびシーケンス番号と共に第１のエントリ1704でメモリバッファ1724に記憶される。順番になっていないカウンタ1701は“１”に変更される。即ち１つのエントリが存在し、それは適切な順序ではない。
【００９９】
時間＝Ｎ＋２（４１２）で、第２の送信されたパケットはシーケンス番号１０００で到着する。これも予測されたシーケンス番号“１００”と一致しないので、第２の送信されたパケットはメモリに位置され、ＲＯＢポインタ1718はその長さおよびシーケンス番号と共にメモリバッファ1724に記憶される。第２の送信されたパケットは先に到着した第４の送信されたパケットよりも小さいシーケンス番号を有するので、第２の送信されたパケットへのＲＯＢポインタは第１のエントリ1704中に位置され、第４の送信されたパケットへのＲＯＢポインタは第２のエントリ1706へ移動される。２つのエントリが存在し、両者とも順番になっていないので、順番になっていないカウンタ1701は“２”に変更される。
【０１００】
時間＝Ｎ＋４（４１４）で、第１の送信されたパケットは予測されたシーケンス番号1702に一致するシーケンス番号で最後に到着する。この時点で、ＴＣＢは第１の送信されたパケットをメモリ中に位置し、ＲＯＢポインタ1720をその長さおよびシーケンス番号と共に第１のエントリ1706のＲＯＢ1724に記憶する。第２の送信されたパケットへのＲＯＢポインタは第２のエントリ1706へ移動され、第４の送信されたパケットへのＲＯＢポインタは第３のエントリ1708へ移動される。全部で３つのエントリが存在するが、最初の２つは適切な順序であるが、最後の１つは順番になっていないので、順番になっていないカウンタ1701は“１”に変更される。
【０１０１】
ＴＣＢはその後、シーケンス番号により最初の２つの適切な順序のエントリ、即ち第１および第２の送信されたパケットをターゲット装置のアプリケーションへ転送する。その後、第４の送信されたパケットへのＲＯＢポインタを第１のエントリ1704へ移動する。ＴＣＢはその後、次の予測されたシーケンス番号1702を決定する。
【０１０２】
本発明の文脈では、ＲＯＢポインタの部分的な再順序付けと、連続して再検査せずにシーケンス番号によるアプリケーションへのパケットグループの転送は、図１５で示されている従来技術に比較して、アプリケーションのネットワーク待ち時間を減少する。
【０１０３】
図１８は、本発明の別の実施形態によるＴＣＢ  1802中の順番になっていないパケットの部分的な再順序付けに関する予見アルゴリズムを示す簡単化された図を示している。ＴＣＢは全部で５つのＲＯＢポインタエントリを保持できるＲＯＢ  1824を表示している。
【０１０４】
ソース装置はそれぞれシーケンス番号１００、１０００、２０００、３０００、４０００、５０００を有する６つのパケットを送信する。ターゲット装置はそれぞれシーケンス番号２０００、３０００、４０００を有する丁度３つのパケットを受信する。対応するＲＯＢポインタはＲＯＢ  1824にシーケンス番号により記憶される。
【０１０５】
ＴＣＢ予見アルゴリズムは、既に到着したパケットの長さおよびシーケンス番号と、次に予測されるシーケンス番号1808および／または最大の転送ユニット（ＭＴＵ）に基づいて、到着していないパケットの番号を予測し、そのバッファにスペースを割当てる。ＭＴＵは典型的に、例えば、開始プロセス中（例えば発見中）に決定される。例えばＭＴＵが１，５００バイトであると仮定する。この場合、予見アルゴリズムは少なくとも２つのパケットが最初の１，９００バイト（即ち２０００の最小の受信されたシーケンス番号から１００の予測されたシーケンス番号を減算する）を転送するのに必要とされることを予測する。
【０１０６】
したがって、予見アルゴリズムは予測された２つのパケットに対してＲＯＢの次の２つのエントリを割当てる。そのシーケンス番号が２０００の最小の受信されたシーケンス番号と１００の予測されたシーケンス番号との間ではない任意のパケットが到着すると、それは単に破棄される。例えばシーケンス番号５，０００のパケットが次に到着するならば、これは残りの２つのエントリが既に割当てられているために破棄される。他方で、予測されたシーケンス番号１００を有するパケットまたはシーケンス番号１，０００を有するパケットが次に到着するならば、そのパケットはＲＯＢに置かれ、再順序付け中に考慮される。
【０１０７】
本発明の文脈では、ＴＣＢ予見アルゴリズムはＲＯＢポインタの不必要な再順序付けを減少する。ＴＣＢが最高のシーケンス番号を有するパケットが他の予測されるパケットのための余地をつくるために将来破棄されることを必要とされると考えるならば、ターゲット装置にそれが到着するときにそのパケットを破棄する。それによって、これは現在、正しく順序付けされたパケットのグループが、行われることを必要とされる再順序付けステップの量を減少することによって効率的にアプリケーションに転送されることができるので、アプリケーションのネットワークの待ち時間全体が減少する。
【０１０８】
［付録Ａ：本発明の別の実施形態］  
本発明は１以上のコンピュータネットワークを横切ってデータを送信および受信するためのプロトコルに関し、特に２つのコンピュータ間でデータを転送するために使用される送信制御プロトコル／インターネットプロトコルをハードウェアで構成することに関する。
【０１０９】
送信制御プロトコル／インターネットプロトコル（“ＴＣＰ／ＩＰ”）はコンピュータ（または“ホスト”）が１以上のネットワークを横切って情報を通信することを可能にするプロトコルの組み合わせである。ＴＣＰ／ＩＰ内では、各プロトコルは特別なタスクを割当てられ、プロトコルは典型的に“スタック”と呼ばれる層設計で構成され、即ち高いレベルのプロトコルはそのタスクを実行するために低いレベルのプロトコルを使用する。ＴＣＰとＩＰ間で、ＴＣＰは高いレベルのプロトコルである。さらにＴＣＰ／ＩＰ処理は典型的にソフトウェアで実行される。ＴＣＰとＩＰはそれらに特有のタスクを実行する多数の異なるプロトコルのファミリのうちの２つであるが、ＴＣＰとＩＰはこれらのプロトコルで最もよく知られているので、ＴＣＰ／ＩＰとしてプロトコルのファミリ全体を指すことが慣例になっている。
【０１１０】
インターネットプロトコル（“ＩＰ”）はデータグラムと呼ばれるデータの６４Ｋバイトのパケットを１つのホストから別のホストへの不確実な送信を行うプロトコルである。このプロトコルは送信パケットが失われ、重複しまたは崩壊しているかについて注意していないので不確実である。ＩＰは確実な送信を確実にするために高いレベルのプロトコルに依存する。ＩＰの主要なタスクはアドレス、ルート設定、断片化である。ＩＰの別の仕事は古いパケットをネットワークから除去することである。
【０１１１】
ＩＰはデータパケットの目的地を決定するために、インターネットヘッダ中で伝送されるアドレスを使用する。送信のパスの選択はルート設定と呼ばれる。ルートは静止または動的なテーブルに基づいている。断片化はデータのブロックが大きくてＩＰ下のネットワークに適合できないときに必要とされる。データの大きいブロックがネットワークによる送信のためにＩＰレベルで到着するならば、ＩＰはそれらをネットワークへ送信する前に、ブロックを小さい断片に分解する。データの断片がネットワークから受信されるとき、ＩＰはもとのブロックに対応するようにデータの断片を再構成する。
【０１１２】
転送制御プロトコル（“ＴＣＰ”）はインターネットプロトコルを使用して異なるネットワークを横切って２つのホスト間の確実な接続を行うように設計される。ＴＣＰ／ＩＰで送信されるデータは、根本的なプロトコルにより小さいパケットに分割されても、バイト流であると考えられる。ＴＣＰは損傷、紛失、重複またはインターネット通信システムにより順番になっていない状態で転送されるデータを回復しなければならない。ＴＣＰはまた受信機が送信機により送信されるデータの量を支配する方法を提供し、即ちフローまたは過密の制御を行う。ＴＣＰプロトコルの別の応答性は接続処理であり、ここではＴＣＰは同時に複数の接続を管理する。
【０１１３】
ＴＣＰプロトコルソフトウェアを使用して２つのホストマシン間で転送されるユニットはセグメントと呼ばれる。セグメントは接続の設定、データの転送、データが受信された承認（“ＡＣＫ”）の送信、ウィンドウサイズの規定、接続を閉じるために交換される。各セグメントは２つの部分、即ちヘッダとデータに分割される。ＴＣＰヘッダは識別および制御情報を有し、データの安全な転送を確実にし、フロー制御を管理し、接続を処理するのに必要な情報全てを含んでいる。図１９は、データおよびヘッダのエレメントを有する通常のＴＣＰセグメントを示しており、以下詳しく説明される。
【０１１４】
図１９で見られるように、ソースポートはＴＣＰセグメントが送信ホスト内から発生した場所を識別する１６ビット数であり、目的地ポートはＴＣＰセグメントが受信ホストの目的の場所を識別する１６ビット数である。シーケンス番号はＴＣＰ接続に対する全バイトストリーム内のセグメント中の第１のデータバイトの現在位置を識別する３２ビット数である。承認番号は送信機が受信機から予測する次のデータバイトを識別する３２ビット数である。
【０１１５】
ＨＬＥＮはヘッダの長さであり、ＴＣＰヘッダの全長を特定する４ビットフィールドである。保留として識別されているフィールドは現在未使用の６ビットフィールドであり、将来使用するために保留されている。コードビットはある変数がＴＣＰセッション中に実行されることを送信ホストまたは受信ホストに通知する単一ビットのフラグである。ウィンドウはデータ送信ウィンドウサイズの形態でフロー制御のためにＴＣＰにより使用される１６ビット数であり、受信機が受け取ろうとしているデータの量を送信機に通知する。チェックサムは好ましくはＴＣＰヘッダとデータフィールドの内容に基づいて、ＴＣＰ送信ホストにより計算される１６ビット値である。この３２ビットチェックサムは受信機によって受信機が同じ計算を使用して発生する値と比較される。値が一致するならば、受信機は到着したセグメントが完全であることを確証される。
【０１１６】
ＴＣＰ送信機が受信機に緊急のデータが受信アプリケーションにより可能な限り処理されるべきであることを通知することが必要である場合、緊急ポインタが使用される。１６ビットフィールドがセグメントの緊急のデータの最後のバイトが終了するときを受信機に通知する。付加的な機能を行うため、幾つかの随意選択的なパラメータがＴＣＰ送信機と受信機との間で使用される。選択肢はサイズが変化するので、パッディングフィールドを使用してゼロでＴＣＰヘッダを“パッド”することが必要とされ、それによってセグメントは標準で規定されているように３２ビットワードの境界で終了する。データフィールドは幾つかの状態（例えば逆方向ではデータをもたないＡＣＫセグメント）では使用されないので、この可変長のフィールドはＴＣＰ送信機から受信機へアプリケーションデータを伝送する。
【０１１７】
構内網（“ＬＡＮ”）、都市域ネットワーク（“ＭＡＮ”）または広域網（“ＷＡＮ”）は典型的に１つのコンピュータから別のコンピュータへデータを転送するためにＴＣＰ／ＩＰを使用し、ギガビットイーサネットはこれらの環境の物理的な媒体として広く使用されている。ギガビットイーサネットと類似の技術は一度ワイヤで使用されるとＩＰデータの高速度送信を可能にする。しかしながら従来技術は専門的にソフトウェアでＴＣＰ／ＩＰを実行し、したがって高速度のＴＣＰ／ＩＰプロトコル処理の実行により転送速度の潜在的な増加を使用することができない。それ故、必要なことはソフトウェアとハードウェアの両者でＴＣＰ／ＩＰプロトコルを実行する方法である。
【０１１８】
本発明は複数のデータセグメントを含むデータストリームを送信コンピュータから受信コンピュータへ送信制御プロトコルを使用して送信する方法に関し、この方法は、（ａ）データ構造の複数の変数を初期化し、データ構造は送信コンピュータから受信コンピュータへデータストリームのデータセグメントを送信するために使用され、データ構造の複数の変数は、（１）初期シーケンス番号と（２）送信されるデータセグメントの総数とを含んでおり、（ｂ）複数のマイクロコード駆動処理エンジンを使用してデータセグメントを送信するステップを含んでいる。処理エンジンは好ましくは送信されたセグメントが再送信されるべきか否かを決定する送信コンピュータの再送信エンジンと、送信されたセグメントが受信コンピュータにより受信されたか否かを決定し、送信コンピュータへ承認信号を送信するための受信コンピュータの承認エンジンと、任意の送信されたデータセグメントが順番にならずに受信されたか否かを決定し、順番にならずに受信されたならば、データセグメントを正しい順序に再度順番付けするための受信コンピュータの順序違い検出器とを具備している。データセグメントを送信するステップは、（１）データセグメントが送信コンピュータから受信コンピュータへ送信される速度を決定し、（２）送信されるデータセグメントの１つを識別し、選択されたデータセグメントへシーケンス番号を割当て、選択されたデータセグメントを受信コンピュータへ送信し、（３）選択されたデータセグメントが送信されたときの時間の関数として再送信タイマを使用し、再送信タイマの継続時間値を計算し、（４）再送信タイマの継続時間が受信コンピュータからの選択されたデータセグメントに対する承認信号を受信する前に満了されているか否かを決定し、満了されているならば、データセグメントを再送信し、ステップ（３）に戻り、（５）付加的にデータセグメントが受信コンピュータへ送信されるか否かを決定し、送信されるならば、ステップ（１）−（５）を全てのデータセグメントが適切に送信されるまで反復するこ
とを含んでいる。
【０１１９】
本発明の目的はハードウェアでＴＣＰ／ＩＰプロトコルを実行するために使用される新しいデータ構造（ＴＣＢ）を規定することである。本発明の重要な利点は、全体的にソフトウェアによりＴＣＰ／ＩＰプロトコルを実行する代わりに、例えば特定用途用集積回路（ＡＳＩＣ）チップのような１以上の集積回路チップに含まれるマイクロコード駆動処理エンジンによってＴＣＰ／ＩＰプロトコルを実行するためにＴＣＢデータ構造を使用することによりＴＣＰ／ＩＰプロトコルのデータ転送速度を増加することである。それ故、効率の向上はデータの送信および任意の必要な再送信、データが受信されたことの承認、フローおよび密集制御において実現される。
【０１２０】
本発明の前述の特徴および付随する利点は添付図面を伴った以下の詳細な説明の参照により容易に明白になるであろう。  
図１９は、従来技術のＴＣＰデータセグメントのエレメントを示しているブロック図である。
【０１２１】
図２０は、本発明の好ましい実施形態にしたがって、ＴＣＢデータ構造のメモリのレイアウトを示している。
【０１２２】
図２１は、再順序付けバッファ（ＲＯＢ）更新および処理を示すフローチャートである。
【０１２３】
図２２―２８は、ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される送信変数、受信変数、再順序付け変数を列挙している。
【０１２４】
図２９は、本発明の好ましい実施形態にしたがって、送信コンピュータから受信コンピュータへ、複数のデータセグメントを具備するデータストリームを送信するステップを示すフロー図である。
【０１２５】
図３０は、本発明にしたがって、ＴＣＰ／ＩＰ処理のマイクロコード駆動処理エンジンを有するＡＳＩＣを示すブロック図である。
【０１２６】
図３１は、ファイバチャンネルフレームとギガビットイーサネットフレーム処理が図３０のＡＳＩＣで行われる態様を示している。
【０１２７】
図３２は、ギガビットイーサネットフレームとファイバチャンネルフレーム処理が図３０のＡＳＩＣで行われる態様を示している。
【０１２８】
本発明はソフトウェアマイクロコード処理エンジンによりＴＣＰ／ＩＰを実行する新しいデータ構造（ＴＣＢ）を規定することによりＴＣＰ／ＩＰプロトコルのデータ転送速度を増加する。ＴＣＢは好ましくは予め定められたサイズのメモリの隣接するブロックを占有する。図２０は、本発明の好ましい実施形態にしたがって、ＴＣＢデータ構造のメモリの例示的なレイアウトを示している。各ＴＣＢはそれにメモリの３つの隣接ブロックへのポインタを関連させ、それは“送信、保留および承認”保留待ち行列（ＴＸＰ）、“受信されＴデータセグメント処理”保留待ち行列（ＲＸＰ）、これらが順番になっていない状態で受信された場合に、データセグメントを再度順序付けするバッファを記憶している。
【０１２９】
さらに、全てのＴＣＰセッションにより共有される送信待ち行列（ＴＸ）と受信待ち行列（ＲＸ）と呼ばれる２つの待ち行列が存在する。送信待ち行列は受信ホストへ送信されるデータへのポインタを記憶し、Ｒｘ待ち行列は受信ホストにより受信されておりメモリでの処理を待機しているデータへのポインタを記憶している。送信待ち行列は送信保留待ち行列へのポインタに維持されるポインタ、即ち書込みインデックス―ＴｘＱＷｒＩｎｄｅｘ、読取インデックス―ＴｘＱＲｄＩｎｄｅｘ、再送信インデックス―ＴｘＱＲｔｘＩｎｄｅｘを含んでいる。最後に、受信待ち行列は受信待ち行列の開始を指すように維持されているポインタを含んでいる。
【０１３０】
送信保留待ち行列はメモリの隣接ブロックであり、そのサイズは管理されることができる保留エントリの最大番号を決定する。この待ち行列は円形の待ち行列として維持される。各エントリは実際のデータセグメントへのポインタと、データセグメントの総数と、開始シーケンス番号とからなる。メモリはデータが６４バイトチャンクで読み取られるならば最良に使用され、各６４バイトのチャンクは４ほどのエントリを含んでいる。この待ち行列にアクセスするため、ＲｄＩｎｄｅｘ、ＲｔｘＩｎｄｅｘ、ＷｒｔＩｎｄｅｘとして識別される３つのポインタが維持される。最初に、これらのポインタはゼロを指している。
【０１３１】
ＴＸＰの機能は以下のステップにより説明される。  
１．データブロックがＦＣ層から受信され、送信されようとするとき、ＷｒＩｎｄｅｘにより与えられる送信保留待ち行列位置に置かれ、その後ＷｒＩｎｄは更新される。  
２．ＴＣＰセッションのウィンドウサイズが１以上のデータセグメントを送信するのに十分であるとき、データセグメントはＲｄＩｎｄｅｘ位置から開始して取られ、ＴＸ待ち行列に置かれる。ＲｄＩｎｄｅｘをその後更新される。  
３．承認が受信されたとき、承認によりカバーされているこれらのデータセグメント以上にＲｄＩｎｄｅｘポインタをインクリメントする。  
４．ミスした承認のためにタイムアウトが経験されるときにはいつでも、ＲｘｔＩｎｄｅｘポインタにより示されるデータセグメントをＴＸ待ち行列におき、次のＲＴＴ値でタイマを再度初期化する。（指数関数的なバックオフ方式は再送信が同一のデータセグメントで行われる度に使用される。）  
ＲＸＰの機能を以下のステップにより説明する。  
１．特定のＴＣＢを意味するように識別されたＲｘ待ち行列の任意のデータセグメントは特定のＴＣＢの受信保留待ち行列（ＲＸＰ）へ置かれるべきである。受信シーケンス変数は、受信されたデータが順番になっているならば更新されなければならない。  
２．受信保留待ち行列のアイテムはこの特定のＴＣＰセッションでデータを記憶するが、これらは順番になっていない。またデータセグメントの幾つかはＴＣＰがＦＣデータブロックを分解するので、ＦＢデータブロックの部分だけを含んでいる。  
３．受信保留待ち行列中のアイテムの再順序付けが行われなければならない。パケットを再順序付けするために、受信されるパケットは連結されたリストの形態で記憶される。シーケンス番号はキーとして使用される。パケットが順番に到着しないとき、これらはシーケンス番号の昇順に記憶される。図２１は、本発明にしたがって、再順序付けバッファ（ＲＯＢ）更新および処理を示すフローチャートである。  
４．さらに多くのデータが適切な順序で得られるときはいつでも、ＡＣＫは受信される付加的なデータを承認するために生成されなければならない。  
５．新しいウィンドウはメモリにある受信されたデータの量と、既にＦＣエンドへ転送されている量に基づいて計算されなければならない。したがってＦＣデータブロックが受信機に送信されるときにはいつでも、この情報はＡＣＫの次の送信でリリースされるようにＴＣＰのウィンドウを更新することに使用されるべきである。メモリのこれらの隣接するブロックはＴＣＢが実際のＴＣＰセッションをセットアップしたときに割当てられた。
【０１３２】
図２２―２８は、ＴＣＰプロトコルの実行に必要とされる複数のアルゴリズムで使用される好ましい送信変数、受信変数、再順序付け変数を列挙している。図２９は、本発明の好ましい実施形態にしたがって、送信コンピュータから受信コンピュータへ、複数のデータセグメントを含むデータストリームを送信するステップ40を示すフロー図である。
【０１３３】
図２２―２８に示されているように、３つのタイマ、即ち再送信タイマ、アイドルタイマ、持続タイマが存在する。再送信タイマが終了するときにはいつでも、再送信プロセスが動作するようにＴＣＢへのポインタのエントリをタスク待ち行列に置くべきである。アイドルタイマはアイドルセッションをチェックすることに使用され、タイマが終了するならば、ダミーパケットがセッションを生きた状態に維持するために送信される。
【０１３４】
往復遅延を計算するために必要とされる往復ＴＣＢ変数は、値―１６ビット値（ｒｘｔｃｕｒ）、指数関数的バックオフ―１６ビット値（ｒｘｔｓｈｉｆｔ）のログ（２）、往復時間―１６ビット値（ｒｔｔ）、ルート特性（ｒｔｔｍｉｎ）から計算される最小のＲＴＴ値―１６ビット値、現在のＲＴシーケンス番号―３２ビット値（ｒｔｓｅｑ）、スムースにされた往復時間―１６ビット値―（ｓｒｔｔ）、往復の変数―１６ビット値（ｒｔｔｖａｒ）を含んでいる。
【０１３５】
ＴＣＰおよびＩＰヘッダパラメータは、ＩＰＤＡ（３２ビット値）ＩＰ目的地アドレス、サービスのタイプを特定するＩＰ  Ｄｉｆｆｓｅｒｖ（８ビット）、ＴＣＰソースと目的地ポート番号を記憶するためのソースおよび目的地ポート値（１６ビット値）を含んでいる。
【０１３６】
送信シーケンス変数は、最も古い非認証のシーケンス番号を示す送信非認証（３２ビット値）、次の送信に使用されるシーケンス番号を示す次の送信（３２ビット値）、送信されるパケットに幾つかの緊急データが存在することを他のエンドに通信するために使用される緊急データが存在するデータの１６ビットオフセットを示す送信緊急ポインタ（３２ビット値）、再送信に使用される送信最大―送信された最高シーケンス番号（３２ビット値）、初期シーケンス番号（３２ビット）値を含んでいる。受信シーケンス変数は、受信ウィンドウ（１６ビット値）、次の受信（３２ビット値）、受信緊急ポインタ（３２ビット値）、初期受信シーケンス番号（３２ビット値）を含んでいる。
【０１３７】
受信コンピュータが図２９に示されているプロセス40に従って受信コンピュータへデータストリームを送信することを望むとき、ＴＣＰセッションを設定する。ステップ41で、ＴＣＢ変数はソフトウェアにより、図２２―２８で示されていることにしたがって、好ましくは送信コンピュータで開始される。例えば、有効フラグ変数はこれが有効なＴＣＢであるか否かを示し、ＴＣＢが割当てられるとき、このフラグは１に設定される。しかしながら、先の接続から存在するあるフィールドをクリアことに注意しなければならない。さらに、接続状態変数はＴＣＰ層の現在の状態を示し、次の状態、即ちＳＴＡＴＥ＿ＣＬＯＳＥＤ、ＳＴＡＴＥ＿ＬＩＳＴＥＮ、ＳＴＡＴＥ＿ＳＹＮ＿ＳＥＮＴ、ＳＴＡＴＥ＿ＳＹＮ＿ＲＥＣＥＩＶＥＤ、ＳＴＡＴＥ＿ＥＳＴＡＢＬＩＳＨＥＤ、ＳＴＡＴＥ＿ＣＬＯＳＥ＿ＷＡＩＴ、ＳＴＡＴＥ＿ＦＩＮ＿ＷＡＩＴ１、ＳＴＡＴＥ＿ＣＬＯＳＩＮＧ、ＳＴＡＴＥ＿ＬＡＳＴ＿ＡＣＫ、ＳＴＡＴＥ＿ＦＩＮ＿ＷＡＩＴ２、ＳＴＡＴＥ＿ＴＩＭＥ＿ＷＡＩＴのうちの１つである。接続状態はＴＣＰ層により変更され、特定のＴＣＰセッションの状態を理解するために全ての他のブロックにより読み取られる。開始される他の変数は送信されるセグメントの初期シーケンス番号と、送信されるセグメントの総数に関するものである。
【０１３８】
図２９を再度参照すると、１つのＴＣＢデータ構造はステップ42で開始され、データストリームのデータセグメントは複数のマイクロコード駆動処理エンジンを使用して、ステップ43-48にしたがって送信される。マイクロコード駆動エンジンは送信されたセグメントが再送信されるべきであるか否かを決定する前記送信コンピュータの再送信エンジンと、送信されたセグメントが前記受信コンピュータにより受信されたか否かを決定し、承認信号を前記送信コンピュータへ送信するための前記受信コンピュータの承認エンジンと、任意の前記送信されたデータセグメントが順番になっていない状態で受信されたか否かを検出し、順番になっていない状態で受信されたならば、前記データセグメントをそれらの正しい順序に再度順序付けするための前記受信コンピュータの順序違い検出器とを具備している。
【０１３９】
データセグメントが送信される速度はステップ43で決定される。密集制御エンジンはこの速度の決定に使用され、マイクロコード駆動エンジンの１つであり、前述の受信シーケンス変数は計算され、使用される。密集制御方式全体はマイクロコードで実行される。ユーザは環境にしたがってこれを構成する。現在の構成を以下説明する。ＲＴＯが満了するとき、過密ウィンドウは２＊ＭＳＳ（最大のセグメントサイズ）に変換される。スロースタートプロセスを使用して回復が行われ、ここでは過密ウィンドウはＡＣＫが受信される毎に二重にされる。重複のＡＣＫパケットは過密ウィンドウサイズを２＊ＭＳＳに変更することに使用される。第１のセグメントは再送信される。全てのこれらのプロセスはマイクロコード駆動エンジンのハードウェアで行われる。
【０１４０】
ステップ44で、データセグメントは送信されるように識別され、シーケンス番号はデータセグメントに割当てられ、データセグメントは送信される。このステップでは、前述の送信シーケンス変数は計算され使用され、送信保留待ち行列が使用される。例えば新しいデータブロックが低いプロトコル層から到着するときはいつでも、１以上のノードはデータ送信を可能にするために送信保留待ち行列に付加される。ノードの付加はこれらのステップからなる。  
１．（ＷｒｔＩｎｄｅｘ＋１）％ＭＡＸ＿ＴＸ＿ＰＥＮＤＩＮＧ＿ＥＮＴＲＩＥＳ＝ＲｔｘＩｎｄｅｘであるならば、これはオーバーフロー状態である。  
２．書込みのためのメモリオフセット＝待ち行列ベースポインタ＋（（ＷｒｔＩｎｄｅｘ＊１６）／６４）＊６４である。  
３．前述のオフセットを使用して６４バイトブロック読取を行う。  
４．付加オフセット＝（（ＷｒｔＩｎｄｅｘ＊１６）％６４）である。  
５．データブロックへのポインタと全長は付加オフセットを使用して付加されることができる。  
６．“書込みのためのメモリオフセット”を使用して６４バイトブロックを書込む。  
７．インクリメントＷｒｔＩｎｄｅｘ＝（ＷｒｔＩｎｄｅｘ＋１）％ＭＡＸ＿ＴＸ＿ＰＥＮＤＩＮＧ＿ＥＮＴＲＩＥＳである。
【０１４１】
ノードの消去は以下のステップからなる。  
１．ＲｄＩｎｄｅｘ＝＝ＷｒｔＩｎｄｅｘならば、ブロックは空であり、読み取るものはない。  
２．読取るためのメモリオフロード＝待ち行列ベースポインタ＋（（ＲｄＩｎｄｅｘ＊１６）／６４）＊６４である。  
３．前述のオフセットを使用して６４バイトブロック読取を行う。  
４．読取オフセット＝（（ＲｄＩｎｄｅｘ＊１６）％６４）である。  
５．データブロックポインタと全長を読取る。  
６．このノードを消去する動作が取られるならば、ＲｄＩｎｄｅｘは変更されなければならない。  
７．ＲｄＩｎｄｅｘ＝（ＲｄＩｎｄｅｘ＋１）％ＭＡＸ＿ＴＸ＿ＰＥＮＤＩＮＧ＿ＥＮＴＲＩＥＳである。
【０１４２】
セグメントが一度送信されると、再送信エンジンは再送信変数の計算と、ステップ45における再送信タイマの設定のために使用される。再送信タイマの再送信アルゴリズムを以下説明する。セグメントが送信される度に、ＴＣＰエンジンはタイマをスタートし、承認を待機する。タイマが承認の受信前に満了するならば、ＴＣＰエンジンはセグメントが失われ、または崩壊されることを想定しそれを再送信する。再送信タイマ値は次式のように計算される。  
ＳＲＴＴ＝０．９＊ＯＬＤ＿ＳＲＴＴ＋０．１＊ＭＲＴＴ  
ＲＴＯ＝２＊ＳＲＴＴ  
ＲＴＯ→再送信タイムアウトである場合には、ＳＲＴＴ→スムースにされた往復時間である。  
ＭＲＴＴ→測定された往復時間である。
【０１４３】
全てのこれらの計算はハードウェアのプロトコル処理エンジンで行われる。ステップ46で、再送信時間がＡＣＫが選択されたセグメントで受信される前に満了するか否かを決定し、その結果がイエスならば、セグメントはステップ47で再送信され、ステップ45と46が反復される。ノーであるならばＡＣＫは送信される。さらに、データストリームの全てのデータセグメントがステップ43で送信されたか否かが決定され、ノーであるならば、ステップ43-48が全てのデータセグメントが適切に送信されるまで反復される。
【０１４４】
データセグメントの承認機能はマイクロコード駆動処理エンジンで行われる。ＡＣＫがＴＣＢで受信されるときはいつでも、送信ウィンドウパラメータは変更し、付加的なウィンドウ空間は利用可能になる。ＡＣＫが受信されるたびに、スライディングウィンドウ（以下説明する）は移動され、パケットの次のステップが送信される。セグメントを適切に受信するとき（チェックサムがＯＫであるならば）、ＡＣＫパケット更新されたシーケンス番号で送信される。受信バッファがフルであるならば、ウィンドウサイズ０を有するＡＣＫパケットが送信される。
【０１４５】
ＴＸＰとＡＣＫはそれぞれ次のデータセグメントがメモリに記憶される場所の追跡を維持し、これは送信待ち行列（ＴＸ）に置かれる次のデータセグメントであり、これはＡＣＫを待機しながら、ＴＣＰセッションがタイムアウトを受ける場合に再試行される次のデータセグメントである。以下の動作はＡＣＫ受信で取られる。  
１．ＡＣＫが受信されるとき、幾つかのデータセグメントは適切に承認された全てのデータセグメントを超えてＲｔｘＩｎｄｅｘを移動することにより送信保留待ち行列から除去されなければならない。  
２．送信シーケンス変数は最高のシーケンス番号承認を使用し、新しく示されたウィンドウサイズを使用して適切に更新されなければならない。  
３．ＡＣＫを伴ったデータが存在するならば、（データが順番になっているならば）受信シーケンス変数も更新されるべきであり、データセグメントへメモリに記憶されるべきであり、そのポインタはＴＣＢのＲＸＰ待ち行列に付加されるべきである。
【０１４６】
データセグメントの再送信により、１以上のセグメントは順序になっておらずに受信される。順序違い検出器はこのような状態で使用されるマイクロコード駆動処理エンジンである。例えば、以下のようにそれらのバイトストリームを有する７つのセグメントを仮定する。  
【数１】
2010016838.tif 000037
【０１４７】
セグメント１は受信機に到着し、それはＡＣＫ＝１０００とＷＩＮ＝１６００（ウィンドウサイズ１６００）を送信することによりそれを承認する。ＡＣＫ＋ＷＩＮ＝２６００なので、送信機はセグメント２、３、４を送信できる。セグメント２と３は送信される。セグメント３は到着するがセグメント２は遅延されている。受信機はＡＣＫ＝１０００とＷＩＮ＝１６００を有する別のＡＣＫセグメントを送信する。送信機はセグメント４を送信する。セグメント４は到着するがセグメント２は依然として未決定である。受信機は再びＡＣＫ＝１０００とＷＩＮ＝１６００を送信する。しかしながら、ＡＣＫ＋ＷＩＮよりも大きい２８００へシーケンス番号を送信するので、送信機はセグメント５を送信できない。送信機はセグメント５がウィンドウの残りの部分を使用するためさらに小さいセグメントへ分割される。セグメント２は受信機に到達し、受信機は新しいＡＣＫ値を知らせる。遅延されたセグメント２は受信機に到達し、受信機はＡＣＫ＝２４００とＷＩＮ＝１６００を送信し、送信機が４０００まで送信することを可能にする。
【０１４８】
シーケンス番号の最初の値は接続設定シーケンス期間に交換される。前述のこのフロー制御機構は通常、スライディングウィンドウプロトコルと呼ばれる。パケットが順序違いで受信されるとき、これは再順序付けバッファに記憶される。これらのパケットは分類され外部メモリに記憶される。
【０１４９】
ＴＣＰエンジンのハードウェア実行はプロトコル処理エンジンのセットを使用して行われ、これはマイクロコード駆動である。処理の初期パラメータは外部ＣＰＵによりソフトウェアによってセットアップされる。アルゴリズムの計算は前述のマイクロコード駆動エンジンを使用して行われる。この方法は変更に対してフレキシブル性を与える。
【０１５０】
図３０は、本発明にしたがって、ＴＣＰ／ＩＰ処理のマイクロコード駆動処理エンジンを有するＡＳＩＣを示すブロック図である。
【０１５１】
図３１は、ファイバチャンネルフレームとギガビットイーサネットフレーム処理が図３０のＡＳＩＣで行われる態様を示している。
【０１５２】
図３２は、ギガビットイーサネットフレームとファイバチャンネルフレーム処理が図３０のＡＳＩＣで行われる態様を示している。
【０１５３】
したがって、本発明は１実施形態で、複数のデータセグメントを含むデータストリームを送信コンピュータから受信コンピュータへ送信制御プロトコルを使用して送信する方法に関し、この方法は、データ構造の複数の変数を初期化し、データ構造は送信コンピュータから受信コンピュータへデータストリームのデータセグメントを送信するために使用され、データ構造中の複数の変数は、初期シーケンス番号と送信されるデータセグメントの総数とを含んでいる。本発明の方法はさらに、複数のマイクロコード駆動処理エンジンを使用してデータセグメントを送信するステップを含み、処理エンジンは送信されたセグメントが再送信されるべきか否かを決定する送信コンピュータ中の再送信エンジンと、送信されたセグメントが受信コンピュータにより受信されたか否かを決定し、送信コンピュータへ承認信号を送信するための受信コンピュータ中の承認エンジンと、データセグメントが送信コンピュータから受信コンピュータへ送信される速度を決定する過密制御エンジンと、任意の送信されたデータセグメントが順番でなく受信されたか否かを決定し、順番でなく受信されたならば、データセグメントを正しい順序に再度順番付けするための受信コンピュータ中の順序違い検出器とを具備している。データセグメントを送信するステップは、（１）データセグメントが送信コンピュータから受信コンピュータへ送信される速度を決定し、（２）送信されるデータセグメントの１つを識別し、選択されたデータセグメントへシーケンス番号を割当て、選択されたデータセグメントを受信コンピュータへ送信し、（３）選択されたデータセグメントが送信されたときの時間の関数として再送信タイマを初期化し、再送信タイマの継続時間値を計算し、（４）再送信タイマの継続時間が受信コンピュータからの選択されたデータセグメントの承認信号を受信する前に満了されているか否かを決定し、満了されているならば、そのデータセグメントを再送信し、ステップ（３）に戻り、（５）付加的にデータセグメントが受信コンピュータへ送信されるか否かを決定し、送信されるならば、ステップ（１）−（５）を全てのデータセグメントが適切に送信されるまで反復するステップを含んでいる。
【０１５４】
１実施形態では、マイクロコード駆動再送信エンジンは再送信タイマ値を計算するための再送信タイマアルゴリズムを具備し、そのアルゴリズムはスムースにされた往復時間値および測定された往復時間値に基づいている。
【０１５５】
別の実施形態では、マイクロ駆動承認エンジンは少なくとも１つのアルゴリズムを具備し、その少なくとも１つのアルゴリズムはデータセグメントが受信コンピュータにより適切に受信されるときに承認信号を送信し、スライディングウィンドウを移動し、送信コンピュータが承認信号を受信するときデータストリーム中の次のデータセグメントの送信を命令し、承認信号を送信するように構成されており、ウィンドウサイズのヘッダエレメントは受信バッファが満杯であるときにはゼロである。
【０１５６】
別の実施形態では、マイクロコード駆動過密制御エンジンは複数のアルゴリズムを具備し、その複数のアルゴリズムは各承認信号が送信コンピュータにより受信されるとき過密ウィンドウのサイズを二倍にするためのスロースタートアルゴリズムと、再送信タイマの期間が満了するとき過密ウィンドウのサイズを変更するアルゴリズムと、重複した承認信号が送信コンピュータにより受信されるとき過密ウィンドウのサイズを変更するアルゴリズムと、最大のセグメントサイズに応じるアルゴリズムとを含んでいる。
【０１５７】
さらに別の実施形態では、マイクロコード駆動の順序違い検出器はスライディングウィンドウプロトコルを実行するフロー制御アルゴリズムを具備している。
【０１５８】
１実施形態では、送信制御プロトコルを使用して、複数のデータセグメントを有するデータストリームを送信コンピュータから受信コンピュータへ送信する方法が開示されている。この方法は、データ構造中の複数の変数を初期化し、初期化された変数を処理しこれらの変数を更新するためのアルゴリズムをそれぞれ実行する複数のマイクロコード駆動処理エンジンを使用して、データセグメントを送信するために使用されるステップを含んでいる。
【０１５９】
先の説明で示したハードウェアでＴＣＰ／ＩＰプロトコルを実行する方法の実行例は本発明の最良のモードの説明として選択された。前述の本発明の好ましい実施形態は本発明の原理の説明であり、本発明の技術的範囲を説明した特定の実施形態に限定するものではない。したがって、本発明の好ましい実施形態を示し説明したが、種々の変更は本発明の技術的範囲を逸脱せずに行われることができることが認識されるであろう。
【０１６０】
以上、本発明は幾つかの好ましい実施形態に関して説明したが、変更、交換、等化は本発明の技術的範囲内で可能である。本発明の方法および装置を実行するための多数の代わりの方法が存在することにも注意すべきである。それ故、以下の特許請求の範囲は本発明の技術的範囲内であるとしてこのような変更、交換、等化を全て含むものとして解釈されることを意図している。
【手続補正２】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2010016838.tif 000038
【図２】
2010016838.tif 000039
【図３】
2010016838.tif 000040
【図４】
2010016838.tif 000041
【図５】
2010016838.tif 000042
【図６】
2010016838.tif 000043
【図７】
2010016838.tif 000044
【図８】
2010016838.tif 000045
【図９】
2010016838.tif 000046
【図１０】
2010016838.tif 000047
【図１１】
2010016838.tif 000048
【図１２Ａ】
2010016838.tif 000049
【図１２Ｂ】
2010016838.tif 000050
【図１３】
2010016838.tif 000051
【図１４】
2010016838.tif 000052
【図１５】
2010016838.tif 000053
【図１６】
2010016838.tif 000054
【図１７】
2010016838.tif 000055
【図１８】
2010016838.tif 000056
【図１９】
2010016838.tif 000057
【図２０】
2010016838.tif 000058
【図２１】
2010016838.tif 000059
【図２２】
2010016838.tif 000060
【図２３】
2010016838.tif 000061
【図２４】
2010016838.tif 000062
【図２５】
2010016838.tif 000063
【図２６】
2010016838.tif 000064
【図２７】
2010016838.tif 000065
【図２８】
2010016838.tif 000066
【図２９】
2010016838.tif 000067
【図３０】
2010016838.tif 000068
【図３１】
2010016838.tif 000069
【図３２】
2010016838.tif 000070
【手続補正書】
【提出日】平成21年10月29日(2009.10.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ネットワークに結合された第１のホストコンピュータに関連し、ネットワークによりデータの交換を行う回路において、前記ネットワークはまた第２のホストコンピュータに結合され、前記回路は、
ＴＣＰプロトコルを使用して送信され、前記第１のホストコンピュータから前記第２のホストコンピュータへの双方向データフローに関連する第１のデータの送信を行い、前記第１のホストコンピュータに関連され、前記ＴＣＰプロトコルを使用して前記第１のデータの送信に関連する送信補助パラメータを記憶するように構成されている送信を行う手段と、
前記第２のホストコンピュータから前記第１のホストコンピュータへ前記ＴＣＰプロトコルを使用して送信され、前記双方向データフローに関連する第２のデータの受信を行い、前記第１のホストコンピュータに関連され、前記ＴＣＰプロトコルを使用して前記第２のデータの前記受信に関連する受信補助パラメータを記憶するように構成されている受信を行う手段と、
前記第２のホストコンピュータから送信され受信された承認メッセージに応答して複数のパラメータを更新する手段とを具備し、前記複数のパラメータは少なくとも再送信タイムアウト値と、スムースにされた往復時間と、測定された往復時間とを含んでおり、前記更新する手段は前記受信した承認メッセージの情報を少なくとも用いて前記更新を実行し、
前記回路はさらに、
前記第２のデータの順番に並んでいないパケットを記憶する１以上のバッファを具備し、前記送信を行う手段と前記受信を行う手段は前記回路による前記第１のデータの送信と前記第２のデータの受信とを同時に行うように使用され、前記受信補助パラメータは前記順番に並んでいないパケットを少なくとも部分的に再順序付ける少なくとも１以上の再順序付けパラメータを含んでいる回路。
【請求項２】
前記送信を行なう手段と前記受信を行なう手段は、前記第１のホストコンピュータのバスに取外し可能に結合されるように構成されたネットワークインターフェースカード（ＮＩＣカード）に構成されている請求項１記載の回路。
【請求項３】
順序付けされたパケットを生成するために、１以上の順序付けパラメータを使用して、正しいパケットの番号を有するパケットが第１のホストコンピュータに到着する前に、前記第１のホストコンピュータで受信される前記順番に並んでいないパケットを少なくとも部分的に順序付ける手段をさらには含んでいる請求項１記載の回路。
【請求項４】
前記順番に並んでいないパケットを少なくとも順序付ける前記手段は、前記１以上のバッファに前記順序付けされたパケットを記憶するようにさらに構成されており、前記順序付けされたパケットは、他のパケットと組立てられる前には前記第１のホストコンピュータのホストソフトウェアに送信されない請求項３記載の回路。
【請求項５】
コンピュータネットワークを介して結合されている第１のホストコンピュータと第２のホストコンピュータとの間で双方向データフローに関連する送信データを送信する方法において、
前記送信データの前記送信に使用される送信補助パラメータを第１の制御ブロックに記憶し、前記第１の制御ブロックは前記第１のホストコンピュータ中に構成され、前記双方向データフローに関連され、前記送信データの送信はＴＣＰプロトコルにしたがって行われ、
前記第１のホストコンピュータから前記第２のコンピュータへの前記送信データの所定部分に関する送信リクエストのサービスを行うために前記第１の制御ブロック中の前記送信補助パラメータの使用を含んでおり、前記送信リクエストの前記サービスは、前記第１のホストコンピュータによる前記第２のホストコンピュータからの前記双方向データフローに関連するデータの受信に関する受信リクエストのサービスと同時に行われ、前記受信データは前記第１のホストコンピュータ中に構成された第２の制御ブロックに記憶されている受信補助パラメータを使用して受信され、前記受信データは前記ＴＣＰプロトコルにしたがって受信され、
前記第２のホストコンピュータから送信され受信された承認メッセージに応答して複数のパラメータを更新し、前記複数のパラメータは少なくとも再送信タイムアウト値と、スムースにされた往復時間と、測定された往復時間とを含んでおり、前記更新は前記受信した承認メッセージの情報を少なくとも用いて前記更新を実行し、
前記受信データの順番に並んでいないパケットを１以上のバッファに記憶し、前記受信補助パラメータは前記順番に並んでいないパケットを少なくとも部分的に再順序付ける少なくとも１以上の再順序付けパラメータを含んでいる方法。
【請求項６】
ネットワークを介して結合された第１のホストコンピュータに関連し、ネットワークを介してデータの交換を促す回路において、前記ネットワークは第２のホストコンピュータに結合され、前記回路は、
前記第１のホストコンピュータから前記第２のホストコンピュータへの双方向データフローに関連する送信データをＴＣＰプロトコルを使用して送信するために使用される送信補助パラメータを記憶し、前記第１のホストコンピュータ中に構成されている記憶手段と、
前記送信補助パラメータを使用して、前記送信データの所定の部分に関する送信リクエストをサービスし、前記送信リクエストの前記サービスは前記第１のホストコンピュータにより前記第２のコンピュータからの前記双方向データフローに関連されるデータの受信に関する受信リクエストのサービスと同時に行われ、前記受信データは受信補助パラメータを記憶する手段中で追跡されるパラメータを使用して受信され、受信補助パラメータを記憶する前記手段はまた前記第１のホストコンピュータ中に構成され、前記受信データは前記ＴＣＰプロトコルにしたがって受信される、送信リクエストをサービスする手段と、
前記第２のホストコンピュータから送信され受信された承認メッセージに応答して複数のパラメータを更新する手段とを具備し、前記複数のパラメータは少なくとも再送信タイムアウト値と、スムースにされた往復時間と、測定された往復時間とを含んでおり、前記更新する手段は前記受信した承認メッセージの情報を少なくとも用いて前記更新を実行し、
前記回路はさらに、
前記受信データの順番に並んでいないパケットを記憶する１以上のバッファを具備し、前記受信補助パラメータは前記順番に並んでいないパケットを少なくとも部分的に再順序付ける少なくとも１以上の再順序付けパラメータを含んでいる回路。
【請求項７】
ネットワークに結合された第１のホストコンピュータに関連し、ネットワークを介してデータの交換を行う回路において、前記ネットワークは第２のホストコンピュータに結合され、前記回路は、
前記第１のホストコンピュータから前記第２のホストコンピュータへの双方向データフローに関係する送信データをＴＣＰプロトコルを使用して送信するために使用される送信補助パラメータを記憶するように構成され、前記第１のホストコンピュータ中に構成される第１の制御ブロックと、
前記送信補助パラメータを使用して、前記送信データの所定の部分に関する送信リクエストをサービスするように構成され、前記送信リクエストの前記サービスは前記第１のホストコンピュータにより前記第２のコンピュータからの前記双方向データフローに関連されるデータの受信に関する受信リクエストのサービスと同時に行われ、前記受信データは第２の制御ブロックで追跡されたパラメータを使用して受信され、前記第２の制御ブロックは前記第１のホストコンピュータ中に構成され、前記受信データは前記ＴＣＰプロトコルにしたがって受信され、前記ＴＣＰプロトコルを使用して前記受信データの前記受信に関連する受信補助パラメータを記憶するように構成されている回路と、
前記第２のホストコンピュータから送信され受信された承認メッセージに応答して複数のパラメータを更新する手段とを具備し、前記複数のパラメータは少なくとも再送信タイムアウト値と、スムースにされた往復時間と、測定された往復時間とを含んでおり、前記更新する手段は前記受信した承認メッセージの情報を少なくとも用いて前記更新を実行し、
前記ネットワークを介してデータの交換を行う回路はさらに、
前記受信データの順番に並んでいないパケットを記憶する１以上のバッファを具備し、前記受信補助パラメータは前記順番に並んでいないパケットを少なくとも部分的に再順序付ける少なくとも１以上の再順序付けパラメータを含んでいる回路。
【請求項８】
コンピュータネットワークを介して結合されている第１のホストコンピュータと第２のホストコンピュータとの間で双方向データフローに関連する受信データで第１のホストコンピュータで受信する方法において、
前記第１のホストコンピュータで受信された前記双方向データフローに関連するパケットの第１のセットの受信に応答して、予測されたシーケンス番号パラメータを確認し、前記予測されたシーケンス番号パラメータは前記第１のホストコンピュータ中に構成された第１の制御ブロックに記憶され、前記第１の制御ブロックはＴＣＰプロトコルを使用して前記受信データを受信するために使用される受信補助パラメータを記憶するように構成されており、
前記予測されたシーケンス番号パラメータが、前記第１のホストコンピュータで受信されたパケットの第１のセットが順序付けられたパケットを表していることを示しているならば、前記第１の制御ブロックにおいて前記予測されたシーケンスパラメータを更新し、
前記第１のホストコンピュータはまたＴＣＰプロトコルを使用して、前記第１のホストコンピュータから前記第２のコンピュータへ前記双方向データフローに関連される送信データを送信するように構成され、前記送信データの一部を送信するリクエストはパケットの前記第１のセットの受信と同時にサービスされ、前記送信データの送信に使用される送信補助パラメータは、前記受信補助パラメータが前記第１の制御ブロックに記憶されるのと同時に第２の制御ブロックに記憶され、前記第２の制御ブロックは前記第１のホストコンピュータ中に構成され、前記双方向データフローに関連され、
前記第２のホストコンピュータから送信され受信された承認メッセージに応答して複数のパラメータを更新し、前記複数のパラメータは少なくとも再送信タイムアウト値と、スムースにされた往復時間と、測定された往復時間とを含んでおり、前記更新は前記受信した承認メッセージの情報を少なくとも用いて前記更新を実行し、
前記受信データの順番に並んでいないパケットを１以上のバッファに記憶し、前記受信補助パラメータは前記順番に並んでいないパケットを少なくとも部分的に再順序付ける少なくとも１以上の再順序付けパラメータを含んでいる受信方法。
【請求項９】
コンピュータネットワークを介して結合されている第１のホストコンピュータと第２のホストコンピュータとの間で双方向データフローに関連する受信データを受信する方法において、
第１の制御ブロックにおいて前記受信データの前記受信に使用される受信補助パラメータを記憶し、前記第１の制御ブロックは前記第１のホストコンピュータ中に構成され、前記双方向データフローに関連され、前記受信データの前記受信はＴＣＰプロトコルにしたがって行われ、
前記第２のホストコンピュータから前記第１のホストコンピュータで前記受信データの所定部分を受信することを促進するために前記第１の制御ブロック中の前記受信補助パラメータを使用し、前記受信データの前記所定部分の前記受信は、前記第１のホストコンピュータから前記第２のホストコンピュータへの前記双方向データフローに関連される送信データに関する送信リクエストのサービスと同時に行われ、前記送信データは前記第１のホストコンピュータ中に構成された第２の制御ブロックに記憶されている送信補助パラメータを使用して送信され、前記送信データは前記ＴＣＰプロトコルにしたがって送信され、
前記第２のホストコンピュータから送信され受信された承認メッセージに応答して複数のパラメータを更新し、前記複数のパラメータは少なくとも再送信タイムアウト値と、スムースにされた往復時間と、測定された往復時間とを含んでおり、前記更新は前記受信した承認メッセージの情報を少なくとも用いて前記更新を実行し、
前記受信データの順番に並んでいないパケットを１以上のバッファに記憶し、前記受信補助パラメータは前記順番に並んでいないパケットを少なくとも部分的に再順序付ける少なくとも１以上の再順序付けパラメータを含んでいる方法。
【請求項１０】
ネットワークに結合された第１のホストコンピュータに関連し、ネットワークを介してデータの交換を行う回路において、前記ネットワークは第２のホストコンピュータに結合され、前記回路は、
前記第２のホストコンピュータから前記第１のホストコンピュータにおいて双方向データフローに関係する受信データをＴＣＰプロトコルの使用により受信するために使用される受信補助パラメータを記憶するように構成され、前記第１のホストコンピュータに構成される第１の制御ブロックと、
前記受信補助パラメータを使用して、前記受信データの所定の部分を受信するように構成され、前記受信データの前記所定の部分の前記受信は、前記第１のホストコンピュータから前記第２のコンピュータへの前記双方向データフローに関連される送信データに関する送信リクエストのサービスと同時に行われ、前記送信データは第２の制御ブロックに記憶されたパラメータを使用して送信され、前記第２の制御ブロックはまた前記第１のホストコンピュータ中に構成され、前記送信データは前記ＴＣＰプロトコルにしたがって送信される回路と、
前記第２のホストコンピュータから送信され受信された承認メッセージに応答して複数のパラメータを更新する手段とを具備し、前記複数のパラメータは少なくとも再送信タイムアウト値と、スムースにされた往復時間と、測定された往復時間とを含んでおり、前記更新する手段は前記受信した承認メッセージの情報を少なくとも用いて前記更新を実行し、
前記ネットワークを介してデータの交換を行う回路はさらに、
前記受信データの順番に並んでいないパケットを記憶する１以上のバッファを具備し、前記受信補助パラメータは前記順番に並んでいないパケットを少なくとも部分的に再順序付ける少なくとも１以上の再順序付けパラメータを含んでいる回路。
【請求項１１】
第１のホストコンピュータへ結合されたネットワークインターフェースカード（ＮＩＣカード）上で、第１のホストコンピュータと第２のホストコンピュータに結合されたネットワークを介してデータを交換する方法において、
ＴＣＰプロトコルを使用して送信され、前記第１のホストコンピュータから前記第２のホストコンピュータへの双方向データフローに関連する第１のデータの送信を行い、
前記ＴＣＰプロトコルを使用して前記第１のデータの送信に関連する送信補助パラメータを前記第１のホストコンピュータに関連する第１の装置に記憶し
前記第２のホストコンピュータから前記第１のホストコンピュータへ前記ＴＣＰプロトコルを使用して送信され、前記双方向データフローに関連する第２のデータの受信を行い、
前記ＴＣＰプロトコルを使用して前記第２のデータの受信に関連する受信補助パラメータを記憶し、
前記第２のホストコンピュータから送信され受信された承認メッセージに応答して複数のパラメータを更新し、前記複数のパラメータは少なくとも再送信タイムアウト値と、スムースにされた往復時間と、測定された往復時間とを含んでおり、前記受信した承認メッセージの情報を少なくとも用いて前記更新を実行し、
前記第２のデータの順番に並んでいないパケットを１以上のバッファに記憶するステップを含んでおり、
前記第１のデータの送信と前記第２のデータの受信は複数の回路により同時に実行され、前記受信補助パラメータは前記順番に並んでいないパケットを少なくとも部分的に再順序付ける少なくとも１以上の再順序付けパラメータを含んでいる、方法。
【外国語明細書】
2010016838000001.pdf