(57)【要約】【課題】送信側の装置から分割後のデータを受信し、分割後のデータから元のデータを高速に再構成すること。【解決手段】受信装置１は、受信可能なパケット数を制限するウィンドウを使用した自動再送要求を用いてデータを受信し、受信したデータをシーケンス番号に対応する記憶領域６のブロック領域に格納し、第１のデータ領域５の識別子をデータ格納済みにする。制御部３は、受信待ちを示すシーケンス番号に対応する第１のデータ領域５の識別子が、受信待ちを示すシーケンス番号に対応するブロック領域に、データが格納されていることを示していた場合に、この識別子が連続して格納されていることを示す範囲のシーケンス番号に対応するブロック領域のデータを第２の格納部７へ転送する。制御部３は、第２のデータ領域４の受信待ちを示すシーケンス番号、及びインデックス番号を、次の受信待ちを示すシーケンス番号に対応する番号にそれぞれ更新する。【選択図】図１
2014022956.tif 000002
【特許請求の範囲】
【請求項１】
連続したパケットを通信するシステムにおいて、受信可能なパケット数を制限するウィンドウを使用した自動再送要求を用いてデータを受信する受信装置であって、
前記パケットのデータを格納する第１の格納部と、
前記第１の格納部に格納されたデータのシーケンス番号を解析する制御部と、
複数のブロック領域を含み、前記第１の格納部に格納されたデータを、前記シーケンス番号に対応するブロック領域に記憶する記憶領域と、
各々が、対応するブロック領域にデータが格納されているか否かを識別する複数の識別子を保持する第１のデータ領域と、
前記制御部で解析されたシーケンス番号のうち受信待ちを示すシーケンス番号、及び前記記憶領域の先頭となるブロック領域の位置を示すインデックス番号を保持する第２のデータ領域と、
前記データを処理する処理装置へ転送されるデータを格納する第２の格納部と、
を有し、前記制御部は、
前記第１のデータ領域の識別子が、前記受信待ちを示すシーケンス番号に対応するブロック領域に、データが格納されていることを示していた場合に、該識別子が連続してデータが格納されていることを示す範囲のシーケンス番号に対応する前記ブロック領域のデータを前記第２の格納部へ転送し、前記第２のデータ領域の前記受信待ちを示すシーケンス番号、及び前記インデックス番号を、次の受信待ちを示すシーケンス番号に対応する番号にそれぞれ更新することを特徴とする受信装置。
【請求項２】
前記インデックス番号をｉindexとし、前記ウィンドウの最大値をＭとし、前記受信待ちを示すシーケンス番号の値をｘとし、前記シーケンス番号の最大値に１を加算した値をＮとするとき、
前記制御部は、
前記第２のデータ領域の前記受信待ちを示すシーケンス番号を、前記ｘに１を加算した値を前記Ｎで除するときの剰余の値に更新し、
前記インデックス番号を、前記ｉindexに１を加算した値を前記Ｍで除するときの剰余の値に更新することを特徴とする請求項１に記載の受信装置。
【請求項３】
前記インデックス番号をｉindexとし、前記ウィンドウの最大値をＭとし、前記受信待ちを示すシーケンス番号の値をｘとし、前記シーケンス番号の最大値に１を加算した値をＮとし、前記第１の格納部に格納されているデータのシーケンス番号をｒとするとき、
前記制御部は、
前記ｒが前記ｘ以上の値であるときに、前記ｒから前記ｘを減算して前記ｉindexを加算した値を前記Ｍで除するときの剰余の値ｉ、または前記ｒが前記ｘよりも小さい値であるときに、前記ｒに前記Ｎを加算した値から前記ｘを減算して前記ｉindexを加算した値を前記Ｍで除するときの剰余の値ｉを求め、
前記第１のデータ領域における前記ｉに対応する領域の前記識別子を、前記ブロック領域にデータが格納されたことを示す値にすることを特徴とする請求項１または２に記載の受信装置。
【請求項４】
前記制御部で解析されたシーケンス番号のうち前記ブロック領域から前記第２の格納部への転送待ちを示すシーケンス番号をｙとし、前記シーケンス番号の最大値に１を加算した値をＮとするとき、
前記第２のデータ領域は、
前記転送待ちを示すシーケンス番号を保持し、
前記制御部は、
前記ブロック領域から前記第２の格納部へデータが転送されるたびに、前記第２のデータ領域の前記転送待ちを示すシーケンス番号を、前記ｙに１を加算した値を前記Ｎで除するときの剰余の値に更新することを特徴とする請求項１乃至３のいずれか一項に記載の受信装置。
【請求項５】
前記ウィンドウの最大値をＭとし、前記受信待ちを示すシーケンス番号の値をｘとし、前記制御部で解析されたシーケンス番号のうち前記ブロック領域から前記第２の格納部への転送待ちを示すシーケンス番号をｙとし、前記シーケンス番号の最大値に１を加算した値をＮとするとき、
前記制御部は、
前記ｘが前記ｙ以上の値であるときに、前記Ｍから前記ｘを減算して前記ｙを加算した値Ｗ、または前記ｘが前記ｙよりも小さい値であるときに、前記Ｍから前記ｘ及び前記Ｎを減算して前記ｙを加算した値Ｗを求め、
前記Ｗを前記ウィンドウの値にすることを特徴とする請求項１乃至４のいずれか一項に記載の受信装置。
【請求項６】
前記第１のデータ領域には、前記識別子ごとに対応する前記記憶領域のブロック領域のアドレスが保持されており、
前記アドレスによってデータの格納先を指定することによって非連続のメモリまたは非連続のメモリ空間を前記データの保存領域として用いることを特徴とする請求項１乃至５のいずれか一項に記載の受信装置。
【請求項７】
連続したパケットを通信するシステムにおいて、受信可能なパケット数を制限するウィンドウを使用した自動再送要求を用いてデータを受信する受信方法であって、
前記パケットのデータを第１の格納部に格納し、
前記第１の格納部に格納されたデータのシーケンス番号を解析し、
前記第１の格納部に格納されたデータを、複数のブロック領域を含む記憶領域の、前記シーケンス番号に対応するブロック領域に記憶し、
対応するブロック領域にデータが格納されているか否かを識別する識別子であって前記解析されたシーケンス番号のうち受信待ちを示すシーケンス番号に対応する識別子が、該識別子に対応するブロック領域にデータが格納されていることを示していた場合に、該識別子が連続してデータが格納されていることを示す範囲のシーケンス番号に対応する前記ブロック領域のデータを第２の格納部へ転送し、前記受信待ちを示すシーケンス番号、及び前記記憶領域の先頭となるブロック領域の位置を示すインデックス番号を、次の受信待ちを示すシーケンス番号に対応する番号にそれぞれ更新することを特徴とする受信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、受信装置及び受信方法に関する。
【背景技術】
【０００２】
従来、信頼性の高いデータ通信を行う技術の一つに、自動再送要求（ＡＲＱ：Ａｕｔｏｍａｔｉｃ  Ｒｅｐｅａｔ  ｒｅＱｕｅｓｔ）がある。自動再送要求に対応する送信装置の一つに、送信するデータの容量に関する情報を受信側の装置へ予め通知し、送信するデータを複数のデータに分割し、分割後のデータを順序の情報とともに受信側の装置へ送信する送信装置がある。
【０００３】
ＡＲＱを受信する際に、パケットが順不同で到着するため、順序を整えて整列する必要がある。しかし、先頭または後尾のパケットから一つずつパケットの比較を行う場合、処理に時間が掛り、処理速度が遅い装置を使った場合には通信速度が遅くなることがある。
【０００４】
送信側の装置から分割後のデータを受信する受信装置の一つに、送信側の装置から、予め、分割前のデータの容量に関する情報を受け取り、分割前のデータの容量に対応する容量の記憶領域を確保する受信装置がある。受信装置は、分割後のデータと順序の情報を受信し、分割後のデータを順序の情報に従って記憶領域に格納することによって、元のデータを高速に再構成する（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２２８２６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来の受信装置では、音声または画像のストリームデータのように、送信装置が送信する元のデータの容量が不定である場合、元のデータの容量に対応する容量の記憶領域を予め確保しておくことができない。そのため、受信装置は、分割後のデータから元のデータを高速に再構成することができないという問題点がある。
【０００７】
送信側の装置から分割後のデータを受信し、分割後のデータから元のデータを高速に再構成することができる受信装置及び受信方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
受信装置は、連続したパケットを通信するシステムにおいて、受信可能なパケット数を制限するウィンドウを使用した自動再送要求を用いてデータを受信する。受信装置は、第１の格納部、制御部、記憶領域、第１のデータ領域、第２のデータ領域及び第２の格納部を有する。第１の格納部は、パケットのデータを格納する。制御部は、第１の格納部に格納されたデータのシーケンス番号を解析する。記憶領域は、複数のブロック領域を含み、第１の格納部に格納されたデータを、シーケンス番号に対応するブロック領域に記憶する。第１のデータ領域は、複数の識別子を保持する。複数の識別子の各々が、対応するブロック領域にデータが格納されているか否かを識別する。第２のデータ領域は、制御部で解析されたシーケンス番号のうち受信待ちを示すシーケンス番号、及び記憶領域の先頭となるブロック領域の位置を示すインデックス番号を保持する。第２の格納部は、データを処理する処理装置へ転送されるデータを格納する。そして、制御部は、第１のデータ領域の識別子が、受信待ちを示すシーケンス番号に対応するブロック領域に、データが格納されていることを示していた場合に、この識別子が連続してデータが格納されていることを示す範囲のシーケンス番号に対応するブロック領域のデータを第２の格納部へ転送する。また、制御部は、第２のデータ領域の受信待ちを示すシーケンス番号、及びインデックス番号を、次の受信待ちを示すシーケンス番号に対応する番号にそれぞれ更新する。
【発明の効果】
【０００９】
この受信装置及び受信方法によれば、送信側の装置から分割後のデータを受信し、分割後のデータから元のデータを高速に再構成することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施の形態にかかる受信装置の一例を示す図である。
【図２】図２は、実施の形態にかかる受信方法の一例を示すフローチャートである。
【図３】図３は、実施の形態にかかる受信装置の別の例のハードウェア構成を示す図である。
【図４】図４は、実施の形態にかかる受信装置の別の例の機能的な構成を示す図である。
【図５】図５は、図４に示す受信装置におけるシーケンス番号とウィンドウの範囲との関係を説明する図である。
【図６】図６は、図４に示す受信装置における管理テーブルとメモリとの関係を説明する図である。
【図７】図７は、実施の形態にかかる受信方法の別の例を示すフローチャートである。
【図８】図８は、図４に示す受信装置における管理テーブル及びメモリの状態の変化の一例を示す図である。
【図９】図９は、図４に示す受信装置における管理テーブル及びメモリの状態の変化の一例を示す図である。
【図１０】図１０は、図４に示す受信装置における管理テーブル及びメモリの状態の変化の一例を示す図である。
【図１１】図１１は、図４に示す受信装置における管理テーブル及びメモリの状態の変化の一例を示す図である。
【図１２】図１２は、図４に示す受信装置における管理テーブル及びメモリの状態の変化の一例を示す図である。
【図１３】図１３は、図４に示す受信装置における管理テーブル及びメモリの状態の変化の一例を示す図である。
【図１４】図１４は、図４に示す受信装置における管理テーブル及びメモリの状態の変化の一例を示す図である。
【図１５】図１５は、図４に示す受信装置における管理テーブル及びメモリの状態の変化の一例を示す図である。
【図１６】図１６は、図４に示す受信装置における管理テーブル及びメモリの状態の変化の一例を示す図である。
【図１７】図１７は、図４に示す受信装置における管理テーブル及びメモリの別の例を示す図である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、この受信装置及び受信方法の好適な実施の形態を詳細に説明する。以下の各実施例の説明においては、同様の構成要素には同一の符号を付して、重複する説明を省略する。
【００１２】
・受信装置の一例
図１は、実施の形態にかかる受信装置の一例を示す図である。図１には、受信装置において、分割後の受信データから元のデータを再構成する処理を行う処理部が示されている。
【００１３】
図１に示すように、受信装置１は、第１の格納部２、制御部３、第２のデータ領域４、第１のデータ領域５、記憶領域６及び第２の格納部７を有する。受信装置１は、連続するパケットを通信するシステムにおいて、受信可能なパケット数を制限するウィンドウを使用する自動再送要求を用いてデータを受信する。
【００１４】
第１の格納部２は、例えば図示省略する受信部から、受信部が受信するパケットのデータを受け取る。受信部は、例えば連続するパケットを通信するシステムにおいて自動再送要求に対応する送信装置から送信されるパケットのデータを受信する。送信装置は、送信対象のデータを複数のパケットに分割し、各パケットのデータに順番を示すシーケンス番号を付与して送信する。第１の格納部２は、受信部から受け取るパケットのデータを格納する。
【００１５】
第２のデータ領域４は、受信待ちを示すシーケンス番号、及びインデックス番号を保持する。受信待ちを示すシーケンス番号は、受信装置１が次に受信するのを期待するデータのシーケンス番号である。インデックス番号は、記憶領域６の先頭位置を示す番号である。インデックス番号によって示される記憶領域６の先頭位置は、受信待ちを示すシーケンス番号に応じて変わる。
【００１６】
第１のデータ領域５は、識別子を保持する。識別子は、記憶領域６にデータが格納されているか否かを識別するのに用いられる。記憶領域６は、第１の格納部２に格納されているデータを記憶する。第２の格納部７は、記憶領域６から、データを処理する図示省略する処理装置へ転送されるデータを格納する。
【００１７】
制御部３は、第１の格納部２に格納されるデータのシーケンス番号を解析する。制御部３は、第１の格納部２に格納されているデータを、このデータに付与されているシーケンス番号に対応する記憶領域６の領域に書き込む。制御部３は、記憶領域６にデータを書き込むと、このデータに付与されているシーケンス番号に対応する識別子を、データ格納済みを示すように変更する。
【００１８】
制御部３は、受信待ちを示すシーケンス番号に対応する識別子がデータ格納済みを示す場合、識別子が連続してデータ格納済みを示す範囲のシーケンス番号に対応する記憶領域６のデータを第２の格納部７へ転送する。また、制御部３は、第２の格納部７へのデータの転送とともに、受信待ちを示すシーケンス番号及びインデックス番号を、次の受信待ちを示すシーケンス番号に対応する番号にそれぞれ更新する。
【００１９】
・受信方法の一例
図２は、実施の形態にかかる受信方法の一例を示すフローチャートである。図２に示す受信方法は、図１に示す受信装置１により実施されてもよい。本実施例は、一例として図１に示す受信装置１により実施される場合について説明する。
【００２０】
図２に示すように、受信装置１においてデータの受信が開始されると、受信装置１は、受信するパケットのデータを第１の格納部２に格納する（ステップＳ１）。次いで、制御部３は、第１の格納部２に格納されているデータのシーケンス番号を解析する（ステップＳ２）。ウィンドウによって制限される範囲にシーケンス番号が含まれないデータは、例えば破棄されてもよい。
【００２１】
次いで、制御部３は、第１の格納部２に格納されており、ウィンドウによって制限される範囲にシーケンス番号が含まれるデータを、このデータに付与されているシーケンス番号に対応する記憶領域６の領域に格納する（ステップＳ３）。また、制御部３は、記憶領域６にデータを格納すると、このデータに付与されているシーケンス番号に対応する識別子を、データ格納済みを示すように変更する。
【００２２】
次いで、制御部３は、受信待ちを示すシーケンス番号に対応する識別子がデータ格納済みを示しているか否かを判断する（ステップＳ４）。データ格納済みを示していない場合（ステップＳ４：Ｎｏ）、ステップＳ１へ戻り、受信待ちを示すシーケンス番号に対応する識別子がデータ格納済みを示すまで、ステップＳ１〜ステップＳ４を繰り返す。
【００２３】
受信待ちを示すシーケンス番号に対応する識別子がデータ格納済みを示す場合（ステップＳ４：Ｙｅｓ）、制御部３は、受信待ちを示すシーケンス番号及びインデックス番号を、次の受信待ちを示すシーケンス番号に対応する番号にそれぞれ更新する（ステップＳ５）。また、制御部３は、受信待ちを示すシーケンス番号に対応する識別子を含む複数の識別子が連続してデータ格納済みを示す範囲のシーケンス番号に対応する記憶領域６のデータを第２の格納部７へ転送する（ステップＳ６）。第２の格納部７に格納されるデータは、第２の格納部７から後段の処理部へ転送される。
【００２４】
次いで、受信装置１は、全てのパケットの受信が終了するか否かを判断する（ステップＳ７）。受信が終了していないパケットがある場合（ステップＳ７：Ｎｏ）、ステップＳ１へ戻り、全てのパケットの受信が終了するまで、ステップＳ１〜ステップＳ７を繰り返す。全てのパケットの受信が終了すると（ステップＳ７：Ｙｅｓ）、一連の処理が終了する。
【００２５】
図１に示す受信装置１及び図２に示す受信方法によれば、受信装置１により受信されるデータは、このデータに付与されているシーケンス番号に対応する記憶領域６の領域に格納される。受信装置１が、受信待ちを示すシーケンス番号のデータを受信し、受信待ちを示すシーケンス番号に対応する識別子を含む複数の識別子が連続してデータ格納済みを示すと、連続してデータ格納済みを示す識別子の範囲のシーケンス番号に対応するデータが記憶領域６から第２の格納部７へ転送される。従って、受信の順番がシーケンス番号順でなくても、分割後のデータから元のデータを再構成することができる。また、受信装置１が、受信するデータの容量を予め把握していなくても、シーケンス番号順にデータが並ぶ。従って、例えばストリームデータを受信する場合のように、受信するデータの容量が不定であっても、分割後のデータから元のデータを再構成することができる。
【００２６】
・受信装置の別の例
図３は、実施の形態にかかる受信装置の別の例のハードウェア構成を示す図である。図３に示すように、受信装置１１は、受信部１２、受信用バッファ１３、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置）１４、ダウンリンク用の転送部１５、ダウンリンク用の転送用バッファ１６及びインターフェース部１７を有する。受信用バッファ１３、ＣＰＵ１４及びダウンリンク用の転送用バッファ１６は、データバス１８に接続されている。
【００２７】
受信部１２は、入力端子２４に接続されている。入力端子２４には、図示しない通信路が接続される。受信部１２は、入力端子２４を介して通信路から入力するデータを受信する。受信用バッファ１３は、受信部１２に接続されている。受信用バッファ１３は、受信部１２から渡されるデータを格納してデータバス１８へ出力する。
【００２８】
ダウンリンク用の転送用バッファ１６は、図示しない上位レイヤの処理装置へ転送されるデータをデータバス１８から受け取って格納する。ダウンリンク用の転送部１５は、ダウンリンク用の転送用バッファ１６に接続されている。ダウンリンク用の転送部１５は、ダウンリンク用の転送用バッファ１６に格納されているデータをインターフェース部１７へ出力する。
【００２９】
インターフェース部１７は、ダウンリンク用の転送部１５に接続されている。インターフェース部１７は、受信装置１１と上位レイヤとの接続を司る。ダウンリンク用の転送用バッファ１６に格納されているデータは、ダウンリンク用の転送部１５により、インターフェース部１７を介して上位レイヤへ転送される。
【００３０】
また、受信装置１１は、送信用バッファ１９、送信部２０、メインメモリ２１、アップリンク用の転送用バッファ２２及びアップリンク用の転送部２３を有する。送信用バッファ１９、メインメモリ２１及びアップリンク用の転送用バッファ２２は、データバス１８に接続されている。
【００３１】
アップリンク用の転送部２３は、インターフェース部１７に接続されている。アップリンク用の転送部２３は、インターフェース部１７を介して上位レイヤから渡されるデータをアップリンク用の転送用バッファ２２へ転送する。アップリンク用の転送用バッファ２２は、アップリンク用の転送部２３に接続されている。アップリンク用の転送用バッファ２２は、アップリンク用の転送部２３から受け取るデータを格納してデータバス１８へ出力する。
【００３２】
メインメモリ２１は、データバス１８から受け取るデータを格納し、格納しているデータをデータバス１８へ出力する。例えば、メインメモリ２１には、受信用バッファ１３から出力されるデータ、またはアップリンク用の転送用バッファ２２から出力されるデータが格納されてもよい。メインメモリ２１には、ＣＰＵ１４における自動再送要求などの処理において生成されるＡＣＫパケットまたはＮＡＣＫパケットが格納されてもよい。
【００３３】
また、メインメモリ２１からは、ダウンリンク用の転送部１５により上位レイヤへ転送されるデータ、または送信部２０により通信路へ出力されるデータが出力されてもよい。送信部２０により通信路へ出力されるデータには、ＡＣＫパケットまたはＮＡＣＫパケットが含まれていてもよい。
【００３４】
送信用バッファ１９は、通信路へ出力されるデータをデータバス１８から受け取って格納する。送信部２０は、送信用バッファ１９及び出力端子２５に接続されている。送信部２０は、送信用バッファ１９に格納されているデータを出力端子２５へ出力する。出力端子２５は、図示しない通信路に接続される。送信部２０により出力端子２５へ出力されるデータは、図示しない通信路へ出力される。
【００３５】
ＣＰＵ１４は、後述する受信方法を実現するプログラムを実行して、自動再送要求などの処理を行う。ＣＰＵ１４は、自動再送要求の処理を行う際に、ＡＣＫパケットまたはＮＡＣＫパケットを生成する。プログラムは、ＣＰＵ１４内の不揮発性メモリに格納されていてもよいし、データバス１８に接続するリードオンリーメモリ（ＲＯＭ：Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの不揮発性メモリに格納されていてもよい。
【００３６】
図４は、実施の形態にかかる受信装置の別の例の機能的な構成を示す図である。図４には、受信装置において、分割後の受信データから元のデータを再構成する処理を行う処理部が示されている。
【００３７】
図４に示すように、受信装置３１は、受信用バッファ３２、制御部３３、書込・読出部３４、ＡＣＫ送信部３５、管理テーブルＡ３６、管理テーブルＢ３７、メモリ３８及び転送用バッファ３９を有する。受信装置３１は、連続するパケットを通信するシステムにおいて、ウィンドウを使用する自動再送要求を用いてデータを受信する。
【００３８】
例えば、制御部３３、書込・読出部３４及びＡＣＫ送信部３５は、後述する受信方法を実現するプログラムをＣＰＵ１４が実行することにより実現されてもよい。あるいは、制御部３３、書込・読出部３４及びＡＣＫ送信部３５は、ハードウェアにより実現されてもよい。本実施例では、ＣＰＵ１４がプログラムを実行することにより実現されるとする。
【００３９】
受信用バッファ３２は、第１の格納部の一例であり、例えば図３に示す受信用バッファ１３により実現されてもよい。受信用バッファ３２は、例えば受信部１２（図３参照）からパケットのデータを受け取って格納する。パケットのデータには、例えば連続するパケットを通信するシステムの送信装置により、順番を示すシーケンス番号が付与されている。
【００４０】
管理テーブルＡ３６は、第２のデータ領域の一例であり、例えば図３に示すメインメモリ２１により実現されてもよい。管理テーブルＡ３６は、インデックス番号、受信待ちを示すシーケンス番号及び処理待ちを示すシーケンス番号を保持する。これ以降の説明及び図面においては、受信待ちを示すシーケンス番号及び処理待ちを示すシーケンス番号を、それぞれ、受信待ちシーケンス番号及び処理待ちシーケンス番号と称することがある。
【００４１】
インデックス番号は、メモリ３８の先頭位置を示す番号である。受信待ちシーケンス番号は、受信装置３１が次に受信するのを期待するデータのシーケンス番号である。インデックス番号によって示されるメモリ３８の先頭位置は、受信待ちシーケンス番号に応じて変わる。処理待ちシーケンス番号は、受信装置３１によって受信されてメモリ３８に格納されており、転送用バッファ３９へ転送可能であるにもかかわらず、転送用バッファ３９へ転送されずに、上位レイヤの処理装置での処理を待つ状態にあるデータのシーケンス番号である。
【００４２】
管理テーブルＢ３７は、第１のデータ領域の一例であり、例えば図３に示すメインメモリ２１により実現されてもよい。管理テーブルＢ３７は、メモリ３８にデータが格納されていることを示すフラグを保持する。フラグは、識別子の一例である。管理テーブルＢ３７の一例については、後述する。
【００４３】
メモリ３８は、記憶領域の一例であり、例えば図３に示すメインメモリ２１により実現されてもよい。メモリ３８は、受信用バッファ３２に格納されているデータを記憶する。
【００４４】
転送用バッファ３９は、第２の格納部の一例であり、例えば図３に示すダウンリンク用の転送用バッファ１６により実現されてもよい。転送用バッファ３９は、メモリ３８から上位レイヤの処理装置へ転送されるデータを格納する。
【００４５】
制御部３３は、受信用バッファ３２に格納されるデータのシーケンス番号を解析する。制御部３３は、管理テーブルＡ３６を参照し、受信用バッファ３２に格納されるデータのシーケンス番号に対応するメモリ３８の領域を求める。制御部３３は、書込・読出部３４に対して、受信用バッファ３２に格納されるデータを、このデータのシーケンス番号に対応するメモリ３８の領域に書き込む指示をする。制御部３３は、管理テーブルＢ３７にアクセスして、メモリ３８に書き込まれるデータのシーケンス番号に対応するフラグを、データ格納済みを示すように変更する。
【００４６】
制御部３３は、管理テーブルＢ３７を参照し、受信待ちシーケンス番号に対応するフラグがデータ格納済みを示す場合、書込・読出部３４に対して、フラグが連続してデータ格納済みを示す範囲のシーケンス番号に対応するメモリ３８のデータを転送用バッファ３９へ転送する指示をする。制御部３３は、管理テーブルＡ３６にアクセスして、受信待ちシーケンス番号及びインデックス番号を、次の受信待ちシーケンス番号に対応する番号にそれぞれ更新する。制御部３３は、管理テーブルＡ３６にアクセスして、処理待ちシーケンス番号を、次の処理待ちシーケンス番号に対応する番号に更新する。
【００４７】
制御部３３は、受信待ちシーケンス番号及び処理待ちシーケンス番号に基づいて、ウィンドウの範囲を制御する。制御部３３は、受信待ちシーケンス番号及びウィンドウの範囲をＡＣＫ送信部３５へ通知する。
【００４８】
書込・読出部３４は、制御部３３からの指示に基づいて、メモリ３８へのデータの書き込みまたはメモリ３８からのデータの読み出しを行う。ＡＣＫ送信部３５は、制御部３３から通知される受信待ちシーケンス番号及びウィンドウの範囲をＡＣＫに設定し、ＡＣＫを例えばメインメモリ２１（図３参照）へ送る。
【００４９】
・シーケンス番号とウィンドウの範囲との関係
図５は、図４に示す受信装置におけるシーケンス番号とウィンドウの範囲との関係を説明する図である。図５において、Ｎは、整数であり、シーケンス番号の最大値よりも１だけ大きい値である。つまり、シーケンス番号の範囲は、０〜［Ｎ−１］である。Ｍは、Ｎよりも小さい整数であり、ウィンドウサイズの最大値である。Ｗは、０〜Ｍの整数であり、ウィンドウサイズの値である。ｘは、０〜［Ｎ−１］の整数であり、受信待ちシーケンス番号の値である。ｙは、０〜［Ｎ−１］の整数であり、処理待ちシーケンス番号の値である。ｒは、０〜［Ｎ−１］の整数であり、受信用バッファ３２に格納されているデータのシーケンス番号の値である。
【００５０】
［ｘ−１］番目のパケットまでは巡回冗長検査（ＣＲＣ：Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）に間違いがなく、正常に受信している状態であるとする。このとき、巡回冗長検査に間違いがなければ、次に受信することのできるパケットのシーケンス番号の値ｒの範囲は、次の（１）式または（２）式で表される。
【００５１】
ｘ≦ｒ＜ｘ＋Ｗ    （ｘ＋Ｗ≦Ｎの場合）  ・・・（１）
ｘ≦ｒ  または  ｒ＜ｘ＋Ｗ−Ｎ    （ｘ＋Ｗ＞Ｎの場合）  ・・・（２）
【００５２】
（２）式は、シーケンス番号が一周して、［（Ｎ−１）＋１］が０となるところを含む場合である。シーケンス番号の値ｒが（１）式または（２）式を満たさない場合には、パケットが破棄される。例えば、Ｎ＝２０４８、Ｗ＝１０２４及びｘ＝１００である場合、シーケンス番号の値ｒが１００≦ｒ＜１１２４を満たすパケットが受信され、それ以外のシーケンス番号を有するパケットは破棄される。
【００５３】
受信待ちシーケンス番号の値ｘと処理待ちシーケンス番号の値ｙが異なる場合、受信済みで処理待ちとなるパケットが発生していることになる。例えば図５に示す例では、シーケンス番号の値がｙ〜［ｘ−１］である領域４２は、受信済みであるが、処理待ちとなる領域である。シーケンス番号の値がｘ〜［ｘ＋Ｗ−１］である領域４３は、受信可能な領域である。シーケンス番号の値が０〜［ｙ−１］である領域４１または［ｘ＋Ｗ］〜［Ｎ−１］である領域４４は、受信不可能な領域である。
【００５４】
・管理テーブルＡ及び管理テーブルＢとメモリとの関係
図６は、図４に示す受信装置における管理テーブルとメモリとの関係を説明する図である。図６において、ｉindexは、０〜［Ｗ−１］の整数であり、インデックス番号の値である。ｉは、０〜［Ｗ−１］の整数であり、管理テーブルＢ３７においてフラグを格納する各フィールドに付されるインデックス値である。
【００５５】
インデックス値ｉは、メモリ３８の各メモリブロック５１〜５８のアドレスに対応している。各メモリブロック５１〜５８のアドレスは、インデックス値ｉに対応する固定値であり、動的に書き換わらない。メモリブロック５１〜５８はブロック領域の一例である。
【００５６】
図６に示すように、管理テーブルＡ３６は、インデックス番号の値ｉindex、受信待ちシーケンス番号の値ｘ及び処理待ちシーケンス番号の値ｙの３つの変数を保持する。管理テーブルＢ３７は、各インデックス値ｉのフィールドに１つずつフラグを格納する。フラグの値が「１」であるとき、対応するメモリ３８のメモリブロック５１〜５８にデータが格納されていることを示す。フラグの値が「０」であるとき、対応するメモリ３８のメモリブロック５１〜５８にデータが格納されていないことを示す。
【００５７】
初期化時やＡＲＱリセット時には、受信済みのパケットがないので、各フラグの値は「０」に設定される。また、受信済みで処理待ちとなるパケットが発生している場合、処理待ちとなるパケットを格納しているメモリ３８のメモリブロック５１〜５８に対応するフラグの値は、「０」に設定される。
【００５８】
メモリ３８は、例えばＭ個のメモリブロック５１〜５８を有していてもよい。各メモリブロック５１〜５８は、例えばＳバイトの容量を有していてもよい。従って、メモリ３８は、例えばＭ×Ｓバイトの容量を有していてもよい。ただし、Ｓは、パケットのペイロードの最大サイズであり、単位はバイトである。つまり、１回に送ることのできるパケットのサイズは１〜Ｓバイトであり、１回に送ることのできるパケットごとにシーケンス番号が付与される。
【００５９】
管理テーブルＡ３６のインデックス番号の値ｉindex、受信待ちシーケンス番号の値ｘ及び次に受信するパケットのシーケンス番号の値ｒに対応するインデックス値ｉは、次の（３）式または（４）式で求められる。ただし、「ｍｏｄ」は、剰余を求める演算であり、「ＡｍｏｄＢ」は、ＡをＢで除するときの剰余を求める。
【００６０】
ｉ＝（ｒ−ｘ＋ｉindex）ｍｏｄＭ    （ｘ≦ｒの場合）  ・・・（３）
ｉ＝（ｒ＋Ｎ−ｘ＋ｉindex）ｍｏｄＭ    （ｘ＞ｒの場合）  ・・・（４）
【００６１】
（４）式は、シーケンス番号が一周して、［Ｎ−１］が０となるところを含む場合である。次に受信するシーケンス番号の値がｒであるパケットのデータは、（３）式または（４）式で求められるインデックス値ｉに対応するメモリ３８のメモリブロック５１〜５８に格納される。
【００６２】
図６に示す例は、例えばウィンドウサイズの最大値Ｍが８であり、受信待ちシーケンス番号の値ｘが１００であり、インデックス番号の値ｉindexが２である場合の例である。また、図６に示す例は、処理待ちシーケンス番号の値ｙが１００であるので、処理待ちのパケットのない状態であり、シーケンス番号の値が１０１、１０４及び１０６である各パケットを受信している状態である。
【００６３】
この場合、インデックス番号の値ｉindexが２であるので、メモリ３８において、インデックス値２に対応するメモリブロック５３が先頭のメモリブロックとなる。つまり、シーケンス番号の値が１００であるパケットのデータは、インデックス値２に対応するメモリブロック５３に格納される。
【００６４】
ｒ＝１０１、ｘ＝１００、ｉindex＝２及びＭ＝８を上記（３）式に代入すると、ｉ＝３となる。従って、シーケンス番号の値が１０１であるパケットのデータは、インデックス値３に対応するメモリブロック５４に格納されている。
【００６５】
ｒ＝１０４、ｘ＝１００、ｉindex＝２及びＭ＝８を上記（３）式に代入すると、ｉ＝６となる。従って、シーケンス番号が１０４であるパケットのデータは、インデックス値６に対応するメモリブロック５７に格納されている。
【００６６】
ｒ＝１０６、ｘ＝１００、ｉindex＝２及びＭ＝８を上記（３）式に代入すると、ｉ＝８となる。従って、シーケンス番号が１０６であるパケットのデータは、インデックス値０に対応するメモリブロック５１に格納されている。図６において、ハッチングの付されているメモリブロックは、データを格納しているメモリブロックである（図８〜図１７においても同じ）。
【００６７】
このように、受信するパケットのシーケンス番号に基づいてインデックス値ｉが求まり、インデックス値ｉに対応するメモリブロックにパケットのデータが格納される。それによって、シーケンス番号順に到達しないパケットがメモリ３８上でシーケンス番号順に並ぶことになる。
【００６８】
また、管理テーブルＢ３７において、インデックス値ｉが３、６及び０である各フラグの値は「１」に設定される。インデックス値ｉが２、４、５、７及び１である各フラグの値は「０」である。従って、制御部３３（図４参照）は、管理テーブルＢ３７の各フラグを参照することによって、メモリ３８のどのメモリブロックにデータが格納されているかということを知ることができる。
【００６９】
・受信方法の別の例
図７は、実施の形態にかかる受信方法の別の例を示すフローチャートである。図７に示す受信方法は、図４に示す受信装置３１により実施されてもよい。本実施例は、一例として図４に示す受信装置３１により実施される場合について説明する。図８〜図１６は、図４に示す受信装置における管理テーブル及びメモリの状態の変化の一例を示す図である。
【００７０】
図７に示すように、受信装置３１においてデータの受信が開始されると、受信用バッファ３２に新たなデータが格納され、受信用バッファ３２のデータが更新される。制御部３３は、受信用バッファ３２に格納されているデータのシーケンス番号の値ｒを解析する（ステップＳ１１）。シーケンス番号の値ｒが上記（１）式または（２）式を満たさないデータは、例えば破棄されてもよい。
【００７１】
シーケンス番号の値ｒが上記（１）式または（２）式を満たす場合、制御部３３は、管理テーブルＡ３６を参照し、シーケンス番号の値ｒが受信待ちシーケンス番号の値ｘ以上であるか否かを判断する（ステップＳ１２）。ｒがｘ以上である場合（ステップＳ１２：Ｙｅｓ）、制御部３３は、上記（３）式を計算してインデックス値ｉを求める（ステップＳ１３）。ｒがｘ以上でない場合（ステップＳ１２：Ｎｏ）、制御部３３は、上記（４）式を計算してインデックス値ｉを求める（ステップＳ１４）。
【００７２】
インデックス値ｉが求まると、制御部３３は、管理テーブルＢ３７にアクセスして、インデックス値ｉに対応するフラグ、すなわちｉ番目のフラグの値を「１」に設定する（ステップＳ１５）。また、制御部３３は、受信用バッファ３２に格納されているデータを、インデックス値ｉに対応するメモリ３８のメモリブロックへ転送して書き込む。
【００７３】
次いで、制御部３３は、管理テーブルＢ３７を参照し、ｉindex番目のフラグの値が「１」であるか否かを判断する（ステップＳ１６）。ｉindex番目のフラグの値が「１」である場合（ステップＳ１６：Ｙｅｓ）、ステップＳ１７へ進み、ｉindex番目のフラグの値が「０」になるまでステップＳ１６〜ステップＳ１８を繰り返す。
【００７４】
ｉindex番目のフラグの値が「０」である場合（ステップＳ１６：Ｎｏ）、ステップＳ２２へ進み、受信待ちシーケンス番号の値ｘ及び処理待ちシーケンス番号の値ｙが確定するまでステップＳ２２〜ステップＳ３０を繰り返す。ステップＳ１７、ステップＳ１８及びステップＳ２２〜ステップＳ３０については、後述する。
【００７５】
図７に示すフローチャートが何回か繰り返されることによって、例えば図６に示す状態になることがある。図６に示す状態では、インデックス値２に対応するメモリブロック５３がメモリ３８の先頭であり、シーケンス番号が１０１、１０４及び１０６である各パケットが既にメモリ３８に格納されており、処理待ちのない状況で、シーケンス番号１００のパケットの受信を待っている。
【００７６】
図６に示す状態において、例えば新たにシーケンス番号の値ｒが１０２であるパケットを受信するとする（ステップＳ１１）。この場合、ｘ＝１００、ｉindex＝２及びＭ＝８であるので（ステップＳ１２：Ｙｅｓ）、インデックス値ｉは４になる（ステップＳ１３）。
【００７７】
従って、制御部３３は、管理テーブルＢ３７にアクセスし、４番目のフラグの値を「１」に設定する（ステップＳ１５）。また、制御部３３は、受信用バッファ３２に格納されているシーケンス番号１０２のパケットのデータを、インデックス値４に対応するメモリ３８のメモリブロック５５へ転送して書き込む。それによって、管理テーブルＡ３６、管理テーブルＢ３７及びメモリ３８は、例えば図８に示す状態となる。
【００７８】
図８に示す状態では、シーケンス番号１００のパケットを受信していないので、ｉindex番目のフラグの値は「０」である（ステップＳ１６：Ｎｏ）。従って、ステップＳ２２へ進む。このとき、上位レイヤが、受信するデータを受け入れることができる状態に遷移しているとする（ステップＳ２１）。
【００７９】
制御部３３は、管理テーブルＡ３６を参照し、受信待ちシーケンス番号の値ｘが処理待ちシーケンス番号の値ｙ以上であるか否かを判断する（ステップＳ２２）。ｘがｙ以上である場合（ステップＳ２２：Ｙｅｓ）、制御部３３は、次の（５）式よりｘとｙとの差分ｄを求める（ステップＳ２３）。ｘがｙ以上でない場合（ステップＳ２２：Ｎｏ）、制御部３３は、次の（６）式よりｘとｙとの差分ｄを求める（ステップＳ２４）。差分ｄが求まると、制御部３３は、次の（７）式よりウィンドウサイズの値Ｗを求める（ステップＳ２５）。
【００８０】
ｄ＝ｘ−ｙ      （ｘ≧ｙの場合）・・・（５）
ｄ＝ｘ＋Ｎ−ｙ  （ｘ＜ｙの場合）・・・（６）
Ｗ＝Ｍ−ｄ  ・・・（７）
【００８１】
ウィンドウサイズの値Ｗが求まると、制御部３３は、受信待ちシーケンス番号の値ｘが処理待ちシーケンス番号の値ｙに等しいか否かを判断する（ステップＳ２６）。ｘ＝ｙである場合（ステップＳ２６：Ｙｅｓ）、受信待ちシーケンス番号の値ｘ及びウィンドウサイズの値Ｗが確定するので、ステップＳ１１で更新される受信データに対する一連の処理を終了する。ｘとｙとが等しくない場合には（ステップＳ２６：Ｎｏ）、ステップＳ２７ヘ進み、ステップＳ２７〜ステップＳ３０を行う。ステップＳ２７〜ステップＳ３０については、後述する。
【００８２】
図８に示す状態では、ｘ＝ｙ＝１００であるので（ステップＳ２２：Ｙｅｓ）、差分ｄが０となり（ステップＳ２３）、ウィンドウサイズの値Ｗはウィンドウサイズの最大値Ｍとなる（ステップＳ２５）。そして、ｘ＝ｙであるので（ステップＳ２６：Ｙｅｓ）、受信待ちシーケンス番号の値ｘが１００に確定し、ウィンドウサイズの値ＷがＭに確定して、シーケンス番号１０２のパケットの受信処理が終了する。
【００８３】
図８に示す状態において、例えば新たにシーケンス番号の値ｒが１００であるパケットを受信するとする（ステップＳ１１）。シーケンス番号の値ｒが１００であるパケットは、次に受信するのが期待されているパケットである。この場合、ｘ＝１００、ｉindex＝２及びＭ＝８であるので（ステップＳ１２：Ｙｅｓ）、インデックス値ｉは２になる（ステップＳ１３）。
【００８４】
従って、制御部３３は、管理テーブルＢ３７にアクセスし、２番目のフラグの値を「１」に設定する（ステップＳ１５）。また、制御部３３は、受信用バッファ３２に格納されているシーケンス番号１００のパケットのデータを、インデックス値２に対応するメモリ３８のメモリブロック５３へ転送して書き込む。それによって、管理テーブルＡ３６、管理テーブルＢ３７及びメモリ３８は、例えば図９に示す状態となる。
【００８５】
図９に示す状態では、ｉindex番目のフラグの値は「１」である（ステップＳ１６：Ｙｅｓ）。従って、ステップＳ１７へ進む。制御部３３は、管理テーブルＢ３７にアクセスし、ｉindex番目のフラグの値を「０」に設定する（ステップＳ１７）。また、制御部３３は、次の（８）式によりインデックス番号の値ｉindexを更新し、次の（９）式により受信待ちシーケンス番号の値ｘを更新する（ステップＳ１８）。ステップＳ１７とステップＳ１８とは、いずれが先でもよい。
【００８６】
ｉindex＝（ｉindex＋１）ｍｏｄＭ  ・・・（８）
ｘ＝（ｘ＋１）ｍｏｄＮ  ・・・（９）
【００８７】
そして、ステップＳ１６へ戻る。ステップＳ１６で、ｉindex番目のフラグの値が「０」になるまで、ステップＳ１６〜ステップＳ１８を繰り返す。
【００８８】
図９に示す状態では、１回目のステップＳ１７によって、管理テーブルＢ３７の２番目のフラグの値が「０」に設定される。また、１回目のステップＳ１８によって、上記（８）式よりｉindex＝３に更新され、上記（９）式よりｘ＝１０１に更新される。それによって、管理テーブルＡ３６、管理テーブルＢ３７及びメモリ３８は、例えば図１０に示す状態となる。
【００８９】
ステップＳ１６に戻ると、ｉindex番目、すなわち３番目のフラグの値が「１」であるので（ステップＳ１６：Ｙｅｓ）、２回目のステップＳ１７によって、管理テーブルＢ３７の３番目のフラグの値が「０」に設定される。また、２回目のステップＳ１８によって、ｉindex＝４に更新され、ｘ＝１０２に更新される。それによって、管理テーブルＡ３６、管理テーブルＢ３７及びメモリ３８は、例えば図１１に示す状態となる。
【００９０】
再びステップＳ１６に戻ると、ｉindex番目、すなわち４番目のフラグの値が「１」であるので（ステップＳ１６：Ｙｅｓ）、３回目のステップＳ１７によって、管理テーブルＢ３７の４番目のフラグの値が「０」に設定される。また、３回目のステップＳ１８によって、ｉindex＝５に更新され、ｘ＝１０３に更新される。それによって、管理テーブルＡ３６、管理テーブルＢ３７及びメモリ３８は、例えば図１２に示す状態となる。
【００９１】
再びステップＳ１６に戻ると、図１２に示すように、ｉindex番目、すなわち５番目のフラグの値が「０」であるので（ステップＳ１６：Ｎｏ）、ステップＳ２２へ進む。このとき、上位レイヤが、受信するデータを受け入れることができる状態に遷移しているとする（ステップＳ２１）。
【００９２】
図１２に示す状態では、ｘ＝１０３及びｙ＝１００であるので（ステップＳ２２：Ｙｅｓ）、差分ｄが３となり（ステップＳ２３）、ウィンドウサイズの値Ｗは［Ｍ−３］となる（ステップＳ２５）。本実施例ではＭが８であるので、ウィンドウサイズの値Ｗは５となる。そして、ｘ＝ｙでないので（ステップＳ２６：Ｎｏ）、ステップＳ２７へ進む。
【００９３】
制御部３３は、上位レイヤで、受信装置１１で受信されてメモリ３８に格納されているデータを受け入れることができるか否かを判断する（ステップＳ２７）。例えば、制御部３３は、転送用バッファ３９（図４参照）が空である場合に、上位レイヤがデータを受け入れることができる状態にあると判断してもよい。
【００９４】
上位レイヤがデータを受け入れることができる場合（ステップＳ２７：Ｙｅｓ）、制御部３３は、次の（１０）式よりｊの値を求める。ｊは、０〜［Ｗ−１］の整数である。
【００９５】
ｊ＝（ｉindex＋Ｗ）ｍｏｄＭ  ・・・（１０）
【００９６】
次いで、制御部３３は、インデックス値ｊに対応するメモリ３８のメモリブロックに格納されているデータを転送用バッファ３９へ転送する（ステップＳ２９）。転送用バッファ３９に格納されるデータは、上位レイヤへ転送される。制御部３３は、転送用バッファ３９から上位レイヤへ転送するデータを、上位層で規定されるデータフォーマットに変換して転送してもよいし、上位レイヤとのデータの送信または受信に関する制御情報を含めて転送してもよい。制御部３３は、上位レイヤの状態を、データを受け入れられない状態に更新する。データの転送後、制御部３３は、次の（１１）式より処理待ちシーケンス番号の値ｙを更新する（ステップＳ３０）。
【００９７】
ｙ＝（ｙ＋１）ｍｏｄＮ  ・・・（１１）
【００９８】
そして、ステップＳ２２へ戻る。このとき、上位レイヤが、受信するデータを受け入れることができる状態に遷移しているとする（ステップＳ２１）。ステップＳ２６でｘ＝ｙとなるか（ステップＳ２６：Ｙｅｓ）、ステップＳ２７で上位レイヤがデータを受け入れることができない状態になるまで、ステップＳ２２〜ステップＳ３０を繰り返す。ステップＳ２６でｘ＝ｙであるか（ステップＳ２６：Ｙｅｓ）、ステップＳ２７で上位レイヤがデータを受け入れることができない場合（ステップＳ２７：Ｎｏ）、受信待ちシーケンス番号の値ｘ及びウィンドウサイズの値Ｗを確定し、一連の処理を終了する。
【００９９】
図１２に示す状態において、上位レイヤがデータを受け入れることができる場合（ステップＳ２７：Ｙｅｓ）、上記（１０）式よりｊの値は２となる（ステップＳ２８）。従って、制御部３３は、インデックス値２に対応するメモリ３８のメモリブロック５３に格納されているデータを転送用バッファ３９へ転送する（ステップＳ２９）。また、制御部３３は、上記（１１）式より処理待ちシーケンス番号の値ｙを１０１に更新する（ステップＳ３０）。それによって、管理テーブルＡ３６、管理テーブルＢ３７及びメモリ３８は、例えば図１３に示す状態となる。
【０１００】
ステップＳ２２に戻ると、図１３に示す状態では、受信待ちシーケンス番号の値ｘが１０３であり、処理待ちシーケンス番号の値ｙが１０１であるので（ステップＳ２２：Ｙｅｓ）、差分ｄは２となり（ステップＳ２３）、ウィンドウサイズの値Ｗは６となる（ステップＳ２５）。ｘ＝ｙでなく（ステップＳ２６：Ｎｏ）、上位レイヤがデータを受け入れることができる場合（ステップＳ２７：Ｙｅｓ）、ｊの値は３となる（ステップＳ２８）。
【０１０１】
従って、制御部３３は、インデックス値３に対応するメモリ３８のメモリブロック５４に格納されているデータを転送用バッファ３９へ転送する（ステップＳ２９）。また、処理待ちシーケンス番号の値ｙは１０２となる（ステップＳ３０）。それによって、管理テーブルＡ３６、管理テーブルＢ３７及びメモリ３８は、例えば図１４に示す状態となる。
【０１０２】
再びステップＳ２２に戻ると、図１４に示す状態では、受信待ちシーケンス番号の値ｘが１０３であり、処理待ちシーケンス番号の値ｙが１０２であるので（ステップＳ２２：Ｙｅｓ）、差分ｄは１となり（ステップＳ２３）、ウィンドウサイズの値Ｗは７となる（ステップＳ２５）。ｘ＝ｙでなく（ステップＳ２６：Ｎｏ）、上位レイヤがデータを受け入れることができる場合（ステップＳ２７：Ｙｅｓ）、ｊの値は４となる（ステップＳ２８）。
【０１０３】
従って、制御部３３は、インデックス値４に対応するメモリ３８のメモリブロック５５に格納されているデータを転送用バッファ３９へ転送する（ステップＳ２９）。また、処理待ちシーケンス番号の値ｙは１０３となる（ステップＳ３０）。それによって、管理テーブルＡ３６、管理テーブルＢ３７及びメモリ３８は、例えば図１５に示す状態となる。
【０１０４】
再びステップＳ２２に戻ると、図１５に示す状態では、受信待ちシーケンス番号の値ｘが１０３であり、処理待ちシーケンス番号の値ｙが１０３であるので（ステップＳ２２：Ｙｅｓ）、差分ｄは０となり（ステップＳ２３）、ウィンドウサイズの値Ｗは８となる（ステップＳ２５）。そして、ｘ＝ｙとなるので（ステップＳ２６：Ｙｅｓ）、受信待ちシーケンス番号の値ｘ及びウィンドウサイズの値Ｗを確定し、シーケンス番号が１００であるパケットの受信に伴う一連の処理を終了する。
【０１０５】
一方、図１２に示す状態において、上位レイヤがデータを受け入れることができない場合（ステップＳ２７：Ｎｏ）、受信待ちシーケンス番号の値ｘが１０３に確定し、ウィンドウサイズの値Ｗが５に確定する。処理待ちシーケンス番号の値ｙは１００のままである。また、メモリ３８において、インデックス値２、３及び４に対応する各メモリブロック５３〜５５には、データが格納されているままである。従って、このときの管理テーブルＡ３６、管理テーブルＢ３７及びメモリ３８は、例えば図１６に示す状態となる。そして、シーケンス番号が１００であるパケットの受信に伴う一連の処理を終了する。
【０１０６】
初期化時やＡＲＱリセット時には、ｉindexを「０」に初期化する。ｘとｙはＡＲＱに依存した値で初期化を行う。例えば、ＡＲＱのシーケンス番号が０から始まる場合は、ｘ＝ｙ＝０に処理化する。
【０１０７】
・管理テーブル及びメモリの別の例
図１７は、図４に示す受信装置における管理テーブル及びメモリの別の例を示す図である。図１７に示すように、管理テーブルＢ３７が、フラグを保持する領域６１、及びメモリアドレスを保持する領域６２を有していてもよい。メモリアドレスを保持する領域６２には、インデックス値ｉに対応する離散的なメモリアドレスが設定されていてもよい。
【０１０８】
例えば、図１７に示す例のように、インデックス値０、インデックス値１、インデックス値２及びインデックス値３に対応するメモリアドレスをそれぞれ「０ｘＡ０００」、「０ｘＡ１００」、「０ｘＡ２００」及び「０ｘＡ３００」としてもよい。また、例えば、インデックス値４及びインデックス値５に対応するメモリアドレスをそれぞれ「０ｘＢ０００」及び「０ｘＢ１００」としてもよい。
【０１０９】
また、例えば、インデックス値６及びインデックス値７に対応するメモリアドレスをそれぞれ「０ｘＣ０００」及び「０ｘＣ１００」としてもよい。このようにメモリアドレスを設定することによって、メモリ３８として複数のメモリ６３、６４、６５を用いたり、複数のメモリ空間を用いることができる。この場合には、メモリアドレスを保持する領域６２を参照してメモリアクセスを行う。
【０１１０】
・計算の簡易化
ウィンドウサイズの最大値Ｍが２のＣ乗である場合、［Ｍ−１］とのビットマスクを取ることにより、ｍｏｄの計算を容易に行うことができる。従って、上記（３）式、（４）式、（８）式または（１０）式の代わりに、それぞれ次の（３'）式、（４'）式、（８'）式または（１０'）式を用いてもよい。ただし、「＆」はビットごとのアンド演算を表す。
【０１１１】
ｉ＝（ｒ−ｘ＋ｉindex）＆（２C−１）    （ｘ≦ｒの場合）  ・・・（３'）
ｉ＝（ｒ＋Ｎ−ｘ＋ｉindex）＆（２C−１）    （ｘ＞ｒの場合）  ・・・（４'）
ｉindex＝（ｉindex＋１）＆（２C−１）  ・・・（８'）
ｊ＝（ｉindex＋Ｗ）＆（２C−１）  ・・・（１０'）
【０１１２】
同様に、シーケンス番号の最大値よりも１だけ大きい値Ｎが２のＤ乗である場合、［Ｎ−１］とのビットマスクを取ることにより、ｍｏｄの計算を容易に行うことができる。従って、上記（９）式または（１１）式の代わりに、それぞれ次の（９'）式または（１１'）式を用いてもよい。
【０１１３】
ｘ＝（ｘ＋１）＆（２D−１）  ・・・（９'）
ｙ＝（ｙ＋１）＆（２D−１）  ・・・（１１'）
【０１１４】
本実施例は、Ｇｏ−Ｂａｃｋ−Ｎ  ＡＲＱといわれるタイプの自動再送要求技術に適用可能である。また、本実施例は、Ｓｅｌｅｃｔｉｖｅ  Ｒｅｐｅａｔ  ＡＲＱといわれるタイプの自動再送要求技術にも適用可能である。
【０１１５】
図４に示す受信装置３１及び図７に示す受信方法によれば、受信装置３１により受信されるデータは、このデータに付与されているシーケンス番号に対応するメモリ３８のメモリブロックに格納される。受信装置３１が、受信待ちを示すシーケンス番号のデータを受信し、受信待ちを示すシーケンス番号に対応するフラグを含む複数のフラグが連続してデータ格納済みを示すと、連続してデータ格納済みを示すフラグの範囲のシーケンス番号に対応するデータがメモリ３８から転送用バッファ３９へ転送される。従って、受信の順番がシーケンス番号順でなくても、パケットのデータから元のデータを再構成することができる。
【０１１６】
また、図４に示す受信装置３１及び図７に示す受信方法によれば、受信装置３１が、受信するデータの容量を予め把握していなくても、メモリ３８上にシーケンス番号順にデータが並び、シーケンス番号順にデータが上位レイヤへ転送される。従って、例えばストリームデータを受信する場合のように、受信するデータの容量が不定であっても、パケットのデータから元のデータを再構成することができる。
【０１１７】
また、図４に示す受信装置３１及び図７に示す受信方法によれば、インデックス番号の値ｉindexが変わることによって、メモリ３８の先頭になるメモリブロックが変わる。メモリ３８の先頭になるメモリブロックを循環させることによって、一定サイズのメモリを用いて不定長のデータを再構成することができる。
【０１１８】
また、図４に示す受信装置３１及び図７に示す受信方法によれば、インデックス番号の値ｉindex、インデックス値ｉ、ｊの値、受信待ちシーケンス番号の値ｘ及び処理待ちシーケンス番号の値ｙの値に剰余の値が用いられている。それによって、メモリ３８は、小さいメモリ容量で不定長のデータを格納することができる。
【０１１９】
また、図４に示す受信装置３１及び図７に示す受信方法によれば、受信装置３１は、データを受信して管理テーブルＡ３６及び管理テーブルＢ３７を参照することによって、データをメモリ３８の対応するメモリブロックに格納することができる。従って、パケットのデータから元のデータを従来よりも速く再構成することができる。また、受信装置３１は、管理テーブルＡ３６及び管理テーブルＢ３７を参照することによって、受信済みの連続するシーケンス番号のデータを確認することができる。従って、パケットのデータから元のデータを従来よりも速く再構成することができる。
【０１２０】
上述した各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１２１】
（付記１）連続したパケットを通信するシステムにおいて、受信可能なパケット数を制限するウィンドウを使用した自動再送要求を用いてデータを受信する受信装置であって、前記パケットのデータを格納する第１の格納部と、前記第１の格納部に格納されたデータのシーケンス番号を解析する制御部と、複数のブロック領域を含み、前記第１の格納部に格納されたデータを、前記シーケンス番号に対応するブロック領域に記憶する記憶領域と、各々が、対応するブロック領域にデータが格納されているか否かを識別する複数の識別子を保持する第１のデータ領域と、前記制御部で解析されたシーケンス番号のうち受信待ちを示すシーケンス番号、及び前記記憶領域の先頭となるブロック領域の位置を示すインデックス番号を保持する第２のデータ領域と、前記データを処理する処理装置へ転送されるデータを格納する第２の格納部と、を有し、前記制御部は、前記第１のデータ領域の識別子が、前記受信待ちを示すシーケンス番号に対応するブロック領域に、データが格納されていることを示していた場合に、該識別子が連続してデータが格納されていることを示す範囲のシーケンス番号に対応する前記ブロック領域のデータを前記第２の格納部へ転送し、前記第２のデータ領域の前記受信待ちを示すシーケンス番号、及び前記インデックス番号を、次の受信待ちを示すシーケンス番号に対応する番号にそれぞれ更新することを特徴とする受信装置。
【０１２２】
（付記２）前記インデックス番号をｉindexとし、前記ウィンドウの最大値をＭとし、前記受信待ちを示すシーケンス番号の値をｘとし、前記シーケンス番号の最大値に１を加算した値をＮとするとき、前記制御部は、前記第２のデータ領域の前記受信待ちを示すシーケンス番号を、前記ｘに１を加算した値を前記Ｎで除するときの剰余の値に更新し、前記インデックス番号を、前記ｉindexに１を加算した値を前記Ｍで除するときの剰余の値に更新することを特徴とする付記１に記載の受信装置。
【０１２３】
（付記３）前記インデックス番号をｉindexとし、前記ウィンドウの最大値をＭとし、前記受信待ちを示すシーケンス番号の値をｘとし、前記シーケンス番号の最大値に１を加算した値をＮとし、前記第１の格納部に格納されているデータのシーケンス番号をｒとするとき、前記制御部は、前記ｒが前記ｘ以上の値であるときに、前記ｒから前記ｘを減算して前記ｉindexを加算した値を前記Ｍで除するときの剰余の値ｉ、または前記ｒが前記ｘよりも小さい値であるときに、前記ｒに前記Ｎを加算した値から前記ｘを減算して前記ｉindexを加算した値を前記Ｍで除するときの剰余の値ｉを求め、前記第１のデータ領域における前記ｉに対応する領域の前記識別子を、前記ブロック領域にデータが格納されたことを示す値にすることを特徴とする付記１または２に記載の受信装置。
【０１２４】
（付記４）前記制御部で解析されたシーケンス番号のうち前記ブロック領域から前記第２の格納部への転送待ちを示すシーケンス番号をｙとし、前記シーケンス番号の最大値に１を加算した値をＮとするとき、前記第２のデータ領域は、前記転送待ちを示すシーケンス番号を保持し、前記制御部は、前記ブロック領域から前記第２の格納部へデータが転送されるたびに、前記第２のデータ領域の前記転送待ちを示すシーケンス番号を、前記ｙに１を加算した値を前記Ｎで除するときの剰余の値に更新することを特徴とする付記１乃至３のいずれか一項に記載の受信装置。
【０１２５】
（付記５）前記ウィンドウの最大値をＭとし、前記受信待ちを示すシーケンス番号の値をｘとし、前記制御部で解析されたシーケンス番号のうち前記ブロック領域から前記第２の格納部への転送待ちを示すシーケンス番号をｙとし、前記シーケンス番号の最大値に１を加算した値をＮとするとき、前記制御部は、前記ｘが前記ｙ以上の値であるときに、前記Ｍから前記ｘを減算して前記ｙを加算した値Ｗ、または前記ｘが前記ｙよりも小さい値であるときに、前記Ｍから前記ｘ及び前記Ｎを減算して前記ｙを加算した値Ｗを求め、前記Ｗを前記ウィンドウの値にすることを特徴とする付記１乃至４のいずれか一項に記載の受信装置。
【０１２６】
（付記６）前記第１のデータ領域には、前記識別子ごとに対応する前記記憶領域のブロック領域のアドレスが保持されており、前記アドレスによってデータの格納先を指定することによって非連続のメモリまたは非連続のメモリ空間を前記データの保存領域として用いることを特徴とする付記１乃至５のいずれか一項に記載の受信装置。
【０１２７】
（付記７）連続したパケットを通信するシステムにおいて、受信可能なパケット数を制限するウィンドウを使用した自動再送要求を用いてデータを受信する受信方法であって、前記パケットのデータを第１の格納部に格納し、前記第１の格納部に格納されたデータのシーケンス番号を解析し、前記第１の格納部に格納されたデータを、複数のブロック領域を含む記憶領域の、前記シーケンス番号に対応するブロック領域に記憶し、対応するブロック領域にデータが格納されているか否かを識別する識別子であって前記解析されたシーケンス番号のうち受信待ちを示すシーケンス番号に対応する識別子が、該識別子に対応するブロック領域にデータが格納されていることを示していた場合に、該識別子が連続してデータが格納されていることを示す範囲のシーケンス番号に対応する前記ブロック領域のデータを第２の格納部へ転送し、前記受信待ちを示すシーケンス番号、及び前記記憶領域の先頭となるブロック領域の位置を示すインデックス番号を、次の受信待ちを示すシーケンス番号に対応する番号にそれぞれ更新することを特徴とする受信方法。
【０１２８】
（付記８）前記インデックス番号をｉindexとし、前記ウィンドウの最大値をＭとし、前記受信待ちを示すシーケンス番号の値をｘとし、前記シーケンス番号の最大値に１を加算した値をＮとするとき、前記受信待ちを示すシーケンス番号を、前記ｘに１を加算した値を前記Ｎで除するときの剰余の値に更新し、前記インデックス番号を、前記ｉindexに１を加算した値を前記Ｍで除するときの剰余の値に更新することを特徴とする付記７に記載の受信方法。
【０１２９】
（付記９）前記インデックス番号をｉindexとし、前記ウィンドウの最大値をＭとし、前記受信待ちを示すシーケンス番号の値をｘとし、前記シーケンス番号の最大値に１を加算した値をＮとし、前記第１の格納部に格納されているデータのシーケンス番号をｒとするとき、前記ｒが前記ｘ以上の値であるときに、前記ｒから前記ｘを減算して前記ｉindexを加算した値を前記Ｍで除するときの剰余の値ｉ、または前記ｒが前記ｘよりも小さい値であるときに、前記ｒに前記Ｎを加算した値から前記ｘを減算して前記ｉindexを加算した値を前記Ｍで除するときの剰余の値ｉを求め、前記ｉに対応する前記識別子を、前記ブロック領域にデータが格納されたことを示す値にすることを特徴とする付記７または８に記載の受信方法。
【０１３０】
（付記１０）前記解析されたシーケンス番号のうち前記ブロック領域から前記第２の格納部への転送待ちを示すシーケンス番号をｙとし、前記シーケンス番号の最大値に１を加算した値をＮとするとき、前記ブロック領域から前記第２の格納部へデータが転送されるたびに、前記転送待ちを示すシーケンス番号を、前記ｙに１を加算した値を前記Ｎで除するときの剰余の値に更新することを特徴とする付記７乃至９のいずれか一項に記載の受信方法。
【０１３１】
（付記１１）前記ウィンドウの最大値をＭとし、前記受信待ちを示すシーケンス番号の値をｘとし、前記解析されたシーケンス番号のうち前記ブロック領域から前記第２の格納部への転送待ちを示すシーケンス番号をｙとし、前記シーケンス番号の最大値に１を加算した値をＮとするとき、前記ｘが前記ｙ以上の値であるときに、前記Ｍから前記ｘを減算して前記ｙを加算した値Ｗ、または前記ｘが前記ｙよりも小さい値であるときに、前記Ｍから前記ｘ及び前記Ｎを減算して前記ｙを加算した値Ｗを求め、前記Ｗを前記ウィンドウの値にすることを特徴とする付記７乃至１０のいずれか一項に記載の受信方法。
【符号の説明】
【０１３２】
１  受信装置
２  第１の格納部
３  制御部
４  第２のデータ領域
５  第１のデータ領域
６  記憶領域
７  第２の格納部
５１〜５８  ブロック領域
【図１】
2014022956.tif 000003
【図２】
2014022956.tif 000004
【図３】
2014022956.tif 000005
【図４】
2014022956.tif 000006
【図５】
2014022956.tif 000007
【図６】
2014022956.tif 000008
【図７】
2014022956.tif 000009
【図８】
2014022956.tif 000010
【図９】
2014022956.tif 000011
【図１０】
2014022956.tif 000012
【図１１】
2014022956.tif 000013
【図１２】
2014022956.tif 000014
【図１３】
2014022956.tif 000015
【図１４】
2014022956.tif 000016
【図１５】
2014022956.tif 000017
【図１６】
2014022956.tif 000018
【図１７】
2014022956.tif 000019