(57)【要約】【課題】TCP/IP通信におけるIPリアセンブル及びTCPリオーダリング処理を効率的に行う。【解決手段】情報処理装置は、記憶部に既に記憶されている第１のデータの情報と記憶部に新たに記憶される第２のデータの情報とを取得し、取得した情報に基づいて、第１のデータと第２のデータとが連続しているかを示す情報と、第２のデータが記憶される記憶部における位置情報とを関連付ける。【選択図】図6
2014220716.tif 000002
【特許請求の範囲】
【請求項１】
記憶部に既に記憶されている第１のデータの情報と前記記憶部に新たに記憶される第２のデータの情報とを取得する取得手段と、
前記取得手段により取得した情報に基づいて、前記第１のデータと前記第２のデータとが連続しているかを示す情報と、前記第２のデータが記憶される前記記憶部における位置情報とを関連付ける関連付け手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記記憶部は、少なくとも一部が論理的に区切られた複数の論理メモリを形成し、
前記第１のデータが記憶されている前記記憶部における論理メモリの識別子を示す識別子情報と、前記第１のデータと前記第２のデータが連続しているかを示す情報とを含む論理メモリ情報を、前記論理メモリごとに管理する管理手段と、
前記関連付け手段によって関連付けられた情報に基づいて、前記論理メモリ情報を更新する更新手段とを更に備えることを特徴とする請求項1に記載の情報処理装置。
【請求項３】
前記位置情報は、前記第１のデータと前記第２のデータとを含む一つのデータ群における先頭のデータの開始点を基点としたオフセットによって表されることを特徴とする請求項2に記載の情報処理装置。
【請求項４】
前記位置情報は、前記第１のデータと前記第２のデータとを含む一つのデータ群における先頭のデータの開始点を基点としたオフセットとペイロードであることを特徴とする請求項2に記載の情報処理装置。
【請求項５】
前記データ群に含まれるデータは、一つのグループ識別子が付された前記論理メモリに記憶されることを特徴とする請求項3または4に記載の情報処理装置。
【請求項６】
前記位置情報は、IPヘッダにおけるFragment Offset フィールドであることを特徴とする請求項1乃至5のいずれか1項に記載の情報処理装置。
【請求項７】
IPフラグメントパケットのリアセンブル処理を実行することを特徴とする請求項1乃至請求項6のいずれか1項に記載の情報処理装置。
【請求項８】
前記位置情報は、TCPヘッダにおけるSequence Number フィールドであることを特徴とする請求項1乃至5のいずれか1項に記載の情報処理装置。
【請求項９】
TCPパケットのリオーダリング処理を実行することを特徴とする請求項1乃至5と8のいずれか1項に記載の情報処理装置。
【請求項１０】
記憶部に既に記憶されている第１のデータの情報と前記記憶部に新たに記憶される第２のデータの情報とを取得する取得工程と、
前記取得工程において取得された情報に基づいて、前記第１のデータと前記第２のデータとが連続しているかを示す情報と、前記第２のデータが記憶される前記記憶部における位置情報とを関連付ける関連付け工程と、
を有することを特徴とする情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置の通信処理におけるメモリ管理方法に関する。特に、通信装置が外部機器との通信時に受信したデータの再組立や順序入れ替えを行う際の、メモリの管理方法に関する。
【背景技術】
【０００２】
TCP/IP（Transmission Control Protocol/Internet Protocol）を使用した通信処理として、IPリアセンブル（IP Reassembly）やTCPリオーダリング（IP Reordering）といった処理が知られている。この中で、最初にIPリアセンブルについて説明する。IP通信では、送信元或いは伝送経路上で１つのIPパケットを複数のIPパケットに分割して転送し、受信側で分割元の１つのパケットを復元して受信するメカニズムが用いられている。１つのIPパケットを複数のIPパケットに分割して転送する処理はIPフラグメント（IP Fragmentation）と呼ばれている。一方、分割された複数のIPパケットを受信し、元のIPパケットに復元する処理はIPリアセンブルと呼ばれている。なお、IPリアセンブルは、RFC791に仕様が公開されている。
【０００３】
次にTCPリオーダリングについて説明する。TCPではデータの並び順序とデータの到着順序が一致しない場合においても、元のデータ並び順序になるように正しく並び替えが行われる。この並び替えは、TCPヘッダに付与されるシーケンス番号を使用することにより達成される。この処理のことを一般にTCPリオーダリングと呼ぶ。なお、TCPリオーダリングは、RFC793に仕様が公開されている。
【０００４】
TCP/IPを使用するためには、先に述べたIPリアセンブルやTCPリオーダリングといった処理を、適切に、そして、必要により高速に行う必要がある。この課題に対して、特許文献1には、分割されたIPパケットをリアセンブルする際に、IPパケットを論理的にリンクさせて再構成する技術が記載されている。具体的には、特許文献1では、受信パケットを一旦記憶し、記憶されたパケットを論理的にリンクさせて再構成する。
【０００５】
また、特許文献2には、受信パケットに応じて元のデータグラムを効率よく再組み立てする技術が記載されている。具体的には、特許文献2では、受信パケットのヘッダ情報に応じてキューを指定し、キューごとにヘッダのフラグメントオフセットに応じて断片番号を設定するキュー管理手段を具備する。そして、同一キューのパケットのデータを断片番号順によみだす読み出し手段と、読みだされたデータを蓄積して元のデータグラムとして出力するデータ蓄積手段を具備する。
【０００６】
また、特許文献3には、監視区間を用いることによりパケットの再組み立てを高速に行う技術が記載されている。具体的には、特許文献3では、リングバッファを複数のセクションに区切っておき、セクションの監視区間を予め定めておき、パケットの再構築に必要なセグメントが監視区間にあるかの監視を行う。また、適宜この監視区間を移動させることにより連続的にパケットの再構築を行う。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開2005-012697号公報
【特許文献２】特開2007-274056号公報
【特許文献３】特開2009-171157号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
引用文献1に記載されているように、受信したパケットを論理的に結合させて、TCP/IPにおけるIPリアセンブルおよびTCPリオーダリングを実施することにより、データコピー回数を削減することができ、低消費電力効果が向上する。しかし、外部機器より受信したデータをアプリケーションに引き渡す際には、論理的な結合されたデータを物理的に連続領域に再構築し渡す必要がある。この場合に、分割されたデータと論理的な結合を意味する情報から物理的な結合に速やかに置き換えることが通信処理の高速化において必要となる。この点については、特許文献1乃至3では、触れられていない。
【０００９】
本発明は、上記課題に鑑みて為されてものであり、所定のプロトコルの通信におけるリアセンブル処理やリオーダリング処理を効率的に行うことを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するための一手段として、本発明の情報処理装置は以下の構成を有する。すなわち、記憶部に記憶済みの第１のデータの情報と前記記憶部に新たに記憶される第２のデータの情報とを取得する取得手段と、前記取得手段により取得した情報に基づいて、前記第１のデータと前記第２のデータとが連続しているかを示す情報と、前記第２のデータが記憶される前記記憶部における位置情報とを関連付ける関連付け手段と、を有することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、所定のプロトコルの通信におけるリアセンブル処理やリオーダリング処理を効率的に行うことが可能になる。これにより、通信処理において、データコピー回数を削減、かつ、高速にIPリアセンブル及びTCPリオーダリング処理を実行できる。
【図面の簡単な説明】
【００１２】
【図１】本発明によるシステム構成例を示す図。
【図２】情報処理装置103の構成を示す図。
【図３】通信制御部203の機能ブロック図。
【図４】主記憶部201が使用するバッファ領域を表した図。
【図５】論理メモリ管理情報テーブルの一例を示す図。
【図６】メモリ管理部210の機能ブロック図。
【図７】パケット受信処理の動作フロー図。
【図８】IPリアセンブル処理の動作フロー図。
【図９】IPリアセンブル処理状況確認のためのテーブルを示す図。
【図１０】IPリアセンブル処理における通信制御部203のフローチャート。
【図１１】IPヘッダのフォーマットを示す図。
【図１２】IPリアセンブル処理におけるメモリ管理部210のフローチャート
【図１３】IPリアセンブル管理情報テーブルを示す図。
【図１４】TCPリオーダリング処理における(A)通信制御部203のフローチャート、および(B)メモリ管理部210のフローチャート。
【図１５】TCPリオーダリング処理の概要を説明する図。
【図１６】TCPリオーダリング管理情報テーブル
【図１７】TCPヘッダのフォーマットを示す図。
【図１８】前後のフラグメントパケットの連結を説明する図(1)。
【図１９】前後のフラグメントパケットの連結を説明する図(2)。
【図２０】前後のフラグメントパケットの連結を説明する図(3)。
【図２１】TCPリオーダリング対応テーブルを示す図。
【図２２】ソケット処理におけるソケット処理部3031のフローチャート。
【図２３】DMA部211の機能の概要図。
【発明を実施するための形態】
【００１３】
以下、添付の図面を参照して、本発明をその好適な実施形態に基づいて詳細に説明する。なお、以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
【００１４】
図1に、本発明にかかるメモリ管理方法を適用したシステム例を示す。電子機器101は、主制御装置102と情報処理装置103を収容する。主制御装置102は、電子機器101のアプリケーションを制御する。例えば、電子機器101がテレビの場合は、主制御装置102は放送された情報の画面表示を行い、電子機器101がプリンタの場合は、主制御装置102は印刷を行い、電子機器がカメラの場合は主制御装置102は撮像を行う。情報処理装置103は、主制御装置102が行わない電子機器101の通信に係る処理を行う。なお、情報処理装置103が内部で使用するメモリ管理方法に、本発明のメモリ管理方法が適用できる。ケーブルソケット104は、外部機器106との通信のインターフェイスである。電子機器101は、ケーブル105を介して、外部機器106とネットワークを構築する。このネットワークは、例えばEthernet（登録商標）に準拠しているものとする。
【００１５】
［第1実施形態］
以下に、第1実施形態について説明する。図2は、情報処理装置103の内部構成と主制御装置102との接続を表したブロック図である。主記憶部201は主制御装置102と情報処理装置03からアクセス可能な記憶部である。主記憶部201において、メモリ領域は、主制御装置102が主に使用するユーザーバッファ領域401と、情報処理装置103が主に使用する通信バッファ領域402とに論理的に分かれて形成されているものとする。電子機器101が外部機器106にデータを送信したいときは、まず、主制御装置102は、送信したいデータを主記憶部201のユーザーバッファ領域401に配置する。情報処理装置103は、配置されたデータを一度通信バッファ領域402にコピーを行い、その後、所定のプロトコル処理を行いパケット化して、通信相手に送信する。
【００１６】
また、電子機器101が外部機器106からデータを受信する場合は、まず、外部機器106より受信したパケットを情報処理装置103が一度通信バッファ領域402に格納する。次に受信したパケットに対し情報処理装置103が所定のプロトコル処理をした後、ユーザーバッファ領域401に対して必要なデータをコピーする。その後、情報処理装置103は、主制御装置102に対し、情報処理装置103からデータ受信完了の通知を行う。
【００１７】
メインバス202は、主制御装置102と情報処理装置103と主記憶部201を接続するバスである。通信制御部203は、情報処理装置103全体の状態監視や制御を行う。詳細な通信制御部203の動作については後述する。ローカルバス204は、情報処理装置103に存在する各モジュールを接続する。補助記憶部205は、情報処理装置103が各種処理を実行するために必要となるワークメモリとして使用される。通信インターフェイス部206は、通信相手と通信を実行するために必要となる媒体アクセス制御や物理層に係る処理を実行する。また、通信インターフェイス部206は、通信制御部203からの制御情報を元に動作を行う。通信インターフェイス部206の状態変化時には、信号線209を用いて通信制御部203に割り込み信号を送信することにより通知を行う。本実施形態においては、Ethernet（登録商標）の媒体アクセス制御及び物理層にかかる処理を例に説明するが、TCP/IPを使用するネットワークで有れば何でもよい。例えばIEEE802.11で規定されている無線LANであってもよい。その場合は、ケーブルソケット104ではなくアンテナを使用することになる。
【００１８】
信号線207は、通信制御部203から主制御装置102への割り込み信号線である。信号線207は、主制御装置102が通信制御部203に対してセットした命令が終了したときや、通信制御部203では処理しきれない例外が発生した場合に使用される。信号線208は、主制御装置102から通信制御部203への割り込み信号線である。信号線208は、主制御装置102が通信制御部203に対して命令をセットしたい時に、割り込み信号をアサートする場合に使用される。信号線209は、通信インターフェイス部206から、通信制御部203への割り込み信号線である。信号線209は、通信インターフェイス部206が外部よりデータを受信した場合や、異常を検知した場合に、通信制御部203へ割り込み信号をアサートする場合に使用される。
【００１９】
メモリ管理部210は、高速にIPリアセンブル・TCPリオーダリングを行うため、論理メモリ管理情報テーブルの管理を行う。メモリ管理部210については後述する。DMA（Direct Memory Access）部211は、補助記憶部205及び、主記憶部201の各種記憶部と通信インターフェイス部206の間で必要となるデータ転送を行う。信号線212は、DMA部211から通信制御部203への割り込み信号線である。信号線212は、DMA部211の処理が終了したときや、エラーが発生したときに、その内容を通信制御部203へ通知するために使用される。DMAバス213は、通信インターフェイス部206と補助記憶部205間、または通信インターフェイス部206と主記憶部201間で、DMA部211を使用したデータ転送時に使用される。信号線214は、メモリ管理部210から通信制御部203への割り込み信号線である。信号線214は、メモリ管理部210の処理が終了したときや、エラーが発生したときに、通信制御部203へ通知するために使用される。なお、主記憶部201と補助記憶部205は、同じように構成されても、異なるように構成されても良い。
【００２０】
次に、通信制御部203の詳細な構成、動作について説明する。図3は、通信制御部203における処理機能を表したブロック図である。命令処理部301は、主制御装置102から受信した各種命令を解析し、解析結果を元にどのような処理を行うべきかを決定する。通信上位層処理部302は、OSI参照モデルにおけるトランスポート層（第四層）よりも上位レイヤであるプロトコルについて処理を行う。通信プロトコル処理部303は、OSI参照モデルにおけるトランスポート層（第四層）及びネットワーク層（第三層）に該当するプロトコルの処理を実行する。なお、本実施形態では、TCP/IPに対応しているものとして説明する。そのため、通信プロトコル処理部303は、ソケット処理部3031、TCP処理部3032、IP処理部3033を含むものとする。
【００２１】
通信インターフェイス制御部304は、通信インターフェイス部206の初期設定や各種コマンド発行を行う。メモリ管理制御部305は、メモリ管理部210を使用する上で必要となる制御を行う。メモリ管理制御部305については後述する。DMA制御部306は、DMA部211を使用する上で必要となる制御を行う。割り込み制御部307は、主制御装置102と通信インターフェイス部206とDMA部211とメモリ管理部210からの割り込み信号を、それぞれ信号線208、209、212、213を介して受信する。なお、割り込み信号を使用しなくとも各モジュールとの通信は実現できる。この場合、まず、主制御装置102と通信インターフェイス部206とDMA部211とメモリ管理部210において、状態を示すレジスタをそれぞれ用意しておく。そして、定期的もしくは不定期にこれらのレジスタを監視する処理を割り込み制御部307に組み込むことにより、信号線208、209、212、214を介した割り込み信号を使用しなくても状態監視は実現可能である。割り込み信号を使用する方法と、使用しない方法のいずれの方法で本実施形態は実施可能である。
【００２２】
通知部308は、情報処理装置103が主制御装置102に対して各種情報を送りたい場合に使用される。この場合、通知部308は、主制御装置102に対して、通知情報があることを信号線207を介した割り込み信号によって通知する。ただし、前述したように、主制御装置102の構成よっては割り込み信号は必要ない。主制御装置102が定期的に通信制御部203の状態を確認する動作をする場合には、割り込み信号の送信は不要である。なお、実際の通知内容は、主制御装置102のレジスタに記載する構成でも、通信制御部203にレジスタを持ち、そこに記載する構成でもよい。また、主制御装置102と通信制御部203との間で事前の取り決めにより定めたメッセージボックスを主記憶部201の特定エリアに用意し、それを使用してもよい。
【００２３】
ローカルバス接続部309は、ローカルバスのプロトコルに則った動作を行い、通信制御部203が情報処理装置103内の各モジュールにアクセスするために使用される。なお、ローカルバス接続部309は、情報処理装置103内の各モジュールから、通信制御部203へアクセス可能なように構成されても良い。メインバス接続部310は、メインバスのプロトコルに則った動作を行い、通信制御部203が情報処理装置103の外部にある各モジュールにアクセスするのに使用される。なお、メインバス接続部310は、情報処理装置103の外部にある各モジュールから、通信制御部203へアクセス可能なように構成されても良い。接続状態監視部311は、例えばEthernet（登録商標）を使用する。Web閲覧をするようなときは、リンク接続から、ネットワーク層、トランスポート層、上位層といった各レイヤそれぞれで接続されなければならない。接続状態監視部311は、このような各レイヤにおいての接続プロトコルや接続状態を監視する機能を備える。
【００２４】
次に、本実施形態によるメモリ管理方法における論理メモリの扱い方について、図4を用いて説明する。図4は、主記憶部201が使用するバッファ領域を表したものである。主記憶部201がユーザーバッファ領域401と通信バッファ領域402からなることは先に説明した。本実施形態によるメモリ管理方法は、通信バッファ領域402のうち、少なくとも一部を論理的に区切られた複数の論理メモリとして扱う。例えば、図4において、論理メモリ403は空き領域であり、論理メモリ404は使用済み領域である。
【００２５】
メモリ管理部210は、高速にIPリアセンブル・TCPリオーダリングを行うため、図5に一例として表す論理メモリ管理情報テーブルの管理を行う。図5において、MID(501)は、各論理メモリに割り当てられた識別子である。ADDR(502)は、メモリ管理部210からみた、各論理メモリの物理アドレスである。なお、ADDR(502)がMID(501)において連続である場合は、後述のMS(503)の情報と先頭の論理メモリのADDR(502)の情報から用意に各論理メモリのADDR(502)も求めることができる。そのような場合は、必ずしもテーブルでADDR(502)を管理する必要はない。MS(503)は、各論理メモリの容量である。USE(504)は、各論理メモリが使用されているか、されていないかの情報である。
【００２６】
OFFSET(505)は、データが論理メモリに格納されている際に、有効データ範囲の始まるまでのオフセットサイズを示す。例えば、外部機器106から受信したTCP/IPのパケットが論理メモリに格納されているとする。その時、IPヘッダの解析が終了した場合には、次はTCPヘッダの解析処理が始まる。その時に、IPヘッダが仮に20Bytesとした場合は、OFFSET(505)情報を20Bytesに設定することにより、TCPヘッダの先頭に素早くアクセスが可能となる。さらにTCPのパケットから、ペイロードを取り出したい場合は、例えばTCPヘッダのサイズが20Bytesとすると、IPヘッダ20Bytes + TCPヘッダ20Bytes = 40Bytes分のオフセットサイズをOFFSET(505)に設定することにより、素早く主制御装置102が必要としているデータの先頭にアクセスできる。また、各論理メモリに格納されたデータサイズDS(506)からOFFSET(505)の値を差し引くことにより、有効データサイズを求めることができる。
【００２７】
CID(507)は、各論理メモリが属しているグループ（チェーン）のID（グループ識別子）である。CID(507)は、どのように使用されてもよい様に設計されることが望ましい。例えば未使用論理メモリを素早く検索したい場合は、未使用論理メモリ用にCID(507)を設定しておけば、すばやく検索できる。また、フラグメントパケットを受け取ったときに、同一インターネットダイアグラムであるものは同一のCID(507)といった使用方法が可能である。さらに、ソケットを使用した通信において、あるソケットから受信したパケットに対して、ソケット記述子とCID(507)を対応させておくことで、素早くそのソケットから受信したパケットが格納された論理メモリが検索される。
【００２８】
ORDER(508)には、各論理メモリに格納されたデータの順序に関する情報が格納される。IPリアセンブル処理を実行しているときは、IPヘッダにおけるフラグメントオフセット情報が格納され、TCPリオーダリング処理を実行しているときは、Sequence Noが格納される。NI(509)には、論理メモリに格納されているデータの次のデータが格納されている論理メモリの識別子情報であるMID(501)が格納される。なお、NI(509)は、データが連続データとしてつながっているか否かについては表していない。データが連続しているか否かは、後述のNLF(511)を用いる。PI(510)には、論理メモリに格納されているデータの前のデータが格納されている論理メモリの識別子情報であるのMID(501)が格納される。なお、PI(510)は、データが連続データとしてつながっているか否かについては表していない。データが連続しているか否かは、後述のPLF(512)を用いる。
【００２９】
NLF(511)は、あるMID(501)の論理メモリに格納されたデータとNI(509)に記載されたMID(501)の論理メモリに格納されたデータが連続しているか否かを表す情報である。ここでは、1bitで表現され、'1'で連続、'0'で不連続として表すとする。PLF(512)は、あるMID(501)の論理メモリに格納されたデータとPI(509)に記載されたMID(501)の論理メモリに格納されたデータが連続しているか否かを表す情報である。ここでは、1bitで表現され、'1'で連続、'0'で不連続として表すとする。
【００３０】
次に、メモリ管理部210を制御するメモリ管理制御部305の機能について説明する。メモリ管理制御部305は、以下の機能を提供する。
(1)リセット要求
メモリ管理部210を使用する前や、不具合が発生した場合にリセット命令を発行する。
(2)初期化要求
メモリ管理部210を使用する際に必要となる初期化を行う命令を発行する。論理メモリの数や、各論理メモリのサイズの設定や、各論理メモリと物理アドレスの対応付け等を行う。
(3)テーブル情報取得要求
メモリ管理部210で管理されているテーブル情報を取得する命令を発行する。
(4)テーブル情報更新要求
メモリ管理部210へ情報の更新を要求する。
情報を更新するときは、主に以下の３つのケースである。
(4-1)論理メモリ獲得要求
いずれかのモジュールが論理メモリを使用したいときに、メモリ管理部210に空き論理メモリを問い合わせ、使用するための要求をする。
(4-2)論理メモリ解放要求
いずれかのモジュールが論理メモリを解放したいときに、メモリ管理部210に解放する論理メモリに関する情報と併せて解放要求をする。
(4-3)解析結果通知・更新要求
受信したパケットを解析し、解析結果をメモリ管理部210に通知し、通知結果をもとに前記テーブル情報の更新を要求する。
【００３１】
次に、メモリ管理部210の機能について図6を用いて説明する。図6は、メモリ管理部210の処理機能を表すブロック図である。外部インターフェイス部600は、他のモジュールとのバスアクセス及び割り込み信号のインターフェイス機能を有する。内部制御部601は、メモリ管理部210全体の制御を行う。テーブル情報処理部602は、各種テーブル情報の処理を行う。テーブル情報記憶部603は、テーブル情報処理部602から書き込み、読み込み処理により変更可能な構成を有している。以下、上記600〜603のそれぞれについて説明する。  
【００３２】
まず、外部インターフェイス部600について説明する。通知部604は、メモリ管理部210から通信制御部203に、通知したい内容がある場合に使用される。例えば、通知部604は、メモリ管理部210内の処理が終了したタイミングや、メモリ管理部210の内部でエラーが発生した場合に使用される。また、ローカルバス接続部605は、ローカルバス204を介して、メモリ管理部210が各モジュールにアクセスでき、また各モジュールがメモリ管理部210に対し、各種命令をセットするためのインターフェイスである。
【００３３】
次に、内部制御部601について説明する。命令解析部606は、メモリ管理部210が各モジュールから受け取った命令を解析し、解析結果を基に次の処理を振り分け、テーブル情報処理部602に適切な処理を実行させるための機能を有する。状態管理部607は、メモリ管理部210の各種処理ブロックの状態を管理する機能を有する。状態管理部607は、何かの処理が実行中に、同時に同じ処理を行う命令が発行される等のことが無いように状態を管理している。処理結果出力部608は、テーブル情報処理部の処理結果を受け、処理結果を出力する機能を有する。リセット部609は、メモリ管理部210をリセットする機能を有する。
【００３４】
次に、テーブル情報処理部602について説明する。比較処理部610は、2つのORDER(508)の比較、すなわち各論理メモリに格納された2つのデータの順序の比較を行う。連続性確認部611は、現在論理メモリに格納されたデータと、NI(509)またはPI(510)に格納されたMIDが指し示す論理メモリに格納された2つのデータが連続しているかの確認処理を行う。この確認処理は、ORDER(508)、DS(506)、OFFSET(505)の情報を基に行われる。条件検出部612は、条件検出を行う。本実施形態では、IPリアセンブル処理及びTCPリオーダリング処理を実施するので、条件検出部612は、2つの処理それぞれの完了を検出する処理を行う。この検出処理は、NLF(511)、または、PLF(512)に記載された情報を使用して行われる。詳しくはIPリアセンブル処理の説明、及び、TCPリオーダリング処理の説明の中で述べる。
【００３５】
論理メモリ取得部613は、各モジュールから論理メモリの獲得（使用）要求を受け取ったときに、テーブル情報記憶部603から空き論理メモリを検索する。そして、論理メモリ取得部613は、検索によって得た論理メモリ（使用許可された論理メモリ）を、使用済みとするように、論理メモリ管理情報テーブル617を更新する。具体的には、論理メモリ取得部613は、テーブル情報更新部を介して、論理メモリ管理情報テーブル617において、使用許可された論理メモリのMID（501）に対するUSE（504）を'1'に変更する。また、論理メモリ取得部613は、使用許可する論理メモリのMID(501)を処理結果出力部608に出力する。論理メモリ解放部614は、各モジュールから使用しなくなった論理メモリの解放要求を受け取った際に、解放要求と同時に通知された、開放する論理メモリのMID(501)を受け取る。そして、論理メモリ解放部614は、テーブル情報記憶部603の情報を更新する。具体的には、論理メモリ解放部614は、テーブル情報更新部を介して、論理メモリ管理情報テーブル617において、解放する論理メモリのMID（501）に対するUSE（504）を'0'に変更する。テーブル情報更新部615は、上記処理部610〜614による処理結果、または、メモリ管理制御部305のテーブル情報変更要求を基に、テーブル情報記憶部603に記憶された情報の更新を行う。テーブル情報取得部616は、メモリ管理制御部305からのテーブル情報取得要求を受けて、テーブル情報記憶部603から要求に見合った情報を取得して処理結果出力部608を使用して出力する。
【００３６】
次に、テーブル情報記憶部603について説明する。論理メモリ管理情報テーブル617は、図5に示したテーブルに相当する。IPリアセンブル管理情報テーブル618は、IPリアセンブルの処理において、必要となる情報テーブルである。これについてはIPリアセンブル処理の説明の中で詳細に述べる。TCPリオーダリング管理情報テーブル619は、TCPリオーダリング処理において、必要となる情報テーブルである。これについてはTCPリオーダリング処理の説明の中で詳細に述べる。テーブル情報記憶部603に関しては、必ずしもメモリ管理部210内になければならないわけではない。例えば、主記憶部201内にあっても良いし、他の記憶部に併用されても良い。
【００３７】
次に、本実施形態によるTCP/IPパケットの受信動作について、［１．パケットの受信処理］、［２．IPリアセンブル処理］、［３．TCPリオーダリング処理］、［４．ソケット処理］の順で説明する。
【００３８】
［１．パケットの受信処理］
まず、外部機器106からパケットを受信したときにおいて、パケットを主記憶部201に格納するまでの各種の動作フローについて図7を用いて説明する。最初に、通信インターフェイス部206は、パケットを受信したことを検知すると、信号線209を使用して割り込み信号を送信することにより通信制御部203に受信を通知する(S701)。割り込み信号を受信した通信制御部203は、通信インターフェイス部206に割り込み要因を問い合わせる(S702)。通信制御部203は、割り込みが受信割り込みであることがわかると、パケットを主記憶部201へ取り込むための論理メモリを獲得するため、メモリ管理部210へ、論理メモリの獲得要求を送信する(S703)。なお、この時点で、通信制御部203は、受信パケットのサイズがわかっていれば、そのサイズが収まるだけの論理メモリ容量を要求し、受信パケットのサイズがわかっていない場合は、予め定められたサイズを要求する。例えばEthernet(登録商標)では、MTU(Maximum Transmission Unit)が1500bytesと定められているため、通信制御部203は、そのサイズが収まるだけ論理メモリを要求する。さらに、MTUサイズを超えるようなパケット使用した通信が要求される場合は、通信制御部203は、その最大サイズに合わせて論理メモリを要求すれば良い。
【００３９】
通信制御部203から論理メモリ獲得要求を受け取ったメモリ管理部210は、受け取った要求を解析し、必要となる論理メモリを使用していないものから選択して、通信制御部203に使用可能な論理メモリ情報を返す(S704)。論理メモリのMID(501)の通知方法は、メモリ管理部210内部レジスタに表示させてもよいし、補助記憶部205に情報を記載しておいても良い。メモリ管理部210から、使用可能な論理メモリを受け取った通信制御部203は、その論理メモリを転送先、通信インターフェイス部206を転送元として、DMA転送するようにDMA部211に要求する(S705)。転送要求を受け取ったDMA部211は通信インターフェイス部206から、主記憶部201への転送を開始する（S706）。DMA転送が開始され(S707)、1パケット分の転送が終了すると、DMA部211は、通信制御部203にパケット受信が完了したことを通知する(S708)。なお、論理メモリ獲得要求処理(S703)は、図7では通信制御部203が行っているが、DMA部211が行っても良い。
【００４０】
［２．IPリアセンブル処理］
次にIPリアセンブル処理について説明する。図8は、電子機器101が外部機器106からパケットを受信してからIPリアセンブル処理が完了するまでの各モジュール間のデータフローを示したものである。最初に、情報処理装置103が図7のS701〜S708の手順で1パケットを受信する(S801)。次に、通信制御部203は受信パケットに含まれるMACヘッダを用いてIPパケットか否かの判断を行い、IPパケットであると判断した場合には、さらにIPヘッダの解析を行う(S802)。ここで、通信制御部203は受信パケットがIPフラグメントパケットであるか等の解析を行うが、詳しくは後述する。通信制御部203は、パケット解析が終わると、メモリ管理部210に解析の結果を通知する(S803)。解析結果の通知を受けたメモリ管理部210は、取得した解析結果を基に図5に示した論理メモリ管理テーブルを更新する(S804)。これについても後述する。さらに、メモリ管理部210は、受け取った情報にフラグメンテーション情報が含まれていた場合は、合わせてIPリアセンブル処理を実行する(S804)。そして、IPリアセンブル処理が完了し、かつ、すべてのフラグメントパケットが揃ったことと、フラグメントパケットの順序付けが終了した場合、メモリ管理部210は、通信制御部203にリアセンブル処理完了通知をする(S805)。
【００４１】
以下に、図8に示したIPリアセンブル処理フローにおいて特徴となる、S802及びS804の処理について詳細に説明する。まず、通信制御部203によるS802の処理について、図10を用いて詳細に説明する。なお、通信制御部203の機能ブロックは図3に示されている。また、IPヘッダ(IPv4)フォーマットを図11に示す。
【００４２】
最初に、接続状態監視部311はローカルバス接続部309を介して受信通知を受信したか否かを判定する(S1002)。ここで、受信通知が発生する事象は2つある。1つ目は、DMA部211が受信パケットを主記憶部201へ格納することが終了したときにDMA部211から通知される場合である。2つ目は、メモリ管理部210がIPフラグメントパケットのリアセンブル処理を終了し、再構築パケットが生成されたときに、メモリ管理部210から通知される場合である。その何れかの事象が発生するまで、接続状態監視部311は、受信通知を待ち続ける(S1002のNoからS1003)。
【００４３】
接続状態監視部311は、受信通知を確認すると（S1002のYes）、処理をメモリ管理制御部305へ移す。メモリ管理制御部305は、IPパケットの整合性を確認する(S1004)。例えば、メモリ管理制御部305は、図11の各フィールドに格納されている情報が正しいかといったことや、Header Checksum(1110)を確認し、パケットに誤りがあるかなどを確認する。メモリ管理制御部305は、パケットにIPとしての整合性が確認できなかった場合は（S1005のYes）、パケットを破棄するための処理を行う。すなわち、メモリ管理制御部305は、メモリ管理部210に対し、ローカルバス接続部309を介して現在解析していたパケットが格納された論理メモリを開放する様に命令を行う(S1006)。メモリ管理制御部305は、受信パケットにIPとしての整合性が確認できた場合は（1005のNo）、次に受信パケットがフラグメンテーションされているか否かを確認する(S1007)。すなわち、メモリ管理制御部305は、受信パケットがフラグメントパケットであるか否かを確認する。このために、メモリ管理制御部305は、は、受信パケットにおけるフラグメンテーション情報を確認する。フラグメンテーション情報とは、IPヘッダのFlags(1106)及びFragment Offset(1107)である。フラグメンテーションされていないIPパケットのフラグメンテーション情報は全て'0'となるため、このフィールドを確認することにより、IPリアセンブル処理の必要性の有無が分かる。
【００４４】
受信パケットがフラグメントパケットであった場合（S1008のYes）、すなわち、IPヘッダのFlags(1106)において'1'が存在した場合はリアセンブル処理が必要になることを意味する。メモリ管理制御部305は、リアセンブル処理の前にリアセンブル処理状況の確認及び更新作業を行う(S1012)。リアセンブル処理を正しく行うためには、解析中のフラグメントパケットを識別する必要がある。その識別に必要となるのが、IPヘッダのIdentification(ID:1105)、Source Address(SA:1111)、Destination Address(DA:1112)、及び、Protocol(1109)の4つのフィールドである。任意の2つのフラグメントパケットにおいて、この4つの情報が一致している場合、2つのフラグメントパケットは同一インターネットデータグラムとして処理が行われる。このために、メモリ管理制御部305は、図9に示すテーブル情報を管理する。
【００４５】
図9において、先に説明したIPヘッダの4つの情報SA(901)、DA(902)、Protocol(903)、ID(904)が格納される。また、この4つの情報のセットに対して、CID(905:507と同一)がユニークに割り振られる。メモリ管理制御部305は、解析中のフラグメントパケットのCID(507)が、すでにテーブルに登録されているか確認を行い、登録済みであれば、登録されているCID(507)と解析中のフラグメントパケットを関連付けておく。未登録であれば、新規に図9のテーブルに登録を行う。
【００４６】
図10に戻り、次に、メモリ管理制御部305は、IPヘッダのFragment Offset(1107)の確認を行う(S1013)。もしFragment Offset(1107)が'0'であった場合は（S1014のYes）、解析中のフラグメントパケットのIPヘッダ情報は、リアセンブル後のIPヘッダ情報の一部として使用されるため、それらの情報を基にIPヘッダを生成する(S1015)。次に、IPヘッダのFlags(1106)の確認を行う(S1016)。Flags(1106)におけるMFビットの値が'0'であった場合は（S1017のYes）、メモリ管理制御部305は、解析中のフラグメントパケットは最終フラグメントであることがわかり、リアセンブル後のデータサイズの把握が可能となる。従って、メモリ管理制御部305は、リアセンブル後のデータサイズを解析し、リアセンブル後のIPヘッダに使用する(S1018)。フラグメンテーション情報に関する解析が一通り終わると、メモリ管理制御部305は、解析中のパケットが格納されている論理メモリのMID(501)と、解析中のパケットのデータサイズをローカルバス接続部309を介してメモリ管理部210へ通知する(S1019)。さらに、IPリアセンブル処理が必要となるため、フラグメンテーション情報の解析結果と、割り当てたCID(507)を合わせて、メモリ管理制御部305は、ローカルバス接続部309を介してメモリ管理部210へ通知し(S1019)、処理を終了する。なお、解析中のパケットのデータサイズの情報はIPヘッダのTotal Length(1104)から取得可能である。
【００４７】
一方、解析中パケットがIPフラグメントパケットではなかった場合（S1008のNo）、メモリ管理制御部305は、まずIPの上位プロトコルを示す、IPヘッダにおけるProtocol(1109)を解析する(S1009)。そして、さらにS1004で解析して得たパケットのデータサイズを、図5に示したテーブル上において更新するために、メモリ管理制御部305は、は、MID(501)と合わせて、ローカルバス接続部309を介してメモリ管理部210へ解析結果を通知する(S1010)。このとき、もしCID(507)とProtocol(1109)とを関連付けるように設計されていれば、メモリ管理制御部305は、その情報も付け加えて通知しても良い。また、パケットのデータサイズは、IPヘッダ解析の終了が終わっている状態なので、メモリ管理制御部305は、OFFSET(505)にIPヘッダサイズをいれておくのもよい。それにより、上位プロトコル処理時において、素早くIPパケットのペイロード位置が特定される。場合によっては、IPの上位プロトコルのヘッダ位置が特定される。そして、メモリ管理制御部305は、IP処理からさらに上位プロトコル処理へプロセスを移行させるために通信上位層処理部302へ処理を移し(S1011)、処理を終了する。
【００４８】
次に、メモリ管理部210によるS804の処理について詳細に説明する。なお、S804は、図10のS1019において、通信制御部203がメモリ管理部210に対して解析結果等を通知し、この通知を受けたメモリ管理部210が行う処理である。以下に、S804の処理について図12及び図13を用いて説明する。図12は、例としてメモリ管理部210の処理をフローチャートで表したものである。図13は、図12で記載される処理を簡易的な図で表したものである。なお、メモリ管理部210の機能ブロックは図6に示されている。
【００４９】
図12において、まず、命令解析部606は、通信制御部203から、ローカルバス接続部605を介して情報登録通知を受信したか否かを判定する。この情報登録通知には、リアセンブル対象である受信パケットが格納されている論理メモリのMID(501)と解析情報が含まれている。命令解析部606が情報登録通知の受信を確認した場合（S1201、S1202のYes）、さらに、その通知の内容を確認する(S1204)。なお、命令解析部606は情報登録通知があるまで、受信を待つ（S1202のNo、S1203）。通知の内容を確認した後に、命令解析部606は、登録・更新を行う論理メモリの論理メモリ管理情報を論理メモリ管理情報テーブル617から選定する(S1205)。
【００５０】
次に、命令解析部606は、受信した通知にフラグメンテーション情報が含まれていない場合（S1206のNo）、通信制御部203からの通知内容を元に、テーブル情報更新部615を介して論理メモリ管理情報テーブル617の更新を行う(S1207)。合わせて、CID(507)の割り当ても要求されている場合は、命令解析部606は、論理メモリ管理情報テーブル617のCID(507)の更新を行う(S1207)。対象とした論理メモリにCID(507)を付与した場合は、同一CID(507)が振られている、他の論理メモリにおけるNI(509)とPI(510)の情報も論理メモリ管理情報テーブル617上で変更する(S1208)。このとき、キュー管理の方法、例えば、FIFO/LIFOの種別に応じて、適切にNI(509)とPI(510)を変更すればよい。
【００５１】
一方、命令解析部606がS1204において通知の内容を確認し、通知にフラグメンテーション情報が含まれていた場合（S1206のYes）リアセンブル処理が必要であると判断する。そして、命令解析部606は、テーブル情報取得部616を介して、受信したCID(507)をIPリアセンブル管理情報テーブル618と照合する(S1209)。IPリアセンブル管理情報テーブル618の例を図13に示す。すでに、命令解析部606における解析結果に基づいて、同一データグラムであるフラグメントパケットには同一CID（507）が割り当てられている。メモリ管理部210は、CID(507)毎にIPリアセンブル処理を行う必要があるため、CID(507)毎に独立したIPリアセンブルチェーン情報(1301)として管理する。該当するCID(507)のIPリアセンブルチェーン情報(1301)があれば、命令解析部606は、その情報にパケットが格納されている論理メモリに係る論理メモリ管理情報を追加することを決定する。もし、該当するCID(507)のIPリアセンブルチェーン情報(1301)が無い場合は、命令解析部606は、テーブル情報更新部615を介して新規にIPリアセンブルチェーン情報(1301)の作成を行う。そして、作成されたIPリアセンブルチェーン情報(1301)に、命令解析部606は、受信したMID(501)の論理メモリ管理情報を追加することを決定する(S1209)。
【００５２】
次に、命令解析部606は、Flags(1106)のMFビットを確認し、確認結果に応じて処理を切り替える（S1210）。MFが'0'である場合は（S1210のYes）、そのフラグメントパケットは最終フラグメントパケットであることを示すので、メモリ管理部210は、IPリアセンブルチェーン情報(1301)の一番末尾に、論理メモリ管理情報の登録を行う(S1211)。また、MFが'0'でない場合は（S1210のNo）、さらにフラグメントパケットがリアセンブル後にどの位置にあたるかを特定するため、メモリ管理部210は、位置情報としてのIPヘッダのFragment Offset(1107)の確認を行う(S1212)。IPヘッダのFragment Offset(1107)が'0'である場合は（S1213のYes）、先頭のパケットの開始点を基点としたオフセットが'0'であり、そのフラグメントパケットはパケットデータ群の先頭であることを示すので、IPリアセンブルチェーン情報(1301)の先頭に登録する(S1214)。Fragment Offset(1107)が'0'ではない場合は（S1213のNo）、登録する位置の特定を行った上で、論理メモリ管理情報の登録を行う(S1215)。
【００５３】
S1215における登録する位置の特定は、例えば以下のように行われる。各IPリアセンブルチェーン情報(1301)には、同一のCID(507)に属する論理メモリ管理情報が、データ順、つまり、Fragment Offset(1107)順に並んで格納されている。また、論理メモリ管理情報のORDER(508)には、Fragment Offset(1107)が格納されている。そこで、比較処理部610は、IPリアセンブルチェーン情報(1301)の先頭の論理メモリ管理情報から順に、論理メモリ管理情報に格納されているORDER(508)と、今、格納しようとしている論理メモリ管理情報のFragment Offset(1107)と大小比較を行っていく。そして、比較処理部610は、最初にORDER(508)の方が大きくなる場所の直前の場所に、論理メモリ管理情報を登録すると決定する。なお、IPリアセンブルチェーン情報(1301)に格納されている各論理メモリ管理情報は、データ順に並んで格納されているので、この大小比較は、ハードウエアで処理するのに適している。すなわち、１つの論理メモリ管理情報に比較処理部610がアクセスするのに、ハードウエアで使用される１クロックまたは１サイクルでアクセスができるため、高速な位置特定を可能とする。
【００５４】
登録する位置の特定ができたら、次に連続性確認部611は、前後のフラグメントパケットとの連結に係る処理を行う(S1216)。最初に、前のフラグメントパケットとの連結処理について説明する。図18は、登録済みであるフラグメントパケットAと、フラグメントパケットAの次のペイロードが含まれており、新規に登録するフラグメントパケットBにおける、Fragment Offset(1107)を軸とした位置関係を表している。なお、フラグメントパケットAは、MID(501)=Xに格納されており、フラグメントパケットBは、MID(501)=Yに格納されているものとする。先に、フラグメントパケットBの登録位置において、最初にORDER(508)の方が大きくなる場所の直前の場所に論理メモリ管理情報を登録するとした。従って、フラグメントパケットAのFragment Offset(1107) A (以後、FO_Aと表記。フラグメントパケットB及びCについても同様にFO_B及びFO_Cと表記。)が、FO_Bより大きいことはない。
【００５５】
よって、図18(A)〜(D)に示す4通りの状態が発生する。図18(A)の状態は、まだフラグメントパケットAとフラグメントパケットBの間のフラグメントパケットが受信、もしくは、解析が完了していない状態である。従って、MID(501)=Xの論理メモリ管理情報のNI(509)X、NLF(511)Xにはそれぞれ、NI(509)X=Y、NLF(511)X=0 が格納される。また、MID(501)=Yの論理メモリ管理情報のPI(510)Y、PLF(512)Yにはそれぞれ、PI(510)Y=X、PLF(512)Y=0が格納される。図18(B)の状態は、フラグメントパケットAとフラグメントパケットBの境界において、過不足なくデータが到着している状態である。このときは、NI(509)X=Y、NLF(511)X=1となり、また、PI(510)Y=X、PLF(512)Y=1となる。
【００５６】
図18(C)の状態は、フラグメントパケットAのペイロードとフラグメントパケットBのペイロードが一部重複しているケースである。仮に、IPリアセンブル処理において、データが重複した場合は後着優先で処理しているとする。その場合、先着のデータに対して上書きを行う必要がある。従って、データが重なっている部分のサイズをLENDUPLEXとすると、MID(501)=XのDS(506)に格納されている元の値から、LENDUPLEXを差し引いた値に更新することにより、この処理を実現できる。図18(D)の状態は、フラグメントパケットAのペイロードの全てに対して、フラグメントパケットBのペイロードの一部または全てが位置的に重なっているケースである。この場合、フラグメントパケットAのペイロードはすべてフラグメントパケットBのペイロードと重複しているため、フラグメントパケットAは破棄される。つまり、IPリアセンブルチェーン情報(1301)からフラグメントパケットAの情報が破棄される。そして、もともとフラグメントパケットAが格納されていたMID(501)=Xの論理メモリ管理情報において、PI(509)Xに格納されているMID(501)と、フラグメントパケットBとの接続の有無を再び判定することになる。
【００５７】
次に、後ろのフラグメントパケットとの連結に係る処理について説明する。図19は、登録済みであるフラグメントパケットCと、フラグメントパケットCの前のペイロードが含まれており、新規に登録するフラグメントパケットBにおける、Fragment Offset(1107)を軸とした位置関係を表している。なお、フラグメントパケットCは、MID(501)=Zに格納されており、フラグメントパケットBは、MID(501)=Yの論理メモリに格納されているとする。先に、フラグメントパケットBの登録位置において、最初にORDER(508)の方が大きくなる場所の直前の場所に論理メモリ管理情報を登録するとした。
【００５８】
従って、FO_Bが、FO_Cより大きいことはない。よって、図19(A)〜(D)に示す4通りの状態が発生する。図19(A)の状態は、まだフラグメントパケットBとフラグメントパケットCの間のフラグメントパケットが受信、もしくは、解析が完了していない状態である。従って、MID(501)=Yの論理メモリ管理情報のNI(509)Y、NLF(511)(509)Yにはそれぞれ、NI(509)Y=Z、NLF(511)(509)Y=0 が格納される。また、MID(501)=Zの論理メモリ管理情報には、PI(510)Z=Y、PLF(512)Z=0が格納される。図19(B)の状態は、フラグメントパケットBとフラグメントパケットCの境界において、過不足なくデータが到着している状態である。このときは、NI(509)Y=Z、NLF(511)Y=1となり、また、PI(510)Z=Y、PLF(512)Z=1となる。
【００５９】
図19(C)の状態は、フラグメントパケットBのペイロードとフラグメントパケットCのペイロードが一部重複しているケースである。今、IPリアセンブル処理において、データが重複した場合は後着優先で処理しているので、すでに登録済みのデータに対して上書きを行う必要がある。従って、データが重なっている部分のサイズをLENDUPLEXとすると、MID(501)=ZのOFFSET(506) Zの値を、格納されている元の値からLENDUPLEXを加えた値に更新することにより、この処理を実現できる。図19(D)の状態は、フラグメントパケットCのペイロードの全てに対して、フラグメントパケットBのペイロードの一部または全てが位置的に重なっているケースである。この場合、フラグメントパケットCのペイロードはすべてフラグメントパケットBのペイロードと重複しているため、フラグメントパケットCは破棄される。つまり、IPリアセンブルチェーン情報(1301)からフラグメントパケットCの情報が破棄される。そして、もともとフラグメントパケットCが格納されていたMID(501)=Zの論理メモリ管理情報において、NI(509)Zに格納されているMID(501)と、フラグメントパケットBとの接続の有無を再び判定することになる。
【００６０】
なお、前述の図18、及び、図19に示したケースに該当しないケースも存在する。後着したフラグメントパケットのペイロード位置が、すでに登録済みのフラグメントパケットの１つのペイロード位置に収まってしまう場合である。その様子を図20に示す。図20は、先着して、登録済みであるフラグメントパケットAがすでにあり、後着のフラグメントパケットBを新たに登録するときの処理について模式的にあらわしている。今、
FO_A ＜ FO_B
かつ、
FO_A + DS_A ＞ FO_B + DS_B
を満たしているとする。この場合、フラグメントパケットAの有効データ領域がフラグメントパケットBにより分断されることが分かる。しかし、本論理メモリ管理情報では、ADDR(502)を基準位置として、OFFSET(505)及びDS(506)で挟まれた、位置領域しか記述することできない。
【００６１】
従って、複数領域を表記するには、コピーを行う必要がある。今、フラグメントパケットAのメモリ管理情報のコピーをA’とする。なおこの際、データを実際に他の論理メモリにコピーする必要は必ずしもない。論理メモリ管理情報の参照先は、フラグメントパケットAと同一の物理アドレスであるADDR(502) Xと同一にしておき、OFFSET(505)及びDS(506)を変更することにより違う領域を表記することができる。このようにすることにより、分割数が増えても、ペイロードをコピーすることなく、有効データが格納されている領域を複数表記することができる。
【００６２】
図12に戻り、ひとつのIPフラグメントパケットのリアセンブル処理について、S1216で完了したので、次に状態管理部607は、全てのIPデータグラムが到着し、リアセンブル処理が完了したか否かの確認を行う(S1217)。具体的には、処理中のCID(507)のIPリアセンブル管理情報テーブル1301の先頭に登録されているフラグメントパケットが格納された論理メモリ管理情報を確認していく。論理メモリ管理情報には、リンク情報を表すNLF(511)及びPLF(512)が存在する。したがって状態管理部607は、この情報を元に、フラグメントパケットの先頭から末尾までNLF(511)または、PLF(512)にすべて1が立っているか否かを順次調べていくことにより確認できる。この確認が、ハードウエアで高速に実現可能であるように、本実施形態で説明しているような、データ順にソートされる構成をとるIPリアセンブル管理情報テーブルを用いることが望ましい。フラグメントパケットが全て到着してリアセンブルが完了した場合は、処理結果出力部608は、通知部604を介して通信制御部203にリアセンブルが完了したことを通知する(S1219)。この時、処理結果出力部608は、通信制御部203の要求に応じて関連情報も併せて通知を行う。例えば、リアセンブルが完了したグループのCID(507)が求められていたら、処理結果出力部608は、CID(507)を提供する。また、一連のデータリストが要求されていたら、処理結果出力部608は、リアセンブルが完了したCID(507)のIPリアセンブル管理情報テーブル1301を出力しても良い。事前に通信制御部203とメモリ管理部210で取り決めがあれば、処理結果出力部608は、IPリアセンブル管理情報テーブル1301の格納先の物理アドレスまたは、論理アドレスに該当するMID(501)を提供しても良い。以上により、処理は終了する。
【００６３】
以上、メモリ管理部210の処理について、図12を用いて説明した。ここでは、フローチャートを用いて処理手順について説明した。ただし、メモリ管理部210は図6のように各機能ブロックが独立して動作することができるハードウエアで実施されることが好適である。それにより、図9において、複数のCID(905)が登録されている状態であっても、複数のリアセンブル処理がパイプライン処理として実行でき、効率的な処理が可能となる。
【００６４】
［３．TCPリオーダリング処理］
次に、TCPリオーダリング処理について、メモリ管理部210を適用する場合について説明するにあたり、まず、TCPリオーダリング処理の概要について、図15を用いて簡単に説明する。TCPの受信では、所定の管理部は、RCV.NXT(1501)と RCV.WND(1502)の2つの値を用いて、3つの区間(1503,1504,1504)を管理して行っている。RCV.NXT(1501)は、次に受信すべき受信シーケンス番号である。従って、RCV.NXT(1501)より前のシーケンス番号、つまり区間1503の位置に該当するパケットは、すでに受信済みあるとして、破棄される。RCV.WND(1502)は、受信ウィンドウと呼ばれる値である。RCV.WND(1502)は、TCP受信モジュールが、データ受信のために現在利用できるバッファサイズに応じて変わる値である。従って、RCV.NXT(1501)から、RCV.NXT(1501) + RCV.NXT(1502) -1の間に該当するセグメントに関しては、受信すべきデータまたは制御であるとして適切に処理する必要がある。その際に、データの並び順を整列する処理をTCPリオーダリングと呼ぶ。
【００６５】
図14に本実施形態におけるTCPリオーダリング処理時における、通信制御部203及び、メモリ管理部210の処理を示す。図14(A)は、通信制御部203による処理を示しており、図14(B)はメモリ管理部210による処理を示している。大まかな手順としては、TCPヘッダ解析は通信制御部203で行い、メモリ管理部210へ解析通知を行う。解析結果通知を受けたメモリ管理部はTCPリオーダリング処理を実行し、TCPリオーダリングが終わると、通信制御部203へTCPリオーダリング処理の完了通知を行う。完了通知を受けた通信制御部203は、通知内容を確認する。そして、本実施形態では、通信制御部203はその後、ソケット処理部3031へ処理を移行させる。
【００６６】
まず、図14(A)から説明する。最初にメモリ管理部210から、TCPリオーダリング完了通知があった場合には（S1402のYes）、メモリ管理制御部305は、メモリ管理部210から情報を受け取りそのデータを元に、ソケット処理部3031に情報を渡す(S1403)。S1403の処理の詳細については後述する。一方、メモリ管理部210から、TCPリオーダリング完了通知がない場合は（S1402のNo）、メモリ管理制御部305は、処理をS1404に進める。そして、メモリ管理制御部305は、IP処理部3033からIPの受信処理が完了しTCPの受信処理要求があった場合(S1404のYes)、通知内容を確認する(S1406)。具体的には、メモリ管理制御部305は、IP処理部3033に対してTCPパケットの格納された論理メモリのMID(501)を確認して、TCP受信処理を行うパケットが格納された位置を確認する。次に、メモリ管理制御部305は、該当MID(501)にアクセスし、TCPヘッダのプロトコルとしての整合性を確認する(S1407)。
【００６７】
図17にTCPヘッダについて示す。S1407の処理における整合性とは、Destination Address(1112)が自機器宛であるかといったことや、Checksum(1709)の値が正しいかといったことを確認することである。もし、エラーが確認された場合は(S1408のYes)、メモリ管理制御部305は、受信パケットを破棄するために、ローカルバス接続部309を介してメモリ管理部210へ情報の登録を行う(S1409)。すなわち、メモリ管理制御部305は、破棄するMID(501)を論理メモリ解放命令とともに通知する。エラーが無い場合は(S1408のNo)、メモリ管理制御部305は、受信したTCPパケットが使用しているソケットを確認する(S1410)。ソケット通信でTCP/IPを使用している場合、ソケットには固有の名前が付与される。その固有の名前のことをソケット記述子と呼び、図11、及び、図17におけるSource Address(1111)、Destination Address(1112)、Source Port(1701)、Destination Port(1702)の組み合わせごとに固有のソケット記述子が付与される。
【００６８】
また、本実施形態によるメモリ管理方法を用いたTCPリオーダリング処理は、ソケット記述子毎にCID(507)を割り振って処理を行う。従ってメモリ管理制御部305は、図21に示すTCPリオーダリング対応テーブルを管理している。図21において、Sock ID(2101)は、ソケット記述子である。Source Address(2102)は、Source Address(1111)と同一である。Destination Address(2103)は、Destination Address(1112)と同一である。Source Port(2104)は、Source Port(1701)と同一である。Destination Port(2105)は、Destination Port(2106)と同一である。CID(2106)は、CID(507)と同一である。このテーブルは、TCP/IP通信を開始する前に登録される。従って、通信制御部203は、図21のテーブル情報に登録されているものの中から、受信したTCPパケットが一致するものを検索する。
【００６９】
図14(A)に戻り、次に、メモリ管理制御部305は、制御ビットを確認する(S1411)。制御ビットとは、図17のControl Bits(1707)のことで、URG, ACK, PSH, RST, SYN, FINの6bitsからなる。詳細な説明は省略するが、通信制御部203は、TCPを使用した通信で必要となる処理を、制御ビットを元に確認を行いながら行う(S1412)。また、後述の受信処理（S1413でyesのときに行う処理）の後に制御ビットの処理を行わなければいけない場合もあるが、本発明の趣旨ではないので省略する。メモリ管理制御部305は、制御ビットの処理を行った後に、受信データの処理が有る場合は、ローカルバス接続部309を介してメモリ管理部210へ、解析したTCPヘッダの情報の通知を行う(S1414)。このときに、メモリ管理部210がTCPリオーダリング処理を実行するために、以下の4つの情報を合わせて通知する。TCPパケットが格納された論理メモリのMID(501)と、S1410の処理で確認した、ソケット記述子と対応付けられたCID(517)と、TCPヘッダサイズと、位置情報としてのSequence Number(1703)である。さらに必要により、メモリ管理制御部305は、TCPのペイロードサイズ等の他の情報の通知を行っても良い。
【００７０】
次に、メモリ管理部210におけるTCPリオーダリング処理について、図14(B)を用いて説明する。また、その処理を模式的に表したもの図16に示す。図16はTCPリオーダリング管理情報テーブル619を詳細に表したものである。TCPリオーダリング管理情報テーブル619は、CID(507)ごとに区別された、TCPリオーダリング管理情報1601を持つ。各TCPリオーダリング管理情報1601は、CID(507)とRCV.NXT(1501)とRCV.NXT(1501) + RCV.WND(1502)の3つの情報とセットで管理される。なお、この3つの情報については、必ずしもTCPリオーダリング管理情報テーブル619の内に持つ必要はない。また、各TCPリオーダリング管理情報1601には、該当するCID(507)が割り当てられた論理メモリ管理情報がORDER(508)順にソートされて格納されるようにメモリ管理部210に管理されている。また、RCV.NXT(1501)とRCV.NXT(1501) + RCV.WND(1502)の2つの値の初期値に関しては、TCPのコネクションが張られる時に、通信制御部203より、CID(507)と対応づけて通知されることが望ましい。TCP/IPの通信が進むつれ、RCV.NXT(1501)とRCV.NXT(1501) + RCV.WND(1502)の2つの値の更新は、メモリ管理部210が能動的に行っても良いし、通信制御部203の指示の元、その都度更新しても良い。
【００７１】
図14(B)の説明に戻る。最初に、命令解析部606が通信制御部203から、ローカルバス接続部605を介してTCPパケットの登録通知を受信した場合は（S1452のYes）、その通知内容の確認及び論理メモリ管理情報の更新を行う(S1454、S1455)。メモリ管理部210から受信する内容は、S1414で説明した内容である。命令解析部606は、その情報の整合性について確認を行う。次に、命令解析部606は、受信したMID(501)を元に、今回登録を行う論理メモリ管理情報の選定を行う。さらに、TCPヘッダのサイズを通信制御部203より通知されているので、命令解析部606は、その情報を元にテーブル情報更新部615を介して以下の処理を行う。すなわち、先にIPの処理を行ったときに、IPヘッダ分だけOFFSET(505)が加算されているので、論理メモリ管理情報テーブル617において、新たに通知されたTCPヘッダのサイズ分だけ、OFFSET(505)に加算する。これにより、TCPペイロードサイズは、DS(506) から OFFSET(505)を差し引いた値となり、高速にTCPリオーダリングを行うに当たり適した形となる。
【００７２】
次に、通信制御部203から通知を受けたCID(507)を元に、命令解析部606は、テーブル情報取得部616を介してTCPリオーダリング管理情報テーブル619から該当するTCPリオーダリング管理情報1601を照合する(S1456)。次に、命令解析部606は、通信制御部203より通知されたSequence Number(1703)を確認する（S1457）。すなわち、命令解析部606は受信パケットが有効データであるか否かを判断する。この判断は、Sequence Number(1703)が、RCV.NXT(1501)とRCV.NXT(1501) + RCV.WND(1502)の間、つまり、図15における区間2(1504)に収まっているか否かの判断である。上記の範囲に収まっていない場合(S1458のNo)は、受信処理すべきTCPパケットではないと判断し、命令解析部606は、破棄することを決定する。つまり、命令解析部606は、テーブル情報更新部615を介して、破棄するために論理メモリ管理情報の更新を行う(S1459)。有効データで合った場合(S1458のYes)は、命令解析部606は、テーブル情報更新部615を介してTCPパケットの登録する位置の特定、及び、前後の論理メモリ管理情報の更新を行う(S1460)。S1460の処理は、すでにIPリアセンブルで説明した、S1215とS1216の処理と基本的な方法は変わらない。
【００７３】
ただし、IPリアセンブル処理では、後着優先で上書き処理を行ったが、TCPリオーダリング処理では、先着優先で処理を行う。つまり、既に登録済みTCPパケットのペイロードと登録中TCPパケットのペイロードとで、Sequence Number(1703)の位置的に重複する部分がある場合は、連続性確認部611は、登録中ペイロードを削除する処理を行う。従って、登録中の論理メモリ管理情報のOFFSET(505)及びDS(506)が変更されることになる。すべてのペイロードで重複する場合には、登録中のTCPパケット自体が破棄される。また、RCV.NXT(1501) + RCV.WND(1502)を超えたデータにおいても破棄される。S1460の、受信パケットが格納された論理メモリの論理メモリ管理情報及び前後の論理メモリ管理情報の更新が終了したら、TCPリオーダリング処理の完了確認を行う(S1461)。IPリアセンブル処理では、状態管理部607が、全てのフラグメントパケットが揃ったかを確認したが、TCPリオーダリング処理では、処理結果出力部608は、受信順序が揃った部分から逐次ソケット処理部3031に上げて良い。従って、RCV.NXT(1501)に相当するSequence No(1703)のデータが存在するか、つまり、ソケット処理部3031は図15の区間2(1504)において先頭となるペイロードが到着しているか確認することになる。到着が完了している場合にTCPリオーダリングが完了したとしてソケット処理部3031は処理を進める。
【００７４】
TCPリオーダリングが完了している場合は、状態管理部607は、ペイロードのサイズがどこまで完了しているかを確認する。それは、先に説明したIPリアセンブル処理と同様に、論理メモリ管理情報のNLF(511)を先頭から順に確認すればよい。TCPリオーダリングが完了している1つないし複数の論理メモリ管理情報をリストアップしておく。TCPリオーダリングが完了している場合は、処理結果出力部608は、通知部604を介して通信制御部203に、TCPリオーダリングが完了したことを通知する(S1462、S1463)。通知内容は、TCPリオーダリングが完了したCID(507)と、先にリストアップしておいた論理メモリ管理情報リストである。この場合、論理メモリ管理情報の全ての項目を通知する必要は必ずしもない。一連の処理により、TCPパケットが論理的にリオーダリングされている。よって、ここでの必要な情報は、論理的にリオーダリングされたものを物理領域にリオーダリングするための情報である。具体的には、一つのCID(507)とリオーダリングが完了しているTCPパケットの一部またはすべてが格納された論理メモリの論理メモリ管理情報のうち、MID(501)、ADDR(502)、OFFSET(505)、DS(506)、ORDER(508)の組み合わせである。このうち、ORDER(508)に関しては、ORDER(508)の順に論理メモリ管理情報リストの出力が可能であるので、必ずしも必要ない。例えば、対象システムにおいて、TCPのACKパケットの生成を効率的に行うために、必要であれば提供しても良い。また、ADDR(502)に関しても、MID(501)とADDR(502)の対応情報を通信制御部203でも持っていれば、必ずしも必要ない。先に説明したS1403は、メモリ管理部210から、これらの情報を受け取る。そして、ソケット処理部3031で物理領域へのリオーダリングを行う。以上が、TCPのリオーダリング処理についての説明である。
【００７５】
［４．ソケット処理］
次に、通信制御部203のソケット処理について説明する。本実施形態によるソケット処理部3031は、TCP処理部3032より論理的に順序を保証されて受け取ったTCPペイロードを、ユーザーバッファ領域401のアプリケーションから指示された物理アドレスにコピーしてアプリケーションに通知する機能を持つ。ここで、論理的に順序を保証されて受け取ったTCPペイロードとは、ユーザーデータを物理的に順序保証した形のデータである。ソケット処理について図22を用いて詳細に説明する。まず、ソケット処理部3031は、TCP処理部3032より、受信処理結果を受信する(S2201)。受信後、ソケット処理部3031は、CID(507)からソケット記述子を確認し(S2203)する。そして、ソケット処理部3031は、アプリケーションによって指定され、また、アプリケーションのデータ受け取り場所であるユーザーバッファ領域401を、ソケット記述子を元に特定する(S2204)。次に、論理メモリに格納されており、論理的なTCPリオーダリングが完了したデータをユーザーバッファ領域401にコピーするために、ソケット処理部3031は、DMA部211に命令をセットする(S2205)。ソケット処理部3031は、DMA部211より完了通知を受信したら（S2206のYes）、アプリケーションに受信完了を通知する(S2208)。
【００７６】
S2205の処理の詳細説明の前に、DMA部211について、図23を補足的に使用して説明する。図23の(1)はDMA部211が有しており、通信制御部203がセット可能なレジスタを示す。DMA制御ビット2300は、DMAの実行や停止、DMA部211のリセット機能を制御するのに使用される。転送先物理アドレス2301は、転送元からのデータがコピーされる先の物理アドレスである。転送元物理アドレス(1)2302は、最初に読み出しが行われる、転送元のベースとなるアドレスである。転送元物理アドレス(2)2303、転送元物理アドレス(3)2304はそれぞれ、2回目、3回目に読み出しが行われる、転送元のベースとなるアドレスである。オフセットサイズ(1)2305は、転送元物理アドレス(1)からの実際に読み出しを行う際のオフセットサイズである。オフセットサイズ(2)2306、オフセットサイズ(3)2307はそれぞれ、転送元物理アドレス(2)及び転送元物理アドレス(3)について同様の機能を提供する。転送サイズ(1)2308は、転送元物理アドレス(1)2302＋オフセットサイズ2305(1)の位置から、物理アドレスが連続されるように読みだす時のサイズである。転送サイズ(2)2309、転送サイズ(3)2310も同等の機能を提供する。図23の(2)にDMA部211を使用し、3か所の連続領域からデータをコピーした結果について示す。図23の(2)に「DMA完了結果」と示したように、複数領域からのデータを一か所にまとめる機能をDMA部は有しているものとする。
【００７７】
S2205の処理の詳細説明に戻る。図23で示したDMA部211の命令をセットするに当たり、本実施形態によるメモリ管理方法を使用したTCPリオーダリング処理は、他に特別な処理を有することなく速やかにDMA部211への命令を準備することを可能とするのに適している。転送先物理アドレス2301は、受信したCID(507)から、S2203及びS2204の処理を元に速やかに準備できる。各転送元物理アドレスは、各論理メモリ管理情報における、MID(501)に該当する。各オフセットサイズは、各論理メモリ管理情報における、OFFSET(505)に該当する。各転送サイズは、各論理メモリ管理情報における、DS(506) − OFFSET(505)に該当する。また、リオーダリング順序順に各論理メモリ管理情報におけるMID(507), OFFSET(505), DS(506)のセットが出力できるので、DMA部211への命令配置箇所の特定もそのまま適用可能である。従って速やかにDMA部211への命令セットが完了することにより、そのことは速やかにアプリケーションへデータを届けることを可能とする。
【００７８】
以上、本実施形態によるソケット処理部におけるソケット処理について説明した。なお、TCP通信ではアプリケーションから送受信を要求されたデータを、データの到着順序を保証して、他（機器）のアプリケーションに届ける責任を持つ。従って、上記に説明したソケット処理の一部は、ソケット処理部において必須ではないため、TCP処理部で行う必要がある場合もある。その場合、論理的なリオーダリング結果を物理的にリオーダリングするところまではTCP処理部で実行する。その後、ソケット処理部に物理的なリオーダリング結果を通知し、そこでソケット処理部がユーザーバッファ領域401に物理的なリオーダリング結果のコピーを行う。しかし、いずれの場合にしても本発明のメモリ管理方法が適用可能であることはここまでの説明で明らかである。
【００７９】
以上、本発明の実施形態について説明した。本実施形態によれば、情報処理装置は、IPリアセンブル処理やTCPリオーダリング処理に必要となるデータコピー回数を削減することができ、低消費電力化効果を保ちながら、高速に処理を実行できる。なお、上述の実施形態では、パケットを受信時に補助記憶部205、ないし、主記憶部201に格納し、それにおいてプロトコルのFragment Offset (1107)やSequence Number(1703)等を活用することについて触れた。ただし、パケットが暗号化されている場合は、上記の情報をそのままでは使用できない。その場合、暗号データがデコードされた後に解析を行うことにより本発明を適用できる。例えば、暗号器等が実装されていれば、暗号器からの出力データを補助記憶部205、ないし、主記憶部201に格納するときに実施すればよい。
【図１】
2014220716.tif 000003
【図２】
2014220716.tif 000004
【図３】
2014220716.tif 000005
【図４】
2014220716.tif 000006
【図５】
2014220716.tif 000007
【図６】
2014220716.tif 000008
【図７】
2014220716.tif 000009
【図８】
2014220716.tif 000010
【図９】
2014220716.tif 000011
【図１０】
2014220716.tif 000012
【図１１】
2014220716.tif 000013
【図１２】
2014220716.tif 000014
【図１３】
2014220716.tif 000015
【図１４】
2014220716.tif 000016
【図１５】
2014220716.tif 000017
【図１６】
2014220716.tif 000018
【図１７】
2014220716.tif 000019
【図１８】
2014220716.tif 000020
【図１９】
2014220716.tif 000021
【図２０】
2014220716.tif 000022
【図２１】
2014220716.tif 000023
【図２２】
2014220716.tif 000024
【図２３】
2014220716.tif 000025