(57)【要約】      （修正有）【課題】データのサムの計算の負荷を低減することができる通信装置を提供する。【解決手段】通信装置は、複数の領域を含む送信バッファと、送信バッファにデータを転送すると共に、データが格納された複数の領域に格納されたデータに対するサムを算出する転送手段と、送信バッファ内のデータに基づいて複数のパケットの生成処理を実行する第１の生成手段と、算出されたサムの各々が、第１の生成手段が複数のパケットを生成する際に利用可能か否かを判定する判定手段と、判定結果に基づいてサムが利用可能と判定された領域に格納されたデータと、サムが利用可能でないと判定された領域に格納されたデータとを分離して第１の生成手段が生成処理を実行できるように、第１の生成手段に入力するデータ長を決定する決定手段と、送信バッファにデータのうち、決定手段により決定されたデータ長のデータが第１の生成手段に入力されるようにする制御手段とを備える。【選択図】図１
2019165423.tif 000002
【特許請求の範囲】
【請求項１】
複数の領域を含む送信バッファと、
前記送信バッファにデータを転送すると共に、転送されたデータが格納された前記複数の領域の各々において当該各領域に格納されたデータに対応するサムを算出する転送手段と、
前記転送手段により前記送信バッファに転送されたデータを入力とし、当該入力されたデータに基づいて複数のパケットの生成処理を実行する第１の生成手段と、
前記転送手段により算出された前記サムの各々が、前記第１の生成手段が前記複数のパケットを生成する際に利用可能か否かを判定する判定手段と、
前記判定手段による判定結果に基づいて、前記サムが利用可能と判定された領域に格納されたデータと、前記サムが利用可能でないと判定された領域に格納されたデータとを分離して前記第１の生成手段が前記生成処理を実行できるように、前記第１の生成手段に入力するデータ長を決定する決定手段と、
前記転送手段により前記送信バッファに転送されたデータのうち、前記決定手段により決定されたデータ長のデータが前記第１の生成手段に入力されるよう制御する制御手段と、
を有することを特徴とする通信装置。
【請求項２】
前記決定手段は、前記判定手段により前記サムが利用可能と判定された領域に格納されたデータのデータ長または前記サムが利用可能でないと判定された領域に格納されたデータのデータ長のいずれか一方に基づいて、前記第１の生成手段に入力するデータ長を決定することを特徴とする請求項１に記載の通信装置。
【請求項３】
前記複数の領域のうちの第１の領域に対応するサムが前記判定手段により前記サムが利用可能と判定された場合、前記決定手段は、前記判定手段により前記サムが利用可能と判定された領域に格納されたデータのデータ長に基づいて、前記第１の生成手段に入力するデータ長を決定することを特徴とする請求項２に記載の通信装置。
【請求項４】
前記第１の領域に対応するサムが前記判定手段により前記サムが利用可能と判定された場合、前記決定手段は、前記判定手段により前記サムが利用可能と判定された領域のうち少なくとも一部の領域に格納されたデータのデータ長を加算した値を、前記第１の生成手段に入力するデータ長として決定することを特徴とする請求項３に記載の通信装置。
【請求項５】
前記複数の領域のうちの第２の領域に対応するサムが前記判定手段により前記サムが利用可能でないと判定された場合、前記決定手段は、前記判定手段により前記サムが利用可能でないと判定された領域に格納されたデータのデータ長に基づいて、前記第１の生成手段に入力するデータ長を可変に決定することを特徴とする請求項２から４のいずれか１項に記載の通信装置。
【請求項６】
前記第２の領域に対応するサムが前記判定手段により前記チェックサムが利用可能でないと判定された場合、前記決定手段は、前記判定手段により前記サムが利用可能でないと判定された領域のうち少なくとも一部の領域に格納されたデータのデータ長を加算した値を、前記第１の生成手段に入力するデータ長として決定することを特徴とする請求項５に記載の通信装置。
【請求項７】
前記複数の領域のうちの１つの領域に対応するサムを算出するために用いられたデータのデータ長と、当該領域に含まれる未送信データ長とが一致する場合に、前記判定手段は、当該サムが利用可能と判定することを特徴とする請求項１から６のいずれか１項に記載の通信装置。
【請求項８】
前記領域に含まれる有効データ長とデータオフセットとを参照することにより、前記未送信データ長を取得する取得手段を更に有することを特徴とする請求項７に記載の通信装置。
【請求項９】
前記判定手段は、前記複数の領域のうちの１つの領域に対応するサムの値が所定の値であることに基づいて、当該領域に対応するサムが、前記第１の生成手段が前記複数のパケットを生成する際に利用可能でないと判定することを特徴とする請求項１から８のいずれか１項に記載の通信装置。
【請求項１０】
前記決定手段が決定したデータ長が、前記複数のパケットの送信先である他の通信装置との通信セッションにおける最大セグメントサイズより小さい場合、前記第１の生成手段が前記生成処理を実行するのに用いるハードウェアとは異なるハードウェアを利用して、前記転送手段により前記送信バッファに転送されたデータに基づくパケットを生成する第２の生成手段を更に有することを特徴とする請求項１から９のいずれか１項に記載の通信装置。
【請求項１１】
前記転送手段は、Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ（ＤＭＡＣ）であることを特徴とする請求項１から１０のいずれか１項に記載の通信装置。
【請求項１２】
前記第１の生成手段は、ＴＣＰ  Ｓｅｇｍｅｎｔａｔｉｏｎ  Ｏｆｆｌｏａｄ（ＴＳＯ）により前記生成処理を実行することを特徴とする請求項１から１１のいずれか１項に記載の通信装置。
【請求項１３】
複数のパケットを生成して送信する通信装置の制御方法であって、
複数の領域を含む送信バッファにデータを転送すると共に、転送されたデータが格納された前記複数の領域の各々において当該各領域に格納されたデータに対応するサムを算出するステップと、
算出された前記サムの各々が、前記複数のパケットを生成する際に利用可能か否かを判定するステップと、
前記判定の結果に基づいて、前記サムが利用可能と判定された領域に格納されたデータと、前記サムが利用可能でないと判定された領域に格納されたデータとを分離して前記複数のパケットが生成されるように、前記複数のパケットを生成する処理に入力されるデータ長を決定するステップと、
前記送信バッファに転送されたデータのうち、決定された前記データ長のデータを入力とし、当該入力されたデータに基づいて前記複数のパケットを生成する処理を実行するステップと、
を含むことを特徴とする通信装置の制御方法。
【請求項１４】
コンピュータを、請求項１から１２のいずれか１項に記載の通信装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、通信装置の制御方法およびプログラムに関する。
【背景技術】
【０００２】
ネットワーク通信において、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）による通信が広く利用されている。このＴＣＰ／ＩＰは、例えばカメラやスマートフォン等の端末から画像や動画をクラウドサーバへアップロードする等の大容量データ通信でも利用されているため、近年ではより高速で通信可能であることが要請されている。
【０００３】
パケットを通信対向装置へ送信するＴＣＰ／ＩＰプロトコル処理では、まず、送信すべきユーザデータが、アプリケーションから送信用のバッファに転送される。一般的には、次に、バッファに転送されたユーザデータを、ユーザデータの送信単位で切り出し、切り出されたユーザデータ（ペイロード）に対してＴＣＰヘッダおよびＩＰヘッダ等を付加してパケットが生成される。
【０００４】
上記のＴＣＰ／ＩＰプロトコル処理に伴うＣＰＵの負荷を軽減し、パケット送信処理を高速化する技術の１つに、ＴＳＯ（ＴＣＰ  Ｓｅｇｍｅｎｔａｔｉｏｎ  Ｏｆｆｌｏａｄ）処理がある。このＴＳＯ処理は、バッファに転送されたユーザデータを送信単位より大きなサイズで読み出して複数の送信データに分割し、分割された複数の送信データのそれぞれにＴＣＰヘッダおよびＩＰヘッダ等を付加して、複数のパケットを一度に生成する。このＴＳＯ処理は、ＣＰＵから例えばＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）等のハードウエアへパケット生成処理をオフロードするするものであり、パケットごとに発生するヘッダ生成および付加処理がオフロードによって高速化される。
【０００５】
例えば、特許文献１は、ＴＳＯ処理を利用するか否かを、パケットロスの有無やアプリケーションに応じて、ＴＣＰセッション（アプリケーション）単位で制御することの可能なＴＣＰ送信制御装置を開示する。
【０００６】
ところで、送信すべきパケットのヘッダには、パケットの誤り検出のため、ヘッダおよびユーザデータのデータ列のサム（総和）であるインターネットチェックサムが含まれる。また、ユーザデータのみのデータ列の総和をペイロードサムと呼ぶ。ユーザデータをバッファに転送する際にサム計算を投機的に実行して、バッファに格納されるユーザデータに計算されたペイロードサムを付加しておくことが可能である。
上記のＴＳＯ処理では、バッファ中のペイロードサムが利用できれば、複数のパケット生成の段階で、再度ペイロードサムを算出せずに複数パケットの生成がより高速化され得る。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】ＷＯ２０１０／０７３６７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、バッファへの格納時に投機的に計算されたペイロードサムが、複数パケット生成の際に常に利用可能であるとは限らない。例えば、１つのバッファに格納されたユーザデータ全体に対してサム計算されたにもかかわらず、当該バッファに格納されたユーザデータの一部が未送信となる場合には、パケット生成の際に、ペイロードサムを再計算しなければならない。この場合、パケット生成の際に、送信すべきユーザデータを読み込んでペイロードサムを再計算する負荷が生じて、パケット生成処理の高速化が阻害されるおそれがある。特に、上記のＴＳＯ処理では、バッファから大きなサイズのユーザデータを読み込み複数パケットを一括して生成するものであるため、ペイロードサムを再計算しなければならない場合が不必要に増大しかねない。
【０００９】
本発明は、上述の課題に鑑みてなされたものであり、送信すべきデータのインターネットチェックサムの計算における負荷を低減してパケットをより効率的に生成するできるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するため、本発明に係る通信装置のある態様によれば、複数の領域を含む送信バッファと、前記送信バッファにデータを転送すると共に、転送されたデータが格納された前記複数の領域の各々において当該各領域に格納されたデータに対応するサムを算出する転送手段と、前記転送手段により前記送信バッファに転送されたデータを入力とし、当該入力されたデータに基づいて複数のパケットの生成処理を実行する第１の生成手段と、前記転送手段により算出された前記サムの各々が、前記第１の生成手段が前記複数のパケットを生成する際に利用可能か否かを判定する判定手段と、前記判定手段による判定結果に基づいて、前記サムが利用可能と判定された領域に格納されたデータと、前記サムが利用可能でないと判定された領域に格納されたデータとを分離して前記第１の生成手段が前記生成処理を実行できるように、前記第１の生成手段に入力するデータ長を決定する決定手段と、前記転送手段により前記送信バッファに転送されたデータのうち、前記決定手段により決定されたデータ長のデータが前記第１の生成手段に入力されるよう制御する制御手段と、を備える通信装置が提供される。
【発明の効果】
【００１１】
本発明によれば、送信すべきデータのインターネットチェックサムの計算における負荷を低減してパケットをより効率的に生成することができる。
【図面の簡単な説明】
【００１２】
【図１】本実施形態に係る通信装置１のハードウエアおよび機能構成の一例を示すブロック図
【図２】通信装置１のネットワークバッファ３３の構成の一例を示す図
【図３】本実施形態における送信バッファ３３へのユーザデータの格納およびＴＳＯ処理でのデータレイアウトの一例を説明する図
【図４】通信装置１から通信対向通信装置へのパケット送信の処理シーケンスの一例を示す図
【図５】通信装置１のパケット生成処理の処理手順の一例を示すフローチャート
【図６】図５のパケット生成部３６が実行する実行サイズ決定処理の詳細処理手順の一例を示すフローチャート
【発明を実施するための形態】
【００１３】
以下、添付図面を参照して、本発明を実施するための実施形態について詳細に説明する。なお、以下に説明する実施形態は、本発明の実現手段としての一例であり、本発明が適用される装置の構成や各種条件によって適宜修正又は変更されるべきものであり、本発明は以下の実施形態に必ずしも限定されるものではない。また、本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。なお、同一の構成については、同じ符号を付して説明する。
【００１４】
本実施形態においては、パケットを生成および送信可能な通信装置において、送信バッファへデータを転送する際にペイロードサムを計算し、パケット生成の際に、事前に計算されたペイロードサムを利用可能か否かを判定する。
具体的には、本実施形態において、通信装置は、アプリケーションから送信バッファへデータを転送する際に、送信すべきデータのペイロードサムを投機的に計算し、計算したペイロードサムを対応するデータに付加して送信バッファに格納する。また、本実施形態において、通信装置は、送信バッファから読み出された送信すべきデータから生成される複数のパケットに付加すべきヘッダを生成する際に、投機的に計算されたペイロードサムがパケットに付加すべきヘッダで利用可能か否かを判定する。そして、通信装置は、この事前に計算されたペイロードが利用可能であるか否かの判定結果に従って、複数のパケット生成において処理すべきデータ長を可変に決定する。例えば、通信装置は、ペイロードサムを再計算しなければならないデータと再計算が不要なデータとを混在させることがないよう、複数のパケット生成において処理すべきデータ長を決定する。
これにより、不必要なペイロードサムの再計算が低減されるため、送信すべきデータのペイロードサムの計算における負荷を低減してパケットをより効率的に生成することができる。
【００１５】
ここで、ペイロードサムの事前計算は、アプリケーションから送信バッファにユーザデータを転送する際に同時に実行されてよい。また、送信バッファのユーザデータから複数のパケットを生成する処理は、例えば、ＴＳＯ（ＴＣＰ  Ｓｅｇｍｅｎｔａｔｉｏｎ  Ｏｆｆｌｏａｄ）技術を使用してオフロード実行されてよい。
また、パケット生成の際に送信データに付加されるヘッダは、ＴＣＰヘッダ、ＩＰヘッダおよびＥｔｈｅｒ（Ｅｔｈｅｒｎｅｔ（登録商標））ヘッダを含んでよい。
【００１６】
＜本実施形態のハードウエアおよび機能構成＞
図１は、本実施形態に係る通信装置のハードウエア構成および機能構成の一例を示す図である。
図１に示す通信装置１の各機能モジュールのうち、ソフトウエアにより実現される機能については、各機能モジュールの機能を提供するためのプログラムがＲＯＭ等のメモリに記憶され、ＲＡＭに読み出してＣＰＵが実行することにより実現される。ハードウエアにより実現される機能については、例えば、所定のコンパイラを用いることで、各機能モジュールの機能を実現するためのプログラムからＦＰＧＡ上に自動的に専用回路を生成すればよい。ＦＰＧＡとは、Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略である。また、ＦＰＧＡと同様にしてＧａｔｅ  Ａｒｒａｙ回路を形成し、ハードウエアとして実現するようにしてもよい。また、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）により実現するようにしてもよい。なお、図１に示した機能ブロックの構成は一例であり、複数の機能ブロックが１つの機能ブロックを構成するようにしてもよいし、いずれかの機能ブロックが複数の機能を行うブロックに分かれてもよい。
【００１７】
通信装置１は、主処理部２、および通信処理部３を備える。主処理部２は、各種アプリケーションを含む、通信装置１の全体の処理を実行する。通信処理部３は、例えばＴＣＰ／ＩＰ等の通信プロトコル処理を含む各種通信処理や制御を実行する。主処理部２および通信処理部３は、バスブリッジ４により相互接続されている。
【００１８】
主処理部２は、メインＣＰＵ２１、メインメモリ２２、およびメインバス２４を備える。
メインＣＰＵ２１は、各種プログラムの実行を行うとともに、通信装置１の全体を制御する。メインＣＰＵ２１により実行されるプログラムには、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）や各種アプリケーションが含まれる。
メインメモリ２２は、メインＣＰＵ２１や通信処理部３のサブＣＰＵ３１が各処理を実行する上で必要となるデータやプログラムなどを格納する。このメインメモリ２２は、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の半導体メモリで構成されてよい。
【００１９】
メインメモリ２２内部には、メインＣＰＵ２１によりユーザバッファ２３が構成され、このユーザバッファ２３にユーザデータが格納される。ユーザバッファ２３は、メインＣＰＵ２１の他、サブＣＰＵ３１からもバスブリッジ４およびメインバス２４を介してアクセス可能な領域とされる。ユーザバッファ２３に格納されるユーザデータは、メインＣＰＵ２１が通信装置１のアプリケーションからネットワーク５を介して通信対向装置へ送出したいデータを含む。以下、ユーザデータは、単に「データ」ともいう。
メインバス２４は、メインＣＰＵ２１からメインメモリ２２および通信処理部３へのアクセスおよびデータ転送、または通信処理部３からメインメモリ２２へのアクセスおよびデータ転送などに使用される。
【００２０】
通信処理部３は、サブＣＰＵ３１、内部メモリ３２、データ転送部３４、パケット生成部３６、ローカルバス３７、ＬＡＮ制御部３８、ＷＬＡＮ制御部３９を備える。
サブＣＰＵ３１は、各種通信処理に関するプログラムの実行を行う。サブＣＰＵ３１により実行されるプログラムは、ＯＳおよび通信プロトコル処理のための通信プロトコルスタックを含む。本実施形態では、通信プロトコル処理として、ＴＣＰ／ＩＰプロトコルスタックが実行される例を説明するが、他のプロトコルスタックであってもよい。
【００２１】
内部メモリ３２は、例えば、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）上に構成されるオンチップメモリであってよい。内部メモリ３２は、通信処理部３のサブＣＰＵ３１、データ転送部３４、パケット生成部３６からアクセス可能なメモリである。この内部メモリ３２は、例えばＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の半導体メモリで構成されてよく、これによりメインメモリ２１より高速にアクセスされることが可能となる。
内部メモリ３２内部には、サブＣＰＵ３１によりネットワークバッファ３３が構成される。このネットワークバッファ３３は、サブＣＰＵ３１が通信対向装置との間で送受信されるデータを処理する際に使用される送信バッファである。このネットワークバッファ３３の詳細は図２を参照して後述する。
【００２２】
データ転送部３４は、メインＣＰＵ２１、サブＣＰＵ３１およびパケット生成部３６からの指示に従って、データ転送を実行することが可能である。データ転送部３４は、例えば、メインメモリ２１に格納されているデータを、パケット生成部３６または内部メモリ３２へ転送する。
このデータ転送部３４は、サム計算部３５を備える。このサム計算部３５は、データ転送部３４が例えばユーザバッファ２３からネットワークバッファ３３へ転送するデータを監視し読み取ることで、転送されるデータに対するサムを計算することができる。
このサム計算結果をペイロードサムとして利用することが出来る。つまり、パケット生成処理において、インターネットチェックサムをヘッダのデータ列のサム計算結果とペイロードサムを足し合わせることで算出する。
サム計算部３５により計算されたペイロードサムは、ネットワークバッファ３３へ転送されたデータの末尾に付加する形式で、当該データに対応付けられ、内部メモリ３２のネットワークバッファ３３上に格納される。例えば、サブＣＰＵ３１がデータ転送部３４へデータ転送を指示していた場合、データ転送終了後に、ネットワークバッファ３３内でデータが格納された直後のメモリ領域から、当該データに対応して計算されたペイロードサムを読み出すことができる。
【００２３】
データ転送部３４が実行する処理の全部または一部は、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）に実装してオフロード実行することができる。具体的には、ＤＭＡＣは、アプリケーションからソケットＡＰＩのｓｅｎｄ（）コールで受け渡されたユーザデータを、ＭＳＳ（Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ）サイズ以下で区切ってネットワークバッファ３３へ転送する。さらにＤＭＡＣは、ネットワークバッファ３３に転送するデータについてペイロードサムを計算する。ＭＳＳとは、ＴＣＰセッション等の通信セッションの確立時に設定される、ユーザデータの送信単位（セグメント）の最大値、すなわち当該ＴＣＰセッションで送信可能な最大セグメントサイズである。通常、このＭＳＳは、通信対向装置から当該装置が受信できるセグメントの最大値としてＴＣＰオプションで通知される。
データ転送部３４の処理をＤＭＡＣに実装することにより、ＴＣＰ／ＩＰのプロトコル処理実行に係るサブＣＰＵ３１の処理負荷低減およびＴＣＰ／ＩＰプロトコル処理の高速化を図ることができる。
データ転送部３４は、データ転送設定可能なレジスタを内部に持ち、サブＣＰＵ３１およびパケット生成部３６からデータ転送元アドレス、データ転送先アドレス、転送データ長を設定することが可能である。また転送と同時にサム計算を実行する際は、サブＣＰＵ３１によりサム計算の対象となるデータ列の範囲がレジスタへ指定される。
なお、各種転送設定情報を内部メモリ３２などのメモリ上に配置し、データ転送部３４のレジスタへ転送設定情報を配置したメモリアドレスを指定する形態であっても構わない。データ転送部３４は、指定されたメモリアドレスから転送設定情報を読み出し、データ転送を実行することが出来る。
【００２４】
ここで、データ転送部３４がネットワークバッファ３３へユーザデータを転送する際に区切ったサイズから変更なく、パケット生成部３６がパケットを生成可能な場合は、パケット生成の際にデータ部分のペイロードサムを再計算する必要がない。この場合、パケット生成部３６は、データ転送部３４のサム計算部３５が投機的に計算したペイロードサムを利用して、ＴＣＰヘッダに格納すべきインターネットチェックサムを計算することができる。
一方、サム計算部３５が投機的に計算したペイロードサムが利用可能でない場合、パケット生成部３６はパケット生成の際にデータのデータ列の和を取ることでチェックサムを再計算しなければならず、処理負荷が高まるとともに高速化が阻まれる。
【００２５】
パケット生成部３６は、サブＣＰＵ３１からの指示に従って、ネットワークバッファ３３に格納されているユーザデータを連結または分割しパケット化する。
具体的には、パケット生成部３６は、サブＣＰＵ３１から入力される、ネットワークバッファ３３内の先頭データに対応したＴＣＰ／ＩＰのヘッダ情報に基づいて、複数のパケットのための複数のヘッダを生成する。
本実施形態において、パケット生成部３６は、サム計算部３５が投機的に計算したペイロードサムが利用可能であるか否かに基づいて、実行サイズを可変とする。実行サイズとは、複数のパケット生成において処理すべき処理データ長（ユーザデータ長）をいう。
パケット生成部３６が生成した複数のヘッダは、パケット生成部３６の内蔵メモリへ格納してもよく、内部メモリ３２へ格納してもよい。上記のとおり、ヘッダを生成する際に、サム計算部３５が事前に計算したペイロードサムを利用することができる。パケット生成部３６は、例えば、サブＣＰＵ３１を介して、生成されたヘッダと、ネットワークバッファ３３上の送信データ（ペイロード）とを連結することにより、ネットワークへ送信すべき複数のパケットを生成する。
また、パケット生成部３６は、パケット生成処理に必要となるヘッダの書き込みやユーザデータの読み出しなど、データ移動を必要とする処理は、データ転送部３４へ実行させる。つまりパケット生成部３６は、データ転送部３４の転送設定情報を生成し、データ転送を実行させることが出来る。
【００２６】
パケット生成部３６が実行する処理の全部または一部は、ＴＳＯ（ＴＣＰ  Ｓｅｇｍｅｎｔａｔｉｏｎ  Ｏｆｆｌｏａｄ）のオフローダに実装してオフロード実行することができる。このＴＳＯは、例えばＮＩＣ上にハードウェアオフローダとして実装されてよい。  具体的には、ＴＳＯオフローダは、ネットワークバッファ３３に格納されたユーザデータを複数のデータセグメントに分割し、分割されたデータセグメントのそれぞれに対してＴＣＰ／ＩＰヘッダを生成および付加することで、複数のパケットを生成する。ＴＳＯオフローダにより生成された複数のパケットは、ＬＡＮ制御部３８やＷＬＡＮ制御部３９等の通信制御部に受け渡されて、ネットワーク５へ送出される。
【００２７】
ＴＳＯオフローダを使用する場合、ＴＣＰ／ＩＰのプロトコル処理では、ＭＳＳサイズに制限されることなく、大きいサイズのユーザデータをネットワークバッファ３３へ格納することができる。ＴＳＯオフローダが、データ転送部３４を介してネットワークバッファ３３のユーザデータを読み出て、ＭＳＳサイズを基にユーザデータを分割して、複数のパケットを生成する。ＴＣＰ／ＩＰのプロトコル処理の観点では、ヘッダの生成および付加処理をパケット数分実行する必要が無くなり、処理高速化に繋がることになる。
特にパケット生成部３６を、長いペイロード長のユーザデータから複数のパケットを一括して生成するＴＳＯオフローダに実装した場合、ペイロードサムの再計算が殊更に増大しかねない。ＴＳＯオフローダでは、１回のＴＳＯ処理で、事前に計算されたペイロードサムを利用したヘッダ生成と、事前に計算されたペイロードサムを利用しないヘッダ生成とを混在させて、複数のパケットを生成することができないからである。すなわち、複数パケット生成の際に、事前に計算されたペイロードサムを利用してヘッダ生成を実行する場合には、パケット化を行う複数パケットの全てのペイロードに対して、事前に計算されたペイロードサムが利用可能でなければならない。換言すると、パケット生成の際に、複数のパケットのうち、一部のペイロードのみペイロードサムを再計算することはできない。
【００２８】
ローカルバス３７は、通信処理部３の各機能ブロックを相互接続するとともに、メインバス２４にバスブリッジ４を介して接続する。
ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）制御部３８は、ネットワーク５へ接続する有線通信インターフェースであり、通信装置１と通信対向装置との間でパケットの送受信を実行する。このＬＡＮ制御部３８は、伝送メディアのＰＨＹレイヤおよびＭＡＣレイヤ（伝送メディア制御）のハードウェア回路を含む。例えば、ＬＡＮ制御部３８のインターフェースがＥｔｈｅｒｎｅｔ（登録商標）である場合、ＬＡＮ制御部３８は、イーサネット（登録商標）ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）に相当する。
ＷＬＡＮ（Ｗｉｒｅｌｅｓｓ  ＬＡＮ）制御部３９は、ネットワーク５に接続する無線通信インターフェースであり、通信装置１と通信対向装置との間でパケットの送受信を実行する。このＷＬＡＮ制御部３９は、ＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎ／ａｃ等の無線ＬＡＮ制御を実行するコントローラおよびＲＦ（Ｒａｄｉｏ  Ｆｒｅｑｕｅｎｃｙ）回路を含む。
【００２９】
＜ネットワークバッファ３３の構成例＞
図２は、通信装置１の通信処理部３の内部メモリ３２に、サブＣＰＵ３１により構成される、ネットワークバッファ３３の構成例を示す。ネットワークバッファ３３は、サブＣＰＵ３１の起動時に内部メモリ３２の所定の領域に構築され、パケットの送信および受信処理に関連して必要に応じ、内部メモリ３２内でネットワークバッファ３３の獲得や解放が実行される。
【００３０】
図２に示すように、ネットワークバッファ３３は、複数のバッファ２００〜２０２が連結された構成を有する。すなわち、パケット送信の実行時、通信装置１には、バッファが複数備えられる。複数のバッファのそれぞれは、構成要素として、次バッファアドレス、有効データ長、サム、サム計算長、データオフセットおよびデータエリアを持つ。なお、図２は、各バッファ２００〜２０２が内部メモリ３２上の連続した領域に配置される例を示すが、必ずしも連続領域に配置される必要はない。また図２に示すバッファ２００〜２０２の各バッファ内の構成は全て同一であり、またバッファの数は図２に示される数に限定されない。
本実施形態において、データエリア以外の各バッファの構成要素の情報は全てサブＣＰＵ３１により設定されるものであり、以下、一括して「バッファ情報」ともいう。このバッファ情報は、図２に示すように、次バッファアドレス、有効データ長、サム、サム計算長、およびデータオフセットを含む。
【００３１】
次バッファアドレスは、当該バッファに連結される次のバッファのアドレス情報を示す。例えばバッファ２００に連結されるバッファがバッファ２０２である場合は、バッファ２００の次バッファアドレスにはバッファ２０２のメモリ上のアドレス「０ｘ２０００＿１４００」が格納される。
有効データ長は、当該バッファのデータエリアに格納されているデータの長さを示す。例えば格納されているデータが、データエリアの先頭からＭＳＳサイズのペイロードであれば、有効データ長の値にはＭＳＳ値が入ることになる。
【００３２】
サムは、データエリアに格納されているデータについて計算されたサムの値を示す。このサムには、データ転送部３４のサム計算部３５により投機的に計算されたペイロードサムの値が格納される。
サム計算長は、ペイロードサムが計算されたデータ（ペイロード）のデータ長を示す。
データオフセットは、データエリアの先頭アドレスから有効データが格納されているアドレスまでのオフセット長を示す。例えば、データエリアの先頭からＭＳＳサイズのデータを格納していたとしても、データオフセットが設定されている場合は、未送信データ長である実際の有効データ長はＭＳＳからオフセット長を減算した値となる。
データエリアには、ユーザデータが格納される。本実施形態では、パケットとして送信すべきペイロードが格納され、データ転送部３４によりデータエリアに格納されたペイロードの書き込みおよび読み出しが実行される。
【００３３】
＜ＴＳＯ処理を使用するパケット生成処理の概要＞
図３は、アプリケーションからネットワークバッファ３３へのデータの転送およびＴＳＯオフローダによる複数パケットの生成処理の概要を説明する図である。
図３に示すように、データ転送部３４、例えばＤＭＡＣ、は、ユーザバッファ２３内のユーザデータ（送信データ）３０１をＭＳＳサイズで区切り、複数の送信データ１〜４としてネットワークバッファ３３に転送する。データ転送の際に、データ転送部３４のサム計算部３５は、複数の送信データ１〜４のそれぞれについてペイロードサム１ｂ〜４ｂを計算し、計算したデータに付加して各バッファに格納する。
【００３４】
図３において、ネットワークバッファ３３内には、パケット生成の際にＴＣＰヘッダ、ＩＰヘッダ、およびＥｔｈｅｒヘッダを生成するために必要となるヘッダ情報３０３が、複数の送信データ１〜３について、図２に示す各ヘッダ情報の領域に構成されている。
パケット生成部３６をＴＳＯオフローダに実装した場合、パケット生成部３６は、ネットワークバッファ３３に格納された送信データ３０２を分割し、複数のパケットを一括して生成するＴＳＯ処理を実行する。
具体的には、パケット生成部３６は、ネットワークバッファ３３内の送信データ３０２を分割し、各送信データ（ペイロード）にＴＣＰヘッダ、ＩＰヘッダ、およびＥｔｈｅｒヘッダを付加して、複数のパケット３０４、３０５、および３０６を生成する。これらＴＣＰヘッダ、ＩＰヘッダ、およびＥｔｈｅｒヘッダを、「ＴＣＰ／ＩＰヘッダ」ともいう。ＴＣＰヘッダには、送信パケット３０４、３０５、および３０６のそれぞれのペイロードに対応するインターネットチェックサム（ＴＣＰチェックサム）が書き込まれる。
【００３５】
このインターネットチェックサムは、ネットワークバッファ３３内で送信データ１〜４に付加されたペイロードサム１ｂ〜４ｂが利用可能である場合、ヘッダ情報３０３のみを読み出してサムを計算し、事前に計算されたペイロードサムに足し合わせればよい。一方、ペイロードサム１ｂ〜４ｂがそのまま利用できない場合には、パケットヘッダ（ＴＣＰ／ＩＰヘッダ）を生成する際に、ヘッダ情報３０３の他、送信データ３０２をすべて読み出した上でインターネットチェックサムを計算しなければならない。複数のパケット生成における負荷の低減やスループット向上の観点からは、全送信データ３０２の読み出しを必要とするインターネットチェックサムの再計算はできる限り回避すべきこととなる。
生成された複数のパケット３０４、３０５、および３０６は、ネットワーク５に一括送信される。
【００３６】
このように、パケットごとに発生する当該パケットに付加すべきヘッダ（ＴＣＰヘッダ、ＩＰヘッダ、およびＥｔｈｅｒヘッダ）の生成処理やペイロードへのヘッダ付加処理をハードウエアオフロードすることにより、複数パケットの生成処理が高速化される。
本実施形態において、サブＣＰＵ３１は、データ転送部３４のサム計算部３５により計算されれたペイロードサム１ｂ〜４ｂを利用可能か否かを判定する。そして、サブＣＰＵ３１は、ペイロードサムが利用可能であるか否かに基づいてパケット生成部３６（ＴＳＯオフローダ）が一度に実行すべきＴＳＯ処理の実行サイズを可変に決定して、パケット生成部３６へ決定された実行サイズを指示する。
【００３７】
ここで、上記のとおり、ＴＳＯオフローダは、事前に計算されたペイロードサムを利用したヘッダ生成と、事前に計算されたペイロードサムを利用しないヘッダ生成とを混在させて、複数パケットを生成するＴＳＯ処理を実行することができない。このため、本実施形態では、サブＣＰＵ３１は、ネットワークバッファ３３中の送信データについて事前に計算されたペイロードサムが利用可能であると判定した場合、ペイロードサムが利用可能な送信データのデータ長に基づいてＴＳＯ処理の実行サイズを決定する。一方、サブＣＰＵ３１が、ネットワークバッファ３３中の送信データについて事前に計算されたペイロードサムが利用可能でないと判定した場合、ペイロードサムが利用可能でない送信データのデータ長に基づいてＴＳＯ処理の実行サイズを決定する。このＴＳＯ処理（複数パケット生成処理）における実行サイズの決定詳細は図６を参照して後述する。
【００３８】
＜通信装置１のパケット送信処理シーケンス例＞
図４は、通信装置１がネットワーク５を介して通信対向装置へパケット送信するパケット送信処理のシーケンスを示す。
Ｓ４１で、メインＣＰＵ２１は、メインメモリ２２内のユーザバッファ２３へユーザデータを格納する。
Ｓ４２で、メインＣＰＵ２１は、アプリケーションからのユーザデータの送信要求として、ソケットＡＰＩであるｓｅｎｄ（）を呼び出す。
Ｓ４２でｓｅｎｄ（）の呼び出しが実行されると、サブＣＰＵ３１は、パケット送信のため、データ転送処理を開始し、まず、ユーザバッファ２３からネットワークバッファ３３へユーザデータをコピーする。
【００３９】
このユーザデータのネットワークバッファ３３へのコピーを実行するため、Ｓ４３で、サブＣＰＵ３１は、まず、内部メモリ３２のネットワークバッファ３３の領域から、ユーザデータ送信に必要な分のバッファを獲得する。複数のバッファを獲得する場合、獲得された複数のバッファは、バッファ情報の次バッファアドレスにより全て連結された状態となる。
Ｓ４４で、サブＣＰＵ３１は、獲得されたバッファに対して、ユーザバッファ２３からユーザデータをコピー（転送）するように、データ転送部３４へ要求する。また、サブＣＰＵ３１は転送時に転送するデータを対象とするサム計算を実行するように、データ転送部３４内のレジスタへ設定を行う。
ユーザデータのコピーを要求されたデータ転送部３４は、Ｓ４５で、ユーザバッファ２３からユーザデータを読み出し、ネットワークバッファ３３内の各バッファへ分割して格納する。
この際、データ転送部３４は、ＭＳＳサイズを最大長として各バッファへデータを分割していく。例えば、ユーザバッファ２３に存在するユーザデータが７０００バイトで、ＭＳＳサイズが１４６０バイトだったとすると、４つのバッファのそれぞれに１４６０バイトのデータが格納され、最後のバッファに１１６０バイトのデータが格納される。ここでバッファに分割して格納されたユーザデータが、それぞれパケットのペイロードとなる。
【００４０】
Ｓ４５において、データ転送部３４によるユーザデータのネットワークバッファ３３への転送中に、サム計算部３５は、転送されるユーザデータのペイロードサムを投機的に計算する。ここで計算されたペイロードサムは、例えば、転送されたユーザデータの直後のメモリ領域に書き込まれる。Ｓ４５のデータ転送およびペイロードサムの書き込みが完了すると、Ｓ４６で、データ転送部３４は、データ転送完了をサブＣＰＵ３１へ通知する。
Ｓ４７で、サブＣＰＵ３１は、Ｓ４４で要求したデータ転送が完了したことを検知すると、ユーザデータが転送された各バッファのバッファ情報を更新する。ここで、Ｓ４５でデータ転送の際に計算されたペイロードサムは、バッファ情報を構成する各バッファ２００〜２０２のサムフィールドに格納される。このとき、各バッファ２００〜２０２のバッファ情報内の有効データ長とサム計算長は一致している。
【００４１】
次に、サブＣＰＵ３１は、ネットワークバッファ３３へコピーされたユーザデータの送信処理を開始する。まず、Ｓ４８で、サブＣＰＵ３１は、パケット生成部３６により生成されるパケットに付加すべきヘッダを格納するためのネットワークバッファ３３を獲得する。なお、Ｓ４８でヘッダを格納するために獲得するネットワークバッファ３３のデータエリアは、ユーザデータを格納するネットワークバッファ３３のデータエリアより小さいサイズに制限してもよい。
【００４２】
Ｓ４９で、サブＣＰＵ３１は、パケット生成部３６に実行させる複数パケット生成処理（ＴＳＯ処理）における実行サイズを決定して、パケット生成部３６に通知する。
ＴＣＰプロトコルにおける通信では、通信を行っているアプリケーションごとにコネクションが異なり、コネクションごとにウィンドウサイズやＭＳＳサイズが管理される。本実施形態では、サブＣＰＵ３１が各コネクションの管理を実行し、ウィンドウサイズやＭＳＳサイズ等のコネクション情報はメインメモリ２２内に格納されている。このようなメインメモリ２２に格納されるコネクション情報は、サブＣＰＵ３１、データ転送部３４、およびパケット生成部３６により参照され、送信データサイズが決定されてよい。
【００４３】
Ｓ４９でサブＣＰＵ３１からパケット生成部３６に設定される実行サイズの詳細な決定処理は、図６を参照して後述する。Ｓ４９では、サブＣＰＵ３１は、実行サイズの他にも、ＴＣＰ／ＩＰヘッダを生成するための情報やデータ転送時に算出されたペイロードサムをバッファ情報から読み出し、パケット生成部３６に設定する。
具体的には、サブＣＰＵ３１は、パケット生成部３６にＴＣＰ／ＩＰヘッダを生成させるための情報として、これから生成しようとするパケットの先頭ペイロードに対するＴＣＰ／ＩＰヘッダを生成してパケット生成部３６へ受け渡す。サブＣＰＵ３１が生成する先頭ペイロードのためのヘッダを、「テンプレートヘッダ」という。
パケット生成に必要な情報を設定した後、Ｓ５０で、サブＣＰＵ３１は、パケット生成部３６へパケット生成要求を行う。
【００４４】
パケット生成が要求されると、Ｓ５１で、パケット生成部３６は、ネットワークバッファ３３に格納されたユーザデータを分割し、ＴＣＰ／ＩＰヘッダを生成して、複数のパケットを生成する。
具体的には、パケット生成部３６は、ヘッダ生成に必要な情報のうち、送信元、宛先ＩＰアドレス、送信先、宛先ポート番号等、複数のパケット間で変化のないヘッダフィールドについては、全てテンプレートヘッダを複製することでヘッダを生成する。
一方、パケット生成部３６は、例えば、ＩＰｖ４ヘッダにおけるＩＰヘッダチェックサム、データグラム長、ＴＣＰヘッダにおけるシーケンス番号、インターネットチェックサム等、複数のパケット間で変化のあるヘッダフィールドはテンプレートヘッダから内容を変更して、ヘッダを生成する。
【００４５】
本実施形態において、Ｓ５１のＴＣＰ／ＩＰヘッダの生成でインターネットチェックサムを算出する際に、ペイロードサムがセットされているか否かにより処理が異なる。具体的には、ペイロードサムがセットされていない場合には、Ｓ５２で、パケット生成部３６は、ネットワークバッファ３３に格納されたユーザデータを読み出し、読み出したユーザデータに対するサム計算を実行する。
この場合のネットワークバッファ３３からのユーザデータの読み出し、およびサムの計算は、Ｓ４５のネットワークバッファ３３へのデータコピー時と同様、Ｓ５３で、データ転送部３４およびおよびサム計算部３５を介して実行すればよい。パケット生成部３６からは、読み出しを行うデータ範囲の指定と、そのデータを対象とするサム計算を実行するように、データ転送部３４内のレジスタへ転送設定を行う。
Ｓ５４で、読み出されたユーザデータおよび計算されたペイロードサムは、データ転送部３４かパケット生成部３６へ供給される。パケット生成部３６は、得られたペイロードと、ＴＣＰヘッダおよび疑似ヘッダ部分のサムを求めて、ＴＣＰヘッダに書き込むべきインターネットチェックサムを計算することができる。
一方、Ｓ５１で、ペイロードサムがセットされている場合には、ユーザデータを読み出す必要がないため、Ｓ５２〜Ｓ５４の処理は省略できる。パケット生成部３６は、セットされたペイロードサムとＴＣＰヘッダおよび疑似ヘッダ部分のサムを求めてインターネットチェックサム計算することができる。
【００４６】
Ｓ５５で、パケット生成部３６は、生成した複数のヘッダをＳ４８で獲得したネットワークバッファ３３の領域へ格納するよう、データ転送部３４に指示する。また、インターネットチェックサムの算出は、本転送と同時に実行される。パケット生成部３６は、ヘッダの転送と、各ヘッダ列のサム計算およびペイロードサムの足しわせを実行する転送設定をデータ転送部３４内のレジスタへ設定を行う。転送元のＴＣＰヘッダ内のチェックサムフィールドは未計算（０値）で生成されており、本転送時に算出されたインターネットチェックサムでチェックサムフィールドは上書きされる。
Ｓ５６で、データ転送部３４は、Ｓ５５で格納を指示された複数のヘッダをネットワークバッファ３３へ格納する。生成された複数のヘッダがネットワークバッファ３３に格納されると、Ｓ５７で、データ転送部３４は、パケット生成部３６へ、生成された複数のヘッダのネットワークバッファ３３への格納完了を通知する。
Ｓ５８で、パケット生成部３６は、複数のヘッダの生成が完了したことをサブＣＰＵ３１へ通知する。
【００４７】
Ｓ５９で、サブＣＰＵ３１は、複数のヘッダの生成が完了したことを検知すると、生成された各ヘッダと各ペイロードとを連結してパケットを生成するために、バッファ情報を更新する。具体的には、サブＣＰＵ３１は、ヘッダが格納されたネットワークバッファ３３の次バッファアドレスへ、ペイロードが格納されたアドレスを設定することで、１つのパケットを形成することができる。同様の処理を、パケット数分繰り返し実行する。これにより、複数のパケットが生成される。
Ｓ５９で複数パケットの生成が完了すると、サブＣＰＵ３１は、複数のパケットを連結した送信要求をＷＬＡＮ制御部３９へ指示する。複数パケットの送信が指示されたＷＬＡＮ制御部３９は、ネットワークバッファ３３上に格納されている複数のパケット（パケット群）を読み出して、ネットワーク５へ送信する。
【００４８】
Ｓ６１で、ＷＬＡＮ制御部３９は、全てのパケットの送信を完了すると、パケット送信の完了をサブＣＰＵ３１へ通知する。なお、上記ではＷＬＡＮ制御部３９によりパケットを送信する例を説明したが、これに替えてＬＡＮ制御部３８が同様にパケット送信してもよい。
上記のＳ４８からＳ６１までの処理が、一連の複数のパケット生成および送信処理に相当する。ネットワークバッファ３３へコピーされたユーザデータを全て送信するまで、Ｓ４８からＳ６１の処理は繰り返される。
ネットワークバッファ３３へコピーされたユーザデータがすべてパケットとして送信されると、Ｓ６２で、サブＣＰＵ３１は、メインＣＰＵ２１へ対しｓｅｎｄ（）コールが成功した旨の応答を通知する。
【００４９】
＜通信装置１のパケット送信処理＞
図５は、本実施形態において通信装置１が実行するパケット送信処理の処理手順の一例を示すフローチャートである。図５に示す処理は、図４に示すＳ４９からＳ６１の処理に相当する。図５のパケット送信処理は、例えば、アプリケーションからユーザデータの送信を指示されたことを契機に起動されてよいが、これに限定されない。
Ｓ１で、通信処理部３は、データ転送部３４がユーザデータをネットワークバッファ３３へコピーし（図４のＳ４５）、さらにサブＣＰＵ３１がパケット生成部３６のヘッダ出力場所としてのネットワークバッファを確保した後に（Ｓ４８）、パケット送信処理を開始する。
【００５０】
Ｓ２で、サブＣＰＵ３１は、パケット生成部３６に実行させる複数パケット生成処理の実行サイズを決定して、パケット生成部３６に決定された実行サイズを設定する。この実行サイズの決定方法については図６を参照して後述する。
Ｓ３で、サブＣＰＵ３１は、Ｓ２で決定された複数パケット処理の実行サイズが、パケット送信に使用されるコネクションのＭＳＳサイズより大きいか否かを判定する。ＭＳＳサイズは、メインメモリ２２に格納されたコネクション情報を参照することで取得することができる。
【００５１】
Ｓ２で決定された実行サイズがＭＳＳサイズより大きい場合（Ｓ３：Ｙ）、Ｓ４に進み、パケット生成部３６が複数パケット生成処理を実行する。一方、Ｓ２で決定された実行サイズがＭＳＳ以下の場合（Ｓ３：Ｎ）、Ｓ５に進み、サブＣＰＵ３１がパケット生成処理を実行してよい。
Ｓ３で、ＭＳＳサイズを下回るパケットのサイズであった場合には、送信パケットは１パケットしか生成されないことから、パケット生成部３６を使用してパケットを生成する必要がない。却って、パケット生成部３６を使用してパケットを生成させる際の各種設定によるオーバーヘッドを考慮すると、１パケットの生成で足りる場合はサブＣＰＵ３１で実行する方が効率がよいと考えられる。
また、Ｓ５においてサブＣＰＵ３１によりパケット生成する際にも、インターネットチェックサム算出にペイロードサムを利用することが出来る。
ペイロードが格納されているバッファのバッファ情報を参照し、有効データ長とサム計算長とを比較することで、ペイロードサムが利用可能であるか否かが判断出来る。サブＣＰＵ３１は、ペイロードサム利用可能である場合、ヘッダ列に対するサム計算を実行し、その結果とペイロードサムを足し合わせてインターネットチェックサムを算出する。利用不可能である場合、ヘッダおよびペイロードの全データ列のサム計算を実行し、インターネットチェックサムを算出する。
さらに、複数のバッファに亘り格納されているデータを一つのパケットのペイロードとしてパケット生成する場合にも、ペイロードサムは利用可能である。各バッファのペイロードサムが利用可能であれば、各ペイロードサムを足し合わせるだけで、パケットのペイロードサムを算出することが出来る。
【００５２】
Ｓ６で、Ｓ４またはＳ５のいずれかで生成されたパケットは、ＬＡＮ制御部３８またはＷＬＡＮ制御部３９を介してネットワーク５へ送信される。
Ｓ７で、サブＣＰＵ３１は、Ｓ６でパケットが送信された後の、ネットワークバッファ３３内のデータサイズを再計算する。すなわち、サブＣＰＵ３１は、パケット送信後の未送信データ長を計算する。ネットワークバッファ３３へコピーされていたデータサイズから、Ｓ２で決定した実行サイズを減算することで、パケット送信後の残りの未送信データサイズを計算することができる。
【００５３】
Ｓ８で、Ｓ７で再計算されたネットワークバッファ３３内のデータサイズ（未送信データ長）が、パケット送信に使用されるコネクションのＭＳＳサイズより大きいか否かを判定する。Ｓ７で再計算されたデータサイズ（未送信データ長）がＭＳＳサイズより大きい場合（Ｓ８：Ｙ）、Ｓ２に戻ってＳ３からＳ８までのパケット送信処理を繰り返す。一方、Ｓ７で再計算されたデータサイズがＭＳＳ以下の場合（Ｓ８：Ｎ）、Ｓ９に進み、図５の処理フローを抜けてパケット送信処理を一旦終了する。
Ｓ７で再計算されたデータサイズがＭＳＳサイズ以下の場合、Ｓ９に進んでパケット送信処理を抜けることで、アプリケーションからの新たなｓｅｎｄ（）コールや、通信対向装置から送信される確認応答（ＡＣＫ）の受信を確認することができる。このため、ネットワークバッファ３３に格納されたユーザデータのすべてを連続して送信せずに、一旦送信処理を終了した方が、効率的にパケット送信を実現でき、通信装置１全体のパケット送信スループットが向上し得る。
【００５４】
例えば、同一のコネクションに対して、他のアプリケーションから新たにｓｅｎｄ（）コールが実行されている場合を考える。この場合、新たなｓｅｎｄ（）コールによるユーザデータのネットワークバッファ３３へのコピーを実行した後に、まとめてパケット送信処理に入った方が、より効率的なパケット送信が可能になり得る。
また、ＡＣＫの受信処理を行うことでウィンドウサイズが回復する。このため、例えば、ネットワークバッファ３３にユーザデータがまだ多く残っており、かつウィンドウサイズが狭まっている場合にも、Ｓ８の処理を実行する方が、拡張されたウィンドウサイズでパケット送信を実行できるため有効である。
上記のように、サブＣＰＵ３１により複数パケット生成処理の実行サイズを決定した後（Ｓ２）、決定された実行サイズにしたがってＳ３からＳ９の処理を実行することにより、複数パケット生成処理がより低負荷となり、パケット送信が高速化できる。
【００５５】
＜複数パケット生成処理の実行サイズ決定処理詳細＞
図６は、サブＣＰＵ３１により実行される複数パケット生成処理（例えば、ＴＳＯ処理）における実行サイズを決定する処理の詳細の一例を示すフローチャートである。図６の処理は、図５に示すＳ２の処理を詳細化して示される。
Ｓ２０１で、サブＣＰＵ３１は、データ転送部３４がユーザデータをネットワークバッファ３３へコピーし（図４のＳ４５）、さらにサブＣＰＵ３１がパケット生成部３６のヘッダ出力場所としてのネットワークバッファを確保した後に（Ｓ４８）、パケット送信処理を開始する。
【００５６】
Ｓ２０２で、サブＣＰＵ３１は、ウィンドウサイズとネットワークバッファ３３へコピーされているユーザデータのサイズとを比較する。ネットワークバッファ３３内のユーザデータのサイズがウィンドウサイズより大きい場合（Ｓ２０２：Ｙ）はＳ２０３へ進み、一方、ネットワークバッファ３３内のユーザデータのサイズがウィンドウサイズ以下の場合（Ｓ２０２：Ｎ）、Ｓ２０４へ進む。
Ｓ２０２でユーザデータサイズと比較されるべきウィンドウサイズは、パケットを送信するＴＣＰコネクションについて設定されている送信ウィンドウサイズおよび輻輳ウィドウサイズを比較し、より小さい方をウィンドウサイズとすればよい。
【００５７】
Ｓ２０３およびＳ２０４では、パケットを送信する該当ＴＣＰコネクションにおける送信最大サイズを決定する。具体的には、ネットワークバッファ３３中のユーザデータサイズがウィンドウサイズより大きい場合、Ｓ２０２で決定されたウィンドウサイズを送信最大サイズに設定する。すなわち、ＴＣＰ等の通信プロトコルにおけるウィンドウサイズを、送信最大サイズの上限とする。
一方、ネットワークバッファ３３中の送信データサイズがウィンドウサイズ以下の場合、ネットワークバッファ３３中に存在するユーザデータのサイズを、そのまま送信最大サイズに設定する。
【００５８】
Ｓ２０５で、サブＣＰＵ３１は、ネットワークバッファ３３中の先頭バッファにバッファ情報として格納されているペイロードサムが利用可能であるか否かを判定する。具体的には、サブＣＰＵ３１は、先頭バッファにおけるバッファ情報を参照し、有効データ長とサム計算長とを比較することで、格納されているペイロードサムが利用可能であるか否かを判定することができる。
Ｓ２０５において、有効データ長とサム計算長とが一致している場合（Ｓ２０５：Ｙ）は、サブＣＰＵ３１は、バッファ情報に格納されたペイロードサムが利用可能であると判定してＳ４０６へ進む。一方、有効データ長とサム計算長とが一致しない場合（Ｓ２０５：Ｎ）は、サブＣＰＵ３１は、ペイロードサムが利用できないと判定して、Ｓ２０９へ進む。
【００５９】
図４のＳ４５でネットワークバッファ３３へのデータ転送とともにペイロードサムが投機的に計算され、Ｓ４７でバッファ情報が更新された段階では、あるバッファ中のデータについての有効データ長とサム計算長は一致するはずである。
しかしながら、有効データ長とサム計算長の２つの値が一致しない場合の例として、ＴＣＰ通信における再送がある。ＴＣＰ通信では、送信側が送信したデータに対して、受信側はデータが受信できたことを示す応答を返す必要がある。この応答は、一般的に確認応答（Ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ：ＡＣＫ）と呼ばれ、送信側では、このＡＣＫが受信できなった部分のデータを、再度パケット化して送信する。このデータを再送する際に、再送データの先頭がネットワークバッファ３３のバッファのデータエリアの先頭に位置するとは限らず途中に位置する場合もある。この場合、バッファ情報にはデータオフセットが設定され、このデータオフセットの適用により、当該バッファの未送信データの有効データ長はサム計算長より小さくなる。あるいはこの場合、バッファ情報の有効データ長の値を未送信データのデータ長で更新してもよい。
また、ウィンドウサイズの制限によって、ネットワークバッファ３３の各バッファの途中までしかデータが送信できない場合も同様に、当該バッファの有効データ長とサム計算長とがそごすることになる。
【００６０】
上記では、ペイロードサムの利用可否の判定を、有効データ長とサム計算長との比較に基づくものとして説明するが、本実施形態はこれに限定されず他の判定方法により実現してもよい。
例えば、上記の再送のように、バッファの途中までのデータの送信についてＡＣＫを受信し、当該バッファの以降のデータについてはＡＣＫを受信しない場合、当該バッファのバッファ情報中のデータオフセットを設定することになる。この場合、例えば、データオフセットの設定と同時に、当該バッファのバッファ情報のサムを０でクリアしておくことができる。サム値がオールゼロになることはないため、サブＣＰＵ３１は、バッファ情報のサムの値を確認するだけで、パケット生成の段階でペイロードサムを利用可能か否かを容易に判定することができる。
【００６１】
いずれの場合でも、Ｓ２０５で、サブＣＰＵ３１は、事前計算されたペイロードサムが利用可能か否かを、ペイロードサムを計算した対象データのデータ長と、未送信データ長とが一致するか否かで判定することができる。ペイロードサムを計算した対象データのデータ長は、あるバッファのバッファ情報中のサム計算長を参照して取得することができる。また、未送信データ長は、当該バッファのバッファ情報中の有効データ長およびデータオフセットを参照して取得することができる。この未送信データ長は、パケット生成部３６が生成しようとする複数のパケットそれぞれのペイロード長である。
【００６２】
Ｓ２０５で、ネットワークバッファ３３の先頭バッファのペイロードサムが利用可能であると判定された場合、Ｓ２０６で、サブＣＰＵ３１は、ネットワークバッファ３３の先頭バッファの有効データ長を実行サイズとして積算する。すなわち、Ｓ２０６では、ペイロードサムが利用可能であると判定された先頭バッファ中のデータの有効データ長が実行サイズに設定される。
Ｓ２０７で、次に、サブＣＰＵ３１は、ネットワークバッファ３３の先頭バッファのバッファ情報中の次バッファアドレスが示すバッファを参照し、Ｓ２０５と同様にペイロードサムが利用可能か否かを判定する。次バッファでもチェックサムが利用可能であると判定された場合（Ｓ２０７：Ｙ）、Ｓ２０８へ進む。一方、次バッファではペイロードサムが利用可能でないと判定された場合（Ｓ２０７：Ｎ）、Ｓ２１２へ進んで処理を終了する。
【００６３】
次バッファでもペイロードサムが利用可能であると判定された場合、Ｓ２０８で、サブＣＰＵ３１は、実行サイズに次バッファの有効データ長を積算した場合に、Ｓ２０３またはＳ２０４で決定された送信最大サイズを超過するか否かを判定する。現在の実行サイズに次バッファの有効データ長を積算しても送信最大サイズを超過しない場合はＳ２０６へ戻り、現在の実行サイズに次バッファの有効データ長を実際に積算する。一方、現在の実行サイズに次バッファの有効データ長を積算すると送信最大サイズを超過する場合は、Ｓ２１２に進んで処理を終了する。
以降、Ｓ２０５で先頭バッファのペイロードサムが利用可能であると判定された場合、ペイロードサムが利用可能でないバッファが存在するか、もしくは実行サイズが送信最大サイズを超過するまで、Ｓ２０６〜Ｓ２０８間でループ処理が実行される。このループを抜けるいずれかの条件が成立すると、Ｓ２１２で、図６の処理フローは終了し、積算された最終的な実行サイズが出力され、パケット生成部３６に設定される。
【００６４】
Ｓ２０６〜Ｓ２０８のループ処理を実行すると、ペイロードサムが利用可能であると判定された複数の連続するバッファ中の複数のデータの有効データ長のみが積算された値が、実行サイズとして取得される。また、例えば、送信最大サイズに次バッファの有効データ長未満のサイズの余裕がある場合は、次バッファの有効データ長は実行サイズに含めずに実行サイズが決定される。Ｓ２０６〜Ｓ２０８のように実行サイズを決定し、パケット生成部３６に指示することで、パケット生成部３６は、ペイロードサムの再計算が不要である複数のバッファの有効データ長の積算値を実行サイズとして、複数のパケットを生成する。この場合、パケット生成部３６は、複数パケットを生成する際に、いずれのペイロードについてもペイロードサムを再計算する必要がない。したがって、ネットワークバッファ３３のバッファ内に格納されていたデータが分割されて送信されることがなくなり、すでに計算されたペイロードサムの利用効率が向上するとともに、ペイロードサム再計算に係る負荷が低減される。
【００６５】
一方、Ｓ２０５に戻り、ネットワークバッファ３３の先頭バッファのペイロードサムが利用可能でないと判定された場合、Ｓ２０９で、サブＣＰＵ３１は、ネットワークバッファ３３の先頭バッファの有効データ長を実行サイズとして積算する。すなわち、Ｓ２０９では、ペイロードサムが利用可能でないと判定された先頭バッファ中のデータの有効データ長が実行サイズに設定される。
Ｓ２１０で、次に、サブＣＰＵ３１は、ネットワークバッファ３３の先頭バッファのバッファ情報中の次バッファアドレスが示すバッファを参照し、Ｓ２０５と同様にペイロードサムが利用可能か否かを判定する。次バッファでもペイロードサムが利用可能でないと判定された場合（Ｓ２１０：Ｙ）、Ｓ２１１へ進む。一方、次バッファではペイロードサムが利用可能であると判定された場合（Ｓ２１０：Ｎ）、Ｓ２１２へ進んで処理を終了する。
【００６６】
次バッファでもペイロードサムが利用可能でないと判定された場合、Ｓ２１１で、サブＣＰＵ３１は、実行サイズへ次バッファの有効データ長を積算した場合に、Ｓ２０３またはＳ２０４で決定された送信最大サイズを超過するか否かを判定する。現在の実行サイズに次バッファの有効データ長を積算しても送信最大サイズを超過しない場合はＳ２０９へ戻り、現在の実行サイズに次バッファの有効データ長を実際に積算する。一方、現在の実行サイズに次バッファの有効データ長を積算すると送信最大サイズを超過する場合は、Ｓ２１２に進んで処理を終了する。
以降、Ｓ２０５で先頭バッファのペイロードサムが利用可能でないと判定された場合、ペイロードサムが利用可能であるバッファが存在するか、もしくは実行サイズが送信最大サイズを超過するまで、Ｓ２０９〜Ｓ２１１間でループ処理が実行される。このループを抜けるいずれかの条件が成立すると、Ｓ２１２で、図６の処理フローは終了し、積算された最終的な実行サイズが決定する。
【００６７】
Ｓ２０９〜Ｓ２１１のループ処理を実行すると、ペイロードサムが利用可能でないと判定された複数の連続するバッファ中の複数の送信データの有効データ長のみが積算された値が、実行サイズとして取得される。Ｓ２０９〜Ｓ２１１のように実行サイズを決定し、パケット生成部３６に指示することで、パケット生成部３６は、ペイロードサムの再計算が必要となる複数のバッファの有効データ長の積算値を実行サイズとして、複数のパケットを生成する。この場合、パケット生成部３６は、複数パケットを生成する際に、本来ペイロードサムの再計算が不要なペイロードについてはペイロードサムを計算する必要がない。したがって、ネットワークバッファ３３のバッファ内に格納されていたデータが分割されて送信されることがなくなり、すでに計算されたペイロードサムの利用効率が向上するとともに、ペイロードサム再計算に係る負荷が低減される。
【００６８】
なお、Ｓ２０５で先頭バッファのペイロードサムが利用できないと判定された場合は、Ｓ２１０で以降のバッファのペイロードサムが利用できるか否かを判定せずに、決定された送信最大サイズを上限に実行サイズを算出するようにしてもよい。例えば、ペイロードサムが利用可能なバッファと利用可能でないバッファとが、ネットワークバッファ３３内で交互に存在している場合がある。この場合には、Ｓ２１０で敢えて次のバッファについてペイロードサムが利用できるか否かを都度判定しない方が、より効率的に複数パケットの生成を実行することができる。
【００６９】
以上説明したように、本実施形態によれば、通信装置１は、アプリケーションから送信バッファへデータを転送する際に、送信すべきデータのペイロードサムを投機的に計算し、計算したチェックサムを対応するデータに付加して送信バッファに格納する。また、本実施形態において、通信装置１は、送信バッファから読み出された送信すべきデータから生成される複数のパケットに付加すべきヘッダを生成する際に、投機的に計算されたペイロードサムがパケットに付加すべきヘッダ生成で利用可能か否かを判定する。そして、通信装置１は、この事前に計算されたペイロードサムが利用可能であるか否かの判定結果に従って、複数のパケット生成において処理すべきデータ長を可変に決定する。例えば、通信装置１は、ペイロードサムを再計算しなければならないデータとペイロードサムの再計算が不要なデータとを混在させることがないよう、複数のパケット生成において処理すべきデータ長を決定する。
これにより、不必要なペイロードサムの再計算が低減されるため、送信すべきデータのペイロードサムの計算における負荷を低減してパケットをより効率的に生成するという利点が得られる。
【００７０】
＜他の実施形態＞
なお、上述した各実施形態は、その複数を組み合わせて実現することが可能である。
また、本発明は、上述の実施形態の一部または１以上の機能を実現するプログラムによっても実現可能である。すなわち、そのプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータ（またはＣＰＵやＭＰＵ等）における１つ以上のプロセッサがプログラムを読出し実行する処理により実現可能である。また、そのプログラムをコンピュータ可読な記録媒体に記録して提供してもよい。
また、コンピュータが読みだしたプログラムを実行することにより、実施形態の機能が実現されるものに限定されない。例えば、プログラムの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（ＯＳ）などが実際の処理の一部または全部を行い、その処理によって上記した実施形態の機能が実現されてもよい。
【符号の説明】
【００７１】
１…通信装置、２…主処理部、３…通信処理部、４…バスブリッジ、５…ネットワーク、２１…メインＣＰＵ、２２…メインメモリ、２３…ユーザバッファ、２４…メインバス、３１…サブＣＰＵ、３２…内部メモリ、３３…ネットワークバッファ、３４…データ転送部、３５…サム計算部、３６…パケット生成部、３７…ローカルバス、３８…ＬＡＮ制御部、３９…ＷＬＡＮ制御部
【図１】
2019165423.tif 000003
【図２】
2019165423.tif 000004
【図３】
2019165423.tif 000005
【図４】
2019165423.tif 000006
【図５】
2019165423.tif 000007
【図６】
2019165423.tif 000008