JP5300355B2 - ネットワークプロトコル処理装置及びその処理方法 - Google Patents

ネットワークプロトコル処理装置及びその処理方法 Download PDF

Info

Publication number
JP5300355B2
JP5300355B2 JP2008183023A JP2008183023A JP5300355B2 JP 5300355 B2 JP5300355 B2 JP 5300355B2 JP 2008183023 A JP2008183023 A JP 2008183023A JP 2008183023 A JP2008183023 A JP 2008183023A JP 5300355 B2 JP5300355 B2 JP 5300355B2
Authority
JP
Japan
Prior art keywords
datagram
bit table
unit size
size
received
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2008183023A
Other languages
English (en)
Other versions
JP2010021957A5 (ja
JP2010021957A (ja
Inventor
浩義 大島
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2008183023A priority Critical patent/JP5300355B2/ja
Priority to US12/492,631 priority patent/US8064483B2/en
Publication of JP2010021957A publication Critical patent/JP2010021957A/ja
Publication of JP2010021957A5 publication Critical patent/JP2010021957A5/ja
Application granted granted Critical
Publication of JP5300355B2 publication Critical patent/JP5300355B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/166IP fragmentation; TCP segmentation

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Description

本発明は、フラグメント化されたIPデータグラムを受信してリアセンブル処理を行うネットワークプロトコル処理装置及びその処理方法に関する。
従来より、ネットワークプロトコル処理の一環として、フラグメント化されたIPデータグラムのリアセンブル処理が行われている。尚、IPデータグラムのフラグメント処理方法及びリアセンブル処理方法に関しては、RFC791 Internet Protocolに記載されている。このRFC791では、リアセンブル処理の例として、フラグメントブロックビットテーブル(以下、ビットテーブルと称す)によるリアセンブル処理方法が紹介されている。ここで、ビットテーブルを利用したリアセンブル処理では、8192ビットサイズのビットテーブルが必要となる。
これは、フラグメント処理前のIPデータグラムの最大ペイロードサイズが64Kバイトであること、及びIPデータグラムが8バイト単位でフラグメント化が可能であることに起因する。つまり、64Kバイトのペイロードを持つIPデータグラムを最小のペイロードサイズである8バイトのペイロードを持つIPデータグラムに分割して送信する場合、8192(=64Kバイト÷8バイト)個のIPデータグラムに分割される。
従って、フラグメント化されたIPデータグラムの受信状況を管理するためには、8192ビットサイズのビットテーブルが必要となる。
そこで、予めフラグメント処理前のIPデータグラムのペイロードサイズが明らかであれば、IPデータグラムの最大ペイロードサイズである64Kバイト分のビットテーブルを準備する必要がないと考えられる。しかしながら、RFC791で規定されているIPデータグラムのヘッダには、フラグメントに関連する情報として以下の2つのフィールドが付随されているだけである。
(1)FO(Fragment Offset):フラグメント処理前のIPデータグラムのペイロードのオフセット。
(2)MF(More Fragment flag):後続のフラグメントパケットが存在するか否かを示すフラグ。
よって、フラグメント化された終端のIPデータグラムのIPヘッダのMFはセットされていないが、それ以外の全てのフラグメント化されたIPデータグラムのIPヘッダのMFはセットされている。つまり、フラグメント化された終端のIPデータグラムを受信しない限り、フラグメント前のIPデータグラムのペイロードサイズを判別することはできない。そのため、ビットテーブルは、IPデータグラムの最大ペイロードサイズである64Kバイト分準備しなければならない。
一方、予めフラグメント処理時に分割されるペイロードサイズが明らかであれば、8バイト単位のビットテーブルを準備する必要がないと考えられる。しかしながら、IPデータグラムの送信機器と受信機器の間には、様々なルータとルータを接続する通信網が存在しており、その中のどの経路を使用してIPデータグラムが送信されるかは不明であり、またそれを制御することもできない。つまり、何れのルータでもフラグメント処理される可能性のあるIPデータグラムは、受信機器にどのようなサイズにフラグメント化されて到着するかを知る術はない。従って、ビットテーブルは、フラグメント処理で分割される最小ペイロードサイズである8バイト単位で準備しなければならない。
尚、特許文献1に、フラグメントパケットの順番で番号を振り、その番号とビット位置を対応つけたビットマップで再組立て状態を管理することが記載されている。
特開2007-274056号公報
上記従来のビットテーブルは、ペイロードサイズが64Kバイトに満たないIPデータグラムを受信する場合でも、8192ビットサイズ分確保しなければならない。また、フラグメント化されたIPデータグラムのペイロードサイズが、例えば1Kバイトで統一されている場合でも、8バイト単位のビットテーブルを確保しなければならない。
この制約は、ペイロードサイズが64Kバイトより小さいIPデータグラムや、フラグメント処理時のペイロードサイズが固定であるIPデータグラムを受信する場合、ビットテーブルの領域が無駄に確保されてしまう。特に、組み込みシステムなどのメモリサイズが限られているプラットフォームでは、システム全体のパフォーマンス低下や、システム構築時のコストの増加が懸念される。特に、リアセンブル処理はネットワークプロトコル処理において処理負荷の重いものに数えられる。そのため、ビットテーブルの領域は高価であるが高速なSRAM等で実装されることもある。この場合には、コストの増加の問題はより甚大なものとなることが想定される。
本発明は、リアセンブル処理に必要なビットマップテーブルのサイズを削減することを目的とする。
本発明は、フラグメント化されたIPデータグラムを受信してリアセンブル処理するネットワークプロトコル処理装置であって、
受信したフラグメント化されたIPデータグラムのサイズに基づいて前記リアセンブル処理に用いるビットマップテーブルの単位サイズを決定する決定手段と、
前記決定手段によって決定された単位サイズに応じてビットマップテーブルを生成する生成手段と、
前記生成手段によって生成されたビットマップテーブルを用いて前記IPデータグラムをリアセンブル処理する処理手段と、
を有することを特徴とする。
また、本発明は、フラグメント化されたIPデータグラムを受信してリアセンブル処理するネットワークプロトコル処理装置の処理方法であって、
決定手段が、受信したフラグメント化されたIPデータグラムのサイズに基づいて前記リアセンブル処理に用いるビットマップテーブルの単位サイズを決定する決定工程と、
生成手段が、前記決定工程において決定された単位サイズに応じてビットマップテーブルを生成する生成工程と、
処理手段が、前記生成工程において生成されたビットマップテーブルを用いて前記IPデータグラムをリアセンブル処理する処理工程と、
を有することを特徴とする。
本発明によれば、リアセンブル処理に必要なビットマップテーブルのサイズを削減することが可能となる。
以下、図面を参照しながら発明を実施するための最良の形態について詳細に説明する。
図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などが実際の処理の一部又は全部を行い、その処理により前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
本実施形態におけるネットワークプロトコル処理装置の構成の一例を示すブロック図である。 RAM103内のデータを模式的に表した図である。 管理テーブル202に格納されている管理エントリを詳細に示した図である。 ビットテーブル領域203に格納されているビットテーブルを詳細に示した図である。 リアセンブルリセット処理の処理手順を示すフローチャートである。 リアセンブル通常処理の処理手順を示すフローチャートである。 リアセンブルターミネート処理の処理手順を示すフローチャートである。 ビットテーブル移行処理の処理手順を示すフローチャートである。 本実施形態におけるIPデータグラムの受信処理を示すフローチャートである。 本実施形態における条件Bに合致する場合の一例を示す図である。 単位サイズを約数倍に変更した場合の一例を示す図である。
符号の説明
101 CPU
102 ROM
103 RAM
104 MAC
105 PHY
106 DMAC
107 バス
201 受信データ領域
202 管理テーブル
203 ビットテーブル領域
204 リアセンブルバッファ

Claims (5)

  1. フラグメント化されたIPデータグラムを受信してリアセンブル処理するネットワークプロトコル処理装置であって、
    受信したフラグメント化されたIPデータグラムのペイロードデータのサイズに基づいて前記リアセンブル処理に用いるビットマップテーブルの単位サイズを決定する決定手段と、
    前記決定手段によって決定された単位サイズに応じてビットマップテーブルを生成する生成手段と、
    前記生成手段によって生成されたビットマップテーブルを用いて前記IPデータグラムをリアセンブル処理する処理手段と、を有し、
    前記生成手段は、前記決定手段によって決定された単位サイズが、既存のビットマップテーブルの単位サイズの整数倍である場合にはビットマップテーブルを生成せず、整数倍でない場合には前記IPデータグラムのペイロードデータのサイズと前記既存のビットマップテーブルの単位サイズとの公約数を単位サイズとするビットマップテーブルを生成する
    ことを特徴とするネットワークプロトコル処理装置。
  2. 前記IPデータグラムのペイロードデータのサイズは、前記受信したフラグメント化されたIPデータグラムのペイロードデータに含まれるIPデータグラムのペイロードデータの先頭からのオフセットを示す値とIPデータグラム全体の長さとから算出される
    ことを特徴とする請求項1記載のネットワークプロトコル処理装置。
  3. フラグメント化されたIPデータグラムを受信してリアセンブル処理するネットワークプロトコル処理装置の処理方法であって、
    決定手段が、受信したフラグメント化されたIPデータグラムのペイロードデータのサイズに基づいて前記リアセンブル処理に用いるビットマップテーブルの単位サイズを決定する決定工程と、
    生成手段が、前記決定工程において決定された単位サイズに応じてビットマップテーブルを生成する生成工程と、
    処理手段が、前記生成工程において生成されたビットマップテーブルを用いて前記IPデータグラムをリアセンブル処理する処理工程と、を有し、
    前記生成工程は、前記決定工程において決定された単位サイズが、既存のビットマップテーブルの単位サイズの整数倍である場合にはビットマップテーブルを生成せず、整数倍でない場合には前記IPデータグラムのペイロードデータのサイズと前記既存のビットマップテーブルの単位サイズとの公約数を単位サイズとするビットマップテーブルを生成する
    ことを特徴とするネットワークプロトコル処理装置の処理方法。
  4. コンピュータを請求項1または2に記載のネットワークプロトコル処理装置の各手段として機能させるためのプログラム。
  5. 請求項に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
JP2008183023A 2008-07-14 2008-07-14 ネットワークプロトコル処理装置及びその処理方法 Expired - Fee Related JP5300355B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008183023A JP5300355B2 (ja) 2008-07-14 2008-07-14 ネットワークプロトコル処理装置及びその処理方法
US12/492,631 US8064483B2 (en) 2008-07-14 2009-06-26 Protocol processing apparatus and processing method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008183023A JP5300355B2 (ja) 2008-07-14 2008-07-14 ネットワークプロトコル処理装置及びその処理方法

Publications (3)

Publication Number Publication Date
JP2010021957A JP2010021957A (ja) 2010-01-28
JP2010021957A5 JP2010021957A5 (ja) 2011-08-18
JP5300355B2 true JP5300355B2 (ja) 2013-09-25

Family

ID=41505130

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008183023A Expired - Fee Related JP5300355B2 (ja) 2008-07-14 2008-07-14 ネットワークプロトコル処理装置及びその処理方法

Country Status (2)

Country Link
US (1) US8064483B2 (ja)
JP (1) JP5300355B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5070125B2 (ja) * 2008-05-19 2012-11-07 キヤノン株式会社 受信装置及びその方法、通信システム及びその方法、並びに、プログラム
US8824437B2 (en) * 2011-03-02 2014-09-02 Ricoh Company, Ltd. Wireless communications device, electronic apparatus, and methods for determining and updating access point
US8761181B1 (en) * 2013-04-19 2014-06-24 Cubic Corporation Packet sequence number tracking for duplicate packet detection
US10089339B2 (en) * 2016-07-18 2018-10-02 Arm Limited Datagram reassembly

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5440545A (en) * 1993-08-02 1995-08-08 Motorola, Inc. Packet delivery system
US20020118671A1 (en) * 1995-11-15 2002-08-29 Data Race, Inc. Extending office telephony and network data services to a remote client through the internet
US6185208B1 (en) * 1998-04-30 2001-02-06 Phone.Com, Inc. Method and apparatus for fragmenting messages for a wireless network using group sharing of reference numbers
US7065086B2 (en) * 2001-08-16 2006-06-20 International Business Machines Corporation Method and system for efficient layer 3-layer 7 routing of internet protocol (“IP”) fragments
US7289535B2 (en) * 2002-03-15 2007-10-30 Freescale Semiconductor, Inc. Method of accommodating fragmentation and burst in a wireless protocol
GB0226249D0 (en) * 2002-11-11 2002-12-18 Clearspeed Technology Ltd Traffic handling system
US7433314B2 (en) * 2004-06-01 2008-10-07 Samsung Electronics Co., Ltd. Method and system for acknowledging the receipt of a transmitted data stream in a wireless personal area network
JP4490331B2 (ja) * 2004-08-03 2010-06-23 富士通株式会社 断片パケット処理方法及びこれを用いるパケット転送装置
US7599363B2 (en) * 2004-08-13 2009-10-06 Samsung Electronics Co. Ltd Method for reporting reception result of packets in mobile communication system
JP2007274056A (ja) * 2006-03-30 2007-10-18 Oki Electric Ind Co Ltd データグラム再組立装置

Also Published As

Publication number Publication date
US8064483B2 (en) 2011-11-22
US20100008380A1 (en) 2010-01-14
JP2010021957A (ja) 2010-01-28

Similar Documents

Publication Publication Date Title
USRE47756E1 (en) High performance memory based communications interface
CN102104541B (zh) 报头处理引擎
JP7481436B2 (ja) Srネットワークでパケットを転送する方法、デバイス、及びシステム
US7502826B2 (en) Atomic operations
US7324547B1 (en) Internet protocol (IP) router residing in a processor chipset
JP2009093348A (ja) 情報処理装置、及び情報処理システム
WO2020038009A1 (zh) 报文处理方法及相关设备
JP5300355B2 (ja) ネットワークプロトコル処理装置及びその処理方法
JP2007208963A (ja) パケット処理装置及びパケット処理方法
US20140047188A1 (en) Method and Multi-Core Communication Processor for Replacing Data in System Cache
JP2005117206A (ja) ネットワークプロセッサアクセラレータ
US9985885B1 (en) Aggregating common portions of forwarding routes
JP5094482B2 (ja) 処理装置及びその処理方法
JP5473406B2 (ja) ネットワーク処理装置及びその処理方法
CN115858160B (zh) 远程直接内存访问虚拟化资源分配方法及装置、存储介质
US11126249B1 (en) Power reduction methods for variable sized tables
JP4921142B2 (ja) 通信装置
JP2012155650A (ja) ルータ及びメニーコアシステム
US11995004B2 (en) Methods and systems for using a packet processing pipeline to accelerate InfiniBand administrative operations
KR20170072645A (ko) 프로세서 및 프로세서에서 데이터를 처리하는 방법
TW201611548A (zh) 使用唯一封包識別字識別封包結構方法及裝置
JP2009284028A (ja) 受信装置及びその方法、通信システム及びその方法、送信装置及びその方法、プログラム、並びに、記録媒体
US8898353B1 (en) System and method for supporting virtual host bus adaptor (VHBA) over infiniband (IB) using a single external memory interface
US7532644B1 (en) Method and system for associating multiple payload buffers with multidata message
CN114285907A (zh) 数据传输方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110706

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110706

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120409

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120423

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120620

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130304

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130501

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130520

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130618

R151 Written notification of patent or utility model registration

Ref document number: 5300355

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

LAPS Cancellation because of no payment of annual fees