以下、図面を参照しながら発明を実施するための最良の形態について詳細に説明する。
図1は、本実施形態におけるネットワークプロトコル処理装置の構成の一例を示すブロック図である。図1において、101はCPUであり、後述するROMに格納された制御プログラム(ソフトウェア)に従ってTCP/IPネットワークのプロトコル処理を実行する。102はROMであり、CPU101が実行するソフトウェアが格納されている。103はRAMであり、CPU101がプロトコル処理を実行時に、ワークエリアとして使用される。
104はMAC(メディアアクセス制御)であり、OSI参照モデルの第2層に相当するデータリンク層の一部である通信プロトコルである。105はPHY(物理層)であり、OSI参照モデルの第1層に相当するプロトコル処理及び電気信号を扱うハードウェアである。106はDMAC(Direct Memory Access Controller)であり、TCP/IPネットワーク通信で送受信するデータのRAM103とMAC104との間の転送を管轄する。107はバスであり、CPU101、ROM102、RAM103、MAC104、DMAC106を相互接続する。
尚、RAM103は安価なDRAM(オフチップ)で実現される場合が一般的であるが、より高速なオンチップSRAMで実現しても良い。しかし、オンチップSRAMは高価である。そのため、本実施形態で想定しているRAM103に格納するデータ全てを格納可能なサイズ分を搭載するのは難しい可能性もある。このような場合には、安価であるが低速なDRAMと、高価であるが高速なオンチップSRAMとの組み合わせで実現するのが適切である。
即ち、頻繁にアクセスするデータやネットワークプロトコル処理性能に大きく影響するデータなどを高速なオンチップSRAMに配置し、その他のデータをDRAMに配置するという形態である。本実施形態は、DRAM及びオンチップSRAM、その他の記憶媒体の何れで実現されても良く、全てを包含しRAM103と呼ぶこととする。
ここで、RAM103は、CPU101のワークエリアとして使用されるだけでなく、TCP/IPネットワークプロトコル処理の実行時に必要となるデータの格納領域としても使用される。そのデータには、TCP/IPネットワーク通信で送受信されるデータ、フラグメントブロックビットテーブル、フラグメントブロックビットテーブル管理情報のテーブルなどが含まれる。
尚、このフラグメントブロックビットテーブルをビットテーブルと呼び、フラグメントブロックビットテーブル管理情報のテーブルを管理テーブルと呼ぶ。また、管理テーブルに格納される各ビットテーブルの管理情報を管理エントリと呼ぶ。このビットテーブルはビットマップテーブルとも呼ばれる。
図2は、RAM103内のデータを模式的に表した図である。図2では、本発明を説明するために必要なデータのみを示し、ネットワークプロトコル処理を実現するために必要なデータは他にも存在するが、図示していない。不図示のデータは、例えばCPU101が処理するワークデータや送信IPデータグラム本体などのデータである。
図2において、201は受信データ領域であり、受信したIPデータグラムは一旦この領域201に格納される。202は管理テーブルであり、各ビットテーブルの管理情報である管理エントリが格納される。管理エントリは、関連付けられたビットテーブルと共に、主にリアセンブル処理の開始時に生成され、リアセンブル処理終了まで、リアセンブル処理対象のIPデータグラムの情報を保持する。
203はビットテーブル領域であり、ビットテーブル本体が格納される。全てのビットテーブルは、所定の管理エントリに1対1で関連付けられている。204はリアセンブルバッファであり、リアセンブル処理中のIPデータグラムのペイロードデータが格納される。
尚、このリアセンブルバッファ204には、リアセンブル処理中のIPデータグラムのペイロードデータが格納されるが、その格納方法には様々な選択肢がある。リアセンブル処理中のペイロードデータは、フラグメント前のペイロードデータに対して先頭から順番に到着する訳ではない。また、既に到着しているペイロードデータに重複したペイロードデータが後から到着することも考えられる。
そのため、一般的な格納方法としては、フラグメント前の最大ペイロードデータサイズである64Kバイト分のデータ領域をリアセンブル処理開始時に確保する。そして、受信したIPデータグラムのペイロードデータを適宜対応する部分に格納していくという方法がある。
また、他の格納方法としては、リンクリストを活用する方法もある。このリンクリストとは、細切れで格納されているデータに対し、所定のデータの後に続くデータの格納場所を示すリスト情報を別途管理することで、仮想的に一続きのデータに見せるという方法である。この方法のメリットは、予め64Kバイトという大きいデータ領域を確保することなく、到着したIPデータグラムを順番に関係なく空いている領域に格納していけば良いということである。この方法によれば、例えばフラグメント前のペイロードサイズが1Kバイトであった場合などは、64Kバイトものデータ領域を確保する必要が無く、メモリ領域を有効に活用できる。
一般的に、前者の方法は主にハードウェアでリアセンブル処理を行う場合に用いられ、後者の方法はソフトウェアでリアセンブル処理を行う場合に用いられている。
尚、リアセンブルバッファの管理方法は本発明には直接関係しないため、何れの方法でも、上述の方法以外でも最終的にフラグメント前のペイロードデータを再生成可能な方法であれば良く、その詳細は割愛する。
次に、管理テーブル202内の管理エントリと、ビットテーブル領域203内のビットテーブルの関係を、図3及び図4を用いて説明する。
図3は、管理テーブル202に格納されている管理エントリを詳細に示した図である。図3において、301は送信元アドレスであり、受信されたIPヘッダに格納されている送信元アドレス(Source Address)フィールドの値に一致する。302は宛先アドレスであり、同じくIPヘッダの宛先アドレス(Destination Address)に一致する。303は識別子であり、同じくIPヘッダの識別子(Identification)に一致する。
送信元アドレス301、宛先アドレス302、識別子303の各情報は、リアセンブル処理対象のIPデータグラムを特定するために使用される。これは、IPデータグラムが送信元の機器やルータによってフラグメント化される場合、フラグメント前のIPデータグラムの3フィールドがフラグメント後のIPデータグラムのIPヘッダの3フィールドにコピーされるためである。
そのため、受信機器では、上述の3フィールドが同一であるIPデータグラムに対してリアセンブル処理を行わなければならず、3フィールドが一致しないIPデータグラムのリアセンブル処理は、別々の処理として実施しなければならない。
本実施形態では、複数のIPデータグラムに対するリアセンブル処理を並列に行うことを想定している。そこで、管理エントリは、関連付けられたビットテーブルが何れのIPデータグラムのリアセンブル処理に使用されているかを特定するために、3フィールドの情報を保持している。
304はビットテーブル単位サイズであり、関連付けられたビットテーブルの1ビットが何バイトに相当しているかを示す情報である。305はビットテーブルポインタであり、この管理エントリに関連付けられたビットテーブル領域203の格納先アドレスを示す情報である。
図4は、ビットテーブル領域203に格納されているビットテーブルを詳細に示した図である。図4において、401は初期化時のビットテーブル本体であり、402は所定のリアセンブル処理中のビットテーブル本体である。ビットテーブルのビット401−1〜401−5、402−1〜402−5は、それぞれペイロードデータが受信済みか否かを示し、“1”がセットされている場合は受信済みを示す。これに対して、“0”がセットされている場合は未受信であることを示す。また、ビットテーブルの初期化時は、全てのペイロードデータが未受信であるため、全ビットが“0”にセットされている。
以下、ビットテーブル単位サイズ304とビットテーブルの関係を説明する。尚、管理エントリのビットテーブル単位サイズ304を1Kバイト(=1024バイト)とする。また、管理エントリに関連付けられたビットテーブル(ビットテーブルポインタ305が示す格納先アドレスのビットテーブル)を図4に示す402の処理中とする。この処理中402における402−1〜402−5は、それぞれ1Kバイト分のペイロードデータに対応する。
処理中402において、402−1は“1”がセットされているので、フラグメント前のIPデータグラムのペイロードの内、先頭から1Kバイト分のデータが既に受信されていることを示す。また、402−4も“1”がセットされているので、フラグメント前のIPデータグラムのペイロードの内、先頭からのオフセット3Kバイトからの1Kバイト分のデータが既に受信されていることを示す。
一方、402−2は“0”がセットされているので、フラグメント前のIPデータグラムのペイロードの内、先頭からのオフセット1Kバイトの1Kバイト分のデータが未受信であることを示す。402−3、402−5も402−2と同様に、該当するオフセットの1Kバイト分のデータがまだ受信されていないことを示す。
次に、管理エントリ及びビットテーブルに対する処理内容を、図5〜図8を用いて説明する。管理エントリ及びビットテーブルに対して行う処理は、以下の4つである。また、これらの処理は、CPU101によって実行される。
<リアセンブルリセット処理>リアセンブル処理開始時と、ビットテーブルの単位サイズの変更時に、管理エントリ及びビットテーブルを初期化する
<リアセンブル通常処理>フラグメント化されたIPデータグラムの受信時に、当該IPデータグラムのペイロードに基づいてビットテーブルの状態を更新する
<リアセンブルターミネート処理>リアセンブル処理終了時に、管理エントリ及びビットテーブルを解放する
<ビットテーブル移行処理>ビットテーブルの単位サイズ変更時に、旧ビットテーブルの受信状況の情報を新規ビットテーブルに反映する。
図5は、リアセンブルリセット処理の処理手順を示すフローチャートである。尚、この処理は、リアセンブル処理開始時とビットテーブルの単位サイズの変更時に行われるが、何れもフラグメント化されたIPデータグラム受信が前提となる。また、ビットテーブル単位サイズ304も、この処理の実行前に決定されており、受信したIPデータグラムのIPヘッダ情報、ビットテーブル単位サイズが引数(Header、Size)として渡される。
まず、ステップS501で、CPU101は管理テーブル202に対して、新規の管理エントリを作成する。次に、ステップS502で、新規に作成した管理エントリの送信元アドレス301、宛先アドレス302、識別子303に、引数のHeaderの対象情報(送信元アドレス、宛先アドレス、識別子)を設定する。そして、ステップS503で、新規に作成した管理エントリのビットテーブル単位サイズ304に引数のSizeを設定する。
次に、ステップS504で、設定されたビットテーブル単位サイズ304から、ビットテーブルサイズを取得する。具体的には、IPデータグラムの最大ペイロードサイズ64Kバイトを単位サイズで除算することで算出する。
例えば、設定されたビットテーブル単位サイズ304が1Kバイトであるなら、以下の計算式からビットテーブルサイズは64ビットと算出される。
64Kバイト÷1Kバイト=64ビット
また、別の例として64KバイトがSize(ビットテーブル単位サイズ)で割り切れない場合もある。その場合は、小数点以下を切り上げることでビットテーブルサイズを算出する。例えば、単位サイズが3Kバイトであれば、除算の解は21.3333…であるため、小数点以下を切り上げ22ビットと算出される。
次に、ステップS505で、ステップS504で取得したビットテーブルサイズを基に、ビットテーブル領域203にビットテーブルを生成する。そして、ステップS506で、生成したビットテーブルを初期化する。ビットテーブルの初期化は、図2に示すビットテーブル領域203の全てのビットを“0”にセットすることで行う。
最後に、ステップS507で、ステップS501で新規作成した管理エントリのビットテーブルポインタ305に生成したビットテーブルの格納先アドレスを設定し、リアセンブルリセット処理を完了となる。
図6は、リアセンブル通常処理の処理手順を示すフローチャートである。尚、この処理は、フラグメント化されたIPデータグラムの受信時に行われる。また、詳細は後述するが、IPデータグラム受信時に、受信したIPデータグラムのIPヘッダ情報と合致する管理エントリが存在するか否かを確認するため、管理テーブル202の検索が行われる。検索の結果、合致する管理エントリが存在する場合は、受信したIPデータグラムのIPヘッダ情報、合致する管理エントリが引数(Header、Entry)として渡される。合致する管理エントリが存在しない場合には、上述のリアセンブルリセット処理(図5)により新規に管理エントリが作成され、その管理エントリが引数(Entry)として渡される。
また、Headerの解析は予め行われており、受信したIPデータグラムのペイロードデータがビットテーブルの単位サイズに合っており、ビットテーブルに受信状況を正確に反映できることを前提とする。具体的には、以下の2点の条件に合致していることである。
1点目は、受信したIPデータグラムのペイロードサイズがビットテーブルの単位サイズと、整数比N:1(ペイロードサイズ:単位サイズ)の関係が保たれている。但し、受信したIPデータグラムがフラグメント前のペイロードデータにおける終端のペイロードデータを持つIPデータグラム(以下、終端IPデータグラムと呼ぶ)である場合は対象外とする。
2点目は、受信したIPデータグラムのフラグメント前のペイロードデータにおけるオフセット(開始位置)が、同じようにビットテーブルの単位サイズと、整数比N:1(オフセット:単位サイズ)の関係が保たれていることである。
上記2点の条件を満足することで、ペイロードデータの受信状況をビットテーブルに反映する際に、対応するビットが存在しないという状況に陥らない。
まず、ステップS601で、CPU101は、引数のEntryのビットテーブルポインタ305から、関連付けられたビットテーブルの格納場所を特定する。そして、ステップS602で、引数のHeaderから受信したIPデータグラムのペイロードデータが、全ペイロードデータのどこに位置するデータであるかを示すオフセットとペイロードサイズを取得する。
ここで、オフセットは、Headerにおけるフラグメントオフセット(Fragment Offset)フィールドが示す値そのものである。また、ペイロードサイズは、HeaderにおけるIHLフィールド、全パケット長(Total Length)フィールドから算出する。IHLフィールドはIPデータグラムにおけるヘッダのワード数(1ワード=4バイト)であり、全パケット長フィールドはIPデータグラム全体の長さ(バイト数)である。即ち、ペイロードサイズは、以下の計算式で算出することができる。
ペイロードサイズ(バイト)=全パケット長フィールド−(IHLフィールド×4)
例えば、全パケット長フィールドが1044バイトであり、IHLフィールドが5である場合には、以下の計算式からペイロードサイズは1Kバイトと算出される。
1044−(5×4)=1024バイト=1Kバイト
上述の方法でオフセットとペイロードサイズを取得した後、ステップS603で、特定したビットテーブルに対し、フラグメント前のペイロードデータ内の受信した部分に対応するビットに“1”をセットする。
例えば、ビットテーブルの単位サイズが1Kバイトであり、オフセットが0(ゼロ)、ペイロードサイズが3Kバイトであったとする。この場合は、ビットテーブルの先頭から3ビット分に“1”がセットされる。
また、別の例として、ビットテーブルの単位サイズが512バイトであり、オフセットが2Kバイト、ペイロードサイズが1Kバイトであったとする。この場合は、ビットテーブルの5ビット目から2ビット分に“1”がセットされる。
ステップS603の処理において注意すべき点がある。それは、受信したIPデータグラムのペイロードサイズがビットテーブルの単位サイズの整数倍ではない場合、つまり、端数(余り)を持つ場合である。リアセンブル通常処理の前では、ビットテーブルの単位サイズに合わないペイロードデータサイズ及びオフセットではないことが前提となっているため、通常ペイロードサイズはビットテーブルの単位サイズの整数倍となる。
しかしながら、受信したIPデータグラムが終端IPデータグラムである場合は、端数を持つ可能性がある。この端数の処理に関しては、ステップS605の終端処理で行うため、ステップS603では端数の処理は行わない。
よって、ビットテーブルの単位サイズが512バイト、オフセットが2Kバイト、ペイロードサイズが1025バイト(=1Kバイト+1バイト)の場合、上述の例と同様に、ビットテーブルの5ビット目から2ビット分に“1”がセットされる。そして、端数の1バイトの処理はステップS605で行う。
ステップS603でビットテーブルの更新を行った後、ステップS604で、受信したIPデータグラムが終端IPデータグラムであるか否かを確認する。具体的には、HeaderのMF(More Fragment)フラグが“1”であれば後続のデータグラムが存在するため、終端IPデータグラムではないと判断する。また、“0”であれば後続のデータグラムが存在しない、つまり、終端IPデータグラムであると判断する。
ここで、終端IPデータグラムであると判断した場合は、ステップS605で、ビットテーブルの終端処理を行う。具体的には、ビットテーブルにおける受信したIPデータグラムに対応する部分以降のビットを全て“1”にセットする。こうすることで、ビットテーブルは全てのビットが1にセットされたときに全てのフラグメントされたIPデータグラムを受信した、つまり、リアセンブル処理が完了したと判断できる。
尚、ビットテーブルの終端処理方法は、上述の方法に限られるわけではなく、他の方法で実現しても良い。即ち、リアセンブル処理が完了したと明確に判断可能な方法であれば、何れの実現方法であっても本発明を適用できる。
また、ステップS603において、無視した終端IPデータグラムにおける端数の処理も、ステップS605で併せて行う。特に、特殊な処理を行うわけではなく、上述の終端処理と同様に、ビットテーブルにおける受信したIPデータグラムの端数が含まれる部分以降のビットを全て“1”にセットする。こうすることで、端数の有無に関係なく終端処理を行うことができる。
このステップS605でビットテーブルの終端処理を行った場合、ステップS604で終端IPデータグラムではないと判断した場合の何れにおいても、リアセンブル通常処理は完了となる。
図7は、リアセンブルターミネート処理の処理手順を示すフローチャートである。尚、この処理は、リアセンブル処理終了時に行われる。この処理の実行前には、リアセンブル通常処理(図6)が実行され、更にリアセンブル処理が完了したか否かの判定が行われ、完了したと判定されていることを前提とする。リアセンブル処理が完了したか否かはリアセンブル通常処理を実行した管理エントリに基づいて判定する。そのため、この処理の実行前にはリアセンブル処理が完了した管理エントリが特定されている。また、この処理には、当該管理エントリが引数のEntryとして渡される。
まず、ステップS701で、CPU101は、引数(Entry)として渡された管理エントリのビットテーブルポインタ305から、関連付けられたビットテーブルの格納場所を特定する。そして、ステップS702で、特定したビットテーブルをビットテーブル領域203から解放する。ここで、解放とは、解放対象のビットテーブルの格納場所をその後、自由に使用可能にすることを意味する。より具体的には、リアセンブルリセット処理のステップS505で、ビットテーブルを生成する際に、解放したビットテーブルの領域を使用可能にするという意味である。
最後に、ステップS703で、引数(Entry)の管理エントリを管理テーブル202から解放する。この処理でリアセンブルターミネート処理は完了となる。
図8は、ビットテーブル移行処理の処理手順を示すフローチャートである。尚、この処理は、ビットテーブルの単位サイズ変更時に行われる。尚、この処理の実行前には、単位サイズ変更前のビットテーブルの管理情報が格納された管理エントリ(以下、旧管理エントリと呼ぶ)が特定されている。また、単位サイズ変更後のビットテーブルの管理情報が格納された管理エントリ(以下、新管理エントリと呼ぶ)も特定されている。
また、上述の旧管理エントリのビットテーブルポインタ305に関連付けられたビットテーブルを旧ビットテーブルと呼び、ビットテーブル単位サイズ304を旧単位サイズと呼ぶ。同様に、新管理エントリのビットテーブルポインタ305に関連付けられたビットテーブルを新ビットテーブルと呼び、ビットテーブル単位サイズ304を新単位サイズと呼ぶ。
詳細は後述するが、新単位サイズは旧単位サイズに対して、整数比の1:N、もしくはN:1の関係が成り立つように設定される。例えば、N:1(旧単位サイズ:新単位サイズ)の場合、旧単位サイズが1Kバイトであれば、新単位サイズは512、256、128、64、32、16、8バイトの何れかとなる。
ビットテーブルの単位サイズは、フラグメント化されたIPデータグラムのペイロードの最小値8バイトに依存するため、8バイト未満の値が設定されることはない。
一方、1:N(旧単位サイズ:新単位サイズ)の場合、旧ビットテーブルの受信状況を新ビットテーブルに移行できない可能性がある。例えば、旧単位サイズが512バイト、新単位サイズが1Kバイトであり、受信状況として先頭の512バイト分のペイロードデータのみ受信していた場合を考える。この場合、先頭の512バイト分のペイロードデータは、新ビットテーブルの先頭の1ビットに対応させることができない。即ち、当該ビットを“1”にセットすると単位サイズの1Kバイト分のペイロードデータを受信していることを意味してしまうからである。
また、“0”をセットした場合は、未受信となり512バイト分のペイロードデータを受信していないことになってしまう。
本実施形態では、上述のように旧ビットテーブルが示す受信状況が、新ビットテーブルに移行できないような旧単位サイズ及び新単位サイズは、本ビットテーブル移行処理には与えられないものとする。つまり、上述したように旧単位サイズが512バイト、新単位サイズが1Kバイトである場合、旧ビットテーブルが示す受信状況は受信済み部分が1Kバイト単位であること、かつ未受信部分が1Kバイト単位であることが前提となる。
また、新管理エントリは、この処理の前にリアセンブルリセット処理のステップS501で作成され、新ビットテーブルはリアセンブルリセット処理のステップS506で初期化されている。
尚、このビットテーブル移行処理は、上述のように、新単位サイズと旧単位サイズとが整数比の関係を持ち、旧管理エントリ、新管理エントリが引数のOldEntry、NewEntryとして渡される。
まず、ステップS801で、CPU101は、引数(OldEntry)として渡された旧管理エントリのビットテーブルポインタ305から、旧ビットテーブルの格納場所を特定する。次に、ステップS802で、引数(NewEntry)として渡された新管理エントリのビットテーブルポインタ305から、新ビットテーブルの格納場所を特定する。
最後に、ステップS803で、旧ビットテーブルのペイロードデータの受信状況を新ビットテーブルに移行する。受信状況の移行は、旧ビットテーブル内で“1”がセットされている、つまりフラグメント前のペイロードデータの内受信済みの部分の情報に基づいて新ビットテーブル内の該当ビットに“1”をセットすることで行う。
このステップS803の処理を具体例を挙げて説明する。まず、旧単位サイズと新単位サイズがN:1(旧単位サイズ:新単位サイズ)の関係の場合を説明する。
ここで、旧単位サイズが1Kバイトであり、新単位サイズが512バイトであったとする。また、旧ビットテーブルは、先頭から3ビット分に“1”がセットされていたとする。この場合、ペイロードデータは先頭から3Kバイト分のデータが受信済みであることを意味する。よって、新ビットテーブルへの移行は、先頭から6ビット分(3Kバイト=512バイト×6)に“1”をセットする。
また、別の例として、旧単位サイズが1Kバイトであり、新単位サイズが512バイト、旧ビットテーブルは5ビット目から2ビット分に“1”がセットされていたとする。この場合、ペイロードデータは先頭からのオフセット4Kバイトから2Kバイト分のデータが受信済みであることを意味する。よって、新ビットテーブルへの移行は、9ビット目から4ビット分(2Kバイト=512バイト×4)に“1”をセットする。
次に、旧単位サイズと新単位サイズが1:N(旧単位サイズ:新単位サイズ)の関係の場合を説明する。ここで、旧単位サイズが512バイトであり、新単位サイズが1Kバイトであったとする。また、旧ビットテーブルは先頭から4ビット分に“1”がセットされていたとする。この場合、ペイロードデータは先頭から2Kバイト分のデータが受信済みであることを意味する。
よって、新ビットテーブルへの移行は、先頭から2ビット分(2Kバイト=1Kバイト×2)に“1”をセットする。上述の前提から“1”がセットされているビットが連続する場合、2ビット単位での連続ビットとなる。また、“0”がセットされているビットが連続する場合も同様に、2ビット単位での連続ビットとなり、新ビットテーブルへの移行の際に所定のビットにマッピング不可になることはない。
このステップS803でビットテーブル情報の移行を行うことで、ビットテーブル移行処理は完了となる。
ここで、ネットワークプロトコル処理装置におけるIPデータグラムを受信した場合の処理手順を、図9を用いて説明する。尚、この処理は、IPデータグラムを受信したことをトリガーとしてCPU101によって実行される。また、受信したIPデータグラムがフラグメント化されていた場合、リアセンブル処理を実行すべく、上述した4つの処理が実行される。即ち、上述のリアセンブルリセット処理(図5)、リアセンブル通常処理(図6)、リアセンブルターミネート処理(図7)、及びビットテーブル移行処理(図8)が実行される。
図9は、本実施形態におけるIPデータグラムの受信処理を示すフローチャートである。まず、ステップS901で、IPデータグラムを受信する。IPデータグラムは、外部からPHY105を通して一旦MAC104に受信される。その後、DMAC106によりRAM103内の受信データ領域201にバス107を介して転送される。このとき、受信データの転送はDMAC106を用いずに、CPU101が受信データ領域201に転送しても良い。
次に、ステップS902で、CPU101は、受信したIPデータグラムのIPヘッダを解析する。尚、ステップS901で受信したIPデータグラムを受信IPデータグラムと呼び、受信IPデータグラムのIPヘッダを受信IPヘッダ、受信IPデータグラムのペイロードデータを受信ペイロードと呼ぶ。また、リアセンブル通常処理の説明と同じく、フラグメント前のペイロードにおける終端部分のペイロードを持つIPデータグラムを終端IPデータグラムと呼ぶ。
次に、ステップS903では、ステップS902で行った受信IPヘッダの解析結果に基づいて受信IPデータグラムがフラグメント化されているか否かを判定する。ここでは、受信IPヘッダのMF(More Fragment)フラグ、フラグメントオフセット(Fragment Offset)フィールドにより判定する。
具体的には、まずMFフラグがセット(“1”の場合)されているか否かを確認する。MFフラグがセットされている場合は、受信IPデータグラムは終端IPデータグラムではないことを意味する。MFフラグがセットされていない場合、受信IPデータグラムはフラグメント化されていないか、或いは終端IPデータグラムであることを意味する。
このMFフラグがセットされていない場合は、更にフラグメントオフセットフィールドを確認する。このフラグメントオフセットフィールドが“0”の場合は、受信IPデータグラムはフラグメント化されていないことを意味する。しかし、フラグメントオフセットフィールドが“0”以外の値の場合には、受信IPデータグラムは終端IPデータグラムであることを意味する。
よって、MFフラグがセットされている場合は、受信したIPデータグラムはフラグメント化されていると判断する。また、MFフラグがセットされておらず、かつフラグメントオフセットフィールドが“0”以外の値である場合は、受信したIPデータグラムはフラグメント化されていると判断する。そして、MFフラグがセットされておらず、かつフラグメントオフセットフィールドが“0”である場合、受信IPデータグラムはフラグメント化されていない通常のIPデータグラムであると判断する。
上述のステップS903で、受信IPデータグラムがフラグメント化されていると判断した場合は、ステップS904へ処理を進め、管理テーブル202を検索し、受信IPヘッダに合致する管理エントリが存在するか否かを確認する。この処理は、受信IPヘッダ内の送信元アドレス、宛先アドレス、識別子が、それぞれ管理エントリの送信元アドレス301、宛先アドレス302、及び識別子303と一致するかを確認する処理である。
ここで、上記3項目が一致する管理エントリが存在しない場合、受信IPデータグラムに対するリアセンブル処理はまだ開始していない、つまり受信IPヘッダを持つIPデータグラムのリアセンブル処理を開始する必要があることを意味する。そのため、ステップS905で、リアセンブルリセット処理に与えるためのビットテーブル単位サイズを決定する。
次に、ステップS905のビットテーブル単位サイズの決定方法を説明する。ビットテーブル単位サイズは、ステップS901で受信したIPデータグラムのペイロードサイズと、ペイロードデータのオフセットの公約数の内、何れかに決定する。即ち、最初に受信したフラグメントIPデータグラムのペイロードサイズと、そのペイロードのフラグメント前のペイロードデータにおけるオフセットの公約数の内、何れかを単位サイズに決定する。例えば、ペイロードサイズが512バイトであり、オフセットが3Kバイトであった場合、512、256、128、64、32、16、8バイトの何れかである。ビットテーブルの単位サイズは、フラグメント化されたIPデータグラムのペイロードの最小値8バイトに依存するため、8バイト未満の値が設定されることはない。当然、ビットテーブルの単位サイズは、大きければ大きいほどビットテーブル本体のサイズを小さく抑えることができるため、上記の例では最大公約数である512バイトを選択した場合が最もメモリ使用量を削減することができる。
尚、受信IPデータグラムが終端IPデータグラムであった場合は、別の処理を行うという構成にしても良い。終端IPデータグラムが持つペイロードサイズは、フラグメント前のペイロードデータを所定のサイズで分割した端数(余り)である。そこで、終端IPデータグラムのペイロードサイズを単位サイズとしてビットテーブルを生成してしまうと、後続のIPデータグラムを受信した際にビットテーブルの単位サイズを変更しなければならないという状況に陥ることが容易に想定される。
よって、例えば終端IPデータグラムのペイロードサイズに関わらず、そのオフセット(開始位置)から他のIPデータグラムが持つペイロードサイズを予測して単位サイズを決定するという方法を取っても良い。
また、例えば終端IPデータグラムである場合には、処理を保留にするという方法を取っても良い。つまり、後続の終端ではないIPデータグラムを受信したときに、そのペイロードサイズを単位サイズとしてビットテーブルを構成した後、改めて終端IPデータグラムの処理を再開するという方法である。上記何れの方法、またその他の方法であっても、ステップS905で単位サイズを決定できれば、本発明を適用可能である。
次に、ビットテーブル単位サイズを決定した後に、ステップS906で、リアセンブルリセット処理を実行する。このとき、引数のSizeに、ステップS905で決定したビットテーブル単位サイズを与える。また、引数のHeaderには、受信したIPヘッダを与える。このステップS906、リアセンブルリセット処理を実行した後、リアセンブル通常処理へ進む。
一方、ステップS904で、受信IPヘッダに合致する管理エントリが存在した場合は、ステップS907へ処理を進める。この場合、受信IPデータグラムに対するリアセンブル処理は既に開始されていることを意味する。そこで、ステップS907では、既存のビットテーブルの単位サイズを変更する必要があるか否かをチェックし、必要がある場合は、ステップS908へ処理を進め、変更するビットテーブル単位サイズを取得する。
尚、ステップS904で合致した管理エントリを既存管理エントリ、既存管理エントリに関連付けられたビットテーブルを既存ビットテーブル、既存ビットテーブルの単位サイズを既存単位サイズと呼ぶ。また、ステップS909でリアセンブルリセット処理を行うビットテーブルを新ビットテーブル、ステップS908で決定するビットテーブルの単位サイズを新単位サイズと呼ぶ。
ここで、上述のステップS907の既存単位サイズ変更の必要性判断方法、ステップS908の既存単位サイズの決定方法を説明する。
ステップS907では、受信IPヘッダのMFビットがセットされていない、つまり、終端IPデータグラムである場合は、既存の単位サイズを変更する必要性はないと判断する。一方、受信IPデータグラムが終端IPデータグラムではない場合で、かつ、以下の何れかの条件に合致する場合、既存の単位サイズを変更する必要があると判断する。
<条件A>受信ペイロードのデータサイズか、オフセット(フラグメント前のペイロードデータにおける開始位置)の何れか一つが、既存単位サイズの整数倍ではない場合。即ち、受信したフラグメントIPデータグラムのペイロードサイズと、フラグメント前のペイロードデータにおけるオフセットの両方が、既存単位サイズの整数倍でない場合。これは、受信したフラグメントIPデータグラムのペイロードデータが、所定の単位サイズで生成された既存のビットマップテーブルへ受信状況を設定不可能な場合である。
<条件B>既存ビットテーブルの“1”が連続する部分の連続ビット数を、先頭から順にN1_1、N1_2、N1_3、…とし、これらの整数の最大公約数をN1_GCDとする。また、“0”が連続する部分の連続ビット数を、先頭から順にN0_1、N0_2、N0_3、…とし、これらの整数の最大公約数をN0_GCDとする。更に、N1_GCD及びN0_GCDの二つの整数の最大公約数をN01_GCDとする。このとき、N01_GCDの1以外の所定の約数をMとし、受信ペイロードのデータサイズとオフセットが次の条件を満たすMが存在する。受信ペイロードのデータサイズが(M×変更前のビットテーブル単位サイズ)の整数倍であり、かつ受信ペイロードのオフセットが(M×変更前のビットテーブル単位サイズ)の整数倍である場合。
次に、上記条件A、条件Bに合致する具体的な例を用いてステップS908での新単位サイズの決定方法を説明する。
上記条件Aに合致する場合の例として、既存単位サイズが1Kバイトであり、受信ペイロードのデータサイズが512バイトという場合が考えられる。この場合、受信ペイロードデータが既存単位サイズより小さいため、受信ペイロードデータを既存ビットテーブルの所定のビットに対応させることができない。
また、この例で更に、受信ペイロードのオフセットが768バイトという場合が考えられる。この場合、受信ペイロードデータが既存ビットテーブルの所定のビットに対応するデータ領域の途中から開始することになり、受信ペイロードデータを既存ビットテーブルの所定のビットに対応させることができない。
よって、何れの例においても、ステップS908で決定する新単位サイズは、既存単位サイズより小さく設定する必要がある。上記条件Aに合致する場合のステップS908における新単位サイズの決定方法は、受信ペイロードのデータサイズ、受信ペイロードのオフセット、既存単位サイズの3つの整数の公約数を求めることである。即ち、受信したフラグメントIPデータグラムのペイロードサイズと、そのペイロードデータのフラグメント前のペイロードデータにおけるオフセットと、既存単位サイズに基づき、ビットマップテーブルの単位サイズを決定することである。受信ペイロードのデータサイズと変更前のビットテーブルの単位サイズの公約数を単位サイズとするビットテーブルであれば、受信ペイロードデータをビットテーブルの所定のビットに対応させることができる。
また、受信ペイロードのオフセットと変更前のビットテーブルの単位サイズの公約数を単位サイズとするビットテーブルであれば、受信ペイロードデータがビットテーブルの所定のビットに対応するデータ領域の途中から開始されることはなくなる。従って、所定のビットに対応されることができる。更に、既存単位サイズが新単位サイズの整数倍であるため、既存ビットテーブルの受信状況は新ビットテーブルに正確に移行することができる。
上述した例では、受信ペイロードサイズ512バイトと、受信ペイロードのオフセット768バイト、変更前のビットテーブルの単位サイズ1Kバイトの3つの整数の公約数である。つまり、256バイト、128バイト、64バイト、32バイト、16バイト、8バイトの何れかである。ビットテーブルの単位サイズは、フラグメントされたIPデータグラムのペイロードの最小値8バイトに依存するため、8バイト未満の値が設定されることはない。当然、ビットテーブルの単位サイズは、大きければ大きいほどビットテーブル本体のサイズを小さく抑えることができるため、上述した例では最大公約数である256バイトを選択した場合が最もメモリ使用量を削減することができる。
次に、上記条件Bに合致する場合の例として、既存単位サイズが1Kバイトで、図10に示す受信状況で、受信ペイロードのデータサイズが4Kバイト、受信ペイロードのオフセットが6Kバイトである場合が考えられる。
図10において、1001は既存ビットテーブル本体であり、単位サイズが1Kバイトであるため、64ビットから構成されている。ビットテーブル1001の左端がペイロードデータの先頭を意味し、右端が終端を意味する。このビットテーブル1001において、“1”(受信済み)がセットされているビットが連続する部分は1010及び1012の2箇所である。1010は“1”が連続した8ビットであり、1012は“1”が連続した16ビットである。
一方、“0”(未受信)がセットされているビットが連続する部分は1011及び1013の、2箇所である。1011は“0”が連続した4ビットであり、1013は“0”が連続した36ビットである。上記条件Bにおいて、N1_1=8、N1_2=16となり、N1_GCD=8(8と16の最大公約数)となる。一方、N0_1=4、N0_2=32となり、N0_GCD=4(4と32の最大公約数)となる。そして、N1_GCD(=8)とN0_GCD(=4)から、N01_GCD=4(4と8の最大公約数)となる。
ここで、N01_GCD(=4)の約数Mを考えると、M=4、2、1の何れかであることが分かる。これは、ビットテーブル1001は、単位サイズをM倍に変更することが可能であることを意味している。M=1の場合は、単位サイズが変更されないため、成り立つことは自明である。
M=4及び2の場合に、仮にビットテーブル1001の単位サイズを変更した場合の変更後のビットテーブルを図11に示す。図11において、1101はM=4とした場合、つまり単位サイズを4Kバイトに変更した場合のビットテーブル本体を示している。1102はM=2とした場合(単位サイズ=2Kバイト)のビットテーブル本体である。
図11において、1110及び1112は“1”(受信済み)がセットされているビットが連続する部分である。1110は先頭からの連続した2ビットであり、変更前のビットテーブル1001の同じく先頭から連続した8ビット1010に対応する。つまり、ビットテーブル単位サイズが4倍になっているため、連続したビット数は4分の1になっているが、受信状況は何れも先頭からの8Kバイト分のペイロードデータが受信済みであることを示している。また、1112(図11におけるM=4の場合の“1”が連続した4ビット)と1012(図10における“1”が連続した16ビット)にも同じことが言える。
一方、1111及び1112は“0”(未受信)がセットされているビットが連続する部分である。1111は3ビット目からの連続した1ビットであり、変更前のビットテーブル1001の9ビット目からの連続した4ビット1011に対応する。つまり、ビットテーブル単位サイズが4倍になっているため、連続したビット数は4分の1になっているが、受信状況は何れもオフセット8Kバイトからの4Kバイト分のペイロードデータが未受信であることを示している。また、1113(図11におけるM=4の場合の“0”が連続した8ビット)と1013(図10における“0”が連続した32ビット)にも同じことが言える。
よって、ビットテーブル1001と、単位サイズを4倍として仮に変更した場合のビットテーブル1101は、同じ受信状況を示していることとなる。同様に、ビットテーブル1001と、単位サイズを2倍として仮に変更した場合のビットテーブル1102も同じ受信状況を示していると言える。即ち、ビットテーブル1001はN01_GCD(=4)の約数Mに対し、単位サイズをM倍に変更しても、受信状況を移行できることが言える。
尚、受信状況だけが移行できても、受信ペイロードデータが新ビットテーブルの所定のビットにマッピングできなければ意味がない。受信したIPデータグラムのペイロードデータを所定のビットにマッピングするには、上記条件Aで説明したように、新単位サイズが受信ペイロードのデータサイズ、受信ペイロードのオフセット、既存単位サイズの3つの整数の公約数となっている必要がある。そのため、条件BではN01_GCDの約数Mの内、受信ペイロードのデータサイズが(M×既存単位サイズ)の整数倍であり、かつ受信ペイロードのオフセットが(M×既存単位サイズ)の整数倍であるという二つの条件を満たすことが必要となる。ここで、(M×既存単位サイズ)は新単位サイズを示しており、ステップ508における新単位サイズの決定方法は、上記条件を満たすMを求め、M×既存単位サイズを算出することであると言い換えることができる。
更に、上述の例で、受信ペイロードサイズが4Kバイト、受信ペイロードのオフセットが6Kバイトであったとする。この場合、M=4とすると新単位サイズは4Kバイトとなり、受信ペイロードのオフセットが4Kバイトの整数倍ではないことから上記条件に合致しない。M=2とすると新単位サイズは2Kバイトとなり、受信ペイロードサイズ及び受信ペイロードのオフセットが何れも2Kバイトの整数倍で上記条件に合致する。よって、ステップS908では新単位サイズとして2Kバイトが算出される。
ここで、ステップS907の判定において、受信したIPデータグラムが終端IPデータグラムではない場合で、かつ、上記条件Bに合致した場合でも、変更の必要性はないと判断しても良い。受信ペイロードデータの受信状況は、既存ビットテーブルで正常に管理可能であるが、ビットテーブルサイズの縮小を目的として、より大きい単位サイズへ変更する処理を行うことができる状況にあるか否かを示している。よって、上記条件に合致した場合にビットテーブル単位サイズを変更し、ビットテーブルサイズを縮小することによるメモリ使用量削減効果と、ビットテーブル変更によるCPU101に対する負荷増大の2つに鑑みて、何れの判断を行っても良い。
上述したように、ステップS907で、既存単位サイズを変更する必要があるか否かをチェックし、必要がある場合にはステップS908で新単位サイズを取得する。そして、ステップS909で、リアセンブルリセット処理を実行する。このとき、引数のSize(ビットテーブル単位サイズ)にはステップS908で決定した新単位サイズを与える。また、引数のHeader(IPヘッダ)には、受信IPヘッダを与える。このステップS909でリアセンブルリセット処理を実行することにより、単位サイズが新単位サイズに設定された新ビットテーブルと新ビットテーブルが関連付けられた管理エントリが生成される。
その後、ステップS910で、ビットテーブル移行処理を実行する。このとき、引数のOldEntryには既存管理エントリを与え、引数のNewEntryにはステップS909で生成された管理エントリを与える。このステップS910でビットテーブル移行処理を実行することにより、既存ビットテーブルのペイロードデータ受信状況が、新ビットテーブルに移行される。
続くステップS911で、リアセンブルターミネート処理を実行し、既存管理エントリ、既存管理エントリに関連付けられた既存ビットテーブルを解放する。尚、リアセンブルターミネート処理は、引数のEntryに既存管理エントリを与えることで実行する。
次に、ステップS912でリアセンブル通常処理を実行する。このとき、引数のEntryには受信IPデータグラムの管理エントリを与える。ここで、ステップS906から処理を進めてきた場合は、ステップS904で合致した管理エントリを意味する。ステップS907で既存単位サイズを変更する必要はないと判断した場合も同様に、ステップS904で合致した管理エントリを与える。一方、ステップS911から処理を進めてきた場合は、ステップS910で生成した管理エントリを与える。また、引数のHeaderには、受信IPヘッダを与える。
続くステップS913で、リアセンブル処理が完了したか、つまりフラグメントされたIPデータグラムのペイロードデータを全て受信したか否かを確認する。リアセンブル処理完了は、現在の管理エントリに関連付けられたビットテーブルのビットが全て“1”であるか否かを確認することで行う。
但し、リアセンブル通常処理のステップS906(ビットテーブルに対する終端処理)において、上述した方法で終端処理を行っていなかった場合は、この限りではない。上述した終端処理とは、受信したIPデータグラムに対応する部分以降のビットを全て“1”にセットするというものである。何れにしても、リアセンブル通常処理で行った終端処理に応じてリアセンブル処理が完了したか否かを確認すれば良い。
ステップS913でリアセンブル処理は未完了と判断した場合は、この処理を完了し、次のIPデータグラムの受信で再度処理を行う。しかし、リアセンブル処理を完了したと判断した場合は、ステップS914へ処理を進め、リアセンブルターミネート処理を実行する。このとき、引数のEntryには現在の管理エントリを与える。このリアセンブルターミネート処理により管理エントリ、管理エントリに関連付けられたビットテーブルが解放される。その後、ステップS915では、リアセンブル処理が完了したフラグメント前のペイロードデータを上位層に受け渡す。
一方、上述のステップS903で受信したIPデータグラムがフラグメントされていないと判断した場合は、ステップS915へ処理を進め、ペイロードデータを上位層に受け渡す。この上位層は、通常はTCP処理を行うソフトウェアであるが、本実施形態では、特に限定はしない。
また、リアセンブル処理されたペイロードデータは、複数のIPデータグラムのペイロードデータを合わせたものであるため、ペイロードデータ自体の合成を行う処理モジュールも必要である。この処理は、ソフトウェアで行う場合が一般的であるが、本実施形態では、この処理を行うモジュールを特に限定はしない。
本実施形態によれば、リアセンブル処理時のペイロードデータ受信状況をビットテーブルで管理する際に、リアセンブル処理が対象とするIPデータグラム毎に8192ビット必要であったビットテーブルデータサイズを縮小することができる。これにより、ビットテーブルにより使用されるRAM103内のデータ量を削減することができる。
尚、本実施形態では、ネットワークプロトコルのリアセンブル処理をIPデータグラムの受信時に行うことを前提に説明したが、必ずしもIPデータグラムの受信をトリガーにして行わなければならないわけではない。ネットワークプロトコル処理装置の実装によっては、例えばある程度受信済みIPデータグラムがたまった時点で処理を開始するという実装形態も考えられる。本発明は、IPデータグラムを受信し、RAM103の受信データ領域201に格納されている状態であれば実施可能であり、上述のような構成であっても本発明が適用できることは言うまでもない。
また、本実施形態では、管理エントリ及びビットテーブルの生成において、管理テーブル202及びビットテーブル領域203の容量が不足し、生成できなかった場合も本発明の適用範囲を何ら減じることはない。例えば、生成できなかった場合には、リアセンブル処理をその時点で放棄し、IPデータグラムを破棄しても構わない。
通常のネットワークプロトコル処理装置では、リアセンブル処理を並列に実行可能な数を制限しているため、制限数を超えてリアセンブル処理を行うことはない。また、本発明は、TCP/IPプロトコルのIP層に適用される内容であり、上位層のTCP層では、一定時間内に受信できなかったTCPパケットは再送を促す仕組みが定義されている。
これにより、IP層で一度リアセンブル処理を放棄した場合でも、TCP層レベルの再送要求により、再度当該データが送信機器から到着することとなる。
また、本実施形態では、リアセンブル処理中にビットテーブルの単位サイズを変更する必要性が生じた場合には、関連するパラメータの公約数で再度ビットテーブルを構成している。また、その際、最大公約数を使用することでメモリ使用量を削減できるとしているが、ここにはCPU101にかかる処理負荷とのトレードオフの関係が存在する。
つまり、フラグメントされたIPデータグラムのペイロードサイズが一律ではない場合は、送信機器とネットワークプロトコル処理装置間の経路がWAN等を経由している場合が多い。その後、受信するIPデータグラムのペイロードサイズも異なる可能性が容易に推測される。後続のIPデータグラムのペイロードサイズがそれぞれ異なる場合には、受信する度にリアセンブルリセット処理とビットテーブル移行処理を行わなければならない可能性がある。これは、CPU101にかかる負荷が増大する可能性につながり、ネットワークプロトコル処理全体の処理性能低下につながる。
従って、一旦リアセンブル処理中にビットテーブルの単位サイズを変更する必要性が生じた場合、二度と変更しなくてもよいように、関連するパラメータ値に関わらず、ビットテーブルの単位サイズを8バイト(最小単位)で再構成しても良い。このような構成を取った場合でも、通信経路がLAN等でIPデータグラムのペイロードサイズが一定である場合のリアセンブル処理において本発明の効果が期待できる。
また、本実施形態では、管理エントリやビットテーブルのRAM103内での割り当て方法、及び解放方法に関して明記していないが、何れの方法であっても本発明を適用できることは言うまでもない。例えば、通常の処理装置では、固定長のデータ領域を確保する場合は、予め所定の個数分のデータ領域を確保しておき、それぞれのデータ領域に対する使用状態を示すフラグ等を準備し、当該フラグにより確保及び解放を管理することが多い。
また、可変長のデータ領域を確保する場合は、ファイルシステム等のソフトウェアにより所定サイズのデータ領域の確保及び解放を管理することが多い。何れにおいても、またその他何れの方法でも、管理エントリ及びビットテーブルの確保、解放が行える限り、本発明の適用範囲である。
また、本実施形態では、ビットテーブル移行処理において、旧単位サイズと新単位サイズが、1:NもしくはN:1であることを前提として説明した。しかし、N:M(N、Mは整数かつ互いに素)の関係であっても、受信状況が新ビットテーブルのビットに適切にマッピング可能である。つまり、受信状況の移行が可能であれば、本発明を適用できる。即ち、旧ビットテーブルにおいて、“1”が連続するビット数が全てMの整数倍であり、かつ“0”が連続するビット数が全てMの整数倍であるという条件を満たしている場合である。
また、本実施形態では、ビットテーブル移行処理を呼び出すときの旧単位サイズと新単位サイズの決定方法(図9に示すステップS908)では、旧単位サイズと新単位サイズが1:NもしくはN:1となるように決定することを前提として説明した。しかし、上述のビットテーブル移行処理がN:M(旧単位サイズ:新単位サイズ、N、Mは整数かつ互いに素)である旧単位サイズと新単位サイズを受けられることを前提とすれば、本発明を適用できる。この場合、ステップS908でもN:Mの関係となる旧単位サイズ、及び新単位サイズを決定すれば良い。ステップS908でN:Mの関係となる旧単位サイズ、及び新単位サイズを決定可能であれば、ステップS907の条件Bを以下の条件B1に変更できる。
<条件B1>現在のビットテーブルにおける“1”が連続する部分の連続ビット数を先頭から順にN1_1、N1_2、N1_3、…とする。更に、各々に現在のビットテーブルの単位サイズを掛け合わせたN1_1_MULTI、N1_2_MULTI、N1_3_MULTI、…とする。そして、単位サイズを掛け合わせた後の整数の最大公約数をN1_MULTI_GCDとする。また、“0”が連続する部分の連続ビット数を先頭から順にN0_1、N0_2、N0_3、…とする。更に、各々に現在のビットテーブルの単位サイズを掛け合わせたN0_1_MULTI、N0_2_MULTI、N0_3_MULTI、…とする。そして、単位サイズを掛け合わせた後の整数の最大公約数をN0_MULTI_GCDとする。更に、N1_MULTI_GCDとN0_MULTI_GCDの二つの整数の最大公約数をN01_MULTI_GCDとする。このとき、N01_MULTI_GCDの1以外の所定の約数をMとして、次の条件を満たすMが存在する。受信ペイロードのデータサイズが(M×変更前のビットテーブル単位サイズ)の整数倍であり、かつ受信ペイロードのオフセットが(M×変更前のビットテーブル単位サイズ)の整数倍である場合。
この条件B1を適用した場合のステップS908では、上述の条件Bの場合と同様に、M×既存のビットテーブルの単位サイズが取得対象の新規ビットテーブルの単位サイズの候補となる。
本実施形態によれば、ネットワークプロトコル処理におけるリアセンブル処理時に、ビットテーブルを8バイト以上の単位サイズで構成することにより、ビットテーブルサイズを縮小することができる。これにより、リアセンブル処理に必要となるメモリ領域を削減することができ、ネットワークプロトコル処理のパフォーマンス低下を抑制、及びシステム構築時のコストを低減することができる。特にメモリ領域が限られている組み込みシステム等では大きな効果が期待できる。
また、WANを経由しないLAN内通信では、ルータを経由しないため、フラグメントされたIPデータグラムのペイロードサイズが固定であり、本発明による効果は大きい。WANとは、ワイドエリアネットワークの略であり、LANとは、ローカルエリアネットワークの略である。
更に、WANを経由した場合でも、通信経路が複数に渡る可能性は低いため、同じくフラグメントされたIPデータグラムのペイロードサイズは固定である場合が多く、本発明による効果が期待できる。
尚、本発明は複数の機器(例えば、ホストコンピュータ、インターフェース機器、リーダ、プリンタなど)から構成されるシステムに適用しても、1つの機器からなる装置(例えば、複写機、ファクシミリ装置など)に適用しても良い。
また、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ(CPU若しくはMPU)が記録媒体に格納されたプログラムコードを読出し実行する。これによっても、本発明の目的が達成されることは言うまでもない。
この場合、コンピュータ読み取り可能な記録媒体から読出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記録媒体は本発明を構成することになる。
このプログラムコードを供給するための記録媒体として、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、磁気テープ、不揮発性のメモリカード、ROMなどを用いることができる。
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、次の場合も含まれることは言うまでもない。即ち、プログラムコードの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)などが実際の処理の一部又は全部を行い、その処理により前述した実施形態の機能が実現される場合である。
更に、記録媒体から読出されたプログラムコードがコンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込む。その後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理により前述した実施形態の機能が実現される場合も含まれることは言うまでもない。