(57)【特許請求の範囲】
【請求項１】
バイトストリームでデータ通信を行うプロトコルにしたがって動作する通信装置であって、
他の通信装置によって送信されたデータを受信する受信部と、
該受信部によって受信したデータを格納するリングバッファ領域を有する記憶部と、
前記受信部によって受信したデータに基づいて、該データを前記リングバッファ領域に格納した場合に次に受信するデータの書き込み位置を示すヘッドポインタを検出するプロトコル処理部と、
受信可能なデータ量を算出する際に使用する第１のテイルポインタと、上位層によって処理されていないデータ量を算出する際に使用する第２のテイルポインタとを設定するシステム制御部と、
該システム制御部によって設定する前記第１のテイルポインタ、および前記第２のテイルポインタのいずれかを選択する選択部と、
前記プロトコル処理部によって算出したヘッドポインタと、前記選択部によって選択した前記第１のテイルポインタおよび前記第２のテイルポインタのいずれかとに基づいて、前記他の通信装置に公告する前記リングバッファ領域の空き容量を算出する空き容量算出部と、
前記空き容量算出部によって算出した前記リングバッファ領域の空き容量を前記他の通信装置に公告する送信部と
を有する、通信装置。
【請求項２】
前記システム制御部は、前記通信装置の動作状態に応じて、前記選択部に前記第１のテイルポインタおよび前記第２のテイルポインタのうちのいずれかを選択させる、請求項１に記載の通信装置。
【請求項３】
前記システム制御部は、前記通信装置が省電力動作モードの場合には前記選択部に前記第１のテイルポインタを選択させ、前記通信装置が通常動作モードの場合には前記選択部に前記第２のテイルポインタを選択させる、請求項２に記載の通信装置。
【請求項４】
前記システム制御部は、前記第１のテイルポインタを、前記他の通信装置によって送信されるデータ量に応じて変更する、請求項請求項１ないし３のいずれか１項に記載の通信装置。
【請求項５】
前記プロトコル処理部によって検出した前記ヘッドポインタと、前記システム制御部によって設定した前記第２のテイルポインタとに基づいて、受信データ量を算出する受信データ量算出部
を有し、
前記システム制御部は、前記受信データ量算出部によって算出された受信データ量に基づいて、前記上位層に引き取られていない受信データがあることを通知する、請求項１ないし３のいずれか１項に記載の通信装置。
【請求項６】
バイトストリームでデータ通信を行うプロトコルにしたがって動作する通信装置に、
他の通信装置によって送信されたデータを受信させ、
該受信したデータに基づいて、受信したデータを格納するリングバッファ領域を有する記憶部に格納した場合に次に受信するデータの書き込み位置を示すヘッドポインタを検出させ、
受信可能なデータ量を算出する際に使用する第１のテイルポインタと、上位層によって処理されていないデータ量を算出する際に使用する第２のテイルポインタとを設定させ、
該設定させる前記第１のテイルポインタ、および前記第２のテイルポインタのいずれかを選択させ、
前記ヘッドポインタと、前記第１のテイルポインタおよび前記第２のテイルポインタのいずれかとに基づいて、前記他の通信装置に公告する前記リングバッファ領域の空き容量を算出させ、
該前記リングバッファ領域の空き容量を前記他の通信装置に公告させる、通信制御プログラム。
【請求項７】
バイトストリームでデータ通信を行うプロトコルにしたがって動作する通信装置によって実行される通信制御方法であって、
他の通信装置によって送信されたデータを受信し、
該受信したデータに基づいて、該データをリングバッファ領域を有する記憶部に格納した場合に次に受信するデータの書き込み位置を示すヘッドポインタを検出し、
受信可能なデータ量を算出する際に使用する第１のテイルポインタと、上位層によって処理されていないデータ量を算出する際に使用する第２のテイルポインタとを設定し、
前記第１のテイルポインタ、および前記第２のテイルポインタのいずれかを選択し、
前記ヘッドポインタと、前記第１のテイルポインタおよび前記第２のテイルポインタのいずれかとに基づいて、前記他の通信装置に公告する前記リングバッファ領域の空き容量を算出し、
前記リングバッファ領域の空き容量を前記他の通信装置に公告する、通信制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置に関する。
【背景技術】
【０００２】
インターネットなどで利用されている通信プロトコルとして、ＴＣＰ(Transmission Control Protocol)とＩＰ(Internet Protocol)とを組み合わせたものが知られている。ＴＣＰ／ＩＰはバイトストリーム型であり、正規化された受信データはリングバッファに格納される場合がある。
【０００３】
リングバッファ形式の送信バッファを用いて送信制御を行う技術が知られている（例えば、特許文献１参照）。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
受信側の通信装置は、受信データをリングバッファに格納する際に、次の受信データの書き込み位置を示すヘッドポインタと、アプリケーション層などの上位層の機能による次のデータ引き取り位置を示すテイルポインタとを用いて受信可能なデータサイズを求める。受信側の通信装置は、送信側の通信装置に受信可能なデータサイズを公告（アドバタイズ）することによって通知する。
【０００５】
しかし、受信側の通信装置が通常動作モードから省電力動作モードに移行するなどによって受信処理のリソースが縮退した状態となった場合には、受信バッファとして使用できるリングバッファの容量や、受信データを処理する能力が通常動作モードと比較して低下している。このため、受信側の通信装置から送信側の通信装置に受信可能なデータサイズを公告し、送信側の通信装置によって送信されるデータを受信しても、受信側の通信装置は、そのデータの処理ができないおそれがある。
【０００６】
そこで、本発明は、送信側の通信装置に公告する受信可能なデータサイズを変更することを目的とする。
【課題を解決するための手段】
【０００７】
開示の一実施の形態の通信装置は、
バイトストリームでデータ通信を行うプロトコルにしたがって動作する通信装置であって、
他の通信装置によって送信されたデータを受信する受信部と、
該受信部によって受信したデータを格納するリングバッファ領域を有する記憶部と、
前記受信部によって受信したデータに基づいて、該データを前記リングバッファ領域に格納した場合に次に受信するデータの書き込み位置を示すヘッドポインタを検出するプロトコル処理部と、
受信可能なデータ量を算出する際に使用する第１のテイルポインタと、上位層によって処理されていないデータ量を算出する際に使用する第２のテイルポインタとを設定するシステム制御部と、
該システム制御部によって設定する前記第１のテイルポインタ、および前記第２のテイルポインタのいずれかを選択する選択部と、
前記プロトコル処理部によって算出したヘッドポインタと、前記選択部によって選択した前記第１のテイルポインタおよび前記第２のテイルポインタのいずれかとに基づいて、前記他の通信装置に公告する前記リングバッファ領域の空き容量を算出する空き容量算出部と、
前記空き容量算出部によって算出した前記リングバッファ領域の空き容量を前記他の通信装置に公告する送信部と
を有する。
【発明の効果】
【０００８】
開示の実施の形態によれば、送信側の通信装置に公告する受信可能なデータサイズを変更することができる。
【図面の簡単な説明】
【０００９】
【図１】一実施の形態に係る通信システムの構成例を示す図である。
【図２】フレーム構成の一例を示す図である。
【図３】一実施の形態に係る受信装置を示す図である。
【図４】一実施の形態に係る受信装置を示す機能ブロック図である。
【図５】一実施の形態に係るリングバッファの概念図（その１）である。
【図６】一実施の形態に係るリングバッファの概念図（その２）である。
【図７】一実施の形態に係る受信装置の動作を示すフローチャート（その１）である。
【図８】一実施の形態に係るリングバッファの概念図（その３）である。
【図９】一実施の形態に係るリングバッファの概念図（その４）である。
【図１０】一実施の形態に係る受信装置の動作を示すフローチャート（その２）である。
【図１１】一実施の形態に係る受信装置を示す機能ブロック図である。
【図１２】リングバッファの概念図である。
【発明を実施するための形態】
【００１０】
次に、本発明を実施するための形態を、以下の実施例に基づき図面を参照しつつ説明する。以下で説明する実施例は一例に過ぎず、本発明が適用される実施の形態は、以下の実施例に限られない。
なお、実施例を説明するための全図において、同一機能を有するものは同一符号を用い、繰り返しの説明は省略する。
【００１１】
＜第１の実施の形態＞
＜通信システム＞
図１は、本実施の形態に係る通信システムを示す図である。通信システムは送信装置１００と受信装置２００とを有する。送信装置１００と受信装置２００との間は、インターネットなどのネットワーク５０を介して有線または無線によって接続される。送信装置１００と受信装置２００は、バイトストリームでデータ通信を行うＴＣＰなどの所定のプロトコルにしたがって通信を行う。
【００１２】
送信装置１００は、受信装置２００によって公告される受信可能なデータ量（データ長）に応じて、データを付帯したパケットを受信装置２００に送信する。受信装置２００は、送信装置１００によって送信されたパケットを受信すると、該パケットに付帯されるデータ量に基づいて、受信可能なデータ量を公告（アドバタイズ）する。
【００１３】
＜フレーム構成＞
図２は、送信装置１００と受信装置２００との間で送受信されるフレームフォーマットの一例として、ＴＣＰヘッダのフォーマットを示す。
【００１４】
フレームは、発信元ポート番号フィールドと、宛先ポート番号フィールドと、シーケンス番号フィールドと、確認応答(ＡＣＫ)番号フィールドと、データオフセットフィールドと、予約フィールドと、コードビットフィールドとを有する。さらに、フレームは、ウインドウサイズフィールドと、チェックサムフィールドと、緊急ポインタフィールドと、オプションフィールドと、パディングフィールドとを有する。
【００１５】
発信元ポート番号フィールドは１６ビットで構成され、発信元のポート番号が格納される。発信元のポート番号は、ＴＣＰパケットの送信元のアプリケーションを識別するための番号である。宛先ポート番号フィールドは１６ビットで構成され、宛先のポート番号が格納される。宛先のポート番号は、あて先となるアプリケーションが待ち受けしているポートの番号である。
【００１６】
シーケンス番号フィールドは３２ビットで構成され、分割されたＴＣＰセグメントのシーケンス番号が格納される。シーケンス番号は、データを送信する送信装置１００によって管理される。送信装置１００は、データを送信するたびに、送信したデータのバイト数分だけシーケンス番号を加算し、ＴＣＰパケットに付帯して送信する。確認応答番号フィールドは３２ビットで構成され、送信側が次に送信すべきデータのシーケンス番号が格納される。確認応答番号は、受信したデータに対して、どこのバイト位置までを受信したかを表す。
【００１７】
データオフセットフィールドは４ビットで構成され、ＴＣＰヘッダ長が４オクテット単位で格納される。データオフセットは、ＴＣＰデータが始まる位置を表す。予約フィールドは６ビットで構成され、０が格納される。コードビットフィールドは６ビットで構成され、各ビットはフラグとして使用される。
【００１８】
ウインドウサイズフィールドは１６ビットで構成され、受信側が現在受信可能なデータサイズを送信側に通知するために使用される。送信側は、ウインドウサイズで指定されたデータサイズ以上のデータを送信しない。チェックサムフィールドは１６ビットで構成され、データの信頼性を保証するために使用される。オプションフィールドおよびパディングフィールドは３２ビットで構成され、パディングフィールドには０が格納される。
【００１９】
＜受信装置２００＞
図３は、本実施の形態に係る受信装置２００のハードウェア構成図である。図３に示されているように、本実施の形態の受信装置２００は、受信装置２００全体の動作を制御するＣＰＵ(Central Processing Unit)２０２、およびＩＰＬ(Initial Program Loader)等のＣＰＵ２０２の駆動に用いられるプログラムを記憶したＲＯＭ(Read Only Memory)２０４を備えている。さらに、受信装置２００は、ＣＰＵ２０２のワークエリアとして使用されるＲＡＭ(Random Access Memory)２０６、受信装置用のプログラム等の各種データを記憶するフラッシュメモリ２１０、およびＣＰＵ２０２の制御にしたがってフラッシュメモリ２１０に対する各種データの読み出しまたは書き込みを制御するＳＳＤ（Solid State Drive）２０８を備えている。さらに、受信装置２００は、ネットワーク５０を利用してデータ伝送をするためのネットワークＩ／Ｆ(Interface)２１２、および上記各構成要素を図３に示されているように電気的に接続するためのアドレスバスやデータバス等のシステムバス２５０を備えている。
【００２０】
＜受信装置２００の機能構成＞
図４は、本実施の形態に係る受信装置２００を示す。受信装置２００は、パケット送信部２５２と、パケット受信部２５４と、プロトコル処理部２５６と、バッファ空き容量算出部２５８と、ＤＭＡ(Direct Memory Access)制御部２６０と、受信データ量算出部２６２と、選択部２６４と、第１のテイルポインタ設定部２６６と、第２のテイルポインタ設定部２６８と、記憶部２７０と、システム制御部２７２とを有する。これら各部は、図３に示されている各構成要素のいずれかが、フラッシュメモリ２１０からＲＡＭ２０６上に展開されたプログラムに従ったＣＰＵ２０２からの命令によって動作することで実現される機能が含まれる。また、受信装置２００は、図３に示されているＲＯＭ２０４、ＲＡＭ２０６、フラッシュメモリ２１０によって構築される記憶部２７０を有している。記憶部２７０は、リングバッファ領域を有する。リングバッファ領域とは、記憶部２７０に確保される一定の領域であり、その領域は「環（リング）」であるように扱われ、末尾（最終アドレス）と先頭(先頭アドレス)とがつながった環状構造と見なされる。
【００２１】
（受信装置２００の各機能構成）
次に、図３および図４を用いて、受信装置２００の各機能構成について詳細に説明する。なお、以下では、受信装置２００の各機能構成を説明するにあたって、図３に示されている各構成要素のうち、受信装置２００の各機能構成を実現させるための主な構成要素との関係も説明する。
【００２２】
図４に示される受信装置２００のパケット送信部２５２は、ネットワークＩ／Ｆ２１２によって実現され、プロトコル処理部２５６によって生成されたＩＰパケットをネットワーク５０を経由して送信装置１００に送信する。
【００２３】
図４に示される受信装置２００のパケット受信部２５４は、ネットワークＩ／Ｆ２１２によって実現され、送信装置１００によって送信されたＩＰパケットを受信し、該ＩＰパケットをプロトコル処理部２５６に入力する。
【００２４】
図４に示される受信装置２００のプロトコル処理部２５６は、ＣＰＵ２０２からの命令によって実現される。プロトコル処理部２５６は、パケット送信部２５２、およびパケット受信部２５４と接続される。プロトコル処理部２５６は、ＴＣＰ／ＩＰプロトコルにしたがってデータの送受信を行う。例えば、プロトコル処理部２５６は、パケット受信部２５４によって入力されるＩＰパケットに付帯されるデータをＤＭＡ制御部２６０に入力する。さらに、プロトコル処理部２５６は、パケット受信部２５４によって入力されるパケットに付帯されるデータに基づいてヘッドポインタの位置を検出し、該ヘッドポインタの位置を表すヘッドポインタ信号をバッファ空き容量算出部２５８、および受信データ量算出部２６２に入力する。ここで、ヘッドポインタとは、記憶部２７０のリングバッファ領域に格納されるデータの先頭（先頭アドレス）を示す変数であり、次に受信されるデータの書き込みを開始する位置を示す。また、プロトコル処理部２５６は、バッファ空き容量算出部２５８によって入力されるバッファの空き容量を表すバッファ空き容量信号に基づいて、ウインドウサイズを設定し、該ウインドウサイズを付帯したＡＣＫなどのＩＰパケットを作成し、パケット送信部２５２に入力する。
【００２５】
図４に示される受信装置２００のＤＭＡ制御部２６０は、ネットワークＩ／Ｆ２１２、およびＣＰＵ２０２からの命令によって実現される。ＤＭＡ制御部２６０は、プロトコル処理部２５６と接続される。ＤＭＡ制御部２６０は、プロトコル処理部２５６によって入力されるデータをシステムバス２５０を介して、記憶部２７０のリングバッファ領域にダイレクトメモリアクセスによって格納する。また、ＤＭＡ制御部２６０は、システムバス２５０を介して、記憶部２７０のリングバッファ領域に格納されたデータを取得し、プロトコル処理部２５６に入力する。
【００２６】
図４に示される受信装置２００の受信データ量算出部２６２は、演算回路などのハードウェアや、ＣＰＵ２０２からの命令によって実現される。受信データ量算出部２６２は、プロトコル処理部２５６と接続される。受信データ量算出部２６２は、プロトコル処理部２５６によって入力されるヘッドポインタ信号により表されるヘッドポインタと、第２のテイルポインタ設定部２６８によって入力される上位層による引き取りが行われていないデータ量を算出する際に使用する第２のテイルポインタとに基づいて、受信データがあることを表す受信データイベント信号を作成する。ここで、第２のテイルポインタとは、記憶部２７０のリングバッファ領域に格納されたデータの末尾(末尾のアドレス)を指す変数である。例えば、受信データ量算出部２６２は、ヘッドポインタと、第２のテイルポインタが一致しない場合に受信データイベント信号を作成し、受信データ量を算出する。受信データ量算出部２６２は、システム制御部２７２に受信データイベント信号を入力するとともに、受信データ量を表す受信データ量信号を入力する。具体的には、受信データ量算出部２６２は、ヘッドポインタと第２のテイルポインタとの間の差分を算出することによって、受信データ量を算出する。
【００２７】
図４に示される受信装置２００のシステム制御部２７２は、比較回路などのハードウェアや、ＣＰＵ２０２からの命令によって実現される。システム制御部２７２は、受信データ量算出部２６２、およびシステムバス２５０と接続される。システム制御部２７２は、受信データ量算出部２６２によって入力される受信データイベント信号、および受信データ量信号と、記憶部２７０のリングバッファ領域に格納されるデータ量に基づいて、ヘッドポインタの位置を把握する。
【００２８】
システム制御部２７２は、記憶部２７０のリングバッファ領域に格納されたデータに基づいて、アプリケーション層などの上位層によって引き取りされていない未処理データがある場合に、引き取りされていない未処理データがあることを上位層に通知する。上位層は、システム制御部２７２によって引き取りされていない未処理データがあることが通知されると、記憶部２７０のリングバッファ領域に格納されたデータを引き取る。上位層は、引き取ったデータ量に応じて第２のテイルポインタをずらすことによって変更し、変更した第２のテイルポインタをシステム制御部２７２に通知する。システム制御部２７２は、上位層によって通知される第２のテイルポインタを第２のテイルポインタ設定部２６８に設定する。
【００２９】
さらに、システム制御部２７２は、受信装置２００が通常動作モードである場合には選択部２６４に第２のテイルポインタ設定部２６８に設定される第２のテイルポインタを選択するように設定するテイルポインタ選択信号を選択部２６４に入力する。また、システム制御部２７２は、受信装置２００が通常動作モードから省電力動作モードに移行した場合に、第１のテイルポインタ設定部２６６に第１のテイルポインタを設定する。例えば、システム制御部２７２は、第１のテイルポインタとして、現在のヘッドポインタから５バイトから２０バイト程度、より好ましくは１０バイト程度先頭アドレスから最終アドレスに向かう方向に設定する。さらに、システム制御部２７２は、受信装置２００が省電力動作モードである場合には選択部２６４に第１のテイルポインタ設定部２６６に設定される第１のテイルポインタを選択するように設定するテイルポインタ選択信号を選択部２６４に入力する。
【００３０】
図４に示される受信装置２００の第１のテイルポインタ設定部２６６は、ＣＰＵ２０２からの命令によって実現される。第１のテイルポインタ設定部２６６は、システムバス２５０と接続され、システム制御部２７２によって通知される第１のテイルポインタを設定する。図４に示される受信装置２００の第２のテイルポインタ設定部２６８は、ＣＰＵ２０２からの命令によって実現される。第２のテイルポインタ設定部２６８は、システムバス２５０と接続され、システム制御部２７２によって通知される第２のテイルポインタを設定する。
【００３１】
図４に示される受信装置２００の選択部２６４は、ＣＰＵ２０２からの命令によって実現される。選択部２６４は、第１のテイルポインタ設定部２６６、第２のテイルポインタ設定部２６８、システム制御部２７２、およびバッファ空き容量算出部２５８と接続される。選択部２６４は、システム制御部２７２によって入力されるテイルポインタ選択信号にしたがって、第１のテイルポインタ設定部２６６によって設定される第１のテイルポインタまたは第２のテイルポインタ設定部２６８によって設定される第２のテイルポインタをバッファ空き容量算出部２５８に入力する。
【００３２】
図４に示される受信装置２００のバッファ空き容量算出部２５８は、ＣＰＵ２０２からの命令によって実現される。バッファ空き容量算出部２５８は、プロトコル処理部２５６と接続される。バッファ空き容量算出部２５８は、プロトコル処理部２５６によって入力されるヘッドポインタ信号によって表されるヘッドポインタと、選択部２６４によって入力される第１のテイルポインタまたは第２のテイルポインタに基づいて、バッファ空き容量を求める。バッファ空き容量算出部２５８は、プロトコル処理部２５６にバッファ空き容量を表すバッファ空き容量信号を入力する。
【００３３】
＜受信装置２００の動作＞
以下、受信装置２００の動作を通常動作モードと省電力動作モードのそれぞれについて説明する。
【００３４】
＜通常動作モード＞
受信装置２００のシステム制御部２７２は、通常動作モードでは、選択部２６４に第２のテイルポインタ設定部２６８によって設定される第２のテイルポインタを選択するテイルポインタ選択信号を入力する。このため、バッファ空き容量算出部２５８は、プロトコル処理部２５６によって入力されるヘッドポインタ信号によって表されるヘッドポインタと、選択部２６４によって入力される第２のテイルポインタとに基づいてバッファの空き容量を算出する。また、受信データ量算出部２６２は、プロトコル処理部２５６によって入力されるヘッドポインタ信号によって表されるヘッドポインタと、第２のテイルポインタ設定部２６８によって入力される第２のテイルポインタとが一致するか否かを判断する。受信データ量算出部２６２は、ヘッドポインタと第２のテイルポインタとが一致しない場合には受信データがあると判断し、受信データイベント信号を作成し、該受信データイベント信号をシステム制御部２７２に入力する。システム制御部２７２は、受信データイベント信号が入力されるか否かによって、上位層によって引き取りされていないデータがあるか否かを判断する。
【００３５】
図５は、リングバッファの概念図（その１）を示し、上位層によって引き取られていない、つまり上位層によって処理されていない未処理の受信データが存在する場合を示す。図５において、縦方向はアドレスを示し、先頭アドレスから最終アドレスに向かってデータが格納される。以下、先頭アドレスから最終アドレスに向かう方向を「データ格納順方向」と呼び、その逆方向を「データ格納逆方向」と呼ぶ。また、図５において、点によって表されている領域は空き領域を示し、斜線によって表されている領域は受信データが格納されている領域を示す。
【００３６】
送信装置１００と受信装置２００が通信を開始する際には、ヘッドポインタおよび第２のテイルポインタは先頭アドレスに設定されると仮定する。プロトコル処理部２５６は、パケット受信部２５４によって受信パケットが入力された場合に該受信パケットに付帯されるデータ量に基づいて、ヘッドポインタの位置をデータ格納順方向にずらすことによって変更する。プロトコル処理部２５６は、該変更したヘッドポインタを表すヘッドポインタ信号をバッファ空き容量算出部２５８、および受信データ量算出部２６２に入力する。また、システム制御部２７２は、上位層によって通知される第２のテイルポインタを第２のテイルポインタ設定部２６８に設定する。
【００３７】
図５によれば、ヘッドポインタはデータ格納順方向に第２のテイルポインタより進んでおり、ヘッドポインタから第２のテイルポインタまでのデータ格納逆方向における距離に相当する受信データが存在している。この場合、バッファ空き容量算出部２５８は、ヘッドポインタによって示されるアドレスと最終アドレスとの間の領域に格納できるデータ量と、先頭アドレスと第２のテイルポインタによって示されるアドレスとの間の領域に格納できるデータ量の和を求めることによって、バッファ空き容量を算出する。
【００３８】
また、受信データ量算出部２６２は、ヘッドポインタと第２のテイルポインタが不一致であることによって、受信データイベント信号を作成し、該受信データイベント信号をシステム制御部２７２に入力する。これによって、システム制御部２７２は、上位層に対して引き取られていない未処理の受信データが存在することを示す未処理データ通知を発行する。未処理データ通知を受信した上位層は、ヘッドポインタから第２のテイルポインタまでのデータ格納逆方向における距離を計算することで、未処理の受信データのデータ量（データ長）を検出する。
【００３９】
図６は、リングバッファの概念図（その２）を示し、上位層によって引き取られていない未処理の受信データが存在しない場合を示す。図６において、縦方向はアドレスを示し、先頭アドレスから最終アドレスに向かってデータが格納される。また、図６において、点によって表されている領域は空き領域を示す。
【００４０】
図６によれば、ヘッドポインタと第２のテイルポインタは一致しており受信データは存在していない。この場合、バッファ空き容量算出部２５８は、ヘッドポインタから第２のテイルポインタまでのデータ格納逆方向における距離に相当する領域に格納できるデータ量、つまりリングバッファに格納できるデータ量の全てを、バッファ空き容量として算出する。
【００４１】
また、受信データ量算出部２６２は、ヘッドポインタと第２のテイルポインタが一致しているため、受信データイベント信号は作成しない。このため、システム制御部２７２は、上位層に対して未処理の受信データが存在することを示す未処理データ通知を発行しない。
【００４２】
図７は、本実施の形態に係る受信装置２００の動作（その１）を示し、受信装置２００が送信装置１００によって送信されたパケットを受信する際の動作を示す。
【００４３】
ステップＳ７０２では、システム制御部２７２は、通常動作モードに設定する。通常動作モードでは、ＲＡＭ２０６の全てを使用できる。
【００４４】
ステップＳ７０４では、システム制御部２７２は、選択部２６４に、第２のテイルポインタ設定部２６８によって設定される第２のテイルポインタを選択するように設定するテイルポインタ選択信号を入力する。
【００４５】
ステップＳ７０６では、パケット受信部２５４は送信装置１００によって送信されたパケットを受信する。
【００４６】
ステップＳ７０８では、受信データ量算出部２６２は、受信データがあるか否かを判断する。受信データ量算出部２６２は、ヘッドポインタと第２のテイルポインタとが一致するか否かに基づいて、受信データがあるか否かを判断する。
【００４７】
ステップＳ７１０では、ステップＳ７０８で受信データがあると判断した場合、システム制御部２７２は、上位層に対して、引き取られていない未処理の受信データがあることを示す未処理データ通知を送信する。
【００４８】
ステップＳ７１２では、システム制御部２７２は、上位層によって通知される第２のテイルポインタを第２のテイルポインタ設定部２６８に設定する。
【００４９】
ステップＳ７１４では、ステップＳ７１２の処理が終了した後、またはステップＳ７０８において受信データがないと判断された場合、バッファ空き容量算出部２５８は、プロトコル処理部２５６によって入力されるヘッドポインタと選択部２６４によって入力される第２のテイルポインタとに基づいてバッファ空き容量を算出する。
【００５０】
ステップＳ７１６では、プロトコル処理部２５６は、バッファ空き容量算出部２５８によって算出されたバッファ空き容量を表す情報を付帯したＡＣＫなどのＩＰパケットを作成し、パケット送信部２５２から送信する。
【００５１】
＜省電力動作モード＞
受信装置２００のシステム制御部２７２は、省電力動作モードでは、選択部２６４に第１のテイルポインタ設定部２６６によって設定される第１のテイルポインタを選択するテイルポインタ選択信号を入力する。このため、バッファ空き容量算出部２５８は、プロトコル処理部２５６によって入力されるヘッドポインタ信号によって表されるヘッドポインタと、選択部２６４によって入力される第１のテイルポインタとに基づいてバッファの空き容量を算出する。また、受信データ量算出部２６２は、プロトコル処理部２５６によって入力されるヘッドポインタ信号によって表されるヘッドポインタと、第２のテイルポインタ設定部２６８によって入力される第２のテイルポインタとが一致するか否かを判断する。受信データ量算出部２６２は、ヘッドポインタと第２のテイルポインタとが一致しない場合には受信データがあると判断し、受信データイベント信号を作成し、該受信データイベント信号をシステム制御部２７２に入力する。システム制御部２７２は、受信データイベント信号が入力されるか否かによって、上位層によって引き取りされていないデータがあるか否かを判断する。
【００５２】
図８は、リングバッファの概念図（その３）を示し、上位層によって引き取られていない未処理の受信データが存在しない場合を示す。図８において、縦方向はアドレスを示し、先頭アドレスから最終アドレスに向かってデータが格納される。また、図８において、点によって表されている領域は空き領域を示す。
【００５３】
図８によれば、第１のテイルポインタは、ヘッドポインタに対してデータ格納順方向に所定のデータ量に相当するアドレスだけ離れた位置（アドレス）に設定される。また、ヘッドポインタと第２のテイルポインタは一致しており受信データは存在していない。この場合、ヘッドポインタから第１のテイルポインタまでのデータ格納逆方向における距離に相当する領域に格納できるデータ量が、バッファ空き容量として送信装置１００に通知される。
【００５４】
また、受信データ量算出部２６２は、ヘッドポインタと第２のテイルポインタが一致しているため、受信データイベント信号は作成しない。このため、システム制御部２７２は、上位層に対して未処理の受信データが存在することを示す未処理データ通知を発行しない。
【００５５】
図９は、リングバッファの概念図（その４）を示し、上位層によって引き取られていない、つまり上位層によって処理されていない未処理の受信データが存在する場合を示す。図９において、縦方向はアドレスを示し、先頭アドレスから最終アドレスに向かってデータが格納される。また、図９において、点によって表されている領域は空き領域を示し、斜線によって表されている領域は受信データが格納されている領域を示す。
【００５６】
送信装置１００と受信装置２００が通信を開始する際には、ヘッドポインタおよび第２のテイルポインタは先頭アドレスに設定されると仮定する。プロトコル処理部２５６は、パケット受信部２５４によって受信パケットが入力された場合に該受信パケットに付帯されるデータ量に基づいて、ヘッドポインタの位置をデータ格納順方向にずらすことによって変更する。プロトコル処理部２５６は、該変更したヘッドポインタを表すヘッドポインタ信号をバッファ空き容量算出部２５８、および受信データ量算出部２６２に入力する。また、システム制御部２７２は、上位層によって通知される第２のテイルポインタを第２のテイルポインタ設定部２６８に設定する。
【００５７】
図９によれば、ヘッドポインタはデータ格納順方向に第２のテイルポインタより進んでおり、ヘッドポインタから第２のテイルポインタまでのデータ格納逆方向における距離だけの受信データが存在している。この場合、バッファ空き容量算出部２５８は、ヘッドポインタによって示されるアドレスと、第１のテイルポインタによって示されるアドレスとの間の領域に格納できるデータ量を求めることによって、バッファ空き容量を算出する。
【００５８】
また、受信データ量算出部２６２は、ヘッドポインタと第２のテイルポインタが不一致であることによって、受信データイベント信号を作成し、該受信データイベント信号をシステム制御部２７２に入力する。システム制御部２７２は、受信データイベント信号が入力されたか否かによって、上位層に対して引き取られていない未処理の受信データが存在することを示す未処理データ通知を発行する。未処理データ通知を受信した上位層は、ヘッドポインタから第２のテイルポインタまでのデータ格納逆方向における距離を計算することで、未処理の受信データのデータ量（データ長）を検出する。
【００５９】
図１０は、本実施の形態に係る受信装置２００の動作（その２）を示し、受信装置２００が送信装置１００によって送信されたパケットを受信する際の動作を示す。
【００６０】
ステップＳ１００２では、システム制御部２７２は、省電力動作モードに設定する。省電力動作モードでは、大規模なＲＡＭには電源が供給されず、小規模なＲＡＭの使用ができると仮定する。また、省電力動作モードにおいては、受信装置２００を搭載する装置の電源は切られており、受信データを処理する機能は働いていないと仮定する。ここで、装置の一例は、プリンターなどの消費電力が非常に大きく、稼動しているとき以外は装置の電源を切断し、受信装置２００の電源のみを投入しておくような装置を想定する。
【００６１】
ステップＳ１００４では、システム制御部２７２は、第１のテイルポインタを設定し、該第１のテイルポインタを第１のテイルポインタ設定部２６６に入力する。
【００６２】
ステップＳ１００６では、システム制御部２７２は、選択部２６４に、第１のテイルポインタ設定部２６６によって設定される第１のテイルポインタを選択するように設定するテイルポインタ選択信号を選択部２６４に入力する。
【００６３】
ステップＳ１００８では、パケット受信部２５４は送信装置１００によって送信されたパケットを受信する。
【００６４】
ステップＳ１０１０では、受信データ量算出部２６２は、受信データがあるか否かを判断する。受信データ量算出部２６２は、ヘッドポインタと第２のテイルポインタとが一致するか否かに基づいて、受信データがあるか否かを判断する。
【００６５】
ステップＳ１０１２では、ステップＳ１０１０で受信データがあると判断した場合、システム制御部２７２は、上位層に対して、引き取られていない未処理の受信データがあることを示す未処理データ通知を送信する。
【００６６】
ステップＳ１０１４では、システム制御部２７２は、上位層によって通知される第２のテイルポインタを第２のテイルポインタ設定部２６８に設定する。
【００６７】
ステップＳ１０１６では、ステップＳ１０１４の処理が終了した後、またはステップＳ１０１０において受信データがないと判断した場合、バッファ空き容量算出部２５８は、ヘッドポインタと第１のテイルポインタとに基づいてバッファ空き容量を算出する。
【００６８】
ステップＳ１０１８では、プロトコル処理部２５６は、バッファ空き容量算出部２５８によって算出されたバッファ空き容量を表す情報を付帯したＡＣＫなどのＩＰパケットを作成し、パケット送信部２５２から送信する。
【００６９】
図１０に示されるフローチャートのステップＳ１０１０において、受信データ量算出部２６２によって、受信データがあると判断された場合に、以下の処理を行うようにしてもよい。受信データ量算出部２６２は、受信データの先頭部分などの一部分に示されるメッセージに含まれる受信データ量に基づいて、省電力動作モードを継続するか、通常動作モードに移行するかを判断する。受信データ量に基づいて、受信データ量算出部２６２は、少量のデータ交換で完了し、且つ受信装置２００を搭載する装置によるデータ処理が必要ないか、受信装置２００を搭載する装置によるデータ処理を必要とするかを判断する。受信データ量算出部２６２は、受信装置２００を搭載する装置によるデータ処理が必要ない通信データである場合には省電力動作モードを継続すると判断し、受信装置２００を搭載する装置によるデータ処理を必要とする通信データである場合には通常動作モードに移行すると判断する。受信データ量算出部２６２は、該判断結果をシステム制御部２７２に通知する。
【００７０】
システム制御部２７２は、受信データ量算出部２６２によって通知される判断結果に基づいて、省電力動作モードを継続する場合には、ステップＳ１０１２以降の処理を行う。一方、システム制御部２７２は、通常動作モードに移行する場合には、受信装置２００を搭載する装置に電源を投入するとともに、再起動要求を実施し（１）、大規模ＲＡＭに電源を投入する（２）。さらに、システム制御部２７２は、該装置が再起動したか否かを確認するとともに、大規模ＲＡＭの稼動を確認する（３）。さらに、システム制御部２７２は、大規模ＲＡＭの稼動を確認できた場合に、小規模ＲＡＭに格納した受信データを該大規模ＲＡＭに転送するとともに（４）、ヘッドポインタ、および第２のテイルポインタによって指し示されるアドレスに対応する物理アドレスにＤＭＡ制御部２６０における写像設定を行うことによって、小規模ＲＡＭから大規模ＲＡＭへの切り替えを行う（５）。その後、受信装置２００は、図７に示した処理を実行する。
【００７１】
上記において、（１）−（３）の処理には相当の時間を要するが、この期間では、送信装置１００には第１のテイルポインタに基づいて算出されるバッファ空き容量が公告され、送信装置１００は、該バッファ空き容量にしたがってパケットを送信する。このため、該パケットに付帯されるデータ量は少なく、受信装置２００では大規模な受信データが発生しない。一方、通常動作モードに復帰した後は、送信装置１００には第２のテイルポインタに基づいて算出されるバッファの空き容量が公告され、送信装置１００は、該バッファ空き容量にしたがってパケットを送信する。このため、該パケットに付帯されるデータ量は多く、大規模な受信データが発生する。このように、受信データ量に基づいて、省電力動作モードから通常動作モードへ復帰することが可能である。
【００７２】
本実施の形態に係る受信装置によれば、ヘッドポインタに対して所定のデータ量に相当するアドレスだけ離したアドレスに第１のテイルポインタを設定し、該第１のテイルポインタを使用してリングバッファの空き容量を算出することによって、実際の空き容量よりも小さく算出できる。このため、受信装置は、送信装置に実際の空き容量よりも小さい空き容量を受信可能なデータ量として通知でき、送信装置からのデータの受信速度をＴＣＰフロー制御機能を用いて制限できる。
【００７３】
＜第２の実施の形態＞
本実施の形態に係る通信システムは図１を適用でき、フレーム構成は図２を適用できる。ただし、図１に示される通信システムにおいて、受信装置２００の代わりに受信装置３００を有する。
【００７４】
本実施の形態に係る受信装置３００のハードウエア構成は、図３を適用できる。
【００７５】
＜受信装置３００の機能構成＞
図１１は、本実施の形態に係る受信装置３００を示す。受信装置３００は、パケット送信部３５２と、パケット受信部３５４と、プロトコル処理部３５６と、バッファ空き容量算出部３５８と、ＤＭＡ制御部３６０と、受信データ量算出部３６２と、選択部３６４と、第１のテイルポインタ設定部３６６と、第２のテイルポインタ設定部３６８と、記憶部３７０と、システム制御部３７２とを有する。これら各部は、図３に示されている各構成要素のいずれかが、フラッシュメモリ２１０からＲＡＭ２０６上に展開されたプログラムに従ったＣＰＵ２０２からの命令によって動作することで実現される機能が含まれる。また、受信装置３００は、図３に示されているＲＯＭ２０４、ＲＡＭ２０６、フラッシュメモリ２１０によって構築される記憶部３７０を有している。
【００７６】
＜受信装置３００の各機能構成＞
パケット送信部３５２、パケット受信部３５４、プロトコル処理部３５６、バッファ空き容量算出部３５８、ＤＭＡ制御部３６０、受信データ量算出部３６２、選択部３６４、第１のテイルポインタ設定部３６６、第２のテイルポインタ設定部３６８、および記憶部３７０は、図４を参照して説明した受信装置２００を適用できる。
【００７７】
本実施の形態に係る受信装置２００のシステム制御部３７２は、演算回路、比較回路などのハードウェアや、ＣＰＵ２０２からの命令によって実現される。システム制御部３７２は、受信データ量算出部３６２、およびシステムバス３５０と接続される。システム制御部３７２は、受信データ量算出部３６２によって入力される受信データイベント信号、および受信データ量信号と、記憶部３７０のリングバッファ領域に格納されるデータ量に基づいて、ヘッドポインタの位置を把握する。
【００７８】
システム制御部３７２は、記憶部３７０のリングバッファ領域に格納されたデータに基づいて、アプリケーション層などの上位層によって引き取りされていない未処理データがある場合に、上位層に対して、引き取りされていない未処理の受信データがあることを示す未処理データ通知を通知する。上位層は、システム制御部３７２によって未処理データ通知が通知されると、記憶部２７０のリングバッファ領域に格納された未処理データを引き取る。上位層は、引き取った未処理データ量に応じて第２のテイルポインタをずらすことによって変更し、変更した第２のテイルポインタをシステム制御部３７２に通知する。システム制御部３７２は、上位層によって通知される第２のテイルポインタを第２のテイルポインタ設定部３６８に設定する。
【００７９】
さらに、システム制御部３７２は、受信装置３００が通常動作モードである場合には選択部３６４に第２のテイルポインタ設定部３６８に設定される第２のテイルポインタを選択するように設定するテイルポインタ選択信号を選択部３６４に入力する。また、システム制御部３７２は、受信装置３００が通常動作モードから省電力動作モードに移行した場合に、第１のテイルポインタ設定部３６６に第１のテイルポインタを設定する。例えば、システム制御部３７２は、第１のテイルポインタとして、現在のヘッドポインタから５バイトから２０バイト程度、より好ましくは１０バイト程度先頭アドレスから最終アドレスに向かう方向に設定する。さらに、システム制御部３７２は、受信装置３００が省電力動作モードである場合には選択部３６４に第１のテイルポインタ設定部３６６に設定される第１のテイルポインタを選択するように設定するテイルポインタ選択信号を選択部３６４に入力する。
【００８０】
さらに、システム制御部３７２は、通常動作モードから省電力動作モードに移行し、第１のテイルポインタ設定部３６６に第１のテイルポインタを設定した後に、送信装置１００によってヘッドポインタと第１のテイルポインタに基づいて算出されるデータ量以上のデータが送信される場合、現在のヘッドポインタから５バイトから２０バイト程度、より好ましくは１０バイト程度先頭アドレスから最終アドレスに向かう方向に第１のテイルポインタをさらに変更する。これによって、受信装置２００は、送信装置１００によって送信されるパケットをさらに受信できる。
【００８１】
通常動作モードから省電力動作モードに移行し、第１のテイルポインタ設定部３６６にヘッドポインタから所定のアドレスずらした位置に第１のテイルポインタが設定されると、送信装置１００から受信できるデータは、そのずらした位置に相当するデータ量に制限される。この場合、送信装置１００によって該データ量以下のデータが送信される場合に対応できる。しかし、送信装置１００によって該データ量以上のデータが送信される場合には対応できないため、第１のテイルポインタの位置をさらに変更する。
【００８２】
通常動作モードから省電力動作モードに移行し、第１のテイルポインタ設定部３６６に設定される第１のテイルポインタの位置をヘッドポインタから大きくずらした場合、省電力動作モードから通常動作モードへ復帰する際に、小規模ＲＡＭから大規模ＲＡＭへのデータ転送量が多くなるため、非効率となる。このため、通常動作モードから省電力動作モードに移行し、第１のテイルポインタ設定部３６６に設定される第１のテイルポインタの位置をヘッドポインタから小さくずらして、送信装置１００によってそのずらした位置に対応するデータ量以上のデータが送信される場合には、さらにずらすのが好ましい。
【００８３】
本実施の形態によれば、省電力動作モードであっても、受信装置２００は、送信装置１００によって送信されるデータ量に応じて、受信できるデータ量を変更できる。
【００８４】
図１２は、省電力動作モードに設定する場合に、第１のテイルポインタを設定しないで、第２のテイルポインタをずらすことによって対応した例を示す。第２のテイルポインタは、ヘッドポインタのデータ格納順方向において直前に設定される。このようにした場合、上位層によって引き取られていない未処理の受信データの量が多く、リングバッファの未使用領域が少ないように見えてしまう問題がある。また、第２のテイルポインタとヘッドポインタとが不一致であるため、受信データがリングバッファ上に存在しないにも拘らず、上位層に対して未処理の受信データが存在することを示す通知が発行される問題がある。また、未処理の受信データのデータ量が、ヘッドポインタと第２のテイルポインタとから求めることができないため、未処理の受信データの判定処理が非常に複雑となる。
【００８５】
本実施の形態によれば、第２のテイルポインタに加えて、第１のテイルポインタを設定できるため、上位層によって引き取られていない未処理の受信データの量があるか否かの判定ができるとともに、送信装置に公告するバッファの空き容量も小さく算出できる。
【００８６】
受信装置用の各プログラムは、インストール可能な形式または実行可能な形式のファイルによって、コンピュータで読み取り可能な記録媒体に記録されて流通されるようにしてもよい。また、上記記録媒体の他の例として、ＣＤ−Ｒ(Compact Disc Recordable)、ＤＶＤ(Digital Versatile Disk)、ブルーレイディスク等が挙げられる。また、上記実施の形態の各プログラムが記憶されたＣＤ−ＲＯＭ等の記録媒体、並びに、これらプログラムが記憶されたフラッシュメモリは、プログラム製品(Program Product)として、国内または国外へ提供されることができる。
【００８７】
また、通信システムを構成する送信装置１００、および受信装置２００は、相互に通信可能なものに適用できる。例えば、送信装置１００、および受信装置２００は、ＩＰ(Internet Protocol)電話機や、インターネット電話機、ＰＣ(Personal Computer)等に搭載することなどによって適用してもよい。さらに、送信装置１００、および受信装置２００は、スマートフォン、携帯電話機、カーナビゲーション端末、ウェアラブルコンピュータ、プロジェクタ、監視カメラ、電子黒板、電子看板（デジタルサイネージ）、ゲーム機、または、通信機能を備えた産業用機器に搭載することによって適用してもよい。ウェアラブルコンピュータには、腕時計型のものやヘッドマウントディスプレイ等が含まれる。また、産業用機器には、ＭＦＰ(Multifunction Peripheral/Printer/Product)等のオフィス機器、内視鏡等の医療用機器、耕運機等の農業用機器などが含まれる。
【００８８】
更に、例えば、端末に受信装置２００が搭載され、そのアプリが自らセンターのサーバにアクセスして、各種データを送信したり取得する場合にも適用される。この場合、相手側が、端末ではなく、サーバの場合もあり得る。
【００８９】
上述した実施の形態において、受信装置は通信装置の一例であり、パケット受信部は受信部の一例であり、受信装置用プログラムは通信制御プログラムの一例である。
【００９０】
本発明は特定の実施例、変形例を参照しながら説明されてきたが、各実施例、変形例は単なる例示に過ぎず、当業者は様々な変形例、修正例、代替例、置換例などを理解するであろう。説明の便宜上、本発明の実施例に従った装置は機能的なブロック図を用いて説明されたが、そのような装置はハードウェアで、ソフトウエアでまたはそれらの組み合わせで実現されてもよい。本発明は上記実施例に限定されず、本発明の精神から逸脱することなく、様々な変形例、修正例、代替例、置換例などが包含される。
【符号の説明】
【００９１】
５０  ネットワーク
１００  送信装置
２００、３００  受信装置
２０２  ＣＰＵ
２０４  ＲＯＭ
２０６  ＲＡＭ
２０８  ＳＳＤ
２１０  フラッシュメモリ
２１２  ネットワークＩ／Ｆ
２５２、３５２  パケット送信部
２５４、３５４  パケット受信部
２５６、３５６  プロトコル処理部
２５８、３５８  バッファ空き容量算出部
２６０、３６０  ＤＭＡ制御部
２６２、３６２  受信データ量算出部
２６４、３６４  選択部
２６６、３６６  第１のテイルポインタ設定部
２６８、３６８  第２のテイルポインタ設定部
２７０、３７０  記憶部
２７２、３７２  システム制御部
【先行技術文献】
【特許文献】
【００９２】
【特許文献１】特開２０１４−１５８２４１号公報
【図１】
0006458574.tif 000002
【図２】
0006458574.tif 000003
【図３】
0006458574.tif 000004
【図４】
0006458574.tif 000005
【図５】
0006458574.tif 000006
【図６】
0006458574.tif 000007
【図７】
0006458574.tif 000008
【図８】
0006458574.tif 000009
【図９】
0006458574.tif 000010
【図１０】
0006458574.tif 000011
【図１１】
0006458574.tif 000012
【図１２】
0006458574.tif 000013