(57)【要約】【課題】  ホストコンピュータにおけるメモリ間コピーを廃してメモリの使用効率を向上する。【解決手段】  ヘッダ処理部４３が、受信した各パケットをヘッダ部と本体データ部とに分離する。アダプタメモリ１２が、各パケットを蓄積する。パケット再構成処理部４４が、複数パケットの各ヘッダ部に基づいて新たなヘッダを作成し、新たなヘッダ、およびアダプタメモリ１２に蓄積されている複数の本体データ部の各格納位置を示す複数の位置情報４０を、ホストコンピュータ２に通知する。ＤＭＡ制御部１３が、ホストコンピュータ２において位置情報４０を用いて作成された転送指示に基づいて、アダプタメモリ１２から複数の本体データ部を読み出してホストコンピュータ２に転送する。【選択図】図４
2006302246.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して受信した複数のパケットを、ホストコンピュータに転送するためのネットワークアダプタであって、
受信した各パケットを、ヘッダ部と本体データ部とに分離する分離手段と、
前記分離手段により分離された各パケットを蓄積するための蓄積手段と、
前記複数パケットの各ヘッダ部に基づいて新たなヘッダを作成する作成手段と、
前記新たなヘッダ、および前記蓄積手段に蓄積されている複数の本体データ部の各格納位置を示す複数の位置特定情報を、前記ホストコンピュータに通知する通知手段と、
前記ホストコンピュータにおいて前記位置特定情報を用いて作成された転送指示に基づいて、前記蓄積手段から前記複数の本体データ部を読み出してホストコンピュータに転送する転送手段と
を備えることを特徴とするネットワークアダプタ。
【請求項２】
前記通知手段は、前記新たなヘッダおよび前記位置特定情報を、前記ホストコンピュータにおけるメモリのカーネル空間に対して送信し、
前記転送手段は、前記複数の本体データ部を、前記ホストコンピュータにおけるメモリのユーザ空間に対して転送する
ことを特徴とする請求項１に記載のネットワークアダプタ。
【請求項３】
前記通知手段は、前記カーネル空間に書き込まれているＤＭＡディスクリプタに従って、前記新たなヘッダおよび前記位置特定情報を該カーネル空間の所定の領域に対して送信する
ことを特徴とする請求項２に記載のネットワークアダプタ。
【請求項４】
前記通知手段は、前記新たなヘッダおよび前記複数の位置特定情報に加えて、その複数の位置特定情報の個数を前記ホストコンピュータに通知する
ことを特徴とする請求項１に記載のネットワークアダプタ。
【請求項５】
前記通知手段は、前記ホストコンピュータのメモリ内に予め用意されているバッファ領域の先頭に前記新たなヘッダを送信し、前記複数の位置特定情報を前記バッファ領域の所定位置に送信し、その位置特定情報の送信先アドレスを前記ホストコンピュータに通知する
ことを特徴とする請求項４に記載のネットワークアダプタ。
【請求項６】
前記通知手段は、前記ホストコンピュータのメモリ内に予め用意されているバッファ領域の先頭に前記新たなヘッダを送信するとともに、そのバッファ領域の末尾に前記複数の位置特定情報を送信する
ことを特徴とする請求項４に記載のネットワークアダプタ。
【請求項７】
ネットワークアダプタに、ネットワークを介して受信した複数のパケットを、ホストコンピュータに転送する転送処理を実行させるネットワーク転送プログラムであって、
前記ネットワークアダプタに、
受信した各パケットを、ヘッダ部と本体データ部とに分離し、
前記分離された各パケットを蓄積手段に蓄積し、
前記複数パケットの各ヘッダ部に基づいて新たなヘッダを作成し、
前記新たなヘッダ、および前記蓄積手段に蓄積されている複数の本体データ部の各格納位置を示す複数の位置特定情報を、前記ホストコンピュータに通知し、
前記ホストコンピュータにおいて前記位置特定情報を用いて作成された転送指示に基づいて、前記蓄積手段から前記複数の本体データ部を読み出してホストコンピュータに転送する
処理を実行させることを特徴とするネットワーク転送プログラム。
【請求項８】
ホストコンピュータ、およびネットワークを介して受信した複数のパケットを該ホストコンピュータに転送するためのネットワークアダプタを含む通信システムであって、
前記ネットワークアダプタは、
受信した各パケットを、ヘッダ部と本体データ部とに分離する分離手段と、
前記分離手段により分離された各パケットを蓄積するための蓄積手段と、
前記複数パケットの各ヘッダ部に基づいて新たなヘッダを作成する作成手段と、
前記新たなヘッダ、および前記蓄積手段に蓄積されている複数の本体データ部の各格納位置を示す複数の位置特定情報を、前記ホストコンピュータに通知する通知手段と、
前記ホストコンピュータにおいて前記位置特定情報を用いて作成された転送指示に基づいて、前記蓄積手段から前記複数の本体データ部を読み出してホストコンピュータに転送する転送手段と、を備え、
前記ホストコンピュータは、前記新たなヘッダに基づいて前記複数の本体データ部を組み立てる
ことを特徴とする通信システム。
【請求項９】
前記ホストコンピュータは、前記ネットワークアダプタから通知された複数の位置特定情報に基づいて、前記転送指示として前記ネットワークアダプタが実行すべきＤＭＡディスクリプタを作成する
ことを特徴とする請求項８に記載の通信システム。
【請求項１０】
ネットワークを介して受信した複数のパケットをホストコンピュータに転送するための通信方法であって、
受信した各パケットを、ヘッダ部と本体データ部とに分離し、
前記分離された各パケットを蓄積手段に蓄積し、
前記複数パケットの各ヘッダ部に基づいて新たなヘッダを作成し、
前記新たなヘッダ、および前記蓄積手段に蓄積されている複数の本体データ部の各格納位置を示す複数の位置特定情報を、前記ホストコンピュータに通知し、
前記ホストコンピュータにおいて前記位置特定情報を用いて作成された転送指示に基づいて、前記蓄積手段から前記複数の本体データ部を読み出してホストコンピュータに転送する
処理を含むことを特徴とする通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介して受信したパケットを、ホストコンピュータに転送する技術に関する。
【背景技術】
【０００２】
ネットワークの高速化に伴い、通信を行うホストコンピュータにかかる負荷をどのように軽減させるかが、近年の課題となってきている。現在、広く使われているＴＣＰ（Transmission Control Protocol）／ＩＰ（Internet Protocol）とＳｏｃｋｅｔ  ＡＰＩ（Socket Application Interface）との組み合わせでは、ホストコンピュータにおける、パケットごとのプロトコル処理およびメモリ間コピーにかかる負荷の軽減が特に課題となってきている。
【０００３】
パケットの送受信においては、送受信されるパケットごとにヘッダの生成や解析等の処理が実行される。より通信を高速化させるためには、送信するパケット１つ当たりのサイズをできる限り大きくし、これらの処理に要する時間を短縮させるのが好ましい。しかし、イーサネット（登録商標）等のネットワークでは、１つのパケットの最大長（MTU、Maximum Transmit Unit）が定められている。例えば、通常のイーサネット（登録商標）では１５００バイト、ジャンボフレーム（Jumbo Frame）と呼ばれる拡張機能を用いても９キロバイト程度であるのが一般的である。近年の高速ネットワークにおいては、とりわけ、パケットごとのプロトコル処理がボトルネックとなる可能性がある。
【０００４】
パケットごとの処理を軽減することを目的とする技術としては、例えば、通信ネットワークからパケットを受信する際にヘッダ等のパケット情報をまとめ、ホストコンピュータのＣＰＵにかかる負荷を軽減する技術について開示されている（例えば、特許文献１）。他の例としては、パケットの宛先アドレスから経路を共通とするパケットを複数抽出し、それら複数のパケットを集約して各パケットの情報を含む集約パケットを送信する技術について開示されている（例えば、特許文献２）。さらに他の例として、ＴＣＰレベルで、送信側についてのパケットの分割を行う技術や受信側についての組立を行う技術について開示されている（例えば、特許文献３）。
【０００５】
通信を高速化させるための他の技術として、国際出願番号ＰＣＴＪＰ０４／１２００６のように、ホストコンピュータにおけるメモリ間コピーに要する時間を短縮させる技術がある。かかる技術によれば、パケットの送信側においては、パケットの本体データ部については、ホストコンピュータのユーザ空間から直接ＤＭＡ（Direct Memory Access）転送し、ネットワークアダプタのバッファ（送信バッファ）に転送される。ネットワークアダプタのバッファに蓄積されたデータは、生成したヘッダを用いてネットワークに送信される。パケット受信側のネットワークアダプタにおいては、ネットワーク側から受信したパケットをホストコンピュータに転送する際に、ヘッダと本体データとを分離し、まず生成したヘッダをホストコンピュータに転送する。本体データは、ホストコンピュータのソフトウェアがプロトコル処理を実行して、データ配送先のユーザ空間が決定してから転送される。
【特許文献１】特開２００３−８７２５５号公報（要約、図１および図２、００３５段落）
【特許文献２】特表２００３−００３６７３号公報（要約、請求項１）
【特許文献３】特開２００２−８４２８９号公報（要約、図１、０００８段落）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ネットワークアダプタがホストコンピュータに転送するパケットをネットワークから受信するときに、自装置のメモリ上に連続した１つのパケットとして蓄積されるよう、各パケットを受信することは困難である。すなわち、ネットワーク側から到着したパケットを直ちに解析し、本体データがパケット全体のうちでどの部分に当たるかを判定した上で適当な位置に蓄積しようとすると、ネットワークアダプタ内のメモリ間コピーがオーバヘッドとなり、実現が困難である。そこで、ネットワークアダプタのメモリには、非連続なパケットを、ホストコンピュータのメモリに転送する際に連続した領域になるように転送することになる。なお、かかる技術は、スキャッタ・ギャザー（Scatter Gather）ＤＭＡと呼ばれる、一般的な技術であるのでここではその説明を省略する。
【０００７】
ネットワークアダプタに蓄積された本体データのホストコンピュータへの転送の指示は、ホストコンピュータが行う。これを実現するには、ホストコンピュータが、ネットワークアダプタのメモリのうちどこに各本体データが存在するのかを、認識している必要がある。ホストコンピュータが本体データの位置を認識しないで転送処理を実現するには、ネットワークアダプタ内で本体データをまとめたパケットに対してハンドルを発行し、ネットワークアダプタにおいてこのハンドルおよび各本体データの対応関係を管理しなくてはならない。これには、ネットワークアダプタ側における管理コストを要する。
【０００８】
あるいは、ネットワークアダプタのメモリに非連続に蓄積されたパケットの本体データをホストコンピュータに転送する際には、蓄積された各本体データのメモリ上の先頭アドレスおよびデータ長の情報をネットワークアダプタからホストコンピュータに対して通知することが必要となる。従来から用いられてきている一般的なＤＭＡ転送においては、これらの情報は、ＤＭＡディスクリプタに含めてホストコンピュータに対して通知されることになる。しかし、ＤＭＡディスクリプタは固定長であるので、受信するパケットのデータ量が大きくなるほど、上記の先頭アドレスとデータ長との組の数が多くなる。例えば、ＭＴＵが１５００バイトのイーサネット（登録商標）から受信したパケットを６４キロバイト毎にまとめると、上記先頭アドレスとデータ長の組数は４４組となる。１つのＤＭＡディスクリプタに対し、かかる多数の情報を格納するための領域を確保しておかなくてはならない。
【０００９】
本発明は、ネットワークから受信したパケットをホストコンピュータに転送する際に、ネットワークアダプタのコスト高を抑制し、かつホストコンピュータのプロトコル処理を簡易に保ったまま、ホストコンピュータにおけるメモリ間コピーを廃してメモリの使用効率を向上させることのできる技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明のネットワークアダプタは、ネットワークを介して受信した複数のパケットをホストコンピュータに転送するためのものであって、受信した各パケットをヘッダ部と本体データ部とに分離する分離手段と、前記分離手段により分離された各パケットを蓄積するための蓄積手段と、前記複数パケットの各ヘッダ部に基づいて新たなヘッダを作成する作成手段と、前記新たなヘッダおよび前記蓄積手段に蓄積されている複数の本体データ部の各格納位置を示す複数の位置特定情報を前記ホストコンピュータに通知する通知手段と、前記ホストコンピュータにおいて前記位置特定情報を用いて作成された転送指示に基づいて前記蓄積手段から前記複数の本体データ部を読み出してホストコンピュータに転送する転送手段、を備える。
【００１１】
上記ネットワークアダプタにおいては、受信した複数のパケットが、論理的に、新たなヘッダおよび複数の本体データ部から構成される１つのパケットにまとめられる。新たなヘッダおよび位置特定情報は、本体データ部とは別にホストコンピュータに転送される。本体データ部は、ホストコンピュータにおいて位置特定情報を用いて作成された転送指示に基づいて、そのホストコンピュータのメモリの所定領域に転送される。ホストコンピュータは、新たなヘッダに基づいてプロトコル処理を行い、上記本体データ部の転送先を決定し、複数の本体データ部が転送先のホストコンピュータメモリで連続するように転送指示を作成する。
【００１２】
上記ネットワークアダプタにおいて、前記通知手段は、前記新たなヘッダおよび前記位置特定情報を前記ホストコンピュータにおけるメモリのカーネル空間に対して送信し、前記転送手段は、前記複数の本体データ部を前記ホストコンピュータにおけるメモリのユーザ空間に対して転送するようにしてもよい。この構成においては、ホストコンピュータ内において、本体データ部をカーネル空間からユーザ空間へメモリ間転送する必要がない。
【００１３】
また、前記通知手段は、前記新たなヘッダおよび前記複数の位置特定情報に加えて、その複数の位置特定情報の個数を前記ホストコンピュータに通知するようにしてもよい。この構成においては、ホストコンピュータは、位置特定情報の個数に基づいて、各位置特定情報の格納場所または新たなヘッダの格納場所を認識できる。
【発明の効果】
【００１４】
本発明によれば、ネットワークアダプタに複雑なバッファ管理機能を設けることなく、複数のパケットを論理的に１つのパケットにまとめてホストコンピュータに転送することができる。また、ホストコンピュータにおいてメモリの利用効率が向上する。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の好適な実施の形態について、図面を参照しながら詳細に説明する。
図１は、本発明に係る通信システム１０において送受信される、パケットの流れを概略的に示した図である。パケットの送信側ホストコンピュータ２Ｓおよび受信側のホストコンピュータ２Ｒは、送信側ネットワークアダプタ１（１Ｓ）、受信側ネットワークアダプタ１（１Ｒ）を介して互いに接続されている。ホストコンピュータ２のメモリ３には、ユーザ空間４とカーネル空間５とがあるが、ここでは、ユーザ空間４におけるデータ（パケット）の送受信、すなわち、ユーザ空間４に格納されたアプリケーションバッファ６のデータを、上記の国際出願番号ＰＣＴＪＰ０４／１２００６で記載のＣＯＥ（Copy Offload Engine）技術で送受信する場合を考える。
【００１６】
送信側ホストコンピュータ２Ｓにおけるアプリケーションバッファ６のデータは、COE技術により、カーネル空間５を経由せずに送信側の送信バッファ６に転送され、送信側ネットワークアダプタ１（１Ｓ）によってＭＴＵサイズ毎の分割されたパケット（フラグメント）として、ネットワークアダプタ１（１Ｒ）に送信される。その後、ネットワークアダプタ１（１Ｒ）に受信されたデータは、カーネル空間５を経由せずに受信側ホストコンピュータ２Ｒのユーザ空間４に対して転送される。受信側におけるパケットのユーザ空間４への転送処理は、ネットワークアダプタ１内の受信バッファのデータに対し、ホストコンピュータ２が行う。上記の背景技術でも説明したように、プロトコル処理は、ホストコンピュータ２のソフトウェアが実行する。
【００１７】
図２は、一般的なＤＭＡ転送を実行するためのＤＭＡインタフェースを説明する図である。本実施形態に係るネットワークアダプタ１の動作について説明する前に、まず、一般的なＤＭＡ転送におけるネットワークアダプタの動作について、図２を用いて説明する。
【００１８】
ネットワークを介して受信したパケットは、ネットワークアダプタ１００に到着した順に、アダプタメモリ（受信バッファ）１０１に非連続に蓄積される。ネットワークアダプタ１００のアダプタメモリ１０１に蓄積されたパケットは、ホストコンピュータ２００のメモリ（ホストメモリ）２０１にＤＭＡディスクリプタを用いてＤＭＡ転送される。
【００１９】
パケットをネットワークアダプタ１００から受信するホストコンピュータ２００のメモリ２０１は、ディスクリプタ領域と受信バッファとを含んで構成される。ディスクリプタ領域とはＤＭＡ転送に用いられるディスクリプタを格納する領域であり、受信バッファとはネットワークアダプタ１００からＤＭＡ転送されたパケットをいったん格納するための領域である。
【００２０】
ディスクリプタ領域に配置されるディスクリプタは配列あるいはリストから構成され、パケットデータの読み出しのために必要な情報の格納先についての物理アドレス、ホストコンピュータ２００からネットワークアダプタ１００へのコマンド、受信パケットの長さおよびステータス等の制御情報を保持している。制御情報のひとつであるステータスによって、ネットワーク側から転送されてくる複数のパケットについて、全て受信したか否かが示される。なお、受信パケットの長さやステータス等の制御情報は、ネットワークアダプタ１００によってパケットの受信完了時に更新される。
【００２１】
図３は、本実施形態に係るネットワークアダプタ１を用いて、受信パケットをホストコンピュータ２に転送する動作の概略を説明する図である。本実施形態においては、ネットワーク側から受信したパケットがネットワークアダプタ１のアダプタメモリ１２に非連続に格納されると、連続したパケットに再構成する処理をネットワークアダプタ１側においては行わず、受信した複数のパケットのヘッダに基づいて論理的に１つにまとめられたパケットを作成する。そして、その論理的に作成されたパケットのヘッダおよび複数の受信パケットから取り出した複数の本体データ部分がホストコンピュータ２に転送され、ホストコンピュータ２は論理的に作成されたパケットのヘッダに基づいてプロトコル処理を実行する。以下、受信した複数のパケットのヘッダから論理的に作成され、ホストコンピュータ２に転送するための新たなヘッダを、再構成ヘッダ３０とする。
【００２２】
ネットワークアダプタ１から転送された再構成ヘッダ３０は、ホストコンピュータ２においては、ホストメモリ３のカーネル空間５に格納される。ホストコンピュータ２のプロトコル処理を実行するソフトウェアによって再構成ヘッダ３０が処理され、パケットの本体データの転送先が決定される。ここで、パケットの本体データの転送先とは、ホストメモリ３のユーザ空間４上の領域であり、本実施形態においては、ホストコンピュータ２においてメモリ間コピーは行わず、ネットワークアダプタ１のアダプタメモリ１２上のパケットの本体データは、直接ホストコンピュータ２のユーザ空間４にＤＭＡ転送される。アダプタメモリ１２の本体データの格納位置は、本体データの転送に先立って、本体データの位置情報（位置特定情報）としてネットワークアダプタ１からホストコンピュータ２に送信される。
【００２３】
図４は、本実施形態に係るネットワークアダプタ１を用いて構成される、通信システム１０のブロック図である。本実施形態においては、上記の通り、通信システム１０は、ネットワークアダプタ１およびホストコンピュータ２を含んで構成される。図４を用いて、図３に概略的に示される動作を具体的に実行する際の各装置における機能について説明する。
【００２４】
ネットワークアダプタ１は、ＭＡＣ（Media Access Control）１１、受信バッファ（アダプタメモリ）１２、ＤＭＡ制御部１３および制御部１４を含む。ＭＡＣ１１は、データリンク層の下位に位置し、データの送受信単位であるフレームの送受信に関し、フレームの形式や誤り検出方法等、所定の方式でデータが送受信されているか否かを規定する。受信バッファ１２は、上記の通り、ネットワーク側から受信したパケットや、ホストコンピュータ２からネットワークに向けて送信されるパケットを格納する。ＤＭＡ制御部１３は、ホストコンピュータ２により作成されるコマンド（ＤＭＡディスクリプタ）に従ってＤＭＡ転送を行う。制御部１４は、送受信されるパケットの制御を行う。
【００２５】
ネットワークアダプタ１の制御部１４は、チェックサム検算機構部４１、ＣＯＥ動作判定処理部４２、ヘッダ処理部４３およびパケット再構成処理部４４を含む。チェックサム検算機構部４１は、送受信するパケットが壊れていないか検査するときに用いられるチェックサムの算出や、そのチェックサムを用いて検査を行う。ＣＯＥ動作判定処理部４２は、再構成ヘッダ３０を用いたパケットの転送を実行するか否かを、分割されたパケット（フラグメント）のサイズ等により判定する。ヘッダ処理部４３は、再構成ヘッダ３０を作成する。パケット再構成処理部４４は、フラグメントの本体データを、ホストコンピュータ２において分割前の順にデータが配列されるために必要な情報を作成する。
【００２６】
ホストコンピュータ２は、メモリ３、ドライバ２２および制御部２３を含んで構成される。メモリ３は、上記の通り、ネットワークアダプタ１から受信した再構成ヘッダ３０やパケットの本体データを格納する領域であり、ユーザ空間４とカーネル空間５とを含む。
【００２７】
ドライバ２２は、ネットワークアダプタ１との間でなされるパケットの送受信を制御する。ドライバ２２は、通常パケット転送部２２１とＣＯＥデータ転送部２２２とを含んで構成される。通常パケット転送部２２１は、通常のパケット転送を実行する。ＣＯＥデータ転送部２２２は、再構成ヘッダ３０に基づいて、ネットワークアダプタ１の受信バッファ１２に格納されたパケットの本体データの送受信を行う。
【００２８】
メモリ３は、上記の通りユーザ空間４とカーネル空間５とから構成される。ユーザ空間４およびカーネル空間５については、前述の通りであるのでここではその説明を割愛する。
【００２９】
ホストコンピュータ２の制御部２３は、本発明に係わる動作としては、ホストコンピュータ２におけるパケットの送受信に関する制御を行う。制御部２３は、プロトコル処理部２３１を含む。プロトコル処理部２３１は、ネットワークアダプタ１から受信した再構成ヘッダ３０に基づいて、プロトコル処理を実行するためのソフトウェアを起動する。
【００３０】
図５は、本実施形態に係る通信システム１０におけるホストコンピュータ２の受信バッファに、パケットの本体データの位置情報４０と再構成ヘッダ３０とを格納することを説明する図である。図５に示されるホストコンピュータ２のカーネル空間５のうち、上部はディスクリプタ領域、下部は受信バッファを表している。
【００３１】
図５において、受信バッファ領域には、ネットワークアダプタ１から送られてくる再構成ヘッダ３０および位置情報４０が格納される。ここで、位置情報４０は、例えば、ネットワークアダプタ１のアダプタメモリ１２における、各本体データの先頭アドレス、および各本体データのデータ長から構成される。なお、ネットワークアダプタ１からホストコンピュータ２への再構成ヘッダ３０および位置情報４０の転送は、後述するヘッダ転送用ＤＭＡディスクリプタに従って行われる。
【００３２】
データ転送用のディスクリプタは、位置情報４０を利用してホストコンピュータ２によって作成される。ここで、図５のヘッダ転送用ディスクリプタは、先に図２を用いて説明したように、受信バッファの物理アドレス、受信パケットの長さおよびステータス等の情報を含んでいる。
【００３３】
図５において、ディスクリプタ領域におけるステータスについては先に図２を用いて説明した通りである。バッファアドレスには、受信バッファの先頭アドレスが格納される。位置情報数には、アダプタメモリ１２における位置情報４０の個数、すなわちアダプタメモリ１２に蓄積されている本体データの個数についての情報が格納される。そして、ホストコンピュータ２は、位置情報４０に基づいてデータ転送用のＤＭＡディスクリプタを作成し、ネットワークアダプタ１は、そのＤＭＡディスクリプタに従ってアダプタメモリ１２からパケットの本体データを読み出してホストコンピュータ２へ転送する。転送バイト数には、受信バッファに転送した、再構成ヘッダ３０および位置情報４０のバイト数が格納される。
【００３４】
なお、図５に示す例においては、受信バッファに格納される情報は、先頭から位置情報４０が、続く領域には再構成ヘッダ３０が設定されているが、これに限られない。例えば、ホストコンピュータ２が、位置情報４０、再構成ヘッダ３０の先頭アドレスを設定した後その設定値をネットワークアダプタ１に対して通知することとしてもよい。あるいは、例えば、位置情報４０や再構成ヘッダ３０の格納領域を定めておき、その領域の先頭に再構成ヘッダ３０を格納し、領域の末尾等、所定の位置に位置情報４０を格納することとしてもよい。
【００３５】
このように、実施形態の通信システムにおいては、複数の受信パケットに対応する個数の位置情報４０がネットワークアダプタ１において作成され、ネットワークアダプタ１からホストコンピュータ２にそれらの位置情報４０が通知される際に、その位置情報４０の個数もホストコンピュータ２に通知される。したがって、各位置情報４０のデータ長が互いに同じであるものとすると、ホストコンピュータ２は、受信バッファ内における各位置情報４０の格納アドレスを認識していなくても、先頭の位置情報４０の格納アドレスさえ認識していれば、他の任意の位置情報４０の格納アドレス（および、場合によっては、再構成ヘッダ３０の格納アドレスも）を計算により求めることができる。
【００３６】
図６は、再構成ヘッダ３０の構造の一例である。本実施形態において作成される再構成ヘッダ３０は、ネットワーク側から受信した、分割されたパケット（フラグメント）のＩＰヘッダに基づく。ネットワークアダプタ１が、受信したフラグメントのＩＰヘッダを参照して、送信元、宛先、識別子等が共通するフラグメントについてまとめて１つのパケットとしてホストコンピュータ２に転送するための再構成ヘッダ３０を作成する。フラグメントの各本体データは、再構成ヘッダ３０に従って１つのパケットとしてプロトコル処理された後に、それぞれ直接ユーザ空間４に転送される。本実施形態においては、まとめるべきフラグメントを他のフラグメントと区別するための、パケットの送信元等の情報を識別情報とする。図６では、「識別子（Identification）」、「プロトコル（Protocol）」、「送信元アドレス（Source Address）」および「宛先アドレス（Destination Address）」がこの識別情報に相当する。
【００３７】
識別子には、分割されたパケットには全て同一の値が格納される。プロトコルは、ＩＰパケットに格納されたデータのプロトコルである。送信元アドレス、宛先アドレスには、それぞれパケットの送信元、送信先のＩＰアドレスが格納される。
【００３８】
識別情報の各値は、ネットワーク側から受信したパケットのヘッダに基づいて設定される。用いられるヘッダは、例えば、先頭フラグメントのＩＰヘッダである。受信したそのパケットが先頭フラグメントであるか否かは、ヘッダの「フラグメントオフセット（Fragment Offset、元のデータ中の位置）」の情報を参照して判定する。受信したパケットが先頭フラグメントである場合には、値として「０」が格納されているため、先頭以外のフラグメントとの識別が可能とされる。
【００３９】
再構成ヘッダ３０を構成する情報のうち、「パケットの全長（Total Length）」、「ＭＦ（More Fragment Flag）」および「ヘッダチェックサム（Header Checksum）」については、アダプタメモリ１２にすべてのフラグメントが蓄積されたときに更新される。パケットの全長（Total Length）は、先頭フラグメントのヘッダ長（ＩＨＬ）、および末尾フラグメントのヘッダ長（ＩＨＬ）、パケットの全長（Total Length）および「フラグメントオフセット（Fragment Offset）」を元に算出される。フラグメントオフセットには、１つのパケットが複数のフラグメントに分割される前における、データの先頭からのオフセット値が格納されている。
【００４０】
ＭＦに関しては、本実施形態においては分割されたパケットをネットワークアダプタ１においてまとめ、１つのパケットとしてホストコンピュータ２に転送することを表す値として「０」が格納される。ヘッダチェックサム（Header Checksum）は、まとめられたパケットの再構成ヘッダ３０が壊れていないか検査する際に用いられ、パケットの全長等の、再構成によって変更された値に基づいて更新、設定される。あるいは、パケットの全長等を更新した後に通常のＩＰヘッダチェックサム計算によって算出したものを設定してもよい。
【００４１】
図６に示される再構成ヘッダ３０の各フィールドのうち、「オプション（Option）」および「パディング（Padding）」については、ヘッダを構成するフィールドとしては、必ずしも設定されている必要はない。図６中に示される他のフィールドについては、パケットの正当性を確認する際に用いられる。例えば、ＩＰのバージョンが「ＩＰｖ４」である場合、「バージョン（Version）」として「４」が格納される。また、「ＤＦ（Don’t Fragment Flag）」は、パケットを分割してよい場合は０、分割してはいけない場合は１が格納される。よって、パケットがフラグメント化されているのに、ＤＦに１が格納されている場合は、そのパケットは正当でないと判定される。「生存時間（Time to Live）」に０が格納されている場合についても同様に正当でないと判定される。
【００４２】
図６に示される再構成ヘッダ３０の識別情報は、先頭フラグメントの識別情報を元に作成されている。先頭以外のフラグメントについても同様に、各フラグメントのヘッダ部分には識別情報が格納されている。本実施形態においては、フラグメントのヘッダに含まれる識別情報に基づいて１つにまとめられるべきフラグメントを判断し、ネットワークアダプタ１からホストコンピュータ２に対し、１つのパケットにまとめられるべき複数の本体データ部をホストコンピュータ２に転送する際に必要な情報が通知される。フラグメントのヘッダを元に管理される、本体データの転送に必要な情報を管理情報とする。以下、フラグメントのヘッダの情報をネットワークアダプタ１において管理する方法について説明する。
【００４３】
図７は、管理情報のデータ構造の一例である。フラグメントの識別情報をキーとして検索することにより、各フラグメントにおける本体データ部の、アダプタメモリ１２における格納先アドレス、データ長等の情報が得られる。
【００４４】
図７中、最上段に示されるデータ構造を、まとめられる１つのパケットについてのパケット管理情報Ｐとする。中段に示されるデータ構造を、１番目にアダプタメモリ１２に蓄積されたフラグメントについてのフラグメント管理情報Ｆ１、下段に示されるデータ構造を２番目のフラグメントについてのフラグメント管理情報Ｆ２、以下、Ｎ番目のフラグメントについてのフラグメント管理情報ＦＮとする。受信したフラグメントについてのフラグメント管理情報は、本実施形態ではリスト構造により管理される。
【００４５】
アダプタメモリ１２に蓄積されたフラグメントについては、順次、パケット管理情報Ｐの「受信済みフラグメントリスト」に情報が追記され、「受信済みフラグメント数」が加算される。パケット管理情報Ｐの「タイマ」は、最初に蓄積されたフラグメントについてフラグメント管理情報Ｆ１が作成されると初期化され、１つのパケットを分割することにより生成された全てのフラグメントについて、アダプタメモリ１２に蓄積される期間を測定する。
【００４６】
最初にアダプタメモリ１２に蓄積されたフラグメントについての、フラグメント管理情報Ｆ１を例に挙げる。「末尾フラグメントフラグ」には、分割されたデータの最後のフラグメントが他のフラグメントと識別可能になるように設定される。「データグラム内オフセット」には、分割前のパケット（データグラム）においての、先頭からのオフセット値、すなわちヘッダの「フラグメントオフセット」の値が設定される。「データ部分のサイズ」は、フラグメントのうちヘッダを除いた、本体データ部分のデータ長が設定される。「データグラム内オフセット」と「データ部分のサイズ」とから、そのフラグメントが１つのパケットにまとめられた場合に占める位置が算出される。本実施形態においては、これら３つのデータを用いて、パケットを構成する全フラグメントを蓄積したか否かを判定する。
【００４７】
「フラグメントサイズ」は、フラグメント全体のデータ長が設定される。「蓄積したバッファの先頭アドレス」は、アダプタメモリ１２において蓄積されている位置のアドレスが設定される。「データ部分のオフセット」は、アダプタメモリ１２において、先頭、すなわち蓄積したバッファの先頭アドレスからのオフセット値が設定される。「データ部分の部分チェックサム」は、フラグメント自身のデータに基づいて算出された、パケット（データグラム）が壊れていないか検査するための値が設定される。
【００４８】
アダプタメモリ１２には、各フラグメントのヘッダおよび本体データ部が蓄積される。「蓄積したバッファの先頭アドレス」に各フラグメントの「データ部分のオフセット」を加えた値が、ホストコンピュータ２に送信すべき、そのフラグメントの本体データ部分の開始アドレスである。本体データ部分の開始アドレスと、本体データ部分のデータ長である「データ部分のサイズ」とが上記位置情報として、ホストコンピュータ２に通知される。
【００４９】
全てのフラグメントをアダプタメモリ１２に蓄積する前にパケット管理情報Ｐの「タイマ」で計測している期間が所定の期間を超えた場合は、例えば、「蓄積したバッファの先頭アドレス」および「フラグメントサイズ」データを用いて、その時点でアダプタメモリ１２に蓄積されているヘッダおよび本体データ部からそれぞれパケットを復元し、それらのパケットをホストコンピュータ２に転送する。
【００５０】
各フラグメントのデータ部分についての部分チェックサムは、再構成によりフラグメントごとにまとめてフラグメント管理情報として保持しておくことで、全てのフラグメントが蓄積された時点で、全ての値を加算してまとめられたパケットについてのチェックサムを求めることができる。このチェックサムに基づいて、ＴＣＰ（Transmission Control Protocol）やＵＤＰ（User Datagram Protocol）のチェックサムを検算することができる。
【００５１】
図８は、フラグメントの本体データ部分を、ディスクリプタを用いて転送させる動作の概略を説明する図である。図７を参照して説明したように、ネットワークアダプタ１が作成した管理情報からＤＭＡ転送に必要な情報を通知されると、ホストコンピュータ２は、通知された情報に基づいてＤＭＡ転送に用いるディスクリプタを生成する。ホストコンピュータ２によってＤＭＡディスクリプタが作成されると、ネットワークアダプタ１のＤＭＡエンジンは、そのディスクリプタに従ってパケットの本体データのＤＭＡ転送処理を実行する。
【００５２】
１つのフラグメントの本体データ部を転送するためのディスクリプタは、ステータス、本体データ部の書込み先ホストアドレス（ホストコンピュータ２における格納先の先頭アドレス）、本体データ部の送信元格納アドレス（ネットワークアダプタ１のアダプタメモリ１２の格納アドレス）、および本体データ部のデータ長を含んで構成される。本実施形態においては、書込み先ホストアドレス、送信元アドレスおよびデータ長については、ネットワークアダプタ１から通知された管理情報に基づいて、ホストコンピュータ２が設定する。
【００５３】
ホストコンピュータ２における格納先の先頭アドレスは、ホストコンピュータ２のユーザ空間４における本体データの先頭アドレスである。送信元アドレスは、アダプタメモリ１２における本体データの先頭アドレスであり、データ長は、本体データの大きさである。図８の例では、フラグメント１、２についてそれぞれ生成された、ディスクリプタ１、２が示されている。フラグメント２のホストコンピュータ２における先頭アドレスは、フラグメント１の先頭アドレス（図８においては「Host Address」）にフラグメント１のデータ長を加算した値が格納される。ユーザ空間４に転送された本体データは、パケットの構成にしたがって、順に連続して格納される。ネットワークアダプタ１は、各ディスクリプタで指示されたＤＭＡ転送処理が完了するごとに、ステータスの値を「完了」ステータスを示す値に設定する。
【００５４】
図９から図１１は、本実施形態に係るパケット転送に関するフローチャートである。以下、図面を参照して、本実施形態に係るパケット転送を実現するための処理方法について説明する。
【００５５】
図９は、パケットを受信したネットワークアダプタ１の動作を説明するフローチャートである。
まず、ステップＳ１で、パケットを受信する。次にステップＳ２で、受信パケットのＩＰヘッダが正当であるか否かを判定する。また、宛先ＩＰアドレスがホストコンピュータ２のものであるもののみを正当と見なす。正当と判定されると、ステップＳ３で、受信パケットのヘッダ部分から識別情報を抽出する。なお、識別情報については、先に図６を参照して説明したのでここでは省略する。
【００５６】
ステップＳ４では、受信したパケットがＩＰフラグメントであるか否かを判定する。ＩＰフラグメントである場合、ステップＳ５で、そのフラグメントが再構成の対象であるか否かが判定される。例えば、本実施形態では、プロトコルはＴＣＰプロトコルであるか否かや、ホストコンピュータに転送するデータサイズは本発明の転送方法を実行するのに適しているか否か等に基づいて判定される。
【００５７】
受信したパケットが、再構成の対象と判定されると、ステップＳ６で、識別情報が過去に受信したパケットについてのそれと一致するか否かを判定する。一致しない場合、ステップＳ７で、受信したパケットについての管理情報を新規に作成し、さらに管理情報の「タイマ」を初期化した後にステップＳ９に進む。なお、ステップＳ６で識別情報が過去に受信したパケットについての識別情報と一致する場合、ステップＳ８で、受信したパケットから必要な情報を抽出して管理情報を更新し、ステップＳ９に進む。なお、ステップＳ７またはＳ８において管理情報が作成または更新される際、当該受信パケットの本体データ部についての位置情報（アダプタメモリ１２における格納アドレスおよびデータ長）が作成される。
【００５８】
ステップＳ９では、受信パケットをアダプタメモリ１２に蓄積する。ステップＳ１０で、蓄積したパケット先頭のフラグメントであるか否か判定する。なお、先頭のフラグメントのＩＰヘッダには、フラグメントオフセットの値として「０」が格納されている点については、先に図６を用いて説明した再構成ヘッダと同様である。受信パケットが先頭のフラグメントと判定された場合は、ステップＳ１１に進み、そのフラグメントのヘッダに格納されている情報を再構成ヘッダ３０にコピーしてステップＳ１２に進む。先頭フラグメントでない場合は、ステップＳ１１をスキップしてステップＳ１２に進む。
【００５９】
ステップＳ１２では、全てのフラグメントがアダプタメモリ１２に蓄積されたか否かを判定する。全フラグメントの蓄積が完了していない場合、さらにステップＳ１３で、タイマが完了しているか否かを判定する。タイマが未完了の場合は特に処理を行わずに終了する。一方、タイマが完了している場合は、ステップＳ１４で、アダプタメモリ１２に蓄積されている、識別情報が同一のフラグメントの全てについて、ヘッダも含めてホストコンピュータ２に転送して処理を終了する。
【００６０】
ステップＳ１２の判定において、全フラグメントが蓄積されていた場合、ステップＳ１５で、再構成ヘッダ３０の「ＭＦ」を０に設定し、フラグメントの管理情報から「パケットの全長」および「ヘッダ（ＩＰ）チェックサム」を算出して設定する。ステップ１６で、各フラグメントの位置情報、および再構成ヘッダ３０をホストコンピュータ２に転送する。なお、位置情報は、上述したように、ステップＳ７またはＳ８において受信パケットごとに作成される。ステップＳ１７で、管理情報および再構成ヘッダ３０を保持していた領域を解放し、さらにタイマをクリアして処理を終了する。
【００６１】
先のステップＳ４の判定において受信したパケットがＩＰフラグメントでない場合、およびステップＳ５の判定において受信パケットが再構成の対象でないと判定された場合、ステップＳ１８に進み、識別情報が一致するか否かを判定する。一致する場合、先に管理情報の作成されていたパケットについては、データの破損等により誤って管理情報や再構成ヘッダ３０が作成されたものと判断し、ステップＳ１９で管理情報、再構成ヘッダ３０およびタイマをクリアする。ステップＳ２０で、受信したパケットをそのままの形でホストコンピュータ２に転送し、処理を終了する。なお、ステップＳ２でＩＰヘッダが正当でないと判定された場合についてもステップＳ２０に進み、再構成ヘッダ３０によるパケット転送は行わない。
【００６２】
なお、本実施形態においては、ステップＳ２で正当と見なされなかったパケットはステップＳ２０の処理で受信したパケットをそのままの形でホストコンピュータ２に転送することとし、ステップＳ１３でタイマが完了した場合にもステップＳ１４でホストコンピュータ２に転送することとしているが、これに限られない。例えば、ステップＳ２において、ＩＰヘッダが正当でないパケット（宛先ＩＰアドレスがホストコンピュータ２のものでないために正当とみなされなかったものは除く）や、ステップＳ１３でタイマが完了した全てのフラグメントについては、ネットワークアダプタ１において、廃棄する等でもよい。
【００６３】
図１０は、再構成ヘッダ３０および位置情報４０をホストコンピュータ２に通知する処理についてのフローチャートである。まず、ステップＳ３１で、位置情報４０をネットワークアダプタ１内の所定のバッファ領域に書き込む。ステップＳ３２で、ホストコンピュータ２に通知する際にパディングが必要か否かを判定する。パディング不要の場合は特に処理を行わずにステップＳ３４に進むが、パディングが必要な場合は、ステップＳ３３で、バッファにパディングを入れてからステップＳ３４に進む。
【００６４】
ステップＳ３４で、再構成ヘッダ３０をネットワークアダプタ１内の所定のバッファ領域に書き込む。ここで、再構成ヘッダ３０が書き込まれるバッファは、先に位置情報４０を書き込んだバッファとは別のバッファであってもよい。ステップＳ３５で、バッファの内容、すなわち位置情報４０および再構成ヘッダ３０をホストコンピュータ２のカーネル空間の受信バッファに対して転送する。なお、位置情報４０および再構成ヘッダ３０をホストコンピュータ２へ転送する処理は、例えば、ホストコンピュータ２により作成されるヘッダ転送用ＤＭＡディスクリプタに従う。
【００６５】
ステップＳ３６では、ホストコンピュータ２において作成されているデータ転送用ＤＭＡディスクリプタに、再構成ヘッダ３０および位置情報４０全体のバイト数（ヘッダサイズ）、および位置情報４０の数を設定する。ステップＳ３７で、ディスクリプタのステータスとして、「完了」ステータスを設定し、処理を終了する。なお、ステップＳ３１からＳ３７の処理は、ネットワークアダプタ１により行われる。
【００６６】
図１１は、ホストコンピュータ２が、フラグメントの本体データをＤＭＡ転送するためのデータ転送用ＤＭＡディスクリプタを作成する処理についてのフローチャートである。図１０の処理の実行によってディスクリプタの転送データのバイト数、位置情報４０およびステータスについての設定が完了すると、ホストコンピュータ２は、さらに転送すべき本体データ部の転送元アドレス、転送先アドレス、バイト数、コマンド等の設定を行い、フラグメントの本体データのＤＭＡ転送を実行する。
【００６７】
まず、ステップＳ４１で、位置情報４０を読み出すためのポインタを初期化する。なお、位置情報４０は、図９に示すフローチャートの処理によりネットワークアダプタ１から送信されてきたものである。このとき、カーネル空間５内の受信バッファに含まれる位置情報４０の先頭のアドレスが設定される。次に、ステップＳ４２で、転送先ポインタを初期化する。このときホストコンピュータ２のアプリケーションバッファ（ユーザ空間４）の先頭アドレスが設定される。
【００６８】
ステップＳ４３では、位置情報４０を読み出すためのポインタが位置情報４０の末尾に達したか否かによって、未転送のデータがアダプタメモリ１２に存在するか否かを判定する。未転送データが存在する場合、ステップＳ４４に進み、ディスクリプタの転送元（図８における転送元アドレスがこれに対応する）として、位置情報４０を読み出すためのポインタが指す位置情報４０に設定されている、本体データの先頭アドレスを設定する。ステップＳ４５で、ディスクリプタの転送先（図８におけるホストアドレスがこれに対応する）として、転送先ポインタが指すアドレスを設定する。
【００６９】
ステップＳ４６では、位置情報４０を読み出すためのポインタが指す位置情報４０に設定されている、本体データのデータ長を、ディスクリプタの転送サイズ（図８におけるデータ長がこれに対応する）に設定する。ステップＳ４７で、ディスクリプタのコマンドを設定する。ネットワークアダプタ１は、受信したコマンドに基づいて、ＤＭＡエンジンを駆動する。ステップＳ４８で、位置情報４０を読み出すためのポインタが、次の位置情報４０を指すようポインタを更新する。ステップＳ４９で、転送先ポインタに、ステップＳ４６で設定した転送サイズを加算した結果を、転送先ポインタに設定し直し、ステップＳ４３に戻る。
【００７０】
以降、ステップＳ４３からステップＳ４９の処理を繰り返し、アダプタメモリ１２に蓄積されたフラグメントの本体データが存在しなくなると、ステップＳ５０に進む。ステップＳ５０においては、全ての転送すべきフラグメントについて、ディスクリプタが設定されたとして、ネットワークアダプタ１に対し、ＤＭＡを起動するよう指示し、処理を終了する。
【００７１】
以上、本実施形態に係るネットワークアダプタ１を含む通信システムによれば、ネットワークアダプタ１において論理的にフラグメントをまとめてパケットを再構成し、そのヘッダ（再構成ヘッダ３０）を、位置情報４０（各フラグメントのアダプタメモリ１２の先頭アドレスおよびデータ長を表す情報）とともにホストコンピュータ２に通知する。ホストコンピュータ２においては、各フラグメントの先頭アドレスおよびデータ長の情報に基づいて、ＤＭＡ転送が可能とされる。このとき、受信パケットの本体データ部は、ネットワークアダプタ１からホストコンピュータ２のメモリのユーザ空間４へ直接的に転送されるので、ホストコンピュータ２においてデータのメモリ間コピーは不要となる。よって、メモリの利用効率が向上する。また、ホストコンピュータ２において、プロトコル処理ソフトウェアによる受信バッファの管理が容易になる。
【００７２】
また、実施形態の通信システム１０では、ネットワークアダプタ１において各受信パケットのヘッダと本体データ部とが分離され、それらのヘッダ部に基づいて作成された再構成ヘッダ３０および各本体データ部の位置情報４０のみが本体データ部とは別にホストコンピュータ２のカーネル空間５の受信バッファ領域に転送される。ここで、この受信バッファ領域に書き込まれる再構成ヘッダ３０および各本体データ部の位置情報４０のデータ量は、一般的なＭＴＵ（例えば、１５００バイト）と比べて十分に小さいので、本発明の転送方式を実現するために特別なデータ領域を用意する必要はない。
【００７３】
なお、上記実施形態においては、受信したパケットがＩＰフラグメントである場合について説明しているが、これに限られない。例えば、受信した複数のＴＣＰパケット（セグメント）を論理的にまとめて大きなＴＣＰパケット（セグメント）として再構成し、各セグメントのアダプタメモリ上の先頭アドレスおよびデータサイズを、再構成したヘッダとともにホストコンピュータに通知する手段を備えることで、上記実施形態と同様にパケットの転送を実現することが可能とされる。
【００７４】
（付記１）
ネットワークを介して受信した複数のパケットを、ホストコンピュータに転送するためのネットワークアダプタであって、
受信した各パケットを、ヘッダ部と本体データ部とに分離する分離手段と、
前記分離手段により分離された各パケットを蓄積するための蓄積手段と、
前記複数パケットの各ヘッダ部に基づいて新たなヘッダを作成する作成手段と、
前記新たなヘッダ、および前記蓄積手段に蓄積されている複数の本体データ部の各格納位置を示す複数の位置特定情報を、前記ホストコンピュータに通知する通知手段と、
前記ホストコンピュータにおいて前記位置特定情報を用いて作成された転送指示に基づいて、前記蓄積手段から前記複数の本体データ部を読み出してホストコンピュータに転送する転送手段と
を備えることを特徴とするネットワークアダプタ。
（付記２）
前記通知手段は、前記新たなヘッダおよび前記位置特定情報を、前記ホストコンピュータにおけるメモリのカーネル空間に対して送信し、
前記転送手段は、前記複数の本体データ部を、前記ホストコンピュータにおけるメモリのユーザ空間に対して転送する
ことを特徴とする付記１に記載のネットワークアダプタ。
（付記３）
前記通知手段は、前記カーネル空間に書き込まれているＤＭＡディスクリプタに従って、前記新たなヘッダおよび前記位置特定情報を該カーネル空間の所定の領域に対して送信する
ことを特徴とする付記２に記載のネットワークアダプタ。
（付記４）
前記通知手段は、前記新たなヘッダおよび前記複数の位置特定情報に加えて、その複数の位置特定情報の個数を前記ホストコンピュータに通知する
ことを特徴とする付記１に記載のネットワークアダプタ。
（付記５）
前記通知手段は、前記ホストコンピュータのメモリ内に予め用意されているバッファ領域の先頭に前記新たなヘッダを送信し、前記複数の位置特定情報を前記バッファ領域の所定位置に送信し、その位置特定情報の送信先アドレスを前記ホストコンピュータに通知する
ことを特徴とする付記４に記載のネットワークアダプタ。
（付記６）
前記通知手段は、前記ホストコンピュータのメモリ内に予め用意されているバッファ領域の先頭に前記新たなヘッダを送信するとともに、そのバッファ領域の末尾に前記複数の位置特定情報を送信する
ことを特徴とする付記４に記載のネットワークアダプタ。
（付記７）
前記通知手段は、前記ホストコンピュータのメモリ内に予め用意されているバッファ領域の先頭に前記複数の位置制御情報を書き込むとともに、その位置特定情報に続く領域に前記新たなヘッダを書き込む
ことを特徴とする付記４に記載のネットワークアダプタ。
（付記８）
前記複数のパケットは、送信装置において１つのパケットを分割することにより得られたものである
ことを特徴とする付記１に記載のネットワークアダプタ。
（付記９）
前記位置特定情報は、それぞれ対応する本体データ部のデータ長を表す情報を含んでいる
ことを特徴とする付記１に記載のネットワークアダプタ。
（付記１０）
前記蓄積手段は、前記複数の本体データ部の全てが前記転送手段によって前記ホストコンピュータに転送されると、対応する全てのヘッダ部を廃棄する
ことを特徴とする付記１に記載のネットワークアダプタ。
（付記１１）
前記新たなヘッダは、前記複数の本体データ部の全てについて前記蓄積手段に蓄積されたか否かを示すフラグを備え、
前記通知手段は、前記フラグに基づいて前記複数の本体データ部の全てが前記蓄積手段に蓄積されたことを認識すると、前記ホストコンピュータへ前記新たなヘッダおよび前記位置特定情報を転送する処理を開始する
ことを特徴とする付記１に記載のネットワークアダプタ。
（付記１２）
前記複数のパケットの中の最初のパケットを受信したときから最後のパケットを受信し終えるまでの時間を計測するタイマ手段、をさらに備え、
前記タイマ手段により計測される時間が所定の時間を超えると、前記転送手段は、それらの受信パケットをそのままホストコンピュータに転送する
ことを特徴とする付記１に記載のネットワークアダプタ。
（付記１３）
ホストコンピュータ、およびネットワークを介して受信した複数のパケットを該ホストコンピュータに転送するためのネットワークアダプタを含む通信システムであって、
前記ネットワークアダプタは、
受信した各パケットを、ヘッダ部と本体データ部とに分離する分離手段と、
前記分離手段により分離された各パケットを蓄積するための蓄積手段と、
前記複数パケットの各ヘッダ部に基づいて新たなヘッダを作成する作成手段と、
前記新たなヘッダ、および前記蓄積手段に蓄積されている複数の本体データ部の各格納位置を示す複数の位置特定情報を、前記ホストコンピュータに通知する通知手段と、
前記ホストコンピュータにおいて前記位置特定情報を用いて作成された転送指示に基づいて、前記蓄積手段から前記複数の本体データ部を読み出してホストコンピュータに転送する転送手段と、を備え、
前記ホストコンピュータは、前記新たなヘッダに基づいて前記複数の本体データ部を組み立てる
ことを特徴とする通信システム。
（付記１４）
前記ホストコンピュータは、前記ネットワークアダプタから通知された複数の位置特定情報に基づいて、前記転送指示として前記ネットワークアダプタが実行すべきＤＭＡディスクリプタを作成する
ことを特徴とする付記１３に記載の通信システム。
（付記１５）
ネットワークを介して受信した複数のパケットをホストコンピュータに転送するための通信方法であって、
受信した各パケットを、ヘッダ部と本体データ部とに分離し、
前記分離された各パケットを蓄積手段に蓄積し、
前記複数パケットの各ヘッダ部に基づいて新たなヘッダを作成し、
前記新たなヘッダ、および前記蓄積手段に蓄積されている複数の本体データ部の各格納位置を示す複数の位置特定情報を、前記ホストコンピュータに通知し、
前記ホストコンピュータにおいて前記位置特定情報を用いて作成された転送指示に基づいて、前記蓄積手段から前記複数の本体データ部を読み出してホストコンピュータに転送する
処理を含むことを特徴とする通信方法。
（付記１６）
ネットワークアダプタに、ネットワークを介して受信した複数のパケットを、ホストコンピュータに転送する転送処理を実行させるネットワーク転送プログラムであって、
前記ネットワークアダプタに、
受信した各パケットを、ヘッダ部と本体データ部とに分離し、
前記分離された各パケットを蓄積手段に蓄積し、
前記複数パケットの各ヘッダ部に基づいて新たなヘッダを作成し、
前記新たなヘッダ、および前記蓄積手段に蓄積されている複数の本体データ部の各格納位置を示す複数の位置特定情報を、前記ホストコンピュータに通知し、
前記ホストコンピュータにおいて前記位置特定情報を用いて作成された転送指示に基づいて、前記蓄積手段から前記複数の本体データ部を読み出してホストコンピュータに転送する
処理を実行させることを特徴とするネットワーク転送プログラム。（７）
【図面の簡単な説明】
【００７５】
【図１】本発明に係る通信システムにおいて送受信される、パケットの流れを概略的に示した図である。
【図２】一般的なＤＭＡ転送を実行するためのＤＭＡインタフェースを説明する図である。
【図３】本実施形態に係るネットワークアダプタを用いて、受信パケットをホストコンピュータに転送する動作の概略を説明する図である。
【図４】本実施形態に係るネットワークアダプタを用いて構成される、通信システムのブロック図である。
【図５】本実施形態に係る通信システムにおけるホストコンピュータの受信バッファに、パケットの本体データの位置情報と再構成ヘッダとを格納することを説明する図である。
【図６】再構成ヘッダの構造の一例である。
【図７】管理情報のデータ構造の一例である。
【図８】フラグメントの本体データ部分を、ディスクリプタを用いて転送させる動作の概略を説明する図である。
【図９】パケットを受信したネットワークアダプタの動作を説明するフローチャートである。
【図１０】再構成ヘッダおよび位置情報をホストコンピュータに通知する処理についてのフローチャートである。
【図１１】データ転送用ディスクリプタを作成する処理についてのフローチャートである。
【符号の説明】
【００７６】
１      ネットワークアダプタ
２      ホストコンピュータ
３      ホストメモリ
４      ユーザ空間
５      カーネル空間
１２      アダプタメモリ（受信バッファ）
１３      ＤＭＡ制御部
１４      制御部
４１      チェックサム検算機構部
４２      ＣＯＥ動作判定処理部
４３      ヘッダ処理部
４４      パケット再構成処理部
【図２】
2006302246.tif 000003
【図３】
2006302246.tif 000004
【図４】
2006302246.tif 000005
【図７】
2006302246.tif 000006
【図９】
2006302246.tif 000007
【図１０】
2006302246.tif 000008
【図１１】
2006302246.tif 000009
【図１】
2006302246.tif 000010
【図５】
2006302246.tif 000011
【図６】
2006302246.tif 000012
【図８】
2006302246.tif 000013