(57)【特許請求の範囲】
【請求項１】
複数のパケットの各々に格納され、シーケンス番号によって管理される送信データのチェックサムを計算する第１の計算手段と、
前記第１の計算手段により計算されたチェックサムの各々と、対応する前記送信データとを関連付けて保持する保持手段と、
前記第１の計算手段により計算されたチェックサムを用いて生成された前記複数のパケットを送信する送信手段と、
前記送信手段により送信されたパケットに対する確認応答を受信する受信手段と、
前記受信手段により受信された前記確認応答に含まれるシーケンス番号に基づいて、パケットの再送処理において前記保持手段により保持したチェックサムの利用可否を判定する判定手段と、
前記判定手段により前記保持手段により保持したチェックサムが利用できないと判定されたことに基づいて、再送される送信データの少なくとも一部に係る送信データのチェックサムを計算する第２の計算手段と、
複数のパケットに係る前記再送処理を行う際に、
１）前記判定手段により前記保持手段により保持したチェックサムが利用できると判定された場合、当該判定の結果に基づいて、前記保持手段により保持されたチェックサムを用いた複数の再送パケットを送信し、
２）前記判定手段により前記保持手段により保持したチェックサムを利用できないと判定された場合、当該判定の結果に基づいて、前記第２の計算手段により計算されたチェックサムを用いて生成されたパケットと、前記保持手段により保持されたチェックサムを用いたパケットとを送信するように
制御する制御手段と、
を有することを特徴とする通信装置。
【請求項２】
一つのパケットに格納される送信データをパケットごとに用意されたバッファへ書き込む書込手段を更に有し、
前記第１の計算手段は、前記バッファへ書き込まれた前記送信データのチェックサムを計算することを特徴とする請求項１に記載の通信装置。
【請求項３】
前記バッファは第１の格納領域と第２の格納領域を有し、
前記書込手段は、前記送信データを前記第１の格納領域へ書き込み、
前記保持手段は、前記送信データのチェックサムを前記第２の格納領域に書き込むことを特徴とする請求項２に記載の通信装置。
【請求項４】
前記再送処理において、前記送信データに関連付けて保持されているチェックサムを用いてパケットを生成する第１の生成手段を更に有することを特徴とする請求項１から３のいずれか１項に記載の通信装置。
【請求項５】
前記第１の計算手段により計算されたチェックサムを用いて前記複数のパケットを生成する第２の生成手段を更に有することを特徴とする請求項１から４のいずれか１項に記載の通信装置。
【請求項６】
前記判定手段により前記保持手段により保持したチェックサムが利用可能でないと判定された場合、送信するパケットのサイズに応じたサイズに前記送信データを分割する分割手段を更に有することを特徴とする請求項１から５のいずれか１項に記載の通信装置。
【請求項７】
前記再送処理によって再送されるデータの範囲と、前記送信手段が送信した前記複数のパケットに含まれるデータの範囲とが一致する場合、前記判定手段は、前前記保持手段により保持したチェックサムが利用可能であると判定することを特徴とする請求項１から６のいずれか１項に記載の通信装置。
【請求項８】
前記確認応答は、ＴＣＰ（Ｔｒａｎｓｐｏｒｔ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）規格に準拠したＡＣＫパケットであることを特徴とする請求項1乃至7のいずれか1項に記載の通信装置。
【請求項９】
通信装置の制御方法であって、
複数のパケットの各々に格納され、シーケンス番号によって管理される送信データのチェックサムを計算する第１の計算工程と、
前記第１の計算工程で計算されたチェックサムの各々と、対応する前記送信データとを関連付けて記憶手段に保持する保持工程と、
前記第１の計算工程で計算されたチェックサムを用いて生成された前記複数のパケットを送信する送信工程と、
前記送信工程により送信されたパケットに対する確認応答を受信する受信工程と、
前記受信工程により受信された前記確認応答に含まれるシーケンス番号に基づいて、パケットの再送処理において前記記憶手段に保持されたチェックサムの利用可否を判定する判定工程と、
前記判定工程により前記記憶手段に保持されたチェックサムが利用できないと判定されたことに基づいて、再送される送信データの少なくとも一部に係る送信データのチェックサムを計算する第２の計算工程と、
複数のパケットに係る前記再送処理を行う際に、
１）前記判定工程により前記記憶手段に保持されたチェックサムが利用できると判定された場合、当該判定の結果に基づいて、前記記憶手段に保持されたチェックサムを用いた複数の再送パケットを送信し、
２）前記判定工程により前記記憶手段に保持されたチェックサムを利用できないと判定された場合、当該判定の結果に基づいて、前記第２の計算工程により計算されたチェックサムを用いて生成されたパケットと、前記記憶手段に保持されたチェックサムを用いたパケットとを送信するように
制御する制御手段と、
を有することを特徴とする通信装置の制御方法。
【請求項１０】
コンピュータを、請求項１から８のいずれか１項に記載された通信装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ通信を行う通信装置およびその制御方法、プログラムに関する。
【背景技術】
【０００２】
データ通信において、データの誤りを検出するための機構を備えた通信方式がある。たとえば、インターネット通信で使われている主要なプロトコルのＴＣＰ／ＩＰでは、ＴＣＰパケットのデータの誤りを検出するため、１の補数を加算することによって求められるチェックサムが使用される。しかし、ソフトウェア演算による処理でチェックサム演算を実施すると、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の処理負荷が増大し、通信処理性能が低下するという課題がある。なお、ＴＣＰ／ＩＰとは、Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌの略である。
【０００３】
この課題を解決する方法として、通信装置にあるメモリ間のデータ転送機構（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ、以下、ＤＭＡ）とチェックサム演算機能をハードウェア化する方法が提案されている。特許文献１では、ＤＭＡを用いてデータをコピーしながら、コピー対象のデータのチェックサム計算を行うことで、ＣＰＵの処理負荷を軽減し、通信処理性能の低下を防止することを可能としている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平４−３５２０５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載の方法では、ＤＭＡによりメモリ間を転送されるデータに対してチェックサム演算を行い、当該チェックサムを使用してパケットを生成し、送信する。しかし、ＤＭＡによって転送済みのデータを使用してパケットを生成し、再送する場合には、ＤＭＡが実行されないので上記のハードウェアによるチェックサム演算機能が使用できず、ソフトウェア演算による処理でチェックサム演算が実施される。そのため、データの再送の発生頻度に応じて、ソフトウェアによるチェックサム演算の実施頻度が上がり、ＣＰＵの処理負荷が増大して、通信処理性能が低下するという課題がある。
【０００６】
本発明は、上記の課題に鑑みてなされたものであり、データの再送時におけるチェックサム演算の実施頻度を低減することを目的とする。
【課題を解決するための手段】
【０００７】
上記の目的を達成するための本発明の一態様による通信装置は以下の構成を有する。すなわち、
複数のパケットの各々に格納され、シーケンス番号によって管理される送信データのチェックサムを計算する第１の計算手段と、
前記第１の計算手段により計算されたチェックサムの各々と、対応する前記送信データとを関連付けて保持する保持手段と、
前記第１の計算手段により計算されたチェックサムを用いて生成された前記複数のパケットを送信する送信手段と、
前記送信手段により送信されたパケットに対する確認応答を受信する受信手段と、
前記受信手段により受信された前記確認応答に含まれるシーケンス番号に基づいて、パケットの再送処理において前記保持手段により保持したチェックサムの利用可否を判定する判定手段と、
前記判定手段により前記保持手段により保持したチェックサムが利用できないと判定されたことに基づいて、再送される送信データの少なくとも一部に係る送信データのチェックサムを計算する第２の計算手段と、
複数のパケットに係る前記再送処理を行う際に、
１）前記判定手段により前記保持手段により保持したチェックサムが利用できると判定された場合、当該判定の結果に基づいて、前記保持手段により保持されたチェックサムを用いた複数の再送パケットを送信し、
２）前記判定手段により前記保持手段により保持したチェックサムを利用できないと判定された場合、当該判定の結果に基づいて、前記第２の計算手段により計算されたチェックサムを用いて生成されたパケットと、前記保持手段により保持されたチェックサムを用いたパケットとを送信するように
制御する制御手段と、
を有する。
【発明の効果】
【０００８】
本発明によれば、データの再送時におけるチェックサム演算の実施頻度を低減することができる。
【図面の簡単な説明】
【０００９】
【図１】第１実施形態に係る通信装置のハードウェア構成例を示すブロック図。
【図２】第１実施形態に係るネットワークバッファの構成例を示す図。
【図３】第１実施形態による、通信接続から通信切断までの処理を示すシーケンス図。
【図４】第１実施形態による、データ送信時の処理を示すシーケンス図。
【図５】第１実施形態による、データ送信時の処理を示すフローチャート。
【図６】第２実施形態に係る通信装置のハードウェア構成例を示すブロック図。
【図７】第２実施形態による、データ送信時の処理を示すフローチャート。
【図８】チェックサムを再利用できなくなったネットワークバッファの例を示す図。
【図９】送信データサイズを変更したネットワークバッファの例を示す図。
【図１０】第３実施形態による、データ送信時の処理を示すフローチャート。
【図１１】チェックサムを再利用できなくなったネットワークバッファの例を示す図。
【図１２】送信データサイズを変更したネットワークバッファの例を示す図。
【図１３】第４実施形態による通信装置の処理を示すシーケンス図。
【図１４】第４実施形態によるデータ送信時の処理を示すフローチャート。
【発明を実施するための形態】
【００１０】
以下、添付の図面を参照して、本発明の実施形態のいくつかについて説明する。
【００１１】
（第１実施形態）
図１は、第１実施形態に係わる通信装置１０のハードウェア構成例を示すブロック図である。図１において、ＲＡＭ１０１（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）は、プログラムやデータを一時記憶する。ＲＡＭ１０１は送信対象のデータ（送信データ）を格納するユーザバッファ領域１０９を有する。ＲＡＭ１０２は、ＲＡＭ１０１と同様、プログラムやデータを一時記憶する。ＲＡＭ１０２はネットワークバッファ領域１１０を有する。なお、図１ではＲＡＭ１０１とＲＡＭ１０２を分離して示しているが、一つのＲＡＭでもよい。ＲＯＭ１０３（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）は、変更を必要としないプログラムやパラメータを格納する。
【００１２】
ＣＰＵ１０４（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）は、通信装置１０の全体を制御する。ＣＰＵ１０４は、メインメモリであるＲＡＭ１０１をワークメモリとして、ＲＯＭ１０３や図示しないＨＤＤなどの記憶媒体で構成されたプログラム格納部に格納された各種プログラムを実行する。ＣＰＵ１０４が実行するプログラムにはネットワークドライバが含まれ、ネットワークドライバの実行により、後述するチェックサムを含む送信データをパケット化するデータ処理や肯定応答の受信処理などを含む、プロトコル処理の機能が実現される。
【００１３】
タイマ管理部１０５は、プログラムの処理などの時間の経過を管理する。ＭＡＣ１０６（メディアアクセス制御モジュール）とＰＨＹ１０７（物理レイヤモジュール）は、Ｅｔｈｅｒｎｅｔ１０８などのネットワークを介した通信を行う通信部である。ＣＰＵ１０４は、ネットワークドライバを実行し、ＭＡＣ１０６を制御してデータの送受信を行う。
【００１４】
なお、通信装置１０の具体例は、デジタルカメラ、デジタルビデオカメラ、携帯電話、スマートフォン、ＰＣ、ノートＰＣ、サーバ、などである。なお、本実施形態ではＥｔｈｅｒｎｅｔ（登録商標）による有線ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）通信機能を用いたが、これに限られるものではない。たとえば、無線ＬＡＮ（Ｗｉ−Ｆｉ）など、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）通信が可能であれば他の通信方式が用いられてもよい。なお、本実施形態において用いられるパケットは、インターネット上で送受信されるデータの単位である。このパケットの組み立て方法については周知であるので、説明を省略する。
【００１５】
図２（ａ）は、第１実施形態に係る通信装置１０のネットワークバッファの構成例を示す図である。図２（ｂ）は、図２（ａ）に示すネットワークバッファを簡易的に表現した図である。
【００１６】
図２（ａ）において、ネットワークバッファ２００は、送信データをパケット化したり、パケットを受信したりするために使用される。ネットワークバッファ領域１１０には、ネットワークバッファ２００が１つ以上連結されて保持される。ネットワークバッファ２００は、パケットごとに用意され、一つのパケットに格納される送信データが書き込まれる。ネットワークバッファ２００は、ネットワークバッファの管理構造体２０１、ネットワークバッファ内のチェックサム格納領域２０２、パケット格納領域２０３の３つの格納領域を有する。
【００１７】
管理構造体２０１は、次の管理構造体２０１を指すポインタ、ネットワークバッファ内に格納されているデータの開始位置を指すポインタ、ネットワークバッファ内に格納されているデータのサイズなどを格納する。また、後述のシーケンス開始番号やシーケンス終了番号も管理構造体２０１に格納される。チェックサム格納領域２０２は、パケット格納領域２０３に格納されているパケットのデータ部（すなわち、送信データ）のチェックサムを管理する領域である。こうして、送信データと算出されたチェックサムとが関連付けて保持される。なお、本実施形態では、“チェックサム”を誤り検出符号または誤り訂正符号を示す語句として用いている。すなわち、本明細書において、チェックサムとは、ＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）など他の誤り検出符号または誤り訂正符号を含む用語である。パケット格納領域２０３は、受信パケットや送信パケットを格納する領域である。
【００１８】
図２（ｂ）において、４つのネットワークバッファ２００が連結されてネットワークバッファ領域１１０に格納された例を簡易的に示した図である。なお、図２（ｂ）では、主にネットワークバッファ２００のパケット格納領域２０３のデータ部が示されている。チェックサム２０６は、チェックサム格納領域２０２に格納されている値である。シーケンス開始番号２０７は、パケット格納領域２０３に格納されているデータの先頭のシーケンス番号を示す。シーケンス番号とは、送信データを管理するために、送信データの先頭からオクテット単位で割り当てられた番号である。シーケンス終了番号２０８は、パケット格納領域２０３に格納されているデータの末尾のシーケンス番号を示す。なお、本実施形態では１パケットに格納できるデータサイズの最大値が１４６０オクテットであり、図２（ｂ）では、各ネットワークバッファに１４６０オクテットの送信データが格納された例が示されている。
【００１９】
図３は、通信装置１０と外部の通信装置２０との間で、通信接続から通信切断までにやりとりされるメッセージの例を示すシーケンス図である。なお、通信装置２０は、ＩＰ通信が可能な他の通信装置であり、通信装置１０と同様の構成を有していてもよい。また、本実施形態では、ＴＣＰ（Ｔｒａｎｓｐｏｒｔ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）通信を説明に用いるが、チェックサムを使用する通信方式であれば、他の通信方式でも構わない。
【００２０】
Ｍ３０１（Ｍ３０２〜Ｍ３０４）において、通信装置１０は、通信装置２０とＴＣＰ通信接続を行う。なお、Ｍ３０１において、通信装置１０と通信装置２０の間で、１パケットに格納できるデータサイズの最大値も決定される。まず、Ｍ３０２において、通信装置１０は、通信装置２０にＴＣＰ接続要求（ＳＹＮパケット）を送信する。Ｍ３０３において、通信装置２０は、通信装置１０にＴＣＰ接続要求応答（ＳＹＮ／ＡＣＫパケット）を送信する。Ｍ３０４において、通信装置１０は、通信装置２０に確認応答（ＡＣＫパケット）を送信する。
【００２１】
Ｍ３０５（Ｍ３０６〜Ｍ３０７）において、通信装置１０と通信装置２０はデータ通信を行う。通信装置１０は、全ての送信データを送信し終えるまでＭ３０５の処理を繰り返し実施する。Ｍ３０６において、通信装置１０は、通信装置２０にデータ（ＤＡＴＡパケット）を送信する。Ｍ３０７において、通信装置２０は、通信装置１０にＡＣＫパケットを送信する。
【００２２】
Ｍ３０８（Ｍ３０９〜Ｍ３１１）において、通信装置１０は、通信装置２０とのＴＣＰ通信の切断を行う。Ｍ３０９において、通信装置１０は、通信装置２０にＴＣＰ切断要求（ＦＩＮパケット）を送信する。Ｍ３１０において、通信装置２０は、通信装置１０にＴＣＰ切断要求応答（ＦＩＮ／ＡＣＫパケット）を送信する。Ｍ３１１において、通信装置１０は、通信装置２０に確認応答（ＡＣＫパケット）を送信する。これにより、通信装置１０と通信装置２０との間のＴＣＰ通信が切断される。
【００２３】
図４は、第１実施形態に係る通信装置１０が、外部の通信装置２０にデータの再送を行う際のメッセージの例を示すシーケンス図である。本シーケンスは、図３のＭ３０５の処理内で再送を行う際のシーケンスである。
【００２４】
Ｍ４０１において、通信装置１０は通信装置２０にＤＡＴＡパケット（ＤＡＴＡ１）を送信し、通信装置２０はこのＤＡＴＡパケットを受信する。Ｍ４０２において、通信装置１０は、通信装置２０にＤＡＴＡパケット（ＤＡＴＡ２）を送信するが、通信装置２０はこのＤＡＴＡパケットを受信できなかったとする。Ｍ４０３において、通信装置１０は、第２の通信装置２０にＤＡＴＡパケット（ＤＡＴＡ３）を送信し、第２の通信装置２０はこのＤＡＴＡパケットを受信する。通信装置２０は、Ｍ４０３で送信されたＤＡＴＡパケット（ＤＡＴＡ３）を受信することで、Ｍ４０２で送信されたＤＡＴＡパケット（ＤＡＴＡ２）を受信できていないことを判別する。
【００２５】
Ｍ４０４において、通信装置２０は、通信装置１０にＭ４０１で送信されたＤＡＴＡパケット（ＤＡＴＡ１）に対する確認応答のためのＡＣＫパケット（ＡＣＫ１）を送信する。Ｍ４０５において、通信装置２０は、通信装置１０に、Ｍ４０２のＤＡＴＡパケット（ＤＡＴＡ２）を受信できていないことを通知するため、Ｍ４０４と同一のＡＣＫパケット（ＡＣＫ１）を送信する。Ｍ４０６においても同様に、通信装置２０はＭ４０４と同一のＡＣＫパケット（ＡＣＫ１）を送信する。通信装置１０は、通信装置２０から同一のＡＣＫパケット（図４の例ではＡＣＫ１）を３回以上受け取った場合、そのＡＣＫパケットが再送を要求するＤＡＴＡパケットを再送する。
【００２６】
Ｍ４０７において、通信装置１０は、Ｍ４０２で送信したＤＡＴＡパケットと同一のＤＡＴＡパケット（ＤＡＴＡ２）を通信装置２０に再送する。続いて、Ｍ４０８において、通信装置１０は、Ｍ４０３で送信したＤＡＴＡパケット（ＤＡＴＡ３）を通信装置２０へ再送する。これら再送を行ったＤＡＴＡパケットについて対応するＡＣＫパケットが得られない場合には、ＤＡＴＡパケットの再送が再度実行される。こうして、ＡＣＫパケットにより受信が確認されたＤＡＴＡパケットの後続のＤＡＴＡパケット（図４では、ＤＡＴＡ２以降）が再送される。
【００２７】
なお、図４に示したシーケンスは再送の一例であり、たとえば、図４ではＤＡＴＡパケットの再送の要否を、同一のＡＣＫパケットの受信により判定したが、これに限られるものではない。たとえば、通信装置１０がＤＡＴＡパケットを送信後、外部の通信装置２０から対応するＡＣＫパケットが一定時間内に返ってこないことをタイマ管理部１０５により判別した場合に、そのＤＡＴＡパケットを再送するようにしてもよい。
【００２８】
図５は、第１実施形態に係る通信装置１０がデータの送信、再送を実行する処理を示すフローチャートである。第１実施形態の通信装置１０によれば、データの再送時にチェックサムを再利用することが可能であり、データ再送時のＣＰＵ１０４の処理負荷が低減される。なお、以下では、一つのネットワークバッファに着目した処理を説明するが、データ送信の際に送信されるデータサイズに応じた複数のネットワークバッファが使用されることは、当業者には明らかである。
【００２９】
ステップＳ５０１において、通信装置１０のＣＰＵ１０４が実行するアプリケーションは、ｓｅｎｄ（）を呼び出し、データの送信を開始する。ｓｅｎｄ（）が呼び出されると、ネットワークドライバはステップＳ５０２において、ＲＡＭ１０１のユーザバッファ領域１０９に格納されている送信データを、ＲＡＭ１０２のネットワークバッファ２００のパケット格納領域２０３にコピーする。なお、コピーする際のデータサイズはＭ３０１で決定した１パケットに格納できるデータサイズの最大値に基づく。なお、ダイレクトメモリアクセス（ＤＭＡ）により、ユーザバッファ領域１０９に格納されているデータのネットワークバッファ２００への書込みが行われてもよい。
【００３０】
ステップＳ５０３において、通信装置１０のネットワークドライバは、ネットワークバッファ２００のパケット格納領域２０３に格納された送信データのチェックサムを計算し、チェックサム格納領域２０２に格納する。こうして、ステップＳ５０２で計算されたチェックサムは、格納された送信データに関連付けて保持される。また、ネットワークドライバは、チェックサムを計算したデータ範囲を示す情報（送信データのシーケンス開始番号やデータ長など）を管理構造体２０１に格納する。ステップＳ５０４において、通信装置１０のネットワークドライバは、ＴＣＰヘッダと擬似ヘッダのチェックサムを計算し、チェックサム格納領域２０２に格納されているチェックサムと併せてパケットのヘッダに記述するためのチェックサムを算出する。そして、ネットワークドライバは、算出されたチェックサムを用いてＴＣＰ／ＩＰヘッダを生成し、パケット格納領域２０３に格納されている送信データをＴＣＰ／ＩＰパケット化する。
【００３１】
ステップＳ５０５において、通信装置１０のネットワークドライバは、Ｅｔｈｅｒｎｅｔ（登録商標）ヘッダを生成し、Ｓ５０４で生成されたＴＣＰ／ＩＰパケットをＥｔｈｅｒｎｅｔ（登録商標）フレーム化する。ネットワークドライバは生成されたＥｔｈｅｒｎｅｔ（登録商標）フレームをＭＡＣ１０６に送信する。こうして、通信装置２０にパケット（ＤＡＴＡパケット）が送信される。
【００３２】
ステップＳ５０６において、通信装置１０のネットワークドライバは、送信したパケットに対応するＡＣＫパケットの受信の有無、受信したＡＣＫパケットの内容、あるいは、タイマ管理部１０５の管理情報などから、データの再送が必要か否かを判断する。データの再送が必要と判断された場合（ステップＳ５０６；ＹＥＳ）、処理はステップＳ５０８に進む。一方、データの再送が不要と判断された場合（ステップＳ５０６；ＮＯ）、処理はステップＳ５０７に進む。
【００３３】
ステップＳ５０８において、通信装置１０のネットワークドライバは、再送が必要なデータをパケット格納領域２０３に格納しているネットワークバッファ２００を特定する。そして、ネットワークドライバは、特定したネットワークバッファ２００のチェックサム格納領域２０２に格納されているチェックサムを使用し、ステップＳ５０４と同様の手順でＴＣＰ／ＩＰヘッダを生成して、ＴＣＰ／ＩＰパケット化する。こうして生成されたＴＣＰ／ＩＰパケットがステップＳ５０５で送信されることにより、送信データのチェックサムを再計算することなくデータの再送が実行される。他方、再送が不要と判定された場合には、ステップＳ５０７において、通信装置１０のネットワークドライバは、ＲＡＭ１０２の、通信装置２０による受信が確認されたネットワークバッファ領域１１０を解放する。
【００３４】
以上説明したように、通信装置１０は、通信装置２０へのデータの再送時に、ネットワークバッファ２００のチェックサム格納領域２０２に格納してあるチェックサムを使用する。これによって、再送時のチェックサム計算に必要な処理時間が軽減され、通信時間を短縮した通信が可能となる。
【００３５】
なお、上記では、パケット単位での再送が指示されるが、これに限られるものではない。第２実施形態以降に示されるように、ＡＣＫパケットに再送すべきデータの先頭のシーケンス番号が指定されるようにしてもよい。この場合、通信装置１０は、ステップＳ５０８において、再送が必要なデータ（の一部）を含むネットワークバッファを特定し、特定されたネットワークバッファのパケット格納領域２０３に格納されている送信データを再送する。
【００３６】
（第２実施形態）
第１実施形態におけるデータの再送時では、通信装置１０は、再送対象のデータを含むネットワークバッファ２００のパケット格納領域２０３に格納されている送信データを、チェックサム格納領域２０２に格納されているチェックサムを使用して再送した。第２実施形態では、ネットワークバッファ領域１１０に格納されている送信データから、ＡＣＫパケットにより示される再送が必要な送信データを取り出して、１パケットあたりの最大データサイズで分割し直して再送する。以下、第２実施形態の通信処理について説明する。
【００３７】
図６は、本実施形態に係わる第１の通信装置１０のハードウェア構成例を示すブロック図である。図６において第１実施形態と同様の構成には同一の参照番号を付してある。データ転送部１１１は、ＲＡＭ１０１のユーザバッファに格納されている送信データを、ＲＡＭ１０２のネットワークバッファ２００のパケット格納領域２０３にダイレクトメモリアクセス（ＤＭＡ）によりコピーする機能を有する。また、データ転送部１１１は、送信データのコピー時に、転送されているデータを監視してチェックサムを計算する機能を持つ。第２実施形態において、データ転送部１１１が有するチェックサムの計算機能を第１のチェックサム計算機能とし、ＣＰＵ１０４により実現されるネットワークドライバがチェックサムを計算する機能を第２のチェックサム計算機能とする。
【００３８】
図７は、第２実施形態に係る通信装置１０が、データの送信、再送を実行する処理を示すフローチャートである。ステップＳ７０１は、ステップＳ５０１と同様であり、通信装置１０のＣＰＵ１０４が実行するアプリケーションが、ｓｅｎｄ（）を呼び出し、データの送信を開始する。
【００３９】
ｓｅｎｄ（）が呼び出されると、データ転送部１１１はステップＳ７０２において、ＲＡＭ１０１のユーザバッファに格納されているユーザデータを、ＲＡＭ１０２のネットワークバッファ２００のパケット格納領域２０３にコピーする。なお、コピーする際のデータサイズはＭ３０１で決定した１パケットに格納できるデータサイズの最大値に基づく。ステップＳ７０３において、データ転送部１１１は、ステップＳ７０２のデータコピー時にコピーされるデータのチェックサムを計算し（第一のチェックサム計算機能）、ネットワークバッファのチェックサム格納領域２０２に格納する。このとき、データ転送部１１１は、チェックサムを計算したデータ範囲を示す情報（シーケンス番号やデータ長など）をネットワークバッファの管理構造体２０１に格納する。
【００４０】
ステップＳ７０４からステップＳ７０６、ステップＳ７１１は、第１実施形態（図５）のステップＳ５０４からステップＳ５０６、ステップＳ５０７と同様である。
【００４１】
ステップＳ７０７において、ネットワークドライバは再送するデータを含むネットワークバッファを特定する。そして、ステップＳ７０８において、ネットワークドライバは、ステップＳ７０３で計算したチェックサムを再送するデータのパケット化に利用できるかどうかを判定する。ここで、ネットワークドライバは、ステップＳ７０７で特定されたネットワークバッファに格納されている送信データと再送するデータが一致しない場合に、チェックサムを利用できないと判定する。たとえば、ステップＳ７０８において、ネットワークドライバは、再送するデータの範囲が、ステップＳ７０３において管理構造体２０１に格納したチェックサムを計算したデータ範囲を示す情報とが合致するかどうかを判断する。合致すると判断された場合（ステップＳ７０８；ＹＥＳ）、処理はステップＳ７０９に進み、合致しないと判断された場合（ステップＳ７０８；ＮＯ）には、処理はステップＳ７１０に進む。ステップＳ７０９において、ネットワークドライバは、ステップＳ７０７で特定したネットワークバッファのパケット格納領域２０３に保持されている送信データとチェックサム格納領域２０２に保持されているチェックサムを用いてパケットを生成し、送信する。
【００４２】
ステップＳ７１０において、通信装置１０のネットワークドライバは、Ｓ７０７で特定されたネットワークバッファ２００のパケット格納領域２０３に格納しているデータから再送が必要なデータを取得する。ネットワークバッファは、再送が必要なデータ範囲のチェックサムを第２のチェックサム計算機能で計算し、ＴＣＰヘッダと擬似ヘッダのチェックサムを計算し、双方を併せ、ＴＣＰ／ＩＰヘッダを生成して、再送データをＴＣＰ／ＩＰパケット化する。
【００４３】
以上、説明したように、通信装置１０は、通信装置２０へのデータの再送時に、ネットワークバッファ２００のチェックサム格納領域２０２に格納されている、第１のチェックサム計算機能により計算されたチェックサムが使用可能であるかを判定する。この判定は、たとえば、管理構造体２０１に格納されている、チェックサムを計算したデータ範囲を示す情報に基づきなされる。使用可能と判定された場合、チェックサム格納領域２０２に格納しているチェックサムを使用してパケットが生成される。他方、使用不可能と判定された場合、第２のチェックサム計算機能でチェックサムを再計算してパケットが生成される。これによって、第１のチェックサム計算機能で計算したチェックサムを再送時に再利用することで、再送時のチェックサム計算に必要な処理時間が軽減され、通信時間を短縮した通信が可能となる。また、第２のチェックサム計算機能でチェックサムを再計算することで、再送時にチェックサム格納領域２０２に格納されている（第１のチェックサム計算機能で計算した）チェックサムが使用できない場合も、通信を継続させることが可能となる。
【００４４】
図８に、通信装置１０が、通信装置２０から再送要求を受けた際に、チェックサムを再利用できなくなったネットワークバッファの例を示す。図８（ａ）は、通信装置１０が、データの送信時にネットワークバッファ領域１１０に確保したネットワークバッファ２００であり、図２（ｂ）と同様の状態である。なお、チェックサム２０６は、第一のチェックサム計算機能で計算されたチェックサムである。また、図８では、１パケットに格納できるデータサイズの最大値を１４６０オクテットとしている。
【００４５】
図８（ｂ）には、通信装置１０が、通信装置２０からシーケンス番号２１９１からの再送要求を受けた際に、チェックサム格納領域２０２に格納している第１のチェックサム計算機能で計算したチェックサムが再利用できなくなることを示す。通信装置１０が、通信装置２０からシーケンス番号２１９１からの再送要求を受けた場合、シーケンス番号２１９１から、１パケットに格納できるデータサイズの最大値である１４６０オクテット分のデータを再送する。そのため、再送データ８０１、再送データ８０２のように、第１のチェックサム計算機能でチェックサムを計算したときのデータ範囲とは異なる範囲のデータがそれぞれパケット８１１，８１２として再送される。その結果、第１のチェックサム計算機能で計算したチェックサムは再利用できなくなる。第２実施形態のネットワークドライバは、このような場合に、第２のチェックサム計算機能により再送データ８０１，８０２のチェックサムを計算し（Ｓ７０１）、それぞれをパケット化し、送信することで、通信を継続させる。
【００４６】
（第３実施形態）
第２実施形態では、図８（ｂ）に示したように、再送が必要なデータをパケットの最大データサイズで分割し直して、パケット化し、再送している。そのため、データの再送において、チェックサムの再計算が必要となる期間が続いてしまう。そこで、第３実施形態では、ネットワークバッファ２００のパケット格納領域２０３に格納しているデータをチェックサム格納領域２０２に格納しているチェックサムを使用して、そのまま再送できるように、再送するデータ範囲を変更する。以下、第３実施形態について説明する。なお、第３実施形態の通信装置１０の第３実施形態のハードウェア構成は、第２実施形態（図６）と同様である。
【００４７】
図９は、第３実施形態に係る通信装置１０が、通信装置２０から再送要求を受けた際に、極力チェックサムを再利用できるように送信データサイズを変更したネットワークバッファの例である。図９（ａ）に示されているネットワークバッファ領域１１０におけるネットワークバッファ２００の格納状態は、図８（ａ）に示したものと同様である。
【００４８】
第３実施形態の通信装置１０が、通信装置２０からシーケンス番号２１９１からの再送要求を受けた場合、図９（ｂ）に示されるように送信データサイズが変更される。第３実施形態では、ネットワークバッファ内のチェックサム格納領域２０２に格納されている第１のチェックサム計算機能で計算されたチェックサムを極力再利用することができるように送信データサイズが変更される。
【００４９】
通信装置１０は、複数の送信データ（２パケット目〜４パケット目）にまたがる再送対象のデータを、それら送信データの分割位置（シーケンス番号２９２０と２９２１の間，４３８０と４３８１の間）で分割して再送データ９０１〜９０３を得る。そして、得られた再送データのうち、どの送信データとも一致しない再送データのチェックサムを第２の計算機能により計算する。換言すれば、再送対象のデータの先頭部分を含む再送データを、後続のデータがネットワークバッファへ書き込み済みとなっている送信データと同じサイズへ分割され得るように、再送対象のデータから分離する。たとえば、シーケンス番号２１９１からの再送要求を受けた場合、シーケンス番号２１９１〜２９２０のデータ範囲の再送データ９０１について、第２のチェックサム計算機能でチェックサムを再計算してパケット９１１を生成し、再送する。このように、データサイズを１パケットに格納できるデータサイズの最大値である１４６０オクテットではなく、次のネットワークバッファにおけるデータのシーケンス開始番号までのデータを再送データとする。その結果、再送データ９０２、９０３については、第１のチェックサム計算機能でチェックサムを計算したデータ範囲となる。そのため、チェックサム格納領域２０２に格納されている第１のチェックサム計算機能により計算したチェックサムを再利用して再送データ９０２、９０３をパケット９１２，９１３として再送することが可能となる。こうして、パケット９１１、９１２、９１３が送信される。
【００５０】
図１０は、第３実施形態に係る通信装置１０が、データを再送する際にチェックサムを再利用する手順を示すフローチャートである。ステップＳ１００１からステップＳ１００９，ステップＳ１０１１は、ステップＳ７０１からステップＳ７１０と同様である。
【００５１】
ステップＳ１０１０において、通信装置１０のネットワークドライバは、通信装置２０から再送要求を受けたシーケンス番号を含むネットワークバッファ２００を特定する。そして、再送要求を受けたシーケンス番号から当該ネットワークバッファが保持するシーケンス最終番号までが収まるサイズを１パケットで送信するデータサイズとし、チェックサムを第２のチェックサム計算機能で計算する。そして、ＴＣＰヘッダと擬似ヘッダのチェックサムを計算し、双方を併せ、ＴＣＰ／ＩＰヘッダを生成して、ＴＣＰ／ＩＰパケット化する。本ステップは、図９（ｂ）の再送データ９０１のパケット９１１の生成に該当する。その後、図９（ｂ）の再送データ９０２、再送データ９０３については、ステップＳ１００９においてパケット９１２、９１３が生成され、再送される。
【００５２】
以上、説明したように、第３実施形態の通信装置１０は、通信装置２０へのデータの再送時に、ネットワークバッファ２００のチェックサム格納領域２０２に格納されているチェックサムが再利用できるように、データサイズを調整してパケットを生成する。これによって、再送時に第２のチェックサム計算機能でチェックサムを再計算する処理時間を軽減し、通信時間を短縮した通信が可能となる。
【００５３】
なお、第３実施形態では、再送時の先頭のパケットに格納される再送データが、対応する送信データのデータサイズと異なる場合に、必ず第２のチェックサム計算機機能によりチェックサムの再計算を行うようにしたが、これに限られるものではない。たとえば、再送データのサイズが所定値より大きい場合には、第１実施形態のように対応する送信データの全体を送信するようにしてもよい。再送データのデータサイズが大きい場合には再送データと送信データのサイズの差が小さく、チェックサムの再計算を省略するメリットを生かすことができるからである。また、再送データのサイズが所定値以下の場合には上述のように第２のチェックサム計算機能によりチェックサムを再計算し、再送データを送信することで、不必要なデータの再送によるデメリットを防止できる。
【００５４】
（第４実施形態）
通信装置１０は、通信装置２０からのデータサイズの変更要求時に、図１１により後述するようにチェックサム格納領域２０２に格納しているチェックサムを使用できなくなる場合がある。第４実施形態では、ネットワークバッファ２００のパケット格納領域２０３に格納されているデータをチェックサム格納領域２０２に格納されているチェックサムを使用して再送できるように、再送するデータ範囲を変更する。以下、第４実施形態について説明する。なお、通信装置１０の構成は、第２実施形態（図６）と同様である。
【００５５】
図１１は、第４実施形態に係る通信装置１０が、外部の通信装置２０からデータサイズの変更要求を受けた際に、チェックサムを再利用できなくなる様子を説明する図である。なお、図１１では、通信装置２０からデータサイズの変更要求を受け、１パケットに格納できるデータサイズの最大値が１４６０オクテットから１０２０オクテットに変更されたものとする。なお、このデータサイズの変更要求は、シーケンス番号２９２１以降（３パケット目以降）のデータに対する要求である。
【００５６】
図１１（ａ）に示されているネットワークバッファ領域１１０におけるネットワークバッファ２００の格納状態は、図８（ａ）に示したものと同様である。ただし、データサイズの変更要求に応じて、データ転送部１１１が１０２０オクテットを単位として、送信データをネットワークバッファ２００ａに格納している。通信装置２０が通信装置１０からの３パケット目のデータを受信できず、データサイズの変更が必要と判断すると、通信装置１０はデータサイズの変更を通信装置１０に対して要求する（詳細は図１３により後述する）。したがって、通信装置１０は、３パケット目からの送信データについてデータサイズを変更してパケット化し、送信するする必要がある。すなわち、通信装置１０は、シーケンス番号２９２１（３パケット目のシーケンス開始番号）以降のデータを新たなデータサイズで送信する必要がある。
【００５７】
図１１（ｂ）には、ネットワークバッファ領域１１０において、再送の対象となるデータが新たなデータサイズで分割され、データ１１０１，１１０２がパケット１１１１，１１１２として生成され、再送される。このように、第１のチェックサム計算機能でチェックサムを計算したデータ範囲とは異なる範囲のデータが１パケットとして再送されるため、第１のチェックサム計算機能で計算されたチェックサムは再利用できない。このような場合に、第２実施形態では、第２のチェックサム計算機能により、データ１１０１，１１０２のチェックサムの再計算を実行し、パケット化して送信する。そのため、データの再送において、チェックサムの再計算が必要となる期間が続いてしまう。
【００５８】
図１２は、第４実施形態に係る通信装置１０が、外部の通信装置２０からデータサイズの変更要求を受けた際に、第１のチェックサム計算機能で計算されたチェックサムを極力再利用できるように送信データサイズを変更する例を説明する図である。図１２（ａ）のネットワークバッファ領域１１０の状態は、図１１（ａ）のネットワークバッファ領域１１０の状態と同様である。
【００５９】
図１２（ｂ）のネットワークバッファ領域１１０は、第４実施形態に係る通信装置１０が、通信装置２０からデータサイズの変更要求を受けた際に、送信データサイズを変更した様子を示している。送信データサイズの変更は、チェックサム格納領域２０２に格納されている第１のチェックサム計算機能で計算されたチェックサムを極力再利用できるようになされる。たとえば、図１１と同様に、通信装置１０が、通信装置２０から３パケット目以降のデータの送信に関してデータサイズの変更要求（１４６０オクテットから１０２０オクテットへの変更）を受けたとする。このとき、既にシーケンス番号２９２１〜４３８０（３パケット目）についてはデータ転送部１１１が１４６０オクテットを単位としたネットワークバッファへのデータ転送を終えている。このような場合、第４実施形態では、シーケンス番号２９２１〜４３８０のデータサイズ変更前の１パケット分のデータを、変更後のデータサイズ以下に分割してデータ送信を行う。図１２の場合は、１０２０オクテットのパケットと、残りのデータ（４４０オクテット）のパケットに分けてデータ送信を行う。
【００６０】
したがって、第４実施形態の通信装置１０は、まず、新たなデータサイズの最大値である１０２０オクテットの再送データ１２０１（シーケンス番号２９２１〜３９４０）について第２のチェックサム計算機能でチェックサムを再計算してパケット化し、再送する。その後、残りのデータであるシーケンス番号３９４１〜４３８０の再送データ１２０２について、第２のチェックサム計算機能でチェックサムを再計算してパケット化し、再送する。その結果、シーケンス番号４３８１以降のデータ（図１２（ａ）の４パケット目以降）については、再送データ１２０３のように、第１のチェックサム計算機能でチェックサムを計算したデータ範囲を再送できるようになる。そのため、チェックサム格納領域２０２に格納している第１のチェックサム計算機能で計算したチェックサムを再利用して再送することが可能となる。こうして、データの再送のために、パケット１２１１，１２１２，１２１３が生成され、送信される。
【００６１】
図１３は、第４実施形態に係る通信装置１０が、通信装置２０からデータサイズの変更要求を受けた際のメッセージの例を示すシーケンス図である。本シーケンスは、図３のＭ３０５内（データパケットの送信ループ内）でデータサイズの変更を行う際のシーケンスである。
【００６２】
Ｍ１３０１において、通信装置１０は、通信装置２０にＤＡＴＡパケットを送信するが、通信装置２０はＤＡＴＡパケットを受信できず、通信装置１０の送信データサイズの変更が必要と判断する。Ｍ１３０２において、通信装置２０は、通信装置１０に送信抑制要求メッセージを送信する。本メッセージにおいて、通信装置２０はデータサイズの変更を要求する。Ｍ１３０２の例としては、ＩＣＭＰ（Ｉｎｔｅｒｎｅｔ  Ｃｏｎｔｒｏｌ  Ｍｅｓｓａｇｅ  Ｐｒｏｔｏｃｏｌ）のＳｏｕｒｃｅ  Ｑｕｅｎｃｈ  Ｍｅｓｓａｇｅなどがあげられる。Ｍ１３０３において、通信装置１０は、通信装置２０にＭ１３０２で指定されたシーケンス番号からＤＡＴＡパケットを再送するにあたり、ＤＡＴＡパケットのデータサイズをＭ１３０２で指定されたデータサイズに変更する。
【００６３】
図１４は、第４実施形態に係る通信装置１０が、データを再送する際にチェックサムを再利用する手順を示すフローチャートである。ステップＳ１４０１からステップＳ１４１０は、ステップＳ７０１からステップＳ７０９、ステップＳ７１０と同様である。
【００６４】
ステップＳ１４１１において、通信装置１０のネットワークドライバは、通信装置２０から再送するデータのシーケンス番号を含むネットワークバッファ２００を特定する。そして、特定されたネットワークバッファ２００のうちの再送が必要な部分のデータサイズが、変更後の１パケットで送信できるデータサイズであると判断した場合（ステップＳ１４１１；ＹＥＳ）、ステップＳ１４１２に進む。一方、このネットワークバッファ２００のうちの再送が必要な部分のデータサイズが、変更後の１パケットで送信できないデータサイズであると判断した場合（ステップＳ１４１１；ＮＯ）、ステップＳ１４１３に進む。
【００６５】
ステップＳ１４１２において、通信装置１０のネットワークドライバは、再送が必要なデータの開始シーケンス番号から当該ネットワークバッファが保持するシーケンス最終番号までが収まるデータサイズを１パケットで送信するデータサイズとする。そして、チェックサムを第２のチェックサム計算機能で計算し、ＴＣＰヘッダと擬似ヘッダのチェックサムを計算し、双方を併せ、ＴＣＰ／ＩＰヘッダを生成して、ＴＣＰ／ＩＰパケット化する。このステップＳ１４１２は、図１２の再送データ１２０２を用いたパケット１２１２の生成に該当する。
【００６６】
他方、ステップＳ１４１３において、通信装置１０のネットワークドライバは、再送が必要なデータの開始シーケンス番号から、１パケットで送信可能なデータサイズの最大値（本例では、１０２０オクテット）をデータサイズとする。そして、チェックサムを第２のチェックサム計算機能で計算し、ＴＣＰヘッダと擬似ヘッダのチェックサムを計算し、双方を併せ、ＴＣＰ／ＩＰヘッダを生成して、ＴＣＰ／ＩＰパケット化する。このステップＳ１４１３は、図１２の再送データ１２０１を用いたパケット１２１１の生成に該当する。その後、図１２のパケット７０１はそのまま１パケットとして送信できるので、ステップＳ１４０９でパケット１２１３が生成される。
【００６７】
以上、説明したように、第４実施形態の通信装置１０は、データサイズの変更要求を受けた場合に、ネットワークバッファ２００のチェックサム格納領域２０２に格納しているチェックサムを再利用できるように、データサイズを調整してパケットを生成する。このため、パケットのデータサイズ変更に起因したデータの再送時に第２のチェックサム計算機能でチェックサムを再計算する処理時間を軽減し、通信時間を短縮した通信が可能となる。
【００６８】
以上のように、上記各実施形態によれば、データの送信時に計算したチェックサムを保持することで、データの再送時にチェックサムを再利用することができるため、再送時のチェックサム演算の処理負荷を軽減することができる。その結果、送信の効率を向上させることが可能となる。
【００６９】
（その他の実施形態）
なお、本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００７０】
１０、２０：通信装置、１０１，１０２：ＲＡＭ、１０３：ＲＯＭ、１０４：ＣＰＵ、１０５：タイマ管理部、１０６：ＭＡＣ、１０７：ＰＨＹ、１０８：Ｅｔｈｅｒｎｅｔ（登録商標）、２００：ネットワークバッファ、２０１：管理構造体、２０２：チェックサム格納領域、２０３：パケット格納領域、２０６：チェックサム、２０７：シーケンス開始番号、２０８：シーケンス終了番号
【図１】
0006675189.tif 000002
【図２】
0006675189.tif 000003
【図３】
0006675189.tif 000004
【図４】
0006675189.tif 000005
【図５】
0006675189.tif 000006
【図６】
0006675189.tif 000007
【図７】
0006675189.tif 000008
【図８】
0006675189.tif 000009
【図９】
0006675189.tif 000010
【図１０】
0006675189.tif 000011
【図１１】
0006675189.tif 000012
【図１２】
0006675189.tif 000013
【図１３】
0006675189.tif 000014
【図１４】
0006675189.tif 000015