(57)【要約】【課題】送信元からの送信スループットを向上させて受信効率を向上させることが可能な通信装置を提供する。【解決手段】通信装置は、パケットを受信する受信手段と、パケットの送信元に確認応答を送信する送信手段と、パケットを記憶する受信バッファと、制御手段とを備える。制御手段は、受信手段で受信されたパケットを受信バッファに格納する受信処理タスクと、受信バッファからパケットを読み出して所定の処理を行うアプリケーションタスクとを実行する。制御手段は、アプリケーションタスクが受信バッファからパケットを読み出した際に、パケットの受信完了とパケットの消去後の受信バッファの空き容量を示す確認応答を送信手段に送信させる。【選択図】図２
2019114947.tif 000002
【特許請求の範囲】
【請求項１】
パケットを受信する受信手段と、
前記パケットの送信元に確認応答を送信する送信手段と、
前記パケットを記憶する受信バッファと、
前記受信手段で受信された前記パケットを前記受信バッファに格納する受信処理タスクと、前記受信バッファから前記パケットを読み出して所定の処理を行うアプリケーションタスクとを実行し、前記アプリケーションタスクが前記受信バッファから前記パケットを読み出した際に、前記パケットの受信完了と前記パケットの消去後の前記受信バッファの空き容量を示す前記確認応答を前記送信手段に送信させる制御手段と
を備えることを特徴とする通信装置。
【請求項２】
前記制御手段は、前記受信処理タスクで前記パケットを前記受信バッファに格納した後に、前記アプリケーションタスクで前記受信バッファから前記パケットを読み出す
ことを特徴とする請求項１に記載の通信装置。
【請求項３】
前記制御手段は、
前記受信バッファの空き容量が所定の閾値より小さい場合には、前記アプリケーションタスクが前記受信バッファから前記パケットを読み出した際に、前記確認応答を前記送信手段に送信させ、
前記受信バッファの空き容量が前記閾値より大きい場合には、前記アプリケーションタスクが前記受信バッファから前記パケットを読み出したか否かに関わらず、前記受信処理タスクが前記パケットを前記受信バッファに格納した際に、前記確認応答を前記送信手段に送信させる
ことを特徴とする請求項１または２に記載の通信装置。
【請求項４】
前記制御手段は、
前記受信バッファの空き容量が所定の閾値より小さい場合には、前記アプリケーションタスクによって、前記確認応答を前記送信手段に送信させ、
前記受信バッファの空き容量が前記閾値より大きい場合には、前記受信処理タスクによって、前記確認応答を前記送信手段に送信させる
ことを特徴とする請求項３に記載の通信装置。
【請求項５】
前記受信バッファの空き容量が前記閾値より大きい場合には、直前の確認応答の送信後の前記パケットの前記受信バッファへの格納回数が所定数より小さい場合に、前記制御手段は、前記確認応答を前記送信手段に送信させず、前記格納回数が前記所定数であれば、前記制御手段は、前記確認応答を前記送信手段に送信させる
ことを特徴とする請求項３または４に記載の通信装置。
【請求項６】
前記制御手段は、
前記送信手段に前記確認応答を送信させる際に、前記格納回数に対応する第１の変数をリセットし、
前記受信処理タスクにおいて、前記第１の変数が所定値であれば、前記送信手段に前記確認応答を送信させ、
前記受信処理タスクにおいて、前記第１の変数が前記所定値より小さく、前記受信バッファの空き容量が前記閾値より大きい場合に、前記第１の変数を増加させ、
前記受信処理タスクにおいて、前記第１の変数が前記所定値より小さく、前記受信バッファの空き容量が前記閾値より小さい場合に、前記受信バッファの空き容量が前記閾値より小さいことを示す第２の変数をセットし、
前記アプリケーションタスクにおいて、前記第２の変数がセットされている場合に、前記アプリケーションタスクが前記受信バッファから前記パケットを読み出した際に、前記確認応答を前記送信手段に送信させる
ことを特徴とする請求項５に記載の通信装置。
【請求項７】
前記送信手段は、ＴＣＰ／ＩＰに準拠したフォーマットの前記確認応答を送信する
ことを特徴とする請求項１から６のいずれか１項に記載の通信装置。
【請求項８】
パケットを受信するステップと、
前記パケットを受信バッファに格納するステップと、
前記受信バッファから前記パケットを読み出すステップと、
前記受信バッファから前記パケットを消去するステップと、
受信バッファから前記パケットが読み出された際に、前記パケットの受信完了と前記パケットの消去後の前記受信バッファの空き容量を示す確認応答を送信するステップと
を備える
ことを特徴とする通信装置の制御方法。
【請求項９】
コンピュータを、請求項１から７のいずれか１項に記載された制御手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、通信装置の制御方法およびプログラムに関する。
【背景技術】
【０００２】
従来、パケット通信において、通信の信頼性を保証するため、パケットを受信した際にＡＣＫと呼ばれる確認応答を用いる通信方式がある。例えば、インターネット通信において広く利用されているＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）では、受信側機器がパケットを受信した際に、送信側機器にＡＣＫパケットを送信する。
ＴＣＰのＡＣＫパケットは、当該パケットのシーケンス番号にデータサイズを加えたシーケンス番号、すなわち次に受信することを予期されるＴＣＰパケットのシーケンス番号を示す。また、ＴＣＰのＡＣＫパケットは、受信側機器の受信バッファの空き容量をウィンドウサイズとして示す（特許文献１および２）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−３６４２１７号公報
【特許文献２】特開２００７−２３５９７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
受信側機器において、受信バッファの空き容量は、パケットを受信するたびに減少し、受信したパケットをアプリケーションタスクが読み出せば増大する。送信側機器の送信速度に比べて、受信側機器の処理速度が遅い場合、受信バッファに多くのデータが溜まるため、ＡＣＫパケットに示されるウィンドウサイズは徐々に小さくなる。送信側機器は、ＡＣＫパケットに示されたウィンドウサイズに応じて、次に送信するデータ量を決定するため、受信バッファに多くのデータが溜まると、送信スループットが低下する。
【０００５】
そこで、本発明の目的は、送信元からの送信スループットを向上させて受信効率を向上させることが可能な通信装置、通信装置の制御方法およびプログラムを提供することにある。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明に係る通信装置の一態様は、パケットを受信する受信手段と、前記パケットの送信元に確認応答を送信する送信手段と、前記パケットを記憶する受信バッファと、前記受信手段で受信された前記パケットを前記受信バッファに格納する受信処理タスクと、前記受信バッファから前記パケットを読み出して所定の処理を行うアプリケーションタスクとを実行し、前記アプリケーションタスクが前記受信バッファから前記パケットを読み出した際に、前記パケットの受信完了と前記パケットの消去後の前記受信バッファの空き容量を示す前記確認応答を前記送信手段に送信させる制御手段とを備える。
【発明の効果】
【０００７】
本発明の態様によれば、パケットが消去されることにより増大した受信バッファの空き容量を示す確認応答を、通信装置は送信元に送信することができる。したがって、送信元からの送信スループットを向上させて、通信装置の受信効率を向上させることが可能である。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施形態に係る通信装置の構成を示すブロック図。
【図２】実施形態に係る通信装置の機能を模式的に示すブロック図。
【図３】本発明の第１実施形態に係る受信処理タスクを示すフローチャート。
【図４】本発明の第１実施形態に係るアプリケーションタスクのパケットの受信動作を示すフローチャート。
【図５】本発明の第２実施形態に係る受信処理タスクを示すフローチャート。
【図６】本発明の第２実施形態に係るアプリケーションタスクのパケットの受信動作を示すフローチャート。
【発明を実施するための形態】
【０００９】
以下、添付図面を参照して、本発明を実施するための形態について詳細に説明する。以下の説明では、通信装置の例として、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）に接続された通信装置を説明する。
以下に説明する実施の形態は、本発明の実現手段としての一例であり、本発明が適用される装置の構成や各種条件によって適宜修正又は変更されるべきものであり、本発明は以下の実施の形態に限定されるものではない。
【００１０】
＜第１の実施形態＞
本実施形態では、通信装置のアプリケーションタスクが受信バッファから受信パケットを読み出した際に、受信バッファの空き容量を示す確認応答を通信装置が生成し、通信装置は確認応答を受信パケットの送信元に送信する。
【００１１】
＜構成＞
図１は、本発明の実施形態に係る通信装置の構成を示すブロック図である。図１に示すように、実施形態に係る通信装置１は、一つ又は複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３と、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４を備える。さらに、通信装置１はＬＡＮモジュール６を備える。
【００１２】
ＲＯＭ３には、ＣＰＵ２が実行するプログラムが格納されている。ＣＰＵ２は、当該プログラムを読み出して実行することにより、各種の動作を行う。
ＤＲＡＭ４は、ＣＰＵ２によってワークエリアとして使用される。ＤＲＡＭ４の一部の領域は、受信バッファ５として使用される。また、ＤＲＡＭ４の一部の領域は、受信キュー１１として使用される。さらに、ＤＲＡＭ４の一部の領域は、送信キュー１７として使用される。
【００１３】
ＬＡＮモジュール６は、通信装置１が有線または無線で通信を行うための通信インターフェース装置である。ＬＡＮモジュール６は、有線または無線のネットワーク７に接続されている。ネットワーク７は、有線である場合、例えばＥｔｈｅｒｎｅｔ（登録商標）であってよい。また、無線である場合は、例えばＩＥＥＥ８０２．１１シリーズ規格に準拠した無線ＬＡＮであってよい。
ネットワーク７には、他の通信装置１が接続されており、ネットワーク７を介して通信装置１が相互に通信することが可能である。通信方式はＴＣＰ／ＩＰに準拠する。
【００１４】
図２は、通信装置１の機能を模式的に示す。ＣＰＵ２は、ＬＡＮドライバ１０を用いて、ＬＡＮモジュール６を制御し、他の通信装置１と通信する。外部の通信装置１からＬＡＮモジュール６が通信パケットを受信すると、ＬＡＮドライバ１０は、受信キュー１１に通信パケットを挿入する。ＬＡＮドライバ１０は、ＲＯＭ３に格納されたプログラムである。
【００１５】
ＣＰＵ２は、受信処理タスク１２とアプリケーションタスク１４を実行する。受信処理タスク１２は、ＲＯＭ３に格納された受信処理プログラムにより実行されるタスクである。アプリケーションタスク１４は、ＲＯＭ３に格納されたアプリケーションプログラムにより実行されるタスクである。アプリケーションプログラムは、例えばソケットプログラムであってよい。
【００１６】
受信処理タスク１２は、ＴＣＰ／ＩＰ受信処理１３を実行する。具体的には、ＴＣＰ／ＩＰ受信処理１３は、受信キュー１１から通信パケットを読み出して、ＴＣＰ／ＩＰプロトコル処理を実行し、ＴＣＰパケットを受信バッファ５に一時的に蓄積する。
【００１７】
アプリケーションタスク１４は、アプリケーション処理１５とＴＣＰ／ＩＰ送信処理１６を実行する。具体的には、アプリケーション処理１５は、受信バッファ５から通信パケットを読み出して、所定の処理を実行する。アプリケーション処理１５は、受信バッファ５からＴＣＰパケットを読み出した際に、読み出されたＴＣＰパケットを受信バッファ５から消去する。したがって、受信バッファ５の空き容量は、ＴＣＰ／ＩＰ受信処理１３がＴＣＰパケットを受信バッファ５に書き込むたびに減少し、アプリケーション処理１５がＴＣＰパケットを受信バッファ５から読み出すたびに増大する。
【００１８】
ＴＣＰ／ＩＰ送信処理１６は、アプリケーション処理１５の動作に応じて、通信パケットを送信する。例えば、アプリケーション処理１５が送信メッセージを生成すると、ＴＣＰ／ＩＰ送信処理１６は、送信メッセージに対してＴＣＰ／ＩＰプロトコル処理を実行し、通信パケットを生成し、生成した通信パケットを送信キュー１７に挿入する。
【００１９】
また、ＴＣＰ／ＩＰ送信処理１６は、通信装置１が受信したＴＣＰパケットの受信完了を示すための確認応答であるＡＣＫのためのＴＣＰパケット（ＡＣＫパケット）を生成する。そして、ＴＣＰ／ＩＰ送信処理１６は、生成したＡＣＫパケットに対してＴＣＰ／ＩＰプロトコル処理を実行し、通信パケットを生成し、生成した通信パケットを送信キュー１７に挿入する。
【００２０】
ＬＡＮドライバ１０は、送信キュー１７から通信パケットを読み出して、読み出された通信パケットを外部の通信装置１に送出する。例えば、ＡＣＫ送信においては、ＬＡＮドライバ１０は、通信装置１の受信パケットの送信元にＡＣＫのＴＣＰパケットを包含する通信パケットを送信する。
【００２１】
以下、通信装置１におけるＴＣＰパケットを包含する通信パケットの受信時の動作を説明するが、通信装置１は、ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）などの他のトランスポートプロトコルの処理を行ってもよい。
【００２２】
＜受信処理タスクの動作＞
図３を参照して、受信処理タスク１２での通信パケットの受信時の動作を説明する。
通信装置１は、ＣＰＵ２が受信処理タスク１２に必要なプログラムをＲＯＭ３から読み出して実行することにより、図３の動作を実現することができる。以降、アルファベットＳはフローチャートにおけるステップを意味するものとする。
【００２３】
まずＳ１において、ＣＰＵ２は、受信キュー１１に通信パケットがあるか否か判断する。受信キュー１１に通信パケットがある場合には、Ｓ２において、ＣＰＵ２は、受信キュー１１からＴＣＰパケットを読み出す。受信キュー１１に通信パケットがない場合には、Ｓ１が繰り返される。Ｓ１の判断の代わりに、ＬＡＮドライバ１０が、通信パケットを受信したことを受信処理タスクに通知してもよい。
【００２４】
次に、Ｓ３において、ＣＰＵ２は、通信パケットのＩＰヘッダおよびＴＣＰヘッダを読み取る。また、Ｓ４において、ＣＰＵ２は、ＩＰヘッダおよびＴＣＰヘッダのチェックサムを用いて、通信パケットおよびＴＣＰパケットの誤り検出を行う。
【００２５】
次に、Ｓ５において、ＣＰＵ２は、ＴＣＰパケットの宛先アドレスと宛先ポート番号、ならびにＴＣＰパケットの送信元アドレスと送信元ポート番号から、ＴＣＰパケットを処理すべきソケットを特定する。また、Ｓ５において、ＣＰＵ２は、ＴＣＰパケットのシーケンス番号からＴＣＰパケットの順序を整合させる。
次に、Ｓ６において、ＣＰＵ２は、順序を整合させたＴＣＰパケットを受信バッファ５に格納する。
【００２６】
次に、Ｓ７において、ＣＰＵ２は、Ｓ５で特定したソケットの状態から、アプリケーションタスク１４が受信待機状態であるか否か判断する。アプリケーションタスク１４が受信待機状態でない場合には、Ｓ８において、ＣＰＵ２は、アプリケーションタスク１４を受信待機状態にセットする。続いて、Ｓ９において、ＣＰＵ２は、アプリケーションタスク１４にイベントをセットする。これにより、アプリケーションタスク１４は、受信バッファ５からＴＣＰパケットを読み取ることができるようになる。
アプリケーションタスク１４が受信待機状態である場合には、Ｓ９において、ＣＰＵ２は、アプリケーションタスク１４にイベントをセットする。Ｓ９の後、動作はＳ１に戻る。
【００２７】
＜アプリケーションタスクの受信動作＞
図４を参照して、アプリケーションタスク１４でのＴＣＰパケットの受信時の動作を説明する。
通信装置１は、ＣＰＵ２が必要なプログラムをＲＯＭ３から読み出して実行することにより、図４の動作を実現することができる。図４の動作は、図３の動作のＳ９により起動させられる。図４の動作においては、例えばアプリケーションタスク１４が受信ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）を呼び出す。
【００２８】
Ｓ１１において、ＣＰＵ２は、受信バッファ５にＴＣＰパケットがあるか否か判断する。受信バッファ５にＴＣＰパケットがある場合には、Ｓ１２において、ＣＰＵ２は、受信バッファ５からＴＣＰパケットを読み出す。受信バッファ５から読み出されるＴＣＰパケットの数は、１つでもよいし、複数でもよい。
次に、Ｓ１３において、ＣＰＵ２は、読み出されたＴＣＰパケットを受信バッファ５から消去することによって、受信バッファ５の当該ＴＣＰパケットを記憶していた領域を解放する。これにより、受信バッファ５の空き容量が増大する。尚、受信バッファの空き容量は、読み出されたＴＣＰパケットを受信バッファ５から消去することによって空きができた容量に限らず、読み出されたＴＣＰパケットを受信バッファ５から消去することなく使用可能として管理される領域の容量であってもよい。即ち、受信バッファの空き容量とは、受信バッファ５内で物理的に記憶されているデータが無い領域に限ったものではなく、他のデータを記憶することが可能な領域であればよい。
【００２９】
次に、Ｓ１４において、ＣＰＵ２は、ＴＣＰ／ＩＰに準拠したフォーマットのＡＣＫパケットを生成し、生成したＡＣＫパケットに対してＴＣＰ／ＩＰプロトコル処理を実行し、通信パケットを生成し、生成した通信パケットを送信キュー１７に挿入する。これによって、ＣＰＵ２は、受信したＴＣＰパケットの送信元を宛先とするＡＣＫパケットをＬＡＮモジュール６に送信させる。ＡＣＫパケットは、ＡＣＫ番号とウィンドウサイズを示す。ＡＣＫ番号は、Ｓ１３で読み出されたＴＣＰパケットのシーケンス番号にＴＣＰパケットのデータサイズを加えた値、すなわち、通信装置１が次に受信することを予期しているＴＣＰパケットのシーケンス番号である。ウィンドウサイズは、現在の受信バッファ５の空き容量を示す、又は現在の受信バッファ５の空き容量に基づいて設定される値である。送信元は、通信装置１から通知されたウィンドウサイズの大きさまでのデータであれば、ＡＣＫを待たずに送信することができる。
【００３０】
本実施形態によれば、アプリケーションタスク１４によりＴＣＰパケットが消去されることにより増大した受信バッファ５の空き容量をウィンドウサイズとして示すＡＣＫパケットを、通信装置１は送信元に送信することができる。送信元は、ＡＣＫパケットに示されたウィンドウサイズに応じて、次に送信するデータ量を決定するため、送信元からの送信スループットを向上させて、通信装置１の受信効率を向上させることが可能である。
【００３１】
ＴＣＰパケットを受信したか否かにかかわらず、アプリケーションタスク１４が受信バッファからセグメントを読み出すたびに、増大したウィンドウサイズを示すＡＣＫパケットまたはＡＣＫパケットに類似する通知を受信側機器が送信することも考えられる。しかし、この場合には、ＡＣＫパケットまたは通知の送信回数が増えてしまい、受信側機器の負荷が大きいと考えられる。本実施形態では、受信処理タスク１２でＴＣＰパケットを受信バッファ５に格納した後（図３のＳ６の後）に、アプリケーションタスク１４が受信バッファ５からＴＰＣパケットを読み出すことができるようにする（図３のＳ９）。したがって、ＡＣＫパケットの送信頻度を低減し、通信装置１の負荷が軽減される。
【００３２】
＜第２の実施形態＞
本実施形態では、受信バッファ５の空き容量に応じて、ＡＣＫパケットの送信タイミングが制御される。具体的には、空き容量が所定の閾値より小さい場合には、第１の実施形態と同様に、アプリケーションタスク１４が受信バッファ５からＴＣＰパケットを読み出した際に、ＣＰＵ２は、ＡＣＫパケットをＬＡＮモジュール６に送信させる。一方、空き容量が閾値以上である場合には、アプリケーションタスク１４がパケットを読み出したか否かに関わらず、受信処理タスク１２がＴＣＰパケットを受信バッファ５に格納した際に、ＣＰＵ２は、ＡＣＫパケットをＬＡＮモジュール６に送信させる。
【００３３】
また、後者の場合には、直前のＡＣＫパケットの送信後の受信ＴＣＰパケットの受信バッファ５への格納回数が所定数より小さければ、ＣＰＵ２は、ＡＣＫパケットをＬＡＮモジュール６に送信させない。格納回数が所定数に達すると、ＣＰＵ２は、ＡＣＫパケットをＬＡＮモジュール６に送信させる。
【００３４】
本実施形態の通信装置の構成および機能は、図１および図２に示された構成および機能と同じでよい。但し、本実施形態では、ＴＣＰ／ＩＰ送信処理１６に加えて、ＴＣＰ／ＩＰ受信処理１３も、ＴＣＰパケットの受信完了を示すためのＡＣＫパケットを生成し、生成したＡＣＫパケットを包含する通信パケットを送信キュー１７に挿入することができる。以下、本実施形態の通信装置１におけるＴＣＰパケットの受信時の動作を説明する。
【００３５】
＜受信処理タスクの動作＞
図５を参照して、第２の実施形態に係る受信処理タスク１２での通信パケットの受信時の動作を説明する。
通信装置１は、ＣＰＵ２が受信処理タスク１２に必要なプログラムをＲＯＭ３から読み出して実行することにより、図５の動作を実現することができる。図５において、図３と共通するステップを示すために同じ符号が使用されており、これらのステップについては詳細には説明しない。
【００３６】
Ｓ１の前に、ＣＰＵ２は、Ｓ２１において、ＡＣＫ時期フラグを０にリセットし、格納回数フラグを０にリセットする。ＡＣＫ時期フラグは、ＡＣＫパケットを送信すべき時期を示す。具体的には、ＡＣＫ時期フラグが０であれば、受信処理タスク１２がＴＣＰパケットを受信バッファ５に格納した際に、受信処理タスク１２がＡＣＫパケットを包含する通信パケットを送信する。ＡＣＫ時期フラグが１であれば、アプリケーションタスク１４が受信バッファ５からＴＣＰパケットを読み出した際に、アプリケーションタスク１４がＡＣＫパケットを包含する通信パケットを送信する。
【００３７】
格納回数フラグは、直前のＡＣＫパケットの送信後の受信ＴＣＰパケットの受信バッファ５への格納回数に対応する。具体的には、格納回数フラグが０であれば、格納回数は１であり、この場合、ＡＣＫ時期フラグが０であっても、受信処理タスク１２はＡＣＫパケットを包含する通信パケットを送信しない。格納回数フラグが１であれば、格納回数は２であり、この場合、受信処理タスク１２はＡＣＫパケットを包含する通信パケットを送信する。ＡＣＫ時期フラグが０の場合のみ、格納回数フラグは１にセットされる。
【００３８】
Ｓ６の後、Ｓ２２において、ＣＰＵ２は、格納回数フラグが１か否かを判断する。格納回数フラグが０の場合（Ｓ２２の判断が否定的な場合）、動作はＳ２３に進む。Ｓ２３において、ＣＰＵ２は、受信バッファ５の空き容量が所定の閾値より小さいか否か判断する。所定の閾値は、例えば、受信バッファ５の全容量の半分である。
【００３９】
受信バッファ５の空き容量が所定の閾値より小さい場合（Ｓ２３の判断が肯定的な場合）、Ｓ２４において、ＣＰＵ２は、ＡＣＫ時期フラグを０にリセットし、Ｓ２５において、ＣＰＵ２は、格納回数フラグを１にセットする。この場合には、ＣＰＵ２は、ＡＣＫパケットを包含する通信パケットをＬＡＮモジュール６に送信させず、動作はＳ７に進む。
【００４０】
受信バッファ５の空き容量が所定の閾値以上である場合（Ｓ２３の判断が否定的な場合）、Ｓ２６において、ＣＰＵ２は、ＡＣＫ時期フラグを１にセットする。この場合にも、ＣＰＵ２は、ＡＣＫパケットを包含する通信パケットをＬＡＮモジュール６に送信させず、動作はＳ７に進む。
【００４１】
一方、Ｓ２２の判断が肯定的な場合、動作はＳ２７に進む。Ｓ２７において、ＣＰＵ２は、ＴＣＰ／ＩＰに準拠したフォーマットのＡＣＫパケットを生成し、生成したＡＣＫパケットに対してＴＣＰ／ＩＰプロトコル処理を実行し、通信パケットを生成し、生成した通信パケットを送信キュー１７に挿入する。これによって、ＣＰＵ２は、受信したＴＣＰパケットの送信元を宛先とするＡＣＫパケットを包含する通信パケットをＬＡＮモジュール６に送信させる。この場合、ＡＣＫパケットに示されるウィンドウサイズは、直前のＳ６でＴＣＰパケットが受信バッファ５に格納された結果である受信バッファ５の空き容量を示す。Ｓ２７の後、動作はＳ７に進む。
【００４２】
上記の通り、Ｓ２２で格納回数フラグが１であると判断された場合、受信処理タスク１２はＡＣＫパケットを包含する通信パケットを送信する。格納回数フラグは、Ｓ２７でＡＣＫパケットを包含する通信パケットが送信されると、Ｓ２８で０にリセットされる。格納回数フラグは、Ｓ２２で格納回数フラグが１ではないと判断され、Ｓ２３で受信バッファ５の空き容量が所定の閾値より小さいと判断された場合に、Ｓ２５で１にセットされる。したがって、受信バッファ５の空き容量が所定の閾値より小さく、かつ、直前のＡＣＫパケットの送信後の受信ＴＣＰパケットの受信バッファ５への格納回数が２の場合、受信処理タスク１２はＡＣＫパケットを包含する通信パケットを送信する。
【００４３】
＜アプリケーションタスクの受信動作＞
図６を参照して、第２の実施形態に係るアプリケーションタスク１４でのＴＣＰパケットの受信時の動作を説明する。
通信装置１は、ＣＰＵ２が必要なプログラムをＲＯＭ３から読み出して実行することにより、図６の動作を実現することができる。図６の動作は、図５の動作のＳ９により起動させられる。図６の動作においては、例えばアプリケーションタスク１４が受信ＡＰＩを呼び出す。図６において、図４と共通するステップを示すために同じ符号が使用されており、これらのステップについては詳細には説明しない。
【００４４】
Ｓ１３の後、Ｓ３１において、ＣＰＵ２は、ＡＣＫ時期フラグが１か否かを判断する。Ｓ３１の判断が肯定的であれば、動作はＳ１４に進み、ＣＰＵ２は、ＴＣＰ／ＩＰに準拠したフォーマットのＡＣＫパケットを生成し、生成したＡＣＫパケットに対してＴＣＰ／ＩＰプロトコル処理を実行し、通信パケットを生成する。そして、ＣＰＵ２は、生成した通信パケットを送信キュー１７に挿入する。これによって、ＣＰＵ２は、受信したＴＣＰパケットの送信元を宛先とするＡＣＫパケットを包含する通信パケットをＬＡＮモジュール６に送信させる。この場合、ＡＣＫパケットに示されるウィンドウサイズは、直前のＳ１３でＴＣＰパケットが受信バッファ５から消去された結果である受信バッファ５の空き容量を示す。
【００４５】
Ｓ１４の後、Ｓ３２において、ＣＰＵ２は、格納回数フラグを０にリセットし、この後、動作は終了する。
Ｓ３１の判断が否定的であれば、ＣＰＵ２は、ＡＣＫパケットを包含する通信パケットをＬＡＮモジュール６に送信させず、動作は終了する。
【００４６】
本実施形態によれば、受信バッファ５の空き容量が小さい場合には、アプリケーションタスク１４が受信バッファ５からＴＣＰパケットを読み出した際に、アプリケーションタスク１４がＡＣＫパケットを包含する通信パケットをＬＡＮモジュール６に送信させる。この場合、アプリケーションタスク１４によりＴＣＰパケットが消去されることにより増大した受信バッファ５の空き容量をウィンドウサイズとして示すＡＣＫパケットを、通信装置１は送信元に送信することができる。送信元は、ＡＣＫパケットに示されたウィンドウサイズに応じて、次に送信するデータ量を決定するため、送信元からの送信スループットを向上させて、通信装置１の受信効率を向上させることが可能である。
【００４７】
ＴＣＰパケットを受信したか否かにかかわらず、アプリケーションタスク１４が受信バッファからセグメントを読み出すたびに、増大したウィンドウサイズを示すＡＣＫパケットまたはＡＣＫパケットに類似する通知を受信側機器が送信することも考えられる。しかし、この場合には、ＡＣＫパケットまたは通知の送信回数が増えてしまい、受信側機器の負荷が大きいと考えられる。本実施形態では、受信処理タスク１２でＴＣＰパケットを受信バッファ５に格納した後（図５のＳ６の後）に、アプリケーションタスク１４が受信バッファ５からＴＰＣパケットを読み出すことができるようにする（図５のＳ９）。したがって、ＡＣＫパケットの送信頻度を低減し、通信装置１の負荷が軽減される。
【００４８】
一方、受信バッファ５の空き容量が大きい場合には、受信処理タスク１２がＴＰＣパケットを受信バッファ５に格納した際に、受信処理タスク１２において、ＣＰＵ２は、ＡＣＫパケットを包含する通信パケットをＬＡＮモジュール６に送信させる。受信バッファ５の空き容量が大きい場合には、ＡＣＫパケットで示されるウィンドウサイズは大きい。このため、送信元からの送信スループットの低下は少ない。
【００４９】
また、受信バッファ５の空き容量が大きい場合、直前のＡＣＫパケットの送信後の受信ＴＣＰパケットの受信バッファ５への格納回数が所定数より小さければ、ＣＰＵ２は、ＡＣＫパケットを包含する通信パケットをＬＡＮモジュール６に送信させない。格納回数が所定数に達すると、ＣＰＵ２は、ＡＣＫパケットを包含する通信パケットをＬＡＮモジュール６に送信させる。このようにして、ＡＣＫパケットの送信頻度を低下させることにより、通信装置１がＡＣＫパケットを送信するための処理負担およびトラフィックを削減することができる。
【００５０】
本実施形態において、受信バッファ５の空き容量と比較される閾値は、受信バッファ５の全容量の半分である。但し、閾値は、０より大きく、受信バッファ５の全容量より小さい範囲で任意に定めることができる。例えば、閾値は、ＴＣＰの最大セグメントサイズ（ＭＳＳ）の自然数倍（自然数は０を除く）でもよい。
本実施形態において、ＴＣＰパケットの格納回数と比較される所定数は２である。但し、所定数は、３以上の整数であってもよい。
【００５１】
本実施例において、受信ＴＣＰパケットの格納回数に対応する格納回数フラグと、受信バッファ５の空き容量に対応するＡＣＫ時期フラグが使用されている。但し、格納回数フラグの代わりに、格納回数に対応する他の種類の変数を使用してもよい。また、ＡＣＫ時期フラグの代わりに、受信バッファ５の空き容量に対応する他の種類の変数を使用してもよい。
【００５２】
＜その他の変形例＞
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記録媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【００５３】
上記の実施形態において、通信装置１は、ＬＡＮモジュール６によって外部の通信装置と接続されているが、他の通信インターフェース装置を介して、外部の通信装置と接続されていてもよい。
【００５４】
上記の実施形態において、受信処理タスク１２とアプリケーションタスク１４は、それぞれ別個のプログラムにより実行されるタスクであるが、単一のプログラムで実行してもよい。
【００５５】
図示した通信装置１の構成および機能は一例であり、機能ブロックの少なくとも１つがハードウェアとして実装されてもよい。ハードウェアにより実装する場合、例えば、所定のコンパイラを用いることで、各ステップを実現するためのプログラムからＦＰＧＡ上に自動的に専用回路を生成すればよい。ＦＰＧＡとは、Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略である。また、ＦＰＧＡと同様にしてＧａｔｅ  Ａｒｒａｙ回路を形成し、ハードウェアとして実現するようにしてもよい。また、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）により実現するようにしてもよい。
【符号の説明】
【００５６】
２…ＣＰＵ、５…受信バッファ、６…ＬＡＮモジュール、１２…受信処理タスク、１４…アプリケーションタスク
【図１】
2019114947.tif 000003
【図２】
2019114947.tif 000004
【図３】
2019114947.tif 000005
【図４】
2019114947.tif 000006
【図５】
2019114947.tif 000007
【図６】
2019114947.tif 000008