(57)【特許請求の範囲】
【請求項１】
パケットを並列に処理するパケット処理システムであって、
入力されたパケットにパケットの順序を示す番号を付与する番号付与手段と、
前記番号付与手段により番号が付与されたパケットに対して並列処理を実行する処理手段と、
前記処理手段による処理後のパケットを、前記番号付与手段で付与された番号順に出力する制御手段と、を備え、
前記制御手段は、前記処理手段から出力されたパケットのうち、出力の順番を待たせるパケットを一時的に格納するためのバッファであって、データ構造として配列を用いるバッファを備え、
前記制御手段は、前記処理手段から、前記配列において待ちポインタで示される要素に対応する到着待ちのパケットを取得した場合に、当該パケットを出力するとともに、前記バッファに格納されているパケットのうち、当該取得したパケットと番号が連続する一連のパケットを出力し、出力したパケット個数分の要素数だけ待ちポインタをずらす
ことを特徴とするパケット処理システム。
【請求項２】
前記制御手段は、所定のパケット数の範囲内で到着待ちパケットよりも後に出力すべきパケットを前記処理手段から取得した場合に、当該パケットを前記バッファに格納する
ことを特徴とする請求項１に記載のパケット処理システム。
【請求項３】
前記配列の要素数は、パケットに付与される番号の最大値よりも小さく、前記制御手段は、パケットの番号を前記配列の要素数で割った剰余をインデックスとする要素に当該パケットを格納する
ことを特徴とする請求項１又は２に記載のパケット処理システム。
【請求項４】
前記制御手段は、到着待ちパケットよりも前記要素数以上の数だけ後のパケットを前記処理手段から取得した場合に、当該パケットを前記バッファに格納するとともに、当該パケットを格納する要素のインデックス以下のインデックスに格納されているパケット、及び当該格納されているパケットと番号が連続する一連のパケットを出力する
ことを特徴とする請求項３に記載のパケット処理システム。
【請求項５】
前記制御手段は、パケットを出力した後に、次のパケットを出力できずにタイムアウトが生じた場合に、前記バッファに格納されているパケットの先頭までスキップし、当該先頭のパケット、及び当該先頭のパケットと番号が連続する一連のパケットを出力する
ことを特徴とする請求項１ないし４のうちいずれか１項に記載のパケット処理システム。
【請求項６】
前記制御手段は、前記処理手段におけるパケットの処理が失敗したときに、当該パケットと同じ番号を有するダミーパケットを使用する
ことを特徴とする請求項１ないし５のうちいずれか１項に記載のパケット処理システム。
【請求項７】
パケットをネットワーク上の複数の経路で並列に伝送する通信システムであって、
上流から受信したパケットにパケットの順序を示す番号を付与し、番号を付与したパケットを複数の経路に送出する第１のパケット転送装置と、
前記複数の経路から前記パケットを受信し、当該パケットを、前記第１のパケット転送装置で付与された番号順に下流に送出する第２のパケット転送装置と、を備え、
前記第２のパケット転送装置は、前記複数の経路から受信したパケットのうち、下流への送出の順番を待たせるパケットを一時的に格納するためのバッファであって、データ構造として配列を用いるバッファを備え、
前記第２のパケット転送装置は、前記複数の経路から、前記配列において待ちポインタで示される要素に対応する到着待ちのパケットを受信した場合に、当該パケットを出力するとともに、前記バッファに格納されているパケットのうち、当該受信したパケットと番号が連続する一連のパケットを出力し、出力したパケット個数分の要素数だけ待ちポインタをずらす
ことを特徴とする通信システム。
【請求項８】
パケットを並列に処理するパケット処理システムにより実行されるパケット処理方法であって、
入力されたパケットにパケットの順序を示す番号を付与する番号付与ステップと、
前記番号付与ステップにより番号が付与されたパケットに対して並列処理を実行する処理ステップと、
前記処理ステップによる処理後のパケットを、前記番号付与ステップで付与された番号順に出力する制御ステップと、を備え、
前記制御ステップにおいて、前記処理後のパケットのうち、出力の順番を待たせるパケットを一時的に、データ構造として配列を用いるバッファに格納し、前記処理ステップによる処理後のパケットとして、前記配列において待ちポインタで示される要素に対応する到着待ちのパケットを取得した場合に、当該パケットを出力するとともに、前記バッファに格納されているパケットのうち、当該取得したパケットと番号が連続する一連のパケットを出力し、出力したパケット個数分の要素数だけ待ちポインタをずらす
ことを特徴とするパケット処理方法。
【請求項９】
コンピュータを、請求項１ないし６のうちいずれか１項に記載のパケット処理システムにおける制御手段として機能させるためのプログラム。
【請求項１０】
パケットを並列に処理するパケット処理装置であって、
入力されたパケットにパケットの順序を示す番号を付与する番号付与手段と、
前記番号付与手段により番号が付与されたパケットに対して並列処理を実行する処理手段と、
前記処理手段による処理後のパケットを、前記番号付与手段で付与された番号順に出力する制御手段と、を備え、
前記制御手段は、前記処理手段から出力されたパケットのうち、出力の順番を待たせるパケットを一時的に格納するためのバッファであって、データ構造として配列を用いるバッファを備え、
前記制御手段は、前記処理手段から、前記配列において待ちポインタで示される要素に対応する到着待ちのパケットを取得した場合に、当該パケットを出力するとともに、前記バッファに格納されているパケットのうち、当該取得したパケットと番号が連続する一連のパケットを出力し、出力したパケット個数分の要素数だけ待ちポインタをずらす
ことを特徴とするパケット処理装置。
【請求項１１】
入力されたパケットにパケットの順序を示す番号を付与する番号付与手段と、前記番号付与手段により番号が付与されたパケットに対して並列処理を実行する処理手段とを有する処理システムから出力されるパケットを入力し、当該パケットの処理を実行するパケット処理装置であって、
前記処理手段による処理後のパケットを、前記番号付与手段で付与された番号順に出力する制御手段を備え、
前記制御手段は、前記処理手段から出力されたパケットのうち、出力の順番を待たせるパケットを一時的に格納するためのバッファであって、データ構造として配列を用いるバッファを備え、
前記制御手段は、前記処理手段から、前記配列において待ちポインタで示される要素に対応する到着待ちのパケットを取得した場合に、当該パケットを出力するとともに、前記バッファに格納されているパケットのうち、当該取得したパケットと番号が連続する一連のパケットを出力し、出力したパケット個数分の要素数だけ待ちポインタをずらす
ことを特徴とするパケット処理装置。
【請求項１２】
コンピュータを、請求項１０又は１１に記載のパケット処理装置における制御手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、順次入力されるパケットを並列に処理し、処理したパケットを順番に出力するための技術に関連するものである。
【背景技術】
【０００２】
現在、インターネット上で仮想的なプライベートネットワークを実現するＶＰＮ（Ｖｉｒｔｕａｌ  Ｐｒｉｖａｔｅ  Ｎｅｔｗｏｒｋ）が普及してきている。ＶＰＮ通信を実現する通信装置では、パケットを暗号化してカプセリングする等の処理を実行するが、ＶＰＮ通信の高速化のためには当該通信装置における暗号化／復号化等の処理性能を向上させることが必要である。
【０００３】
処理性能を向上させる有効なアプローチとして、暗号化／復号化等の処理を例えば複数のＣＰＵを用いて並列化する技術がある。なお、本願に関連する先行技術文献として特許文献１がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許４６４８２９０
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、上記通信装置で動作するＶＰＮソフトウェアのような通信プログラムにおいて、パケットを扱う処理を単純に並列化してしまうと、送出パケットの順序逆転が生じてしまい、ユーザ通信に影響を与えてしまう。
【０００６】
そこで、並列処理後のパケットを一時的にバッファに格納し、順序を整えて（並び替えて）送出することが考えられるが、全てのパケットに対し並び替えを実施して送出するような単純な方式では、バッファ処理がボトルネックになってしまい、並列処理の性能向上率を低下させてしまう。
【０００７】
本発明は上記の点に鑑みてなされたものであり、パケットに対する処理を並列化して実施するシステムにおいて、並列処理後のパケットの順序を整えて出力する処理を効率的に行うことを可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の実施の形態によれば、パケットを並列に処理するパケット処理システムであって、
入力されたパケットにパケットの順序を示す番号を付与する番号付与手段と、
前記番号付与手段により番号が付与されたパケットに対して並列処理を実行する処理手段と、
前記処理手段による処理後のパケットを、前記番号付与手段で付与された番号順に出力する制御手段と、を備え、
前記制御手段は、前記処理手段から出力されたパケットのうち、出力の順番を待たせるパケットを一時的に格納するためのバッファであって、データ構造として配列を用いるバッファを備え、
前記制御手段は、前記処理手段から、前記配列において待ちポインタで示される要素に対応する到着待ちのパケットを取得した場合に、当該パケットを出力するとともに、前記バッファに格納されているパケットのうち、当該取得したパケットと番号が連続する一連のパケットを出力し、出力したパケット個数分の要素数だけ待ちポインタをずらす
ことを特徴とするパケット処理システムが提供される。
【０００９】
また、本発明の実施の形態によれば、パケットをネットワーク上の複数の経路で並列に伝送する通信システムであって、
上流から受信したパケットにパケットの順序を示す番号を付与し、番号を付与したパケットを複数の経路に送出する第１のパケット転送装置と、
前記複数の経路から前記パケットを受信し、当該パケットを、前記第１のパケット転送装置で付与された番号順に下流に送出する第２のパケット転送装置と、を備え、
前記第２のパケット転送装置は、前記複数の経路から受信したパケットのうち、下流への送出の順番を待たせるパケットを一時的に格納するためのバッファであって、データ構造として配列を用いるバッファを備え、
前記第２のパケット転送装置は、前記複数の経路から、前記配列において待ちポインタで示される要素に対応する到着待ちのパケットを受信した場合に、当該パケットを出力するとともに、前記バッファに格納されているパケットのうち、当該受信したパケットと番号が連続する一連のパケットを出力し、出力したパケット個数分の要素数だけ待ちポインタをずらす
ことを特徴とする通信システムが提供される。
【００１０】
また、本発明の実施の形態によれば、パケットを並列に処理するパケット処理システムにより実行されるパケット処理方法であって、
入力されたパケットにパケットの順序を示す番号を付与する番号付与ステップと、
前記番号付与ステップにより番号が付与されたパケットに対して並列処理を実行する処理ステップと、
前記処理ステップによる処理後のパケットを、前記番号付与ステップで付与された番号順に出力する制御ステップと、を備え、
前記制御ステップにおいて、前記処理後のパケットのうち、出力の順番を待たせるパケットを一時的に、データ構造として配列を用いるバッファに格納し、前記処理ステップによる処理後のパケットとして、前記配列において待ちポインタで示される要素に対応する到着待ちのパケットを取得した場合に、当該パケットを出力するとともに、前記バッファに格納されているパケットのうち、当該取得したパケットと番号が連続する一連のパケットを出力し、出力したパケット個数分の要素数だけ待ちポインタをずらす
ことを特徴とするパケット処理方法が提供される。
【００１１】
また、本発明の実施の形態によれば、パケットを並列に処理するパケット処理装置であって、
入力されたパケットにパケットの順序を示す番号を付与する番号付与手段と、
前記番号付与手段により番号が付与されたパケットに対して並列処理を実行する処理手段と、
前記処理手段による処理後のパケットを、前記番号付与手段で付与された番号順に出力する制御手段と、を備え、
前記制御手段は、前記処理手段から出力されたパケットのうち、出力の順番を待たせるパケットを一時的に格納するためのバッファであって、データ構造として配列を用いるバッファを備え、
前記制御手段は、前記処理手段から、前記配列において待ちポインタで示される要素に対応する到着待ちのパケットを取得した場合に、当該パケットを出力するとともに、前記バッファに格納されているパケットのうち、当該取得したパケットと番号が連続する一連のパケットを出力し、出力したパケット個数分の要素数だけ待ちポインタをずらす
ことを特徴とするパケット処理装置が提供される。
【００１２】
また、本発明の実施の形態によれば、入力されたパケットにパケットの順序を示す番号を付与する番号付与手段と、前記番号付与手段により番号が付与されたパケットに対して並列処理を実行する処理手段とを有する処理システムから出力されるパケットを入力し、当該パケットの処理を実行するパケット処理装置であって、
前記処理手段による処理後のパケットを、前記番号付与手段で付与された番号順に出力する制御手段を備え、
前記制御手段は、前記処理手段から出力されたパケットのうち、出力の順番を待たせるパケットを一時的に格納するためのバッファであって、データ構造として配列を用いるバッファを備え、
前記制御手段は、前記処理手段から、前記配列において待ちポインタで示される要素に対応する到着待ちのパケットを取得した場合に、当該パケットを出力するとともに、前記バッファに格納されているパケットのうち、当該取得したパケットと番号が連続する一連のパケットを出力し、出力したパケット個数分の要素数だけ待ちポインタをずらす
ことを特徴とするパケット処理装置が提供される。
【発明の効果】
【００１３】
本発明の実施の形態によれば、パケットに対する処理を並列化して実施するシステムにおいて、並列処理後のパケットの順序を整えて出力する処理を効率的に行うことを可能とする技術が提供される。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施の形態に係るパケット処理システムの構成図である。
【図２】パケット処理システムの他の構成例を示す図である。
【図３】バッファの例を説明するための図である。
【図４】バッファ制御部の動作を示すフローチャートである。
【図５】到着待ちパケットが来た際のバッファ送出の例を説明するための図である。
【図６】バッファ格納の例を説明するための図である。
【図７】パケット破棄の例を説明するための図である。
【図８】タイムアウト処理の例を説明するための図である。
【発明を実施するための形態】
【００１５】
以下、図面を参照して本発明の実施の形態を説明する。なお、以下で説明する実施の形態は一例に過ぎず、本発明が適用される実施の形態は、以下の実施の形態に限られるわけではない。
【００１６】
以下で説明する「パケット」は、まとまったデータを意味し、ＩＰパケットやイーサパケット等の特定の種類のパケットに限定されない。「パケット」を「データ」と言い換えてもよい。
【００１７】
（システム構成）
図１に、本発明の実施の形態に係るパケット処理システム１００の構成図を示す。本実施の形態において、パケット処理システム１００は、ＶＰＮ通信を実現するための通信装置であることを想定しているが、これは一例に過ぎない。本発明は、このような通信装置に限られず、種々のパケット（データ）処理を行う技術に適用可能である。
【００１８】
本実施の形態のパケット処理システム１００は、ＶＰＮ通信を実現するために、パケットをネットワークとの間で送信／受信する機能（ＩＦ機能）、カプセリング／デカプセリングを行う機能等も備えるが、このような機能はＶＰＮ通信のための一般的な機能であるため、図１には、このような一般的な機能は示されておらず、本発明に特に関連する機能のみが示されている。
【００１９】
図１に示すように、パケット処理システム１００は、番号付与部１０１、キュー１０２、パケット処理部１０３、キュー１０４、バッファ制御部１０５を含む。番号付与部１０１は、外部（例：ユーザ端末側ネットワーク）から受信したパケットに、受信した順番で番号を付与する。キュー１０２は、パケットを一時的に格納するＦＩＦＯメモリである。キュー１０２には番号付与部１０１により番号付けされたパケットが順次格納され、格納された順番で、パケット処理部１０３から順次読み出される（刈り取ると表現してもよい）。
【００２０】
パケット処理部１０３は複数個存在し、パケットに対する処理を並列に実行する。パケットに対する処理は、例えば、パケットの暗号化又は復号化である。
【００２１】
キュー１０４もパケットを一時的に格納するＦＩＦＯメモリである。個々のパケット処理部１０３は、処理を終えたパケットを順次キュー１０４に格納する。キュー１０４に格納されたパケットは、格納された順番で、バッファ制御部１０５から順次読み出される。
【００２２】
バッファ制御部１０５は、キュー１０４から読み出したパケットを格納する所定長のバッファ（メモリ）を備え、所定の処理手順で当該バッファからのパケット読み出し・送出を行うことで、パケットの順序を保持したまま高速な送出処理を可能とする機能部である。バッファ制御部１０５の処理動作については後に詳しく説明する。
【００２３】
パケット処理システム１００は、１つのＣＰＵを有するコンピュータにおいて、各機能部に相当するプログラムを実行することにより実現することもできるし、物理的に複数のコンピュータを使用して実現することもできる。複数のコンピュータで実現する場合において、例えば、番号付与部１０１とキュー１０２を１つのコンピュータで構成し、各パケット処理部１０３を１つのコンピュータで構成し、キュー１０４とバッファ制御部１０５を１つのコンピュータで実現することができる。
【００２４】
また、パケット処理システム１００を、複数のＣＰＵを搭載した１つの装置として構成し、例えば、番号付与部１０１、それぞれのパケット処理部１０３、及びバッファ制御部１０５に１つずつＣＰＵを割り当てて、各ＣＰＵにおいて、処理内容に対応するプログラムを実行させることでパケット処理システム１００を実現することもできる。
【００２５】
本実施の形態に係るバッファ制御技術は、図２に示すようなネットワークシステムに適用することも可能である。
【００２６】
図２に示すシステムは、例えば、中継を行うネットワーク２００のエッジ装置としてパケット転送装置２０１とパケット転送装置２０２が備えられた構成を持つ。便宜上、パケット転送装置２０１からパケット転送装置２０２への方向のパケット転送を考える。パケット転送装置２０１は、図１に示したパケット処理システムの番号付与部１０１に相当し、上流（送信側）から送信されたパケットを受信し、受信した順番でパケットに番号を付与し、番号が付与されたパケットを複数の経路でネットワーク２００に送出する。例えば、パケット１は経路１で送信し、パケット２は経路２で送信する、といったように、並列に送信することでパケット転送の高速化を図っている。
【００２７】
パケット転送装置２０２は、図１に示したパケット処理システムのキュー１０４とバッファ制御部１０５に相当する機能を含み、ネットワーク２００から受信したパケットを受信順にキューに格納するとともに、バッファ制御部１０５と同様のバッファリング処理を実施して、パケットの番号順（＝上流から受信した順）に下流（受信側）にパケットを送出する。このような処理により、パケットの順番を保持したまま、並列伝送による高速伝送が可能になる。
【００２８】
パケット転送装置２０２は、ＣＰＵを備えるコンピュータ（通信装置）において、キュー１０４及びバッファ制御部１０５の処理内容に相当するプログラムを実行させることにより実現可能である。また、パケット転送装置２０２は、パケット送出側の機能として、番号付与部１０１の機能を更に備えてもよい。以下、パケット制御部１０５が実施する処理の内容をより詳細に説明する。
【００２９】
（パケット制御部１０５の処理の詳細）
図３に、パケット制御部１０５が備えるバッファの例を示す。当該バッファは、バッファ要素数として予め定めた長さを持つメモリ領域である。本実施の形態において、パケットには、パケット到着順に順番に番号が付与されるが、番号には予め上限が設定されており、その上限値をナンバリング最大値と呼ぶ。ナンバリング最大値が付されたパケットの次のパケットには最初の番号（本実施の形態では１）が付されることになる。
【００３０】
パケット制御部１０５の処理を実行するプログラムにおいて、当該バッファのデータ構造は配列として表され、バッファ要素数が配列要素数となる。また、パケットの番号を配列要素数で割った余りをインデックスとする配列位置に当該パケットが格納される。このように、番号を配列の要素数で割った際の剰余をインデックスとして格納処理を行うことで、準備する配列の要素数を限定することができ、確保するメモリを削減することができる。
【００３１】
本実施の形態では、バッファリング処理における配列のインデックスとして、ＷａｉｔポインタとＭａｘポインタが使用される。Ｗａｉｔポインタは、現在の待ちパケットの番号を配列要素数で割った余りである。Ｍａｘポインタは、バッファ格納済みパケットの最大番号を配列要素数で割った余りである。
【００３２】
図３に示す例では、バッファ要素数が１０と設定され、ナンバリング最大値が１００と設定されている。また、図３に示す時点でのバッファは、６５番のパケットの到着待ち、かつ６８番、６９番、７０番、７２番、７３番のパケットがバッファ格納済みの状態である。この状態の時点で、７３が最大であるから、７３÷１０の余り３がＭａｘポインタ（"Ｍ"と表記）になる。また、６５番のパケットを待っているから、６５÷１０の余り５がＷａｉｔポインタ（"Ｗ"と表記）になる。
【００３３】
（バッファリング処理内容）
図４は、バッファ制御部１０５が実行するバッファリング処理に係る手順を示すフローチャートである。図４において、Ｓ１、Ｓ２等の符号は、各処理を参照するための参照符号である。また、ｗａｉｔは、現在到着を待っている（具体的にはキュー１０４に格納されることを待っている）パケットの番号（Ｗａｉｔポインタでなくて実際の番号）である。ｍａｘは、バッファに格納されているパケットの最大番号（Ｍａｘポインタでなくて実際の番号）である。ｎｕｍは、キュー１０４から読み出した（刈り取った）パケットの番号である。ｔｉｍｅは、最近のバッファ送出処理を行った時点の時刻であり、ｎｏｗは現在時刻である。ＬＥＮは、配列要素数（例：１０）である。ＮＵＭ＿ＭＡＸはナンバリング最大値（例：１００）である。
【００３４】
以下では、バッファ制御部１０５が実行する処理について、バッファ送出処理、バッファ格納処理、パケット破棄処理、タイムアウト処理に分けて、それぞれを具体例とフローチャートを用いて説明する。
【００３５】
＜到着待ちパケットが来た際のパケット送出処理＞
まず、バッファからパケットを読み出して送出する際の処理を図５を参照して説明する。図５（ａ）は、到着待ちパケットが来た際のパケット送出の例１を示している。
【００３６】
例１では、パケット到着の直前の時点で、６５番のパケットの到着を待ち、かつ６８番、６９番、７０番、７２番、７３番のパケットがバッファ格納済みの状態である。この状態で、６５番のパケットが来た場合（キュー１０４から刈り取った場合）、そのパケットを送出する。６５番の次である６６番のパケットは未到着であるから、次に、６６番のパケットの到着待ちとなる。よって、Ｗポインタをひとつずらす。
【００３７】
図５（ｂ）は、到着待ちパケットが来た際のパケット送出の例２を示している。例２では、パケット到着の直前の時点で、６５番のパケットの到着を待ち、かつ６６番、６８番、６９番、７０番、７２番、７３番のパケットがバッファ格納済みの状態である。この状態で、６５番のパケットが来た場合、当該パケットと、当該パケットと連続する格納済みパケット（６６番）とを送出し、送出個数分Ｗポインタをずらす。
【００３８】
上記のパケット送出の例１、２は、図４のフローチャートにおけるＳ２１のバッファ送出処理の例である。すなわち、図４のＳ９でキュー１０４からパケットを刈り取り、Ｓ１０でｗａｉｔ（例：到着待ちの６５）とｎｕｍ（例：到着した６５）を比較した結果、ｗａｉｔがｎｕｍと等しいので、Ｓ２１のバッファ送出処理を実行し、Ｓ２２においてｔｉｍｅを現時点の時刻（パケットを送出した時刻）に更新する。上記の例２に例示したように、パケット送出処理において、到着パケットとともに、既に到着しているパケットのうち、到着パケットと連続する一連のパケットも全て送出する。
【００３９】
＜バッファ格納処理＞
次に、バッファ格納処理について図６を参照して説明する。図６（ａ）は、バッファ格納処理の例１を示している。
【００４０】
例１では、６５番のパケットの到着待ち、かつ、６８番、６９番、７０番、７２番、７３番のパケットがバッファ格納済みの状態であるときに、６５番よりも大きな６６番のパケットが来た場合に、そのパケットをバッファ（配列）に格納する。Ｍポインタ及びＷポインタに変更はない。
【００４１】
図６（ｂ）は、バッファ格納処理の例２を示している。例２では、６５番のパケットの到着待ち、かつ６６番、６７番、６８番、６９番、７０番、７２番、７３番のパケットがバッファ格納済みの状態であるときに、７７番のパケットが来たとする。この場合、７７よりも小さい番号の到着待ちパケットが未到着なので、７７番のパケットを配列に格納する。
【００４２】
ただし、ナンバリング最大値よりも小さな配列要素数の配列において、７７番のパケットを格納するために、（７７−１０（配列要素数））以下のパケットを送出する。ただし、６５番は未格納なので、６５番は破棄扱いとし、６６番と６７番を送出する。さらに連続する６８番、６９番、７０番を送出し、Ｗポインタを７１にずらす。また７７番が待ちパケットの中で最大となるため、Ｍポインタも７７にずらす。
【００４３】
上記のパケット格納の例１、２は、図４のフローチャートにおけるＳ２３のバッファ追加処理、Ｓ２５及びＳ２６のバッファ送出処理の例である。
【００４４】
すなわち、図４のＳ９の判定の結果、ｗａｉｔ＜ｎｕｍ＜ｗａｉｔ＋ＬＥＮ（例：６５＜６６＜６５＋１０）である場合に、Ｓ２３においてｎｕｍ（例：６６）番のパケットをバッファに追加し、Ｓ２４でｍａｘを更新する。つまり、パケット制御部１０５は、所定のパケット数の範囲内で到着待ちパケットよりも後に出力すべきパケットをキュー１０４から取得した場合に、当該パケットをバッファに格納する。
【００４５】
また、ｗａｉｔ＋ＬＥＮ＜＝ｎｕｍ＜ｗａｉｔ＋ＬＥＮ×２（例：６５＋１０＜＝７７＜６５＋１０×２）である場合に、Ｓ２５およびＳ２６においてｎｕｍ−ＬＥＮ（例：７７−１０）までのパケット（例：６６番、６７番のパケット）及び、それに連続するパケット（例：６８番、６９番、７０番のパケット）を送出し、Ｓ２７でｔｉｍｅを更新し、Ｓ２４でｍａｘを更新する。つまり、バッファ制御部１０５は、到着待ちパケット（６５）よりも要素数以上の数だけ後のパケット（７７）を取得した場合に、当該パケットをバッファに格納するとともに、当該パケットを格納する要素のインデックス（７）以下のインデックス（６，７）に格納されているパケット及び、それに連続するインデックス（８，９，０）に格納されているパケットを出力する。
【００４６】
上記の例はｗａｉｔ＜ｎｕｍである場合の例であるが、ｎｕｍ＜ｗａｉｔである場合にも、Ｓ１４、Ｓ１７、Ｓ１８において同様のパケット追加、送出処理が行われる。これは、実質的に上記の例と同じであるが、到着パケットのナンバリングが最大値を過ぎて、最初に戻り、小さな値になっているような場合に相当する。
【００４７】
Ｓ１１の判定の結果、ｎｕｍ＜ｗａｉｔ−ＮＵＭ＿ＭＡＸ＋ＬＥＮ×２（例：１＜１００−１００＋１０×２）である場合、Ｓ１２でｎｕｍにＮＵＭ＿ＭＡＸを加える（例：ｎｕｍ＝１＋１００）。Ｓ１３の判定の結果、ｗａｉｔ＜ｎｕｍ＜ｗａｉｔ＋ＬＥＮ（例：１００＜１０１＜１００＋１０）である場合に、Ｓ１４において当該パケットをバッファに追加し、Ｓ１５、Ｓ１６でｍａｘを更新する。
【００４８】
また、ｗａｉｔ＋ＬＥＮ＜＝ｎｕｍ＜ｗａｉｔ＋ＬＥＮ×２（例：１００＋１０＜＝１１２＜１００＋１０×２）である場合に、Ｓ１７及びＳ１８においてｎｕｍ−ＮＵＭ＿ＭＵＸ−ＬＥＮ（例：１１２−１００−１０）までのパケットを送出し、Ｓ１９でｔｉｍｅを更新し、Ｓ１５、Ｓ１６でｍａｘを更新する。
【００４９】
＜バッファ破棄処理＞
次に、バッファ破棄処理について図７を参照して説明する。図７（ａ）は、バッファ破棄処理の例１を示している。
【００５０】
例１では、６５番のパケットの到着を待ち、かつ、６８番、６９番、７０番、７２番、７３番のパケットがバッファ格納済みの状態であるときに、６５番よりも少し小さい６３番のパケットが来た場合に、そのパケットを破棄する。ＭポインタとＷポインタに変更はない。
【００５１】
図７（ｂ）は、バッファ破棄処理の例２を示している。例２では、６５番のパケットの到着を待ち、かつ、６８番、６９番、７０番、７２番、７３番のパケットがバッファ格納済みの状態であるときに、６５番よりも２０以上大きな８５番のパケットが来た場合には、そのパケットを破棄する。
【００５２】
上記のパケット破棄の例１、２は、図４のフローチャートにおけるＳ２０、Ｓ２８のバッファ破棄処理（ｄｒｏｐ）の例である。
【００５３】
すなわち、図４のＳ１０、Ｓ１１の判定の結果、ｎｕｍ＞＝ｗａｉｔ−ＮＵＭ＿ＭＵＸ＋ＬＥＮ×２（例：６３＞＝６５−１００＋１０×２）となる場合、Ｓ２０で、当該ｎｕｍ番号のパケットを破棄する。
【００５４】
また、Ｓ１０の判定の結果、ｗａｉｔ＋ＬＥＮ×２＜＝ｎｕｍ（例：６５＋１０×２＜＝８５）となる場合、Ｓ２８で、当該ｎｕｍ番号のパケットを破棄する。
【００５５】
これまでに説明したバッファ格納と破棄の手順をまとめると以下のようになる。
【００５６】
到着待ちのパケットよりも番号が大きなパケットが来た場合は番号を確認し、到着待ちのパケットの番号と配列の要素数を足した合計値（Ａ）と比較を行う。合計値（Ａ）よりも小さい場合は番号を要素数で割った剰余をインデックスとして格納処理を行う。合計値（Ａ）よりも大きい場合は、さらに、合計値に要素数を足した合計値（Ｂ）と比較する。合計値（Ｂ）よりも大きい場合は、パケット破棄を行う。合計値（Ｂ）よりも小さい場合は、到着待ちパケットのインデックスから到着したパケットまでのインデックスの間に格納されているパケット全てと到着したパケットのインデックスを超えて連続して格納されているパケットがある場合は、格納されていないインデックスのひとつ手前までのパケット全てを送出し、到着パケットを格納し、最後に送出したパケットの番号＋１の番号を到着待ちとする。
【００５７】
また、到着待ちパケットよりも番号の小さなパケットが来た場合は、まず到着待ちパケット番号からナンバリング最大値を引いて要素数の２倍を足した値（Ｃ）と比較を行う。値（Ｃ）よりも大きい場合は破棄し、小さい場合は更に、到着したパケットの番号にナンバリング最大値を足した値（Ｄ）と到着待ちパケットの番号に配列の要素数を足した値（Ｅ）を比較し、（Ｄ）の値が（Ｅ）の値よりも小さければバッファに格納し、大きければ、到着パケット番号から要素数を引いたインデックスの間に格納されているパケット全てと到着したパケットのインデックスを超えて連続して格納されているパケットがある場合は、格納されていないインデックスのひとつ手前までのパケットを全て送出し、到着パケットを格納し、最後に送出したパケットの番号＋１の番号を到着待ちとする。
【００５８】
＜タイムアウト処理＞
次に、タイムアウト処理の例について図８を参照して説明する。図８に示す例では、６５番のパケットの到着を待ち、かつ、６８番、６９番、７０番、７２番、７３番のパケットがバッファ格納済みの状態で、一定時間経過しても６５番パケットが到達しない場合に、タイムアウトが生じたと判定し、タイムアウト処理として、６５番、６６番、６７番のパケットを破棄扱いとし、６８番、６９番、７０番のパケットを送出する。この際、到着待ちパケットが変わるため、待ちポインタを７１にずらす。
【００５９】
すなわち、本実施の形態において、バッファ制御部１０５は、バッファリング処理で待ちパケットが一定時間到着しない場合には、タイムアウト処理を実施する。高負荷時には処理の前後のキューがあふれてバーストロスを起こす可能性がある。バーストロス時にタイムアウト処理をパケット単位で実施してしまうと、複数回のタイムアウト処理が一度に行われることになり、パケットの送出が長時間停止してしまう。そこで、一度タイムアウトが生じた際には、バッファにたまっているパケットの先頭までスキップしてそこからパケット送出を行うようにしている。上記の例では、６８番のパケットが、バッファにたまっているパケットの先頭に該当するため、当該６８番のパケット、及び、これと連続する６９番、７０番のパケットをタイムアウト処理時に送出している。
【００６０】
また、本実施の形態では、バッファにパケットが積まれていない場合に、タイムアウト処理を行ってしまうと、一定時間を置いて到着したパケットを破棄してしまうため、タイムアウト処理を実施しないこととしている。
【００６１】
上記のタイムアウト処理の例は、図４のフローチャートにおけるＳ６のタイムアウト処理の例である。
【００６２】
すなわち、図４のＳ２における判定の結果、ｗａｉｔ＜ｍａｘ（例：６５＜７３）となり、Ｓ４において、「０＜＝ｗａｉｔ＜ＬＥＮ＆＆ＮＵＭ＿ＭＡＸ−ＬＥＮ＜ｍａｘ＜＝ＮＵＭ＿ＭＡＸ」が成立しない場合に、Ｓ５でｔｉｍｅ（前回、パケット送出した時刻）とｎｏｗ（現在時刻）とを比較し、待ち時間を過ぎた場合に、Ｓ６においてタイムアウト処理を実施し、Ｓ７でｔｉｍｅ更新を行う。Ｓ５で、待ち時間を過ぎておらず、キュー１０４にパケットが残っていれば、キュー１０４からパケットを刈り取って処理を実施する（Ｓ８、Ｓ９〜）。
【００６３】
Ｓ４で、「０＜＝ｗａｉｔ＜ＬＥＮ＆＆ＮＵＭ＿ＭＡＸ−ＬＥＮ＜ｍａｘ＜＝ＮＵＭ＿ＭＡＸ」が成立する場合には、タイムアウト処理を行うことなくＳ８に進む。
【００６４】
図４のＳ２における判定の結果、ｗａｉｔ＞ｍａｘとなり、Ｓ３において、「０＜＝ｍａｘ＜ＬＥＮ＆＆ＮＵＭ＿ＭＡＸ−ＬＥＮ＜ｗａｉｔ＜＝ＮＵＭ＿ＭＡＸ」が成立する場合に、Ｓ５でｔｉｍｅ（前回、パケット送出した時刻）とｎｏｗ（現在時刻）とを比較し、待ち時間を過ぎた場合に、Ｓ６においてタイムアウト処理を実施し、Ｓ７でｔｉｍｅ更新を行う。Ｓ５で、待ち時間を過ぎておらず、キュー１０４にパケットが残っていれば、キュー１０４からパケットを刈り取って処理を実施する（Ｓ８、Ｓ９〜）。
【００６５】
Ｓ３で、「０＜＝ｍａｘ＜ＬＥＮ＆＆ＮＵＭ＿ＭＡＸ−ＬＥＮ＜ｗａｉｔ＜＝ＮＵＭ＿ＭＡＸ」が成立しない場合には、タイムアウト処理を行うことなくＳ８に進む。
【００６６】
なお、図４のＳ３でＦａｌｓｅとなる場合、及び、Ｓ４でＴｒｕｅとなる場合が、前述したように、バッファにパケットが積まれていない場合に該当し、タイムアウト処理を行わない。
【００６７】
＜並列化した処理に失敗した際のダミーパケット送出＞
処理失敗時にパケットを破棄してしまうと、破棄されたパケットがバッファリング処理に至らず、タイムアウトが発生してしまう。本実施の形態では、それを防ぐため、処理失敗時にはダミーパケット（上記パケットの番号が付与される）をキュー１０４に入れることで、バッファリング処理を行い、そこで破棄するように動作させている。具体的には、例えば、上記の処理手順の中で、ダミーパケットの送出が行われる判断に至った場合に、当該ダミーパケットを送出せずに破棄する。
【００６８】
（実施の形態のまとめ、効果等）
以上、説明したように、本実施の形態では、パケットを並列に処理するパケット処理システムであって、入力されたパケットにパケットの順序を示す番号を付与する番号付与手段と、前記番号付与手段により番号が付与されたパケットに対して並列処理を実行する処理手段と、前記処理手段による処理後のパケットを、前記番号付与手段で付与された番号順に出力する制御手段と、を備え、前記制御手段は、前記処理手段から出力されたパケットのうち、出力の順番を待たせるパケットを一時的に格納するためのバッファを備えることを特徴とするパケット処理システムが提供される。
【００６９】
前記制御手段は、前記処理手段から到着待ちのパケットを取得した場合に、当該パケットを出力するとともに、前記バッファに格納されているパケットのうち、当該取得したパケットと番号が連続する一連のパケットを出力することとしてもよい。
【００７０】
前記制御手段は、所定のパケット数の範囲内で到着待ちパケットよりも後に出力すべきパケットを前記処理手段から取得した場合に、当該パケットを前記バッファに格納することとしてもよい。
【００７１】
前記制御手段における前記バッファのデータ構造として例えば配列を用いることができる。
【００７２】
前記配列の要素数は、例えば、パケットに付与される番号の最大値よりも小さく、前記制御手段は、パケットの番号を前記配列の要素数で割った剰余をインデックスとする要素に当該パケットを格納する。
【００７３】
前記制御手段は、到着待ちパケットよりも前記要素数以上の数だけ後のパケットを前記処理手段から取得した場合に、当該パケットを前記バッファに格納するとともに、当該パケットを格納する要素のインデックス以下のインデックスに格納されているパケット、及び当該格納されているパケットと番号が連続する一連のパケットを出力するようにしてもよい。
【００７４】
前記制御手段は、パケットを出力した後に、次のパケットを出力できずにタイムアウトが生じた場合に、前記バッファに格納されているパケットの先頭までスキップし、当該先頭のパケット、及び当該先頭のパケットと番号が連続する一連のパケットを出力することとしてもよい。
【００７５】
前記制御手段は、前記処理手段におけるパケットの処理が失敗したときに、当該パケットと同じ番号を有するダミーパケットを使用することとしてもよい。
【００７６】
また、本実施の形態では、コンピュータを、上記パケット処理システムにおける前記パケット制御手段として機能させるためのプログラムを提供することもできる。
【００７７】
また、本実施の形態により、パケットをネットワーク上の複数の経路で並列に伝送する通信システムであって、上流から受信したパケットにパケットの順序を示す番号を付与し、番号を付与したパケットを複数の経路に送出する第１のパケット転送装置と、前記複数の経路から前記パケットを受信し、当該パケットを、前記第１のパケット転送装置で付与された番号順に下流に送出する第２のパケット転送装置と、を備え、前記第２のパケット転送装置は、前記複数の経路から受信したパケットのうち、下流への送出の順番を待たせるパケットを一時的に格納するためのバッファを備えることを特徴とする通信システムが提供される。
【００７８】
また、本実施の形態により、パケットを並列に処理するパケット処理装置であって、入力されたパケットにパケットの順序を示す番号を付与する番号付与手段と、前記番号付与手段により番号が付与されたパケットに対して並列処理を実行する処理手段と、前記処理手段による処理後のパケットを、前記番号付与手段で付与された番号順に出力する制御手段と、を備え、前記制御手段は、前記処理手段から出力されたパケットのうち、出力の順番を待たせるパケットを一時的に格納するためのバッファを備えるパケット処理装置が提供される。
【００７９】
また、本実施の形態により、入力されたパケットにパケットの順序を示す番号を付与する番号付与手段と、前記番号付与手段により番号が付与されたパケットに対して並列処理を実行する処理手段とを有する処理システムから出力されるパケットを入力し、当該パケットの処理を実行するパケット処理装置であって、前記処理手段による処理後のパケットを、前記番号付与手段で付与された番号順に出力する制御手段を備え、前記制御手段は、前記処理手段から出力されたパケットのうち、出力の順番を待たせるパケットを一時的に格納するためのバッファを備えるパケット処理装置が提供される。このパケット処理装置は、例えば、前述したパケット処理システム１００が複数のコンピュータから構成される場合におけるキュー１０４とバッファ制御部１０５とを有する装置（コンピュータ）に相当する。また、このパケット処理装置は、例えば、図２に示したパケット転送装置２０２に相当する。
【００８０】
また、本実施の形態により、コンピュータを、上記パケット処理装置における制御手段として機能させるためのプログラムが提供される。
【００８１】
実施の形態で説明した技術（例：図１のパケット処理システム、図２のパケット転送装置２０２）によれば、並列処理を実施したいモジュールに対し、前後にキューを配備することで、並列処理を可能とし、並列処理（並列伝送含む）の前の機能部にてそれぞれのパケットにナンバリングを実施し、並列処理実行後に、バッファリング処理を実施することで、ナンバリングされた順番通りにパケットを出力することができる。
【００８２】
また、図４に示した手順でバッファ格納／送出処理等を実施することで、高速なバッファリング処理が可能となり、順序を保持したまま処理効率を向上することができる。更に、処理失敗時（例：壊れた暗号パケットの受信）にも処理効率を維持できる。また、一時的な高負荷（例：バーストトラフィック）の場合の長時間処理停止を防ぐことができる。
【００８３】
（第１項）
パケットを並列に処理するパケット処理システムであって、
入力されたパケットにパケットの順序を示す番号を付与する番号付与手段と、
前記番号付与手段により番号が付与されたパケットに対して並列処理を実行する処理手段と、
前記処理手段による処理後のパケットを、前記番号付与手段で付与された番号順に出力する制御手段と、を備え、
前記制御手段は、前記処理手段から出力されたパケットのうち、出力の順番を待たせるパケットを一時的に格納するためのバッファを備える
ことを特徴とするパケット処理システム。
（第２項）
前記制御手段は、前記処理手段から到着待ちのパケットを取得した場合に、当該パケットを出力するとともに、前記バッファに格納されているパケットのうち、当該取得したパケットと番号が連続する一連のパケットを出力する
ことを特徴とする第１項に記載のパケット処理システム。
（第３項）
前記制御手段は、所定のパケット数の範囲内で到着待ちパケットよりも後に出力すべきパケットを前記処理手段から取得した場合に、当該パケットを前記バッファに格納する
ことを特徴とする第１項又は第２項に記載のパケット処理システム。
（第４項）
前記制御手段における前記バッファのデータ構造として配列を用いる
ことを特徴とする第１項ないし第３項のうちいずれか１項に記載のパケット処理システム。
（第５項）
前記配列の要素数は、パケットに付与される番号の最大値よりも小さく、前記制御手段は、パケットの番号を前記配列の要素数で割った剰余をインデックスとする要素に当該パケットを格納する
ことを特徴とする第４項に記載のパケット処理システム。
（第６項）
前記制御手段は、到着待ちパケットよりも前記要素数以上の数だけ後のパケットを前記処理手段から取得した場合に、当該パケットを前記バッファに格納するとともに、当該パケットを格納する要素のインデックス以下のインデックスに格納されているパケット、及び当該格納されているパケットと番号が連続する一連のパケットを出力する
ことを特徴とする第５項に記載のパケット処理システム。
（第７項）
前記制御手段は、パケットを出力した後に、次のパケットを出力できずにタイムアウトが生じた場合に、前記バッファに格納されているパケットの先頭までスキップし、当該先頭のパケット、及び当該先頭のパケットと番号が連続する一連のパケットを出力する
ことを特徴とする第１項ないし第６項のうちいずれか１項に記載のパケット処理システム。
（第８項）
前記制御手段は、前記処理手段におけるパケットの処理が失敗したときに、当該パケットと同じ番号を有するダミーパケットを使用する
ことを特徴とする第１項ないし第７項のうちいずれか１項に記載のパケット処理システム。
（第９項）
パケットをネットワーク上の複数の経路で並列に伝送する通信システムであって、
上流から受信したパケットにパケットの順序を示す番号を付与し、番号を付与したパケットを複数の経路に送出する第１のパケット転送装置と、
前記複数の経路から前記パケットを受信し、当該パケットを、前記第１のパケット転送装置で付与された番号順に下流に送出する第２のパケット転送装置と、を備え、
前記第２のパケット転送装置は、前記複数の経路から受信したパケットのうち、下流への送出の順番を待たせるパケットを一時的に格納するためのバッファを備える
ことを特徴とする通信システム。
（第１０項）
パケットを並列に処理するパケット処理システムにより実行されるパケット処理方法であって、
入力されたパケットにパケットの順序を示す番号を付与する番号付与ステップと、
前記番号付与ステップにより番号が付与されたパケットに対して並列処理を実行する処理ステップと、
前記処理ステップによる処理後のパケットを、前記番号付与ステップで付与された番号順に出力する制御ステップと、を備え、
前記制御ステップにおいて、前記処理後のパケットのうち、出力の順番を待たせるパケットを一時的にバッファに格納する
ことを特徴とするパケット処理方法。
（第１１項）
コンピュータを、第１項ないし第８項のうちいずれか１項に記載のパケット処理システムにおける制御手段として機能させるためのプログラム。
（第１２項）
パケットを並列に処理するパケット処理装置であって、
入力されたパケットにパケットの順序を示す番号を付与する番号付与手段と、
前記番号付与手段により番号が付与されたパケットに対して並列処理を実行する処理手段と、
前記処理手段による処理後のパケットを、前記番号付与手段で付与された番号順に出力する制御手段と、を備え、
前記制御手段は、前記処理手段から出力されたパケットのうち、出力の順番を待たせるパケットを一時的に格納するためのバッファを備える
ことを特徴とするパケット処理装置。
（第１３項）
入力されたパケットにパケットの順序を示す番号を付与する番号付与手段と、前記番号付与手段により番号が付与されたパケットに対して並列処理を実行する処理手段とを有する処理システムから出力されるパケットを入力し、当該パケットの処理を実行するパケット処理装置であって、
前記処理手段による処理後のパケットを、前記番号付与手段で付与された番号順に出力する制御手段を備え、
前記制御手段は、前記処理手段から出力されたパケットのうち、出力の順番を待たせるパケットを一時的に格納するためのバッファを備える
ことを特徴とするパケット処理装置。
（第１４項）
コンピュータを、第１２項又は第１３項に記載のパケット処理装置における制御手段として機能させるためのプログラム。
本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において、種々変更・応用が可能である。
【符号の説明】
【００８４】
１００  パケット処理システム
１０１  番号付与部
１０２  キュー
１０３  パケット処理部
１０４  キュー
１０５  バッファ制御部
２００  ネットワーク
２０１  パケット転送装置
２０２  パケット転送装置
【図１】
0006482296.tif 000002
【図２】
0006482296.tif 000003
【図３】
0006482296.tif 000004
【図４】
0006482296.tif 000005
【図５】
0006482296.tif 000006
【図６】
0006482296.tif 000007
【図７】
0006482296.tif 000008
【図８】
0006482296.tif 000009