以下、図面を参照して本発明の実施の形態について説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。なお、以下の説明において、各整列回路は、パケットの受信装置に設けられたものである。また、受信装置に関して、受信時におけるパケットの並替えについてのみを説明するが、受信装置は、受信時にパケットの並替えのみを行うことではなく、受信機能のみを有するものとも限らない。
本発明の具体的な実施の形態の前に、まず、本発明にかかる技術の原理を説明する。
図1に示す整列回路100は、パケットの受信装置に設けられ、送信順にパケットを並び替えるためのものである。図示のように、該整列回路100は、今回受信したパケット(以下「対象パケット」という)のパケット情報PIが入力され、整列バッファ110、書込回路200、制御回路300を備える。なお、パケット情報PIには、対象パケットのシーケンス番号SNが少なくとも含まれている。
整列バッファ110は、複数(「N+1」個)の領域が先頭の領域(領域0)から末尾の領域(領域N)に向かう配列順で配列してなる。これらの領域には、書込回路200に対象パケットのパケット情報PIを書き込まれる。なお、整列バッファ110の複数の領域は、1つのバッファ内の複数の領域であってもよいし、図示の配列順と同様に配列された複数のバッファであってもよい。
書込回路200は、制御回路300からから、整列バッファ110の複数の領域のうちの1つを示す選択信号SELが入力され、選択信号SELに応じて、対象パケットのパケット情報PIを整列バッファ110書き込む。
制御回路300は、下記のように選択信号SELを生成する。
整列バッファ110の先頭の領域(領域0)にパケット情報が書き込まれていない場合には、制御回路300は、該先頭の領域を示す選択信号SELを生成する。なお、以下において、パケット情報が書き込まれていない領域を「未書込領域」という。対して、パケット情報が既に書き込まれた領域を「書込済領域」という。
整列バッファの先頭の領域が書込済領域であるときには、制御回路300は、対象パケットのパケット情報PIからシーケンス番号SNを抽出して、境界領域の検索を行う。境界領域とは、対象パケットのシーケンス番号より大きいシーケンス番号を含むパケット情報が書き込まれた各書込済領域のうちの先頭の領域である。
制御回路300は、整列バッファ110の先頭から末尾に向かう順で、該書込済領域に書き込まれたパケット情報に含まれるシーケンス番号と対象パケットのシーケンス番号との比較を順次行うことにより境界領域の検索を実行する。そして、制御回路300は、該検索により境界領域を検出できたときに、該境界領域を示す選択信号SELを生成する。一方、最後の書込済領域まで検索を行っても境界領域を検出できなかったときに、制御回路300は、最後の書込済領域の次の領域を示す選択信号SELを生成する。
書込回路200は、選択信号SELにより示される領域を起点にして、整列バッファ110の末尾に向かう方向に、各領域に夫々格納されているデータを1領域分シフトすると共に、対象パケットのパケット情報PIを起点の済領域に書き込む。
なお、整列バッファ110の領域が書込済領域であるか未書込領域であるかの判断は、従来知られている種々の手法を適用することができる。例えば、各領域内に、該領域にパケット情報PIが書き込まれているか否かを示すストアフラグを設け、該領域内にパケット情報PIが書き込まれたときに、ストアフラグが立つようにする。そして、制御回路300は、当該領域内のストアフラグを確認することにより該領域が書込済領域か未書込領域かを判断すればよい。
図2を参照して、図1に示す整列回路100において、パケットの受信に伴った整列バッファ110の状態の遷移の例を説明する。
図2において、整列バッファ110の各領域を示す四角形の枠のうちの、黒い枠は書込済領域を示し、白い枠が未書込領域を示す。また、整列バッファ110の下の数字は、該領域の配列順を示し、数字が小さい領域ほど、先頭に近い領域である。また、書込済領域内の文字は、該領域に書き込まれたパケット情報PIを示す。また、時間軸は、パケットの受信順を示し、時間が後になるほど受信順も後になる。時間軸の左側の数字は、対象パケットの受信タイミングを示し、時間軸の右側の文字は、該タイミングにおいて受信したパケット(対象パケット)のシーケンス番号SNと、該対象パケットに対して制御回路300が生成した選択信号SELを示す。これらについて、以降の各同種の図面においても同様である。
図2に示すように、タイミングt1において、整列バッファ110の全ての領域が未書込領域である。このときに、シーケンス番号SNが「5」であるパケットが受信され、そのシーケンス番号SNが含まれるパケット情報PIは、整列回路100に入力される。
制御回路300は、整列バッファ110の先頭となる領域0が未書込領域であるため、領域0を示す選択信号SELを生成して書込回路200に出力する。
書込回路200は、選択信号SELを示す領域0を起点にして、整列バッファ110の末尾の領域に向かう方向に1領域分のシフトをすると共に、対象パケットのパケット情報PI(ここではシーケンス番号SNを示す「5」)を領域0に書き込む。なお、シフトのときに、いずれの領域にもパケット情報が書き込まれていないため、空のデータがシフトされることになる。
タイミングt2において、シーケンス番号SNが「11」である次のパケットが受信され、そのパケット情報PIが整列回路100に入力される。図示のように、このときに、整列バッファ110の領域0に、パケット情報PI(シーケンス番号SN=5)が書き込まれており、領域0が書込済領域である。そのため、制御回路300は、まず、整列バッファ110の先頭から末尾に向かう順で、各書込済領域に書き込まれたシーケンス番号SNと、対象パケットのシーケンス番号SNとの比較を順次行うことにより境界領域の検索を行う。
このときに、書込済領域が領域0のみである、領域0に書き込まれたシーケンス番号SNが対象パケットのシーケンス番号SN(11)より小さいため、境界領域が検出できず、制御回路300は、対象パケットに対して、最後の書込済領域(ここでは領域0)の次の領域(領域1)を示す選択信号SELを生成する。
書込回路200は、対象パケットのパケット情報PI(シーケンス番号SNを示す「11」)を、選択信号SELにより示される領域1に書き込む。
タイミングt3において、シーケンス番号SNが「1」である次のパケットが受信され、そのパケット情報PIが整列回路100に入力される。図示のように、このときに、整列バッファ110の領域0と領域1に、パケット情報PI(シーケンス番号SN=5)とパケット情報PI(シーケンス番号SN=11)が夫々書き込まれており、領域0が書込済領域である。そのため、制御回路300は、まず、境界領域の検索を行う。
検索の結果、領域0が境界領域として検出できたため、制御回路300は、境界領域である領域0を示す選択信号SELを生成する
書込回路200は、領域0を起点にし、整列バッファ110の末尾に向かう方向に、各領域に夫々格納されているデータを1領域分シフトすると共に、対象パケットのパケット情報PI(シーケンス番号SN=1)を起点の書込済領域(ここでは領域0)に書き込む。
タイミングt4において、シーケンス番号SNが「9」である次のパケットが受信され、そのパケット情報PIが整列回路100に入力される。図示のように、このときに、整列バッファ110の領域0、領域1、領域2に、パケット情報PI(シーケンス番号SN=1)、パケット情報PI(シーケンス番号SN=5)、パケット情報PI(SN=11)が夫々書き込まれており、領域0が書込済領域である。そのため、制御回路300は、まず、境界領域の検索を行う。
検索の結果、領域2が境界領域として検索されたため、制御回路300は、境界領域である領域2を示す選択信号SELを生成する
書込回路200は、領域2を起点にし、整列バッファ110の末尾に向かう方向に、各領域に夫々格納されているデータを1領域分シフトすると共に、対象パケットのパケット情報PI(シーケンス番号SN=5)を起点の書込済領域(ここでは領域2)に書き込む。
その結果、整列バッファ110の領域0〜領域3に、パケット情報PI(シーケンス番号SN=1)、パケット情報PI(シーケンス番号SN=5)、パケット情報PI(シーケンス番号SN=9)、パケット情報PI(SN=11)が夫々格納される。
図3は、整列回路100の処理を示すフローチャートであり、対象パケットのパケット情報PIの受信から該対象パケットのパケット情報PIが整列バッファ110に書き込まれるまでの流れを示す。図3において、ステップS102〜ステップS150までは、制御回路300が行う処理であり、ステップS160は、書込回路200が行う処理である。
パケット情報を受信すると(S100)、制御回路300は、受信したパケット情報からシーケンス番号SNを抽出する(S102)。
そして、制御回路300は、整列バッファ110の先頭の領域0が書込済領域なのか未書込領域なのかを確認する(S104)。領域0が未書込領域であれば(S104:No)、制御回路300は、領域0を示す選択信号SELを生成して、書込回路200に出力する(S110、S150)。
ステップS104における確認の結果、領域0が書込済領域であれば(S104:Yes)、制御回路300は、境界領域の検索を行う(S120)。境界領域があり、ステップS120の検索により検出できたときに(S122:Yes)、制御回路300は、該境界領域を示す選択信号SELを生成して書込回路200に出力する(S130、S150)。
境界領域が無く、ステップS120における検索を最後の書込済領域まで行っても境界領域を検出できなかった場合に(S122:No)、制御回路300は、最後の書込済領域の次の領域を示す選択信号SELを生成して書込回路200に出力する(S140、S150)。
書込回路200は、制御回路300からのパケット情報PIと選択信号SELを受信して、書込処理を行う(S160)。
図4は、図3におけるステップS160の書込処理を示すフローチャートである。書込回路200は、まず、選択信号SELにより示される領域を起点にして、整列バッファ110の末尾に向かう方向に、各領域に格納されたデータを1領域分シフトする(S162)。
そして、書込回路200は、選択信号SELにより示される領域に、対象パケットのパケット情報PIを書き込む(S164)。
以上の説明から分かるように、整列回路100において、受信された各パケットのパケット情報PIが整列バッファ110の先頭の領域から、間隔が開かずに、かつ、シーケンス番号の小さい順に格納される。そのため、整列回路100を備えた受信装置において、受信されたパケットの読出し時に、整列バッファ110の先頭の領域から1つずつインクリメントしながら、該領域に書き込まれたパケット情報に対応するパケットを順次読み出すようにすれば、パケットの読出順は、送信順と同一になる。
なお、受信されたパケットの読出しに関しては、種々な態様が考えられる。
例えば、整列回路100における整列バッファ110を受信バッファとして使用し、受信したパケットそのものをパケット情報PIとして整列回路100の該当する領域に格納し、読出しに際しては、整列バッファ110の先頭領域からパケットを読み出すようにすることができる。
この場合、パケット情報PIがパケットそのものになるため、制御回路300は、新たな対象パケットを格納する領域を示す選択信号SELを生成する度に、既に整列バッファ110に格納されたパケットのヘッダを解析してシーケンス番号を抽出する必要がある。
従って、対象パケットのシーケンス番号を含むパケット情報PIと、該パケットのペイロードと共に、整列バッファ110の該当する領域に格納することも考えられる。こうすることにより、新たな対象パケットに対して選択信号SELを生成する際に、既に整列バッファ110に格納されたパケットに対しては、ヘッダの解析をする必要がなく、効率向上を図ることができる。
または、例えば、整列バッファ110とは別途に、パケットを一時的に記憶する受信バッファを設け、DMA(Direct Memory Access)により、受信バッファに格納されたパケットをアプリケーションが使用するRAM(Random Access Memory)などのメモリに一括転送するようにしてもよい。DMA転送時には、整列バッファ110を参照して、整列バッファ110の先頭の領域から1つインクリメントしながら、該領域に書き込まれたパケット情報に対応するパケットを受信バッファから順次出力するようにすればよい。
このように、図1に示す整列回路100によれば、受信順序が保証されず、かつ、シーケンス番号が送信順に応じて1ずつインクリメントする値ではないパケットの受信装置においても、CPUの代わりに、受信したパケットを送信順に並び替え、受信装置の効率向上を図ることができる。
図5を参照して、図1に示す整列回路100における書込回路200の1つの構成例を説明する。
図5に示す例では、書込回路200は、整列バッファ110の領域毎に設けられ、段階的に順次接続されたN個の選択回路(選択回路210〜選択回路21N)を有する。パケット情報PIと選択信号SELは、これらの各選択回路に入力される。
各選択回路(選択回路210〜選択回路21N)は、自身に対応する領域と、選択信号SELにより示される領域の前後関係に応じて異なる動作をする。
具体的には、選択信号SELにより示される領域より前の領域に対応する各選択回路は、何もしない。
また、選択信号により示される領域より後の領域に対応する各選択回路は、自身に対応する領域に、前段の選択回路に対応する領域に格納されているデータをシフトして格納する。
また、選択信号により示される領域に対応する選択回路は、対象パケットのパケット情報PIを該領域に書き込む。
図5に示す書込回路200は、図1に示す書込回路200の処理を簡単に実現できる一例であり、勿論、該書込回路200を備えた整列回路100は、図1に示す整列回路100のときに説明した効果を得ることができる。
本願発明者は、鋭意研究模索結果、さらに、制御回路300が行う境界領域の検索(図3におけるステップS120)を効率よくできる手法を確立した。
例えば、整列バッファ110の先頭の領域(領域0)から、別の領域M(M≧1)までの各領域に、送信順が連続する複数のパケットのパケット情報PIが夫々格納されている場合、新たな対象パケットのパケット情報PIの書き込まれる領域は、領域0、または領域M以降のいずれかの領域(領域Mを含む)になるはずであり、領域1から、領域(M−1)までの各領域になるはずが無い。そのため、まず、領域0を検索対象領域に判定して、領域0を検索対象にして境界領域の検索をし、すなわち、領域0に書き込まれたパケット情報PIに含まれるシーケンス番号SNと、対象パケットのシーケンス番号SNの比較を行うことにより領域0が境界領域であるか否かの判定をする。領域0が境界領域ではないと判定したときに、領域Mを検索対象領域に判定して、領域Mを検索対象にして境界領域の検索を行うようにすれば、領域1から領域(M−1)までの各領域を検索対象とした検索をスキップすることができる。
前述したように、例えばTCP/IPパケットの場合、各パケットに付随されたシーケンス番号は、該パケットの1つ前に送信されやパケットのシーケンス番号とペイロード長とを加算して得た加算値(以下「W」で表記する)である。すなわち、過去に受信した各パケットについて、そのパケットのシーケンス番号とペイロード長から、該パケットの次に送信されるパケットのシーケンス番号(上記加算値W)を算出することができる。なお、TCP/IPパケットのヘッダには、該パケットの全長を示す情報(図35におけるパケット長)が含まれており、TCPヘッダのヘッダ長が固定長であるため、TCP/IPパケットのヘッダからIPヘッダ長(図35におけるレングス)とシーケンス番号とパケット長を取得すれば、下記の式(1)に従って該パケットの次に送信されるパケットのシーケンス番号を算出できる。
加算値W
=パケットのシーケンス番号+パケット長−IPヘッダ長−TCPヘッダ長
=次に送信されるパケットのシーケンス番号 (1)
さらに、図36のときに説明したように、TCPヘッダ70には、上記加算値Wに該当するアクノリッジメント番号74が含まれている。
上記のことに着目して、境界領域の検索を効率よく行うために本願発明者が確立した手法は、下記のように、パケット情報PIと選択信号SELの生成、及び検索対象領域の判定を行う。なお、分かりやすいように、図1に示す整列回路100を利用して説明する。
まず、パケット情報PIは、シーケンス番号SNに加え、当該パケットのペイロード長または該ペイロード長を算出可能な値と、該パケットの上記加算値Wとのいずれか一方を含む必要がある。
パケット情報PIに上記加算値Wを加える場合には、式(1)に従って加算値Wを算出するようにしてもよく、上記加算値Wと同値であるアクノリッジメント番号74をヘッダから読み出してそのまま用いてもよい。
ペイロード長をパケット情報PIに加える場合には、式(2)に従ってペイロード長を算出すればよい。
ペイロード長=パケット長−IPヘッダ長−TCPヘッダ長 (2)
この場合、後に、既に整列バッファ110にパケット情報PIが格納されたパケットの加算値Wが必要なときに、該パケットのシーケンス番号とペイロード長とを加算すればよい。
ペイロード長以外の、ペイロード長を算出可能な値をパケット情報PIに加える場合には、例えばパケット長とIPヘッダ長を利用すればよい。
TCPヘッダ長が固定であるため、この場合、後に、既に整列バッファ110にパケット情報PIが格納されたパケットの加算値Wが必要なときに、該パケットのシーケンス番号とパケット長とIPヘッダ長を読み出して、式(1)に従って加算値Wを算出すればよい。
このように、既に整列バッファ110に書き込まれた各パケット情報PIには、該パケットのシーケンス番号SNと、加算値Wそのものまたは加算値Wを算出可能な値とが含まれるようになる。
制御回路300は、整列バッファ110の整列バッファの先頭の領域が書込済領域であるときに行う境界領域の検索に際して、検索対象領域の判定をすると共に、検索対象領域に判定した各領域のみを検索対象とする。
検索対象領域は、整列バッファ110における各連続グループの先頭の領域となるグループ先頭領域である。
また、グループ先頭領域は、整列バッファ110の先頭の領域以外であり、かつ、1つ前の連続グループの末尾の領域の次の領域である書込済領域と、整列バッファ110の先頭の領域とのいずれか一方に該当する領域である。
各連続グループは、グループ先頭領域のみ、または、グループ先頭領域を起点にして配列順が連続する複数の書込済領域であって、該複数の書込済領域の2つ目の領域からの各領域に夫々書き込まれたパケット情報PIに含まれるシーケンス番号SNが、領域の1つ前の領域に書き込まれたパケット情報PIから得られる加算値Wに一致する上記複数の書込済領域により構成される。
なお、全ての検索対象領域について、境界領域の検索が行われる訳ではない。例えば、ある検索対象領域(領域B)より前の検索対象領域(領域A)を対象とした検索の結果、領域Aが境界領域であると判定されたときに、境界領域の検索が終了するため、領域Bを対象とする検索が行われない。
前に例挙したように、整列バッファ110の先頭の領域(領域0)から、別の領域M(M≧1)までの各領域に、送信順が連続する複数のパケットのパケット情報PIが夫々格納されている場合、領域1から領域Mまでの各領域に書き込まれたパケット情報PIに含まれるシーケンス番号SNが、1つ前の領域に書き込まれたパケット情報PIから得られる加算値Wに一致する。
この場合、制御回路300は、領域0から領域Mまでの各領域を1つの連続グループとし、まず、グループ先頭領域(領域0)を検索対象にして境界領域を検索する。検索の結果、領域0が境界領域であると判定したときに、境界領域の検索を終了する。この場合、領域0が対象パケットを書き込むべき領域に判定される。
一方、領域0が境界領域ではないと判定したときに、制御回路300は、領域(M+1)が書込済領域であるか否かを確認する。該領域が未書込領域であるときには、境界領域が無いと判定する。この場合においても、領域0が対象パケットを書き込むべき領域に判定される。
領域(M+1)が書込済領域である場合、すなわち、該領域が次の連続グループの先頭の領域である場合、制御回路300は、グループ先頭領域(領域(M+1))を検索対象にして境界領域を検索する。その後の処理に関しては、領域0を検索対象にして境界領域を検索する場合と同様である。
このように。本願発明者が確立した手法によれば、各連続グループの先頭の領域のみを検索対象領域に判定し、判定した検索対象領域のみを検索対象とするため、対象パケットとシーケンス番号SNを比較される領域の数を減らすことができ、境界領域の検索を効率良く実現する。
上述した検索対象領域の判定を実現する具体的な手法は、様々考えられる。ここで、「連続ビット」に基づいた手法(第1の手法)、「ポインタ」に基づいた手法(第2の手法)を説明する。ここも、図1に示す整列回路100の機能ブロックを利用して説明する。また、パケット情報PIには、加算値Wが含まれているとする。
<第1の手法:連続ビットに基づいた手法>
この手法では、制御回路300は、対象パケットのパケット情報PI(シーケンス番号SN+加算値W)に、連続ビットCBを付加してから書込回路200に出力する。連続ビットCBは、「一致する」と「一致しない」のいずれを示す値を有し、例として、「1」が「一致する」を示し、「0」が「一致しない」と示すとする。
制御回路300は、検索対象領域を判定する際に、「一致しない」を示す、すなわち値が0である連続ビットCBを含むパケット情報PIが書き込まれた各書込済領域を検索対象領域に判定する。
また、対象パケットのパケット情報PIに連続ビットCBを付加する際に、制御回路300は、選択信号SELにより示される領域が整列バッファ110の先頭の領域以外であり、かつ、対象パケットのシーケンス番号SNが、選択信号SELにより示される領域の1つ前の領域に書き込まれたパケット情報PIから得られる加算値Wに一致する場合において、「一致する」を示す値(1)を連続ビットCBに付与する。他の場合においては、0を連続ビットCBに付与する。
図6は、第1の手法を適用した場合の整列回路100の処理を示すフローチャートであり、対象パケットの受信から該対象パケットのパケット情報PIが整列バッファ110に書き込まれるまでの流れを示す。図6において、ステップS202〜ステップS280までは、制御回路300が行う処理であり、ステップS160は、図4に示される、書込回路200が行う書込処理である。
図6に示すように、パケットが受信され、該パケットのパケット情報PIが整列回路100に入力されると(S200)、制御回路300は、パケット情報PIからシーケンス番号SNを抽出する(S202)。
そして、制御回路300は、整列バッファ110の先頭の領域0が書込済領域なのか未書込領域なのかを確認する(S204、S210)。領域0が未書込領域であれば(S210:No)、制御回路300は、領域0を示す選択信号SELを生成する(S240)。そして、対象パケットの連続ビットCBに0を付与し(S250:Yes、S270)、該連続ビットCBと、ステップS202で取得したシーケンス番号SNと加算値Wを含むパケット情報PI、及びステップS220で生成した選択信号SELを書込回路200に出力する(S280)。
ステップS210における確認の結果、領域0が書込済領域であれば(S204、S210:Yes)、制御回路300は、境界領域の検索を開始する。具体的には、まず、領域0が検索対象領域であるか否かを判定する(S220)。具体的には、領域0に書き込まれたパケット情報PIに含まれる連続ビットCBが1と0のいずれであるかを確認する。なお、後の説明で分かるが、領域0に書き込まれるパケット情報PIに含まれる連続ビットCBが常に0であるため、制御回路300は、領域0が検索対象領域であるとし、対象パケットのシーケンス番号SNと領域0に書き込まれたパケット情報に含まれるシーケンス番号SN(0)を比較する(S220:Yes、S230)。
対象パケットのシーケンス番号SNがSN(0)より小さければ(S230:Yes)、制御回路300は、領域0が境界領域であるとして、領域0を示す選択信号SELを生成する(S240)。そして、対象パケットの連続ビットCBに0を付与し(S250:Yes、S270)、パケット情報PIと選択信号SELを書込回路200に出力する(S280)。
ステップS230における比較の結果、対象パケットのシーケンス番号SNがSN(0)より大きいときに(S230:No)、制御回路300は、領域0が境界領域ではないと判定して、次の領域(領域1)について、ステップS210からの処理を行う(S232、S210〜)。
領域1について、制御回路300は、まず、該領域が書込済領域であるか否かを確認する(S210)。
領域1が未書込領域であれば(S210:No)、制御回路300は、領域1を示す選択信号SELを生成し(S240)、さらに、対象パケットのシーケンス番号SNが、領域0に書き込まれたパケット情報PIに含まれる加算値W(0)に一致するか否かを確認する(S250:No、S260)。一致すれば、制御回路300は、対象パケットの連続ビットCBに1を付与し(S260:Yes、S262)、パケット情報PIと選択信号SELを書込回路200に出力する(S280)。
なお、ステップS260における確認の結果、一致しない場合に(S260:No)、制御回路300は、対象パケットの連続ビットCBに0を付与し(S270)、パケット情報PIと選択信号SELを書込回路200に出力する(S280)。
ステップS210に戻り、領域1が書込済領域である場合(S210:Yes)を説明する。この場合に、制御回路300は、まず、領域1に書き込まれたパケット情報PIに含まれる連続ビットCBに基づいて領域1が検索対象領域であるか否かを確認する(S220)。領域1が検索対象領域である場合、以降の処理は、領域0のときと同様である(S220:Yes、S230〜)
領域1に書き込まれたパケット情報PIに含まれる連続ビットCBが0である場合に、制御回路300は、領域1が境界領域ではないと判定して、次の領域(領域2)について、ステップS210からの処理を行う(S220:No、S232、S210〜)。
このように、境界領域が検出されるまで、または、全ての検索対象領域を検索対象とした検索が完了するまで、検索対象領域の判定と、検索対象領域に判定した領域を検索対象とした検索が繰り返される。そして、境界領域が検出されれば、該境界領域を示す選択信号SELの生成と、対象パケットのパケット情報PIに含まれる連続ビットCBに1または0の付与がなされる。また、全ての検索対象領域を検索対象とした検索が完了しても境界領域が検出されなかった場合に、最後の書込済領域の次の領域を示す選択信号SELの生成と、対象パケットのパケット情報PIに含まれる連続ビットCBに1または0の付与がなされる。
図7〜図9を参照して、第1の手法を適用した整列回路100による処理の具体例を説明する。これらの図において、星印は、境界領域の検索が最後に実行された領域を示す。
該例において、シーケンス番号が夫々1、5、9、11、17、20、24、30である8つのパケットが送信されたとする。送信順は、小さいシーケンス番号からである。しかし、到着順のシーケンス番号は、「5、1、9、11、24、20、17、30」となっている。
図7に示すように、まず、タイミングt1において、シーケンス番号SNが5であるパケットが受信され、そのパケット情報PIが整列回路100に入力される。制御回路300は、パケット情報PIから該パケットのシーケンス番号SNを抽出する。整列バッファ110の領域0が未書込領域であるため、制御回路300は、領域0を示す選択信号SELを生成すると共に、該パケットの連続ビットCBに0を付与する。
その結果、タイミングt2において、次のパケット(シーケンス番号SN:1)が到着したときに、整列バッファ110の領域0に、パケット情報PIに含まれるシーケンス番号SN、加算値W、連続ビットCBとして、夫々「5」、「9」、「0」が書き込まれている。
このとき、検索対象領域が領域0のみであり、また、領域0に書き込まれたシーケンス番号SNが対象パケットのシーケンス番号SNの1より大きいため、制御回路300は、領域0が境界領域であると判定し、領域0を示す選択信号SELを生成する。また、対象パケットの連続ビットCBに0を付与する。
その結果、タイミングt3において、シーケンス番号SNが9であるパケットが到着したときに、シーケンス番号SN、加算値W、連続ビットCBとして、整列バッファ110の領域0には、夫々「1」、「5」、「0」が書き込まれており、領域1には、「5」、「9」、「0」が書き込まれている。
このとき、領域0と領域1の両方とも検索対象領域である。制御回路300は、境界領域の検索の結果、境界領域が無いと判定し、領域2を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの9が、領域1に書き込まれた加算値Wの9に一致するため、制御回路300は、対象パケットの連続ビットCBに1を付与する。
その結果、図8に示すように、タイミングt4において、シーケンス番号SNが11であるパケットが到着したときに、シーケンス番号SN、加算値W、連続ビットCBとして、整列バッファ110の領域0には、夫々「1」、「5」、「0」が書き込まれており、領域1には、「5」、「9」、「0」が書き込まれており、領域2には、「9」、「11」、「1」が書き込まれている。
このとき、領域0と領域1のみが検索対象領域である。制御回路300は、境界領域の検索の結果、境界領域が無いと判定し、領域3を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの11が、領域2に書き込まれた加算値Wの11に一致するため、制御回路300は、対象パケットの連続ビットCBに1を付与する。
その結果、タイミングt5において、シーケンス番号SNが24であるパケットが到着したときに、シーケンス番号SN、加算値W、連続ビットCBとして、さらに、整列バッファ110の領域3に、「11」、「17」、「1」が書き込まれている。
このときも、領域0と領域1のみが検索対象領域である。制御回路300は、境界領域の検索の結果、境界領域が無いと判定し、領域4を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの24が、領域3に書き込まれた加算値Wの17に一致しないため、制御回路300は、対象パケットの連続ビットCBに0を付与する。
その結果、タイミングt6において、シーケンス番号SNが20であるパケットが到着したときに、シーケンス番号SN、加算値W、連続ビットCBとして、さらに、整列バッファ110の領域4に、「24」、「30」、「0」が書き込まれている。
このとき、領域0、領域1、領域4のみが検索対象領域である。制御回路300は、境界領域の検索の結果、領域4が境界領域であると判定し、領域4を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの20が、領域4に書き込まれた加算値Wの17に一致しないため、制御回路300は、対象パケットの連続ビットCBに0を付与する。
その結果、図9に示すように、タイミングt7において、シーケンス番号SNが17であるパケットが到着したときに、シーケンス番号SN、加算値W、連続ビットCBとして整列バッファ110の領域4に書き込まれていた「24」、「30」、「0」が領域5にシフトされており、領域4には、シーケンス番号SN、加算値W、連続ビットCBとして、「20」、「24」、「0」が書き込まれている。
このとき、領域0、領域1、領域4、領域5が検索対象領域である。制御回路300は、領域4まで境界領域の検索を行った結果、領域4が境界領域であると判定し、領域4を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの17が、領域3に書き込まれた加算値Wの17に一致するため、制御回路300は、対象パケットの連続ビットCBに1を付与する。
その結果、タイミングt8において、シーケンス番号SNが30であるパケットが到着したときに、シーケンス番号SN、加算値W、連続ビットCBとして整列バッファ110の領域4と領域5に書き込まれていた情報が夫々領域5、領域6にシフトされており、領域4には、シーケンス番号SN、加算値W、連続ビットCBとして、「17」、「20」、「1」が書き込まれている。
このとき、領域0、領域1、領域4、領域5、領域6が検索対象領域である。制御回路300は、領域6まで境界領域の検索を行った結果、境界領域が無いと判定し、領域7を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの30が、領域6に書き込まれた加算値Wの30に一致するため、制御回路300は、対象パケットの連続ビットCBに1を付与する。
例えば、図8に示すタイミングt6において、整列バッファ110の領域0〜領域4が書込済領域であるが、境界領域の検索、すなわち、それに書き込まれたシーケンス番号SNと対象パケットのシーケンス番号SNとの比較がなされたのは、領域0、領域1、領域4のみであり、領域2と領域3がスキップされている。
このように、本第1の手法によれば、境界領域の検索に際して、夫々の書込済領域について、該領域に書き込まれたパケット情報PIに含まれる連続ビットに基づいて該領域が検索対象領域であるか否かを判定し、検索対象領域に判定した領域のみを検索対象とする。その結果、境界領域の検索が効率良くなる。
<第2の手法:ポインタに基づいた手法>
この手法では、制御回路により生成された1つ以上のポインタPを記憶するポインタ記憶回路(図示せず)をさらに有する。制御回路300は、検索対象領域を判定する際に、ポインタ記憶回路に記憶された各ポインタPにより夫々示される書込済領域を検索対象領域に判定する。
また、制御回路300は、対象パケットについて、パケット情報PIに連続ビットCBを付加する代わりに、ポインタ生成/変更処理を行う。
制御回路300が行うポインタ生成/変更処理は、具体的には、下記のような処理である。
<<第1の場合:選択信号SELにより示される領域が未書込領域である>>
この第1の場合において、制御回路300は、選択信号SELにより示される領域が整列バッファ110の先頭の領域以外であり、かつ、対象パケットのシーケンス番号SNが、該領域の1つ前の領域に書き込まれたパケット情報PIから得られる加算値Wに一致する第1Aの場合に、ポインタを生成しない。
上記第1Aの場合に該当しない第1Bの場合に、制御回路300は、選択信号SELにより示される領域を示すポインタを生成する。
<<第2の場合:選択信号SELにより示される領域が書込済領域である>>
この第2の場合において、制御回路300は、まず、選択信号SELにより示される領域からのいずれかの領域を示す全てのポインタを、現在示している領域の次の領域を示すように変更(シフト)する。
そして、選択信号SELにより示される領域が整列バッファ110の先頭の領域以外であり、かつ、対象パケットのシーケンス番号SNが、選択信号SELにより示される領域の1つ前の領域に書き込まれたパケット情報PIから得られる加算値Wに一致する第2Aの場合には、ポインタを生成しない。
一方、上記第2Aの場合に該当しない第2Bの場合に、選択信号SELにより示される領域を示すポインタを生成する。
図10は、第2の手法を適用した場合の整列回路100の処理を示すフローチャートであり、対象パケットの受信から該対象パケットのパケット情報PIが整列バッファ110に書き込まれるまでの流れを示す。図10において、ステップS202〜ステップS320までは、制御回路300が行う処理であり、ステップS160は、図4に示される、書込回路200が行う書込処理である。
図10に示すように、図6に示すフローチャートにおけるステップS222の処理(連続ビットCBに基づいた検索対象領域の判定)は、ステップS300になっている。ステップS300において、制御回路300は、領域iを示すポインタがあるか否かに基づいて領域iが検索対象領域であるか否かを判定する。
また、パケット情報PIは、制御回路300を経由せずに書込回路200に出力されるため、ステップS310において、制御回路300は、選択信号SELのみを書込回路200に出力する。
また、図6のフローチャートにおける連続ビットCBの付与処理は(ステップS250〜S270)は、図10において、ステップS320のポインタ生成/変更処理に変っている。
他の点に関しては、図6のフローチャートと同様である。
図11のフローチャートを参照して、図10のステップS320におけるポインタ生成/変更処理を説明する。
制御回路300は、ポインタ生成/変更処理に際して、まず、選択信号SELにより示される領域(領域i)が書込済領域であるか否かを確認する(S322)。領域iが未書込領域である場合(S322:No)、すなわち上述した第1の場合においては、下記のように処理を行う。
領域iが整列バッファ110の先頭の領域以外であり、かつ、対象パケットのシーケンス番号SNが、領域iの1つ前の領域に書き込まれたパケット情報PIから得られる加算値W(W(i−1))に一致する場合(第1Aの場合)(S324:No、S330:Yes)には、ポインタを生成しない。
一方、他の場合(第1Bの場合)(S324:Yes、またはS324:No、S330:No)においては、制御回路300は、領域iを示すポインタを生成する(S326)。
領域iが書込済領域である場合(S322:Yes)、すなわち上述した第2の場合においては、制御回路300は、下記のように処理を行う。
制御回路300は、まず、領域iからのいずれかの領域を示す全てのポインタを、現在示している領域の次の領域を示すようにシフトする(S340)。
そして、領域iが整列バッファ110の先頭の領域以外であり、かつ、対象パケットのシーケンス番号SNが、領域iの1つ前の領域に書き込まれたパケット情報PIから得られる加算値W(W(i−1))に一致する場合(第2Aの場合)(S342:No、S350:Yes)には、ポインタを生成しない。
一方、他の場合(第2Bの場合)(S342:Yes、またはS342:No、S350:No)においては、領域iを示すポインタを生成する(S326)。
この第2の手法も、境界領域が検出されるまで、または、全ての検索対象領域を検索対象とした検索が完了するまで、検索対象領域の判定と、検索対象領域に判定した領域を検索対象とした検索が繰り返される。そして、境界領域が検出されれば、該境界領域を示す選択信号SELの生成と、ポインタ生成/変更処理が行われる。また、全ての検索対象領域を検索対象とした検索が完了しても境界領域が検出されなかった場合に、最後の書込済領域の次の領域を示す選択信号SELの生成と、ポインタ生成/変更処理がなされる。
図12〜図14を参照して、第2の手法を適用した整列回路100による処理の具体例を説明する。
該例においても、シーケンス番号が夫々1、5、9、11、17、20、24、30である8つのパケットは送信され、到着順のシーケンス番号は、「5、1、9、11、24、20、17、30」となっている。
図12に示すように、まず、タイミングt1において、シーケンス番号SNが5であるパケットが受信され、そのパケット情報PIが整列回路100に入力される。制御回路300は、該パケットのシーケンス番号SNを抽出する。整列バッファ110の領域0が未書込領域であるため、制御回路300は、領域0を示す選択信号SELを生成すると共に、領域0を示すポインタ(ポインタP1)を生成してポインタ記憶回路に格納する。
その結果、タイミングt2において、シーケンス番号SNが1であるパケットが到着したときに、整列バッファ110の領域0に、パケット情報PIに含まれるシーケンス番号SN、加算値Wとして、夫々「5」、「9」が書き込まれている。また、領域0を示すポインタP1がポインタ記憶回路に記憶されている。
このとき、検索対象領域がポインタP1により示される領域0のみであり、また、領域0に書き込まれたシーケンス番号SNが対象パケットのシーケンス番号SNの1より大きいため、制御回路300は、領域0が境界領域であると判定し、領域0を示す選択信号SELを生成すると共に、領域1を示すようにポインタP1をシフトすると共に、領域0を示す新たなポインタ(ポインタP2)を生成する。
その結果、タイミングt3において、シーケンス番号SNが9であるパケットが到着したときに、シーケンス番号SN、加算値Wとして、整列バッファ110の領域0には、「1」、「5」が書き込まれており、領域1には、「5」、「9」が書き込まれている。また、ポインタ記憶回路には、領域0と領域1を夫々示すポインタP2とポインタP1が記憶されている。
このとき、領域0と領域1の両方とも検索対象領域である。制御回路300は、境界領域の検索の結果、境界領域が無いと判定し、領域2を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの9が、領域1に書き込まれた加算値Wの9に一致するため、制御回路300は、既にあるポインタの変更も、新たなポインタの生成もしない。
その結果、図12に示すように、タイミングt4において、シーケンス番号SNが11であるパケットが到着したときに、シーケンス番号SN、加算値Wとして、整列バッファ110の領域0には、「1」、「5」が書き込まれており、領域1には、「5」、「9」が書き込まれており、領域2には、「9」、「11」が書き込まれている。また、ポインタ記憶回路には、領域0と領域1を夫々示すポインタP2とポインタP1が記憶されている。
このとき、領域0と領域1のみが検索対象領域である。制御回路300は、境界領域の検索の結果、境界領域が無いと判定し、領域3を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの11が、領域2に書き込まれた加算値Wの11に一致するため、制御回路300は、既にあるポインタの変更も、新たなポインタの生成もしない。
その結果、タイミングt5において、シーケンス番号SNが24であるパケットが到着したときに、シーケンス番号SN、加算値Wとして、さらに、整列バッファ110の領域3に、「11」、「17」が書き込まれており、ポインタ記憶回路には、相変わらず、領域0と領域1を夫々示すポインタP2とポインタP1が記憶されている。
このときも、領域0と領域1のみが検索対象領域である。制御回路300は、境界領域の検索の結果、境界領域が無いと判定し、領域4を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの24が、領域3に書き込まれた加算値Wの17に一致しないため、制御回路300は、領域4を示す新たなポインタ(ポインタP3)を生成してポインタ記憶回路に格納する。
その結果、タイミングt6において、シーケンス番号SNが20であるパケットが到着したときに、シーケンス番号SN、加算値Wとして、さらに、整列バッファ110の領域4に、「24」、「30」が書き込まれており、ポインタ記憶回路には、領域4を示すポインタP3が追加されている。
このとき、領域0、領域1、領域4のみが検索対象領域である。制御回路300は、境界領域の検索の結果、領域4が境界領域であると判定し、領域4を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの20が、領域4に書き込まれた加算値Wの17に一致しないため、制御回路300は、領域4を示していたポインタP3を、領域5を示すようにシフトすると共に、領域4を示す新たなポインタ(ポインタP4)を生成してポインタ記憶回路に格納する。
その結果、図14に示すように、タイミングt7において、シーケンス番号SNが17であるパケットが到着したときに、シーケンス番号SN、加算値Wとして整列バッファ110の領域4に書き込まれていた「24」、「30」が領域5にシフトされており、領域4には、シーケンス番号SN、加算値Wとして、「20」、「24」が書き込まれている。また、ポインタ記憶回路には、領域0、領域1、領域4、領域5を夫々示すポインタP2、ポインタP1、ポインタP4、ポインタP3が格納されている。
このとき、領域0、領域1、領域4、領域5が検索対象領域である。制御回路300は、領域4まで境界領域の検索を行った結果、領域4が境界領域であると判定し、領域4を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの17が、領域3に書き込まれた加算値Wの17に一致するため、制御回路300は、領域4と領域5を示しいていたポインタP4とポインタP3を、領域5と領域6を夫々示すようにシフトする。この場合、制御回路300は、新たなポインタの生成をしない。
その結果、タイミングt8において、シーケンス番号SNが30であるパケットが到着したときに、シーケンス番号SN、加算値Wとして整列バッファ110の領域4と領域5に書き込まれていた情報が夫々領域5、領域6にシフトされており、領域4には、シーケンス番号SN、加算値Wとして、「17」、「20」が書き込まれている。また、ポインタ記憶回路には、領域0、領域1、領域5、領域6を夫々示すポインタP2、ポインタP1、ポインタP4、ポインタP3が格納されている。
このとき、領域0、領域1、領域5、領域6が検索対象領域である。制御回路300は、領域6まで境界領域の検索を行った結果、境界領域が無いと判定し、領域7を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの30が、領域6に書き込まれた加算値Wの30に一致するため、制御回路300は、既にあるポインタの変更も、新たなポインタの生成もしない。
ポインタに基づいた本第2の手法も、連続ビットに基づいた第1の手法と同様の効果を得ることができる。
ところで、図7と図12のタイミングt3において、領域1に格納されたパケット情報PIに含まれるシーケンス番号SNが、領域0に格納されたパケット情報PIに含まれる加算値Wに一致するにも関わらず、領域1が、領域0と別の連続グループと判定され、領域0と領域1のいずれも検索対象領域になっている。
この状況は、後の全てのタイミングにおいて同様であり、検索の対象にするべきではない領域1がずっと検索対象領域に判定されている。また、図7と図12のタイミングt7における領域5、タイミングt8における領域5と領域6についても同様である。
この問題を解決し、境界領域の検索をより効率良くするために、本願発明者は、下記の手法を想到した。この手法は、ポインタに基づいた第2の手法を改良したものであり、以下「第3の手法」という。
該第3の手法は、ポインタ生成/変更処理が上述した第2の手法と異なる点以外、第2の手法と同様である。ここで、該第3の手法におけるポインタ生成/変更処理を説明する。
図15は、第3の手法におけるポインタ生成/変更処理を示すフローチャートであり、図11に示すポインタ生成/変更処理の代わりに、図10のステップS320で行われるポインタ生成/変更処理の流れである。なお、図15において、図11におけるステップと同様のものについては、同様のステップ番号を付与しており、これらのステップについての説明を省略する。
図15に示すように、該第3の手法によるポインタ生成/変更処理では、選択信号SELにより示される領域(領域i)が整列バッファ110の先頭の領域以外の書込済領域であり、かつ、対象パケットのシーケンス番号SNが、領域iの1つ前の領域に書き込まれたパケット情報PIから得られる加算値W(W(i−1))に一致する場合(第2Aの場合)(S322:Yes、S340、S342:No、S350:Yes)において、さらに、領域iに書き込まれたパケット情報PIに含まれるシーケンス番号SNが、対象パケットの加算値Wに一致するか否かを確認する(S352)。そして、一致する場合にのみ(S352:Yes)、選択信号SELにより示される領域の次の領域を示すポインタ(P(i+1))を削除する(S354)。一致しない場合には(S352:No)、第2の手法のときと同様に、既にあるポインタに対するこれ以上の変更や、新たなポインタの生成をしない。
なお、ステップS354において削除されるポインタP(i+1)は、領域iを示していたものであり、ステップS340において、領域(i+1)を示すようにシフトされている。
さらに、該第3の手法は、第2Bの場合(S322:Yes、S340、S342:Yes、またはS322:Yes、S340、S342:No、S350:No)においても、制御回路300は、さらに、領域iに書き込まれたパケット情報PIに含まれるシーケンス番号SNが、対象パケットの加算値Wに一致するか否かを確認する(S344)。そして、一致する場合にのみ(S344:Yes)、選択信号SELにより示される領域の次の領域を示すポインタ(P(i+1))を、領域iを示すように変更する(S346)。一致しない場合には(S344:No)、第2の手法のときと同様に、領域iを示すポインタを生成する。
この場合も、ステップS346において変更されたポインタP(i+1)は、領域iを示していたものであり、ステップS340において、領域(i+1)を示すようにシフトされている。
図16〜図17を参照して、第3の手法を適用した整列回路100による処理の具体例を説明する。
該例においても、シーケンス番号が夫々1、5、9、11、17、20、24、30である8つのパケットは送信され、到着順のシーケンス番号は、「5、1、9、11、24、20、17、30」となっている。
図16に示すように、まず、タイミングt1において、シーケンス番号SNが5であるパケットが受信され、そのパケット情報PIが整列回路100に入力される。制御回路300は、該パケットのシーケンス番号SNと加算値Wを取得する。整列バッファ110の領域0が未書込領域であるため、制御回路300は、領域0を示す選択信号SELを生成すると共に、領域0を示すポインタ(ポインタP1)を生成するポインタ記憶回路に格納する。
その結果、タイミングt2において、シーケンス番号SNが1であるパケットが到着したときに、整列バッファ110の領域0に、パケット情報PIに含まれるシーケンス番号SN、加算値Wとして、夫々「5」、「9」が書き込まれている。また、領域0を示すポインタP1がポインタ記憶回路に記憶されている。
このとき、検索対象領域がポインタP1により示される領域0のみであり、また、領域0に書き込まれたシーケンス番号SNが対象パケットのシーケンス番号SNの1より大きいため、制御回路300は、領域0が境界領域であると判定し、領域0を示す選択信号SELを生成する。このとき、制御回路300は、領域1を示すようにポインタP1をシフトするものの、領域0に書き込まれているシーケンス番号SNの5が対象パケットの加算値Wの5に一致するため、制御回路300は、ポインタP1を、領域0を示すように戻す。
その結果、タイミングt3において、シーケンス番号SNが9であるパケットが到着したときに、シーケンス番号SN、加算値Wとして、整列バッファ110の領域0には、「1」、「5」が書き込まれており、領域1には、「5」、「9」が書き込まれている。また、ポインタ記憶回路には、領域0を夫々示すポインタP1のみが記憶されている。
そのため、領域0のみが検索対象領域である。制御回路300は、境界領域の検索の結果、境界領域が無いと判定し、最後の書込済領域(領域1)の次の領域2を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの9が、領域1に書き込まれた加算値Wの9に一致するため、制御回路300は、既にあるポインタの変更も、新たなポインタの生成もしない。
その結果、図17に示すように、タイミングt4において、シーケンス番号SNが11であるパケットが到着したときに、シーケンス番号SN、加算値Wとして、整列バッファ110の領域0には、「1」、「5」が書き込まれており、領域1には、「5」、「9」が書き込まれており、領域2には、「9」、「11」が書き込まれている。また、ポインタ記憶回路には、相変わらず、領域0示すポインタP1のみが記憶されている。
そのため、領域0のみが検索対象領域である。制御回路300は、境界領域の検索の結果、境界領域が無いと判定し、領域3を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの11が、領域2に書き込まれた加算値Wの11に一致するため、制御回路300は、既にあるポインタの変更も、新たなポインタの生成もしない。
その結果、タイミングt5において、シーケンス番号SNが24であるパケットが到着したときに、シーケンス番号SN、加算値Wとして、さらに、整列バッファ110の領域3に、「11」、「17」が書き込まれており、ポインタ記憶回路には、相変わらず、領域0を示すポインタP1のみが記憶されている。
このときも、領域0のみが検索対象領域である。制御回路300は、境界領域の検索の結果、境界領域が無いと判定し、領域4を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの24が、領域3に書き込まれた加算値Wの17に一致しないため、制御回路300は、領域4を示す新たなポインタ(ポインタP2)を生成してポインタ記憶回路に格納する。
その結果、タイミングt6において、シーケンス番号SNが20であるパケットが到着したときに、シーケンス番号SN、加算値Wとして、さらに、整列バッファ110の領域4に、「24」、「30」が書き込まれており、ポインタ記憶回路には、領域0を示すポインタP1と、領域4を示すポインタP2が格納されている。
そのため、領域0、領域4が検索対象領域である。制御回路300は、境界領域の検索の結果、領域4が境界領域であると判定し、領域4を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの20が、領域4に書き込まれた加算値Wの17に一致しないものの、領域5に書き込まれたシーケンス番号が、対象パケットの加算値Wに一致する。従って、制御回路300は、ポインタP2を、一旦領域5を示すようにシフトするものの、領域4を示すように戻す。
その結果、図18に示すように、タイミングt7において、シーケンス番号SNが17であるパケットが到着したときに、シーケンス番号SN、加算値Wとして整列バッファ110の領域4に書き込まれていた「24」、「30」が領域5にシフトされており、領域4には、シーケンス番号SN、加算値Wとして、「20」、「24」が書き込まれている。また、ポインタ記憶回路には、領域0、領域4を夫々示すポインタP1、ポインタP2が格納されている。
このとき、領域0、領域4が検索対象領域である。制御回路300は、領域0に続いて領域4を対象に境界領域の検索を行った結果、領域4が境界領域であると判定し、領域4を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの17が、領域3に書き込まれた加算値Wの17に一致し、さらに、領域4に書き込まれたシーケンス番号SNが対象パケットの加算値Wに一致するため、制御回路300は、ポインタP2を、領域5を示すようにシフトした後に削除する。
その結果、タイミングt8において、シーケンス番号SNが30であるパケットが到着したときに、シーケンス番号SN、加算値Wとして整列バッファ110の領域4と領域5に書き込まれていた情報が夫々領域5、領域6にシフトされており、領域4には、シーケンス番号SN、加算値Wとして、「17」、「20」が書き込まれている。また、ポインタ記憶回路には、領域0を示すポインタP1のみが格納されている。
そのため、領域0のみが検索対象領域である。制御回路300は、領域0を対象にして境界領域の検索を行った結果、境界領域が無いと判定し、最後の書込済領域の次の領域7を示す選択信号SELを生成する。また、対象パケットのシーケンス番号SNの30が、領域6に書き込まれた加算値Wの30に一致するため、制御回路300は、既にあるポインタの変更も、新たなポインタの生成もしない。
以上の説明から分かるように、本第3の手法によれば、制御回路300は、ポインタ生成/変更処理をする際に、選択信号SELにより示される領域に書き込まれていたシーケンス番号SNと対象パケットの加算値Wとの比較をさらに行い、比較の結果に応じてポインタのシフトや生成などを行う(行わないことも含む)ため、第1の手法と第2の手法より、検索対象領域をより絞ることができ、ひいては、境界領域の検索処理の効率を一層向上させることができる。
本第3の手法の技術思想を、第1の手法に適用することもできる。この場合、既に整列バッファ110に書き込まれたパケット情報PIに含まれる連続ビットCBを変更する必要がある。
以上に説明した本発明の技術的原理を踏まえて、本発明にかかる実施の形態を説明する。
<第1の実施の形態>
図19は、本発明の第1の実施の形態にかかる受信装置400を示す図である。受信装置400は、受信ブロック402、FIFO(First In First Out)404、ヘッダ解析部410、トレーステーブル420、計時部422、DMAC430、パケット情報生成部440、バス450、CPU460、メモリ470、整列回路500を備える。
受信ブロック402は、現在到着したパケット(対象パケット)を受信し、FIFO404へ転送する。
FIFO404は、受信バッファであり、受信ブロック402からの対象パケットを一時的に格納して、ヘッダ解析部410、DMAC430、パケット情報生成部440へ出力する。
ヘッダ解析部410は、FIFO404に格納されているパケットに対して逐次ヘッダの抽出を行うと共に、抽出したヘッダをパケット情報生成部440に出力する。また、ヘッダ解析部410は、抽出したヘッダにシーケンス番号があるか否かを確認し、確認の結果もパケット情報生成部440に出力する。さらに、ヘッダ解析部410は、対象パケットのヘッダにシーケンス番号が含まれている場合に、該ヘッダに含まれるコネクション情報(後述する)がトレーステーブル420に格納されているか否かを判定し、判定の結果、格納されていない場合には、対象パケットのコネクション情報をトレーステーブル420に出力する。
トレーステーブル420は、対応するコネクション数分のコネクション情報を格納するエリアを備えており、コネクション毎にコネクションを管理する。図20は、トレーステーブル420に格納されているコネクション情報の例を示す。図示のように、トレーステーブル420には、コネクション毎に、送信元IPアドレス、宛先IPアドレス、送信元ポート番号、宛先ポート番号がコネクション情報として格納されている。
トレーステーブル420は、ヘッダ解析部410から転送されてきたコネクション情報に一致するコネクション情報が格納されていないときに、該コネクション情報を新たなコネクション情報として蓄積すると共に、計時部422に、該コネクションに対応するタイマ(図示せず)の起動要求を出力する。
また、トレーステーブル420は、計時部422からタイマ満了信号を受信すると、該タイマ満了信号に対応するコネクション情報をトレーステーブル420から削除する。
計時部422は、トレーステーブル420により管理されているコネクション情報毎にタイマ及び受信データ数カウンタ(図示せず)を有する。トレーステーブル420から起動要求を受信すると、当該タイマと受信データ数カウンタのカウントを開始する。そして、タイマまたは受信データ数カウンタのカウント値が予め設定された閾値に達したときに、対応するコネクションについて、トレーステーブル420の満了信号を出力すると共に、当該タイマまたは受信データ数カウンタを初期化する。
パケット情報生成部440は、ヘッダ解析部410からのヘッダ情報から、シーケンス番号SNを含むパケット情報PIを生成する。
また、パケット情報生成部440は、シーケンス番号の有無を示すヘッダ解析部410の確認結果に基づいて、シーケンス番号が無い場合には、該対象パケットが分割パケットではないと判定して、作成したパケット情報PIをDMAC430に出力する。一方、シーケンス番号がある場合には、パケット情報生成部440は、作成したパケット情報PIを整列回路500に出力する。
整列回路500は、対応するコネクションの数分搭載されている。分かりやすいように、1つのみを図示及び説明する。
整列回路500は、対応するコネクションのパケット情報PIをパケット情報生成部440から入力され、シーケンス番号の小さい順にパケット情報PIを並び替えて一時的に保管する。
また、計時部422から、当該コネクションに関するタイマ満了信号が整列回路500にも入力される。整列回路500は、この信号を受信すると、一時保管中の全てのパケット情報PIをDMAC430に出力すると共に、保管中の全てのパケット情報PIを初期化する。
整列回路500については、後に詳細に説明する。
DMAC430は、DMA転送を担うDMAコントローラであり、FIFO404からの各パケットを、バス450を介してメモリ470に転送する。また、DMAC430は、パケット情報生成部440により生成された、シーケンス番号が無いパケットのパケット情報PIも、バス450を介してメモリ470に転送する。さらに、DMAC430は、整列回路500からのパケット情報PIも、バス450を介してメモリ470に転送する。
バス450は、DMAC430及びCPU460によるメモリ470のアクセスを中継する。
CPU460は、受信装置400全体の制御を行う中央処理装置であり、バス450を介してバス450とDMAC430に接続されている。CPU460、DMAC430、メモリ470間のデータのやりとりは、通常の情報処理装置における同種のものと同様であり、ここで詳細な説明を省略する。
メモリ470は、例えばRAM(Radom Access Memory)であり、バス450を介してDMAC430とCPU460によりアクセスされる。
メモリ470は、パケット情報エリア472と、パケットエリア474を備える。DMAC430から転送されてきたパケット情報PIは、パケットエリア474に格納され、パケットエリア474には、DMAC430から転送されたパケットを格納する
図21を参照して、整列回路500を説明する。
図21に示すように、整列回路500は、シーケンス番号抽出回路510、比較器520、選択信号生成回路530、書込回路200、整列バッファ540、情報抽出部550、セレクタ570を備える。整列回路500において、書込回路200と整列バッファ540を除いた他のブロックは、制御回路を構成する。
パケット情報生成部440からのパケット情報PIは、シーケンス番号抽出回路510、書込回路200に入力される。
シーケンス番号抽出回路510は、パケット情報PIから対象パケットのシーケンス番号SNを抽出して比較器520に出力する。
選択信号生成回路530は、第1の選択信号SEL1を生成してセレクタ570に出力し、第2の選択信号SEL2を生成して書込回路200に出力する。第1の選択信号L1と第2の選択信号SEL2は、整列バッファ540内の複数のバッファ(バッファ0〜バッファN)のいずれかを示す信号である。さらに、第2の選択信号SEL2は、「初期化」を示すこともできる。
書込回路200は、本発明の原理のときに説明した書込回路200(図5)であり、第2の選択信号L2に応じて、パケット情報PIを整列バッファ540への書込みを行う。なお、「初期化」を示す第2の選択信号SEL2を受信した際に、書込回路200は、全ての格納データを初期化する。
整列バッファ540は、書込回路200内の各選択回路に夫々対応するバッファを含み、対応する選択回路と、後述の情報抽出部550における相対応の情報抽出回路とに接続されている。
情報抽出部550は、整列バッファ540内の各バッファに夫々対応する情報抽出回路(情報抽出回路560〜情報抽出回路56N)を有する。各情報抽出回路は、対応するバッファにパケット情報PIが書き込まれたとき(更新されたときも含む)に、該バッファに書き込まれたパケット情報PIを読み出して、シーケンス番号SNと、後述するストアフラグSFを抽出すると共に、次に該バッファにパケット情報PIが書き込まれるまで、または初期化されるときまで保持する。
セレクタ570は、情報抽出部550の各情報抽出回路と接続されており、選択信号生成回路530からの第1の選択信号SEL1が示すバッファに対応する情報抽出回路により抽出されたシーケンス番号SNとストアフラグSFを選択して比較器520と選択信号生成回路530に夫々出力する。
比較器520は、セレクタ570からのシーケンス番号SNと、シーケンス番号抽出回路510からのシーケンス番号SN(対象パケットのシーケンス番号)との大小関係を比較し、結果を選択信号生成回路530に出力する。
選択信号生成回路530は、比較器520からの比較結果に基づいて、前回の第1の選択信号SEL1が示すバッファの次のバッファを示す第1の選択信号SEL1を生成してセレクタ570に出力するか、第2の選択信号SEL2を生成して書込回路200に出力する。
図22は、整列バッファ540内の各バッファ、メモリ470のパケット情報エリア472におけるパケット情報PIの格納態様の例を示す図である。図示のように、パケット情報エリア472と各バッファ内に、パケット情報の有無を示すストアフラグと、パケットエリア474において、該パケット情報に対応するパケットを格納するアドレスと、シーケンス番号SNとをパケット情報PIとして格納されている。なお、将来的な機能拡張の為の機能拡張用フィールドも備えられている。整列バッファ540の各バッファは、このようなパケット情報PIを1つのみ格納し、パケット情報エリア472は、複数のパケット情報PIを格納する。
図23は、受信装置400におけるヘッダ解析部410、トレーステーブル420、DMAC430、パケット情報生成部440、整列回路500による処理の流れを示すフローチャートである。
計時部422から当該コネクションのタイマ満了信号を受信しておらず、対象パケットを受信すると(S400:No、S402:Yes)、ヘッダ解析部410は、FIFO404からの該対象パケットのヘッダを解析し、シーケンス番号SNの有無に基づいて分割パケットであるか否かを判定する(S404)。なお、タイマ満了信号は、当該コネクションに対応する整列バッファ540におけるパケット情報PIの滞留時間がタイムアウトしたとき、または、データ滞留数がオーバーフローしているときに計時部422から出力される。
ヘッダ解析部410は、ステップS404における判定の結果と、ヘッダをパケット情報生成部440に出力する。対象パケットが分割パケットではない場合に(S404:No)、パケット情報生成部440は、ヘッダ解析部410からのヘッダに基づいてパケット情報PIを生成してDMAC430に出力し、DMAC430は、該パケット情報PIに対応するパケットをパケットエリア474にDMA転送すると共に、該パケット情報PIをパケット情報エリア472にDMA転送する(S406、S408、S410)。
一方、対象パケットが分割パケットである場合に(S404:Yes)、ヘッダ解析部410は、送信元IPアドレス、宛先IPアドレス、送信元ポート番号、宛先ポート番号を含むコネクション情報と生成し、パケット情報生成部440は、パケット情報PIを生成して整列回路500に出力する(S412、S414)。
ヘッダ解析部410は、ステップS412で生成したコネクション情報と、トレーステーブル420に格納された各コネクション情報とを比較する(S416)。
トレーステーブル420に対象パケットのコネクション情報があれば(S420:Yes)、ヘッダ解析部410は、該対象パケットについての処理を終了する。一方、トレーステーブル420に対象パケットのコネクション情報がなければ(S420:No)、ヘッダ解析部410は、ステップ412で生成したコネクション情報をトレーステーブル420に出力する。これにより、トレーステーブル420は、新しいコネクションのパケットが受信されたとして、該コネクションに対応するタイマを計時部422に起動させる(S424)。
整列回路500は、パケット情報生成部440からパケット情報PIを受信すると、並替処理を行う(S430)。また、DMAC430は、当該パケットをパケットエリア474にDMA転送する(S470)。
計時部422からタイマ満了信号が出されると(S400:Yes)、DMAC430は、整列回路500の整列バッファ540内の全てのパケット情報PIをパケット情報エリア472にDMA転送する(S480)。また、トレーステーブル420は、該コネクションに対応するコネクション情報とタイマを初期化する(S482)。
図24は、図23におけるステップS430の並替処理を示すフローチャートである。タイマ満了信号を受信しておらず、パケット情報生成部440からパケット情報PIを受信すると(S432:No、S434:Yes)、シーケンス番号抽出回路510は、パケット情報PIからシーケンス番号SNを生成して比較器520に出力し(S436)、選択信号生成回路530は、バッファ0を示す第1の選択信号SEL1を生成してセレクタ570に出力する(S438、S440)。セレクタ570は、情報抽出部550のうちの、バッファ0に対応する情報抽出回路560に保持されたシーケンス番号SN(0)とストアフラグSF(0)を選択して比較器520と選択信号生成回路530に夫々出力する。
ストアフラグSF(0)が0であり、すなわちバッファ0が未書込バッファ(以下「未書込領域」ともいう)であるときに(S442:No)選択信号生成回路530は、バッファ0を示す第2の選択信号SEL2を生成して書込回路200に出力する(S454)。これを受けて、書込回路200は、ステップS160の書込処理をする。ステップS160の書込処理は、図4に示す通りである。ここで、対象パケットのパケット情報PIは、バッファ0に書き込まれる。
一方、ステップS442において、ストアフラグSF(0)が1であり、すなわちバッファ0が書込済バッファ(以下「書込済領域」ともいう)であるときに(S442:Yes)、選択信号生成回路530は、境界となるバッファ(境界領域)の検索を開始し、比較器520によるバッファ0に格納されているシーケンス番号SN(0)と、シーケンス番号抽出回路510が得た対象パケットのシーケンス番号SNとの比較結果を確認する(S450)。
バッファ0に書き込まれたシーケンス番号SN(0)が対象パケットのシーケンス番号SNより大きいときに、選択信号生成回路530は、バッファ0が境界領域であると判定し、バッファ0を示す第2の選択信号SEL2を生成して書込回路200に出力する(S450:Yes、S454)。これに応じて、書込回路200によるパケット情報PIの書込処理がなされる。このとき、バッファ0からの各バッファに格納されたデータは次のバッファにシフトされ、バッファ0には、対象パケットのパケット情報PIが書き込まれる。
また、情報抽出部550の各情報抽出回路は、対応するバッファ内のパケット情報PIを読み出してシーケンス番号SNとストアフラグSFを抽出して、保持していたものを更新する。
ステップS450において、バッファ0に書き込まれたシーケンス番号SN(0)が対象パケットのシーケンス番号SNより小さいときには、選択信号生成回路530は、バッファ0が境界領域ではないと判定し、次のバッファ(バッファ1)を示す第1の選択信号SEL1を生成してセレクタ570に出力する(S450:No、S452、S440)。そして、領域1を検索対象とした境界領域の検索が行われる(S442〜)。
このような処理は、境界領域が検出されるまで、最後の書込済領域を検索対象とした検索がなされるまで繰り返され、パケット情報PIは、整列バッファ540内の未書込領域か、いずれかの書込済領域に書き込まれる。未書込領域に書き込まれる場合には、該未書込領域が整列バッファ540の先頭のバッファか、最後の書込済領域の次の領域である。また、書込済領域に書き込まれた場合には、該書込済領域に格納されていたシーケンス番号SNが必ず対象パケットのシーケンス番号SNより大きい。また、対象パケットのパケット情報PIを書き込まれた領域の1つ前の領域には、必ず対象パケットのシーケンス番号SNより小さいシーケンス番号SNが書き込まれている。
なお、タイマ満了信号を受信した際に(S432:Yes)、選択信号生成回路530は、整列バッファ540内に書き込まれた全てのパケット情報PIのDMA転送の完了後に、整列バッファ540内の各バッファの初期化を指示する第2の選択信号SEL2を書込回路200に出力する。これにより、整列バッファ540内の各バッファ、及び情報抽出部550内の各情報抽出回路は、初期化される(S460)。
本実施の形態の整列回路100は、本発明の原理を具現化したものであり、本発明の原理のときに説明した効果を得ることができる。
<第2の実施の形態>
本発明の第2の実施の形態も、受信装置である。この受信装置は、図19に示す受信装置400と比べ、パケット情報生成部440が作成したパケット情報PIには、加算値W(次に送信されたパケットのシーケンス番号)が含まれる点と、図21に示す整列回路500の代わりに、図25に示す整列回路600が設けられた点とを除き、受信装置400と同様であるので、ここで、整列回路600についてのみ説明する。なお、整列回路600について、整列回路500と同様の機能を担う回路に関しては、図21と同様の符号を付与しており、これらの回路に関しては、説明を省略する。
整列回路600は、境界領域の検索を効率良く行うための、連続ビットCBに基づいた第1の手法を適用したものである。図25に示すように、整列回路600は、選択信号生成回路630、情報抽出部650、セレクタ670が整列回路500における選択信号生成回路530、情報抽出部550、セレクタ570と夫々異なる点、結合部610と比較器620がさらに設けられた点以外、整列回路500と同様である。
結合部610は、パケット情報生成部440からのパケット情報PIと、比較器620からの連続ビットCBとを結合してパケット情報PIAを得て書込回路200に出力する。そのため、本第2の実施の形態において、整列バッファ540、メモリ470のパケット情報エリア472におけるパケット情報の格納態様は、図26に示すようになる。
図26に示すように、パケット情報PIAには、ストアフラグ、シーケンス番号SNに加え、さらに連続ビットCBと加算値Wが含まれている。なお、加算値Wは、前述したように、パケット情報生成部440によりパケット情報PIに盛り込んだものである。
図25に戻って説明する。
情報抽出部650は、各情報抽出回路が、対応するバッファに書き込まれたパケット情報PIAから、シーケンス番号SNとストアフラグSFに加え、さらに、加算値Wと連続ビットCBを抽出する。それ以外は、情報抽出部550と同様である。
セレクタ670は、第1の選択信号SEL1により示されるバッファに対応する情報抽出回路が抽出したシーケンス番号SNとストアフラグSFを比較器520と選択信号生成回路630に夫々出力すると共に、さらに、第1の選択信号SEL1により示されるバッファに対応する情報抽出回路が抽出した連続ビットCBを選択信号生成回路630に出力し、第1の選択信号SEL1により示されるバッファの1つ前のバッファに対応する情報抽出回路が抽出した加算値Wを比較器620に出力する。
選択信号生成回路630は、境界領域の検索に際して、セレクタ670からの連続ビットCBが0であるときにのみ検索を実行し、連続ビットCBが1である場合には該領域についての検索をスキップする。また、選択信号生成回路630は、第2の選択信号SEL2を出力する際に、第2の選択信号SEL2により示されるバッファが整列バッファ540の先頭のバッファ(バッファ0)以外であるときに、比較指示を示す比較制御信号ctrを比較器620に出力する。他の点に関しては、選択信号生成回路530と同様である。
比較器620は、選択信号生成回路630から比較制御信号ctrを受信すると、対象パケットのシーケンス番号SNが、セレクタ670からの加算値Wに一致するか否かを比較し、一致するときにのみ連続ビットCBに1を出力する。なお、このとき、セレクタ670からの加算値Wは、対象パケットが書き込まれるバッファの1つ前のバッファに格納されている加算値Wである。
結合部610は、比較器620から連続ビットCBを受信すると、該連続ビットCBをパケット情報PIに結合してパケット情報PIAを生成する。なお、比較器620から連続ビットCBの出力がなく、すなわち連続ビットCBが0であるときには、連続ビットCBが0であるとしてパケット情報PIに結合する。
連続ビットCBに基づいて境界領域の効率化を図る第1の手法は、上記にて詳しく説明したため、ここでは、さらなる詳細な説明を省略する。
勿論、本第2の実施の形態の受信装置における整列回路600は、第1の手法を具現化したものであるため、第1の手法により得られる効果を得ることができる。
<第3の実施の形態>
本発明の第3の実施の形態も、受信装置である。この受信装置は、図19に示す受信装置400と比べ、パケット情報生成部440が作成したパケット情報PIには、加算値W(次に送信されたパケットのシーケンス番号)が含まれる点と、図21に示す整列回路500の代わりに、図27に示す整列回路700が設けられた点とを除き、受信装置400と同様であるので、ここで、整列回路700についてのみ説明する。なお、整列回路700について、整列回路500と同様の機能を担う回路に関しては、図21と同様の符号を付与しており、これらの回路に関しては、説明を省略する。
整列回路700は、境界領域の検索を効率良く行うための、ポインタに基づいた第3の手法を適用したものである。図27に示すように、整列回路700は、比較器722、比較器724、ポインタ記憶回路726をさらに備えた点、抽出回路710、選択信号生成回路730、情報抽出部750、セレクタ770が整列回路500における選択信号生成回路530、情報抽出部550、セレクタ570と夫々異なる点を除き、整列回路500と同様である。
図28は、本第3の実施の形態において、整列バッファ540、メモリ470のパケット情報エリア472におけるパケット情報の格納態様の例を示す。図28に示すように、パケット情報PIには、ストアフラグ、シーケンス番号SNに加え、さらに加算値Wが含まれている。なお、加算値Wは、前述したように、パケット情報生成部440によりパケット情報PIに盛り込んだものである。
図27に戻って説明する。
抽出回路710は、パケット情報生成部440からのパケット情報PIからシーケンス番号SNを抽出して比較器520と比較器724に出力する。さらに、抽出回路710は、パケット情報PIから加算値Wを抽出して比較器722に出力する。
情報抽出部750は、各情報抽出回路が、対応するバッファに書き込まれたパケット情報PIから、シーケンス番号SNとストアフラグSFに加え、さらに、加算値Wを抽出する。それ以外は、情報抽出部550と同様である。
セレクタ770は、第1の選択信号SEL1により示されるバッファに対応する情報抽出回路が抽出したシーケンス番号SNとストアフラグSFを比較器520と選択信号生成回路630に夫々出力すると共に、さらに、第1の選択信号SEL1により示されるバッファの1つ前のバッファに対応する情報抽出回路が抽出した加算値Wを比較器620に出力する。また、セレクタ770は、比較器520に出力したシーケンス番号SNを比較器722にも出力する。
選択信号生成回路730は、境界領域の検索に際して、ポインタ記憶回路726に記憶された各ポインタにより夫々示されるバッファのみを検索対象領域にし、ポインタにより示されていないバッファについての検索をスキップする。また、選択信号生成回路730は、第2の選択信号SEL2を出力する際に、第2の選択信号SEL2により示されるバッファが整列バッファ540の先頭のバッファ(バッファ0)以外であるときに、比較指示を示す比較制御信号を比較器724に出力し、第2の選択信号SEL2により示されるバッファが書込済領域であるときに、比較指示を示す比較制御信号を比較器724に出力する。また、比較器722と比較器724の比較結果に応じてポインタ生成/変更処理(ポインタを生成してポインタ記憶回路726への格納、既にあるポインタのシフトなど)を行う。他に関しては、選択信号生成回路530と同様である。
比較器724は、選択信号生成回路730から比較制御信号を受信すると、対象パケットのシーケンス番号SNが、セレクタ770からの加算値Wに一致するか否かを比較し、比較の結果選択信号生成回路730に返送する。なお、このとき、セレクタ770からの加算値Wは、対象パケットが書き込まれるバッファの1つ前のバッファに格納されている加算値Wである。すなわち、比較器724の比較結果は、対象パケットのパケット情報PIを書き込まれるバッファの1つ前のバッファに書き込まれたパケット情報PIが、対象パケットの1つ前に送信されたパケットのパケット情報PIであるか否かを示す。
比較器722は、選択信号生成回路730から比較制御信号を受信すると、セレクタ770からのシーケンス番号SNと、抽出回路710からの加算値Wを比較し、比較の結果を選択信号生成回路730に返送する。なお、このとき、抽出回路710からの加算値Wは、対象パケットの次に送信されたパケットのシーケンス番号に該当し、セレクタ770からのシーケンス番号SNは、第2の選択信号SEL2により示される領域に書き込まれていたシーケンス番号であり、対象パケットのパケット情報PIを書き込まれた後には、パケット情報PIを書き込まれたバッファの次のバッファに格納されている。
すなわち、比較器722の比較結果は、対象パケットのパケット情報PIが書き込まれた後に、当該バッファの次のバッファに格納されているパケット情報PIが、対象パケットの1つ後に送信されたパケットのパケット情報PIであるか否かを示す。
比較器722と比較器724の比較結果に応じたポインタ生成/変更処理は、第3の手法のときに詳しく説明したので、ここでは、さらなる詳細な説明を省略する。
勿論、本第3の実施の形態の受信装置における整列回路700は、第3の手法を具現化したものであるため、第3の手法により得られる効果を得ることができる。
なお、ポインタに基づいた第2の手法に関しては、上記の説明から簡単に具現化できるため、ここで第2の手法の具体的な実施例を省略する。
以上、実施の形態をもとに本発明を説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、上述した各実施の形態に対してさまざまな変更、増減、組合せを行ってもよい。これらの変更、増減、組合せが行われた変形例も本発明の範囲にあることは当業者に理解されるところである。
例えば、第2の実施の形態と第3の実施の形態において、加算値Wを直接パケット情報PIに加えているが、加算値Wを算出可能であれば、ペイロード長やパケット長などの値であってもよい。
また、上述した各実施の形態の受信装置は、整列回路500によりパケット情報の並替えを行い、パケット情報とパケットを別々にDMA転送しているが、例えば、整列回路500における整列バッファ540を受信バッファとして使用し、パケットそのものの格納順を送信順に並び替えると共に、並替え後に各パケットをメモリ470にDMA転送をするようにしてもよい。