(57)【要約】  本発明のパケット整列装置は、複数の通信フローのパケットを格納するために設けられた一つのバッファと、パケットを受信する度に受信パケットが順序誤りパケットであるかを判定処理により判定し、受信パケットが順序誤りパケットである場合は順序誤りパケットと順序誤りパケットの通信フロー識別情報との組をバッファへ格納することにより受信パケットを正しい順序に並べ替えて出力する制御部とを備える。順序誤りパケットは、送信時の順序とは異なる順序で受信された受信パケットである。通信フロー情報は、複数の通信フローの各々を識別するための情報である。
2011083670.tif 000002
【特許請求の範囲】
【請求項１】
複数の通信フローのパケットを格納するために設けられた一つのバッファと、
パケットを受信する度に前記受信パケットが順序誤りパケットであるかを判定処理により判定し、前記受信パケットが順序誤りパケットである場合は前記順序誤りパケットと前記順序誤りパケットの通信フロー識別情報との組を前記バッファへ格納することにより前記受信パケットを正しい順序に並べ替えて出力する制御部と
を備え、
前記順序誤りパケットは、送信時の順序とは異なる順序で受信された前記受信パケットであり、
前記通信フロー情報は、前記複数の通信フローの各々を識別するための情報である
パケット整列装置。
【請求項２】
請求項１に記載のパケット整列装置であって、
前記制御部は、前記受信パケットが送信時の順序で受信された場合は前記受信パケットを後段へ出力し、前記出力された受信パケットの前記通信フロー情報に基づく抽出処理により前記バッファから後続パケットを抽出して前記後段へ出力し、
前記後続パケットは、送信時の順序が前記出力された受信パケットの後続であった前記順序誤りパケットである
パケット整列装置。
【請求項３】
請求項２に記載のパケット整列装置であって、
前記制御部は、前記出力された受信パケットの前記通信フロー情報に対応する前記順序誤りパケットが前記バッファに存在する場合にのみ前記抽出処理を行う
パケット整列装置。
【請求項４】
請求項２または請求項３のいずれかに記載のパケット整列装置であって、
前記通信フロー情報とシーケンス番号との組を記憶するフロー情報テーブルをさらに備え、
前記シーケンス番号は、次の受信パケットに格納されるべき前記通信フロー情報毎のシーケンス番号の期待値であり、
前記制御部は、第一のシーケンス番号と前記第二のシーケンス番号とが一致するかに基づいて前記判定処理を行い、
前記第一のシーケンス番号は、前記受信パケットに格納されたシーケンス番号あり、
前記第二のシーケンス番号は、前記受信パケットの通信フロー情報と組で前記フロー情報テーブルに記憶された前記シーケンス番号である
パケット整列装置。
【請求項５】
請求項４に記載のパケット整列装置であって、
前記主制御部は、前記受信パケットを後段へ出力する度に、前記第二のシーケンス番号を次に受信されるべきシーケンス番号の期待値へ更新し、前記抽出処理において、前記出力された受信パケットの通信フロー情報と組で前記バッファに記憶された順序誤りパケットであって、前記更新された第一のシーケンス番号と一致するシーケンス番号を格納した順序誤りパケットを前記後続パケットとして抽出する。
パケット整列装置。
【請求項６】
請求項４または請求項５に記載のパケット整列装置であって、
前記フロー情報テーブルは、前記通信フロー情報と前記シーケンス番号との組にパケット蓄積数をさらに対応させて記憶し、
前記パケット蓄積数は、前記バッファに記憶された前記通信フロー情報毎の前記順序誤りパケットの数であり、
前記制御部は、前記パケット蓄積数に基づいて、前記出力されたパケットの前記通信フロー情報に対応する前記順序誤りパケットが前記バッファに存在するかを判定する
パケット整列装置。
【請求項７】
請求項６に記載のパケット整列装置であって、
パケットを受信する度に、前記フロー情報テーブルから読み出される前記第二のシーケンス番号を記憶する第一のレジスタをさらに備え、
前記主制御部は、前記第一のレジスタに記憶された前記第二のシーケンス番号に基づいて前記判定処理及び前記抽出処理を行う
パケット整列装置。
【請求項８】
請求項７に記載のパケット整列装置であって、
パケットを受信する度に、前記受信パケットの前記通信フロー情報と組で前記フロー情報テーブルに記憶された前記パケット蓄積数を記憶する第二のレジスタをさらに備え、
前記主制御部は、前記第二レジスタに記憶された前記パケットの蓄積数に基づいて、前記出力されたパケットの前記通信フロー情報に対応する前記順序誤りパケットが前記バッファに存在するかを判定する
パケット整列装置。
【請求項９】
請求項１から請求項８までのいずれかに記載のパケット整列装置を備える受信装置。
【請求項１０】
パケット整列装置におけるパケット整列方法であって、
前記パケット整列装置は、
複数の通信フローのパケットを格納するために設けられた一つのバッファと、
制御部と
を備え、
パケットを受信するステップと、
前記受信パケットを受信する度に前記受信パケットが順序誤りパケットであるかを判定処理により判定するステップと、
前記受信パケットが順序誤りパケットである場合は前記順序誤りパケットと前記順序誤りパケットの通信フロー識別情報との組を前記バッファへ格納するステップと、
前記受信パケットを正しい順序に並べ替えて出力するステップと
を具備し、
前記順序誤りパケットは、送信時の順序とは異なる順序で受信された前記受信パケットであり、
前記通信フロー情報は、前記複数の通信フローの各々を識別するための情報である
パケット整列方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信パケットの受信装置に関し、特に、送信順序とは異なる順序で受信された通信パケットを送信順序に並び替える受信装置に関する。
【背景技術】
【０００２】
パケット通信ネットワークは、細かく分割されたデータを通信パケット（以下、パケット）に格納して、送受信装置間で送受信を行う通信ネットワークである。例えば、インターネットは、代表的なパケット通信ネットワークである。パケット通信ネットワークは、複数の伝送装置が相互に接続されることにより構成される。伝送装置は、パケットを送信先へ転送するネットワークルータ（以下、ルータ）やネットワークスイッチ（以下、スイッチ）に例示される。【０００３】
パケット通信ネットワークでは、伝送中の通信パケットの廃棄や破壊が発生する。これは、パケットを転送するルータやスイッチにおける処理の輻輳や、装置間を接続する伝送線路からの信号受信感度の低下、あるいは外部からの電磁ノイズの影響といったことに起因する。一般的に、廃棄や破壊によるパケットの消失は、アプリケーション層、あるいはトランスポート層で動作するプロトコルによって検知される。そして、そのようなプロトコルの制御により、消失したパケットの再送が行われて、データの完全性が保証される。【０００４】
パケットの再送が発生すると、先に送信されたパケットが後に送信されたパケットより遅れて受信装置へ到着する状態が発生する。つまり、パケットの送信時の順序と受信時の順序とが異なる状態が発生する。このような状態を、パケットの順序入れ替わりと呼ぶ。しかし、多くのアプリケーションは、パケットの順序入れ替わりが発生しないことを期待している。そこで、受信装置は、パケットの順序入れ替わりが発生した場合には、パケットを送信された順序に並び替えて、アプリケーションに正しい順序でデータを渡す。例えば、送信装置は、パケットの送信順序を示すシーケンス番号を付与したパケットを送信する。受信装置は、このシーケンス番号を参照して、パケットを正しい順序へ並び替える。このとき、受信装置は、並び替えを正しく行うために、順序が入れ替わって受信されたパケットを一時的に保存しておくためのメモリ（以下、並び替えバッファ）を備える必要がある。【０００５】
ところで、パケット通信は１対１の送受信装置間で行われるとは限らない。一般に、複数の通信装置の間で互いにパケットの送受信が行われる。図１は、一般的な受信装置が複数の送信装置からパケットを受信する状況を示す概念図である。図１を参照すると、受信装置２１１が３つの送信装置２１０−１〜３からネットワーク２００を介してパケット１０を受信する状況が示されている。図１において、パケット１０は、区別のため送信装置２１０−１〜３毎に形状を変えて示されている。パケット１０内に示された数字は、パケット１０に付されたシーケンス番号３１を示す。複数の送信装置２１０−１〜３により送信されたパケット１０は、スイッチ２０１により受信装置２１１へ転送される。パケット１０は、その転送過程で、廃棄や破壊により消失する。【０００６】
受信装置２１１は、通信中の送信装置２１０−１〜３に対応する数の並び替えバッファ２３０−１〜３を備える。これは、送信装置２１０−１〜３から送信されるパケット１０のシーケンス番号３１には互いに相関関係が無く、異なる送信装置２１０−１〜３から送信されたパケット１０が同一のシーケンス番号３１を付与されている場合があるからである。受信装置２１１は、送信装置２１０−１〜３の各々から受信するパケット１０に対して、送信装置２１０−１〜３毎にシーケンス番号３１を管理する必要がある。【０００７】
ここでは、説明の簡易のために送信装置２１０−１〜３の装置単位でシーケンス番号３１を付与される例を説明している。しかし、送信装置２１０−１〜３は、複数のアプリケーションプログラムを同時に実行する場合もある。また、各アプリケーションがさらに複数の通信コネクションをオープンすることも考えられる。このような場合には、受信装置２１１は、コネクション毎にシーケンス番号３１を管理する必要がある。【０００８】
なお、以下の説明において、一連のシーケンス番号３１を付与されたパケット１０の集合を、フローと定義する。フローは、送受信装置、ユーザ、リンク、搬送波の周波数、コネクション、セッション、アプリケーション等の単位、あるいはこれらの組み合わせによる単位で識別される。受信装置２１１における並び替えバッファ２３０−１〜３の必要数は、当該受信装置２１１が通信を行っているフローの数に等しいと言える。このような、フロー毎に設けられた並び替えバッファ２３０−１〜３用いてパケット１０の並び替えを行う技術として、以下のような技術が開示されている。【０００９】
特許文献１は、受信機におけるパケット再送方式において、データパケットの誤合成を回避するデータ受信方法を開示している。特許文献１のデータ受信方法は、移動体通信におけるＨＡＲＱ（Ｈｙｂｒｉｄ  Ａｕｔｏｍａｔｉｃ  Ｒｅｐｅａｔ−ｒｅＱｅｓｔ）と呼ばれる自動再送制御に関する。図２は、特許文献１に開示された移動体通信ネットワークにおいてＵＴＲＡＮ（ＵＭＴＳ地上無線アクセスネットワーク：ＵＭＴＳ  Ｔｅｒｒｅｓｔｒｉａｌ  Ｒａｄｉｏ  Ａｃｃｅｓｓ  Ｎｅｔｗｏｒｋ）を構成するＲＮＣ（Ｒａｄｉｏ  Ｎｅｔｗｏｒｋ  Ｃｏｎｔｒｏｌｌｅｒ）のＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）サブレイヤの構成を示す図である。このＭＡＣサブレイヤ３００は、ＭＡＣ−ｅｕ３０１−１〜ｎと呼ばれる。図２に示される各ＭＡＣ−ｅｕ３０１−１〜ｎは、それぞれ１ユーザに対応している。特許文献１において、ＲＮＣの備える並び替えバッファエンティティの数は、ユーザ数と１ユーザあたりのフローの数との積に等しい。そのため、特許文献１においてＲＮＣは、総フロー数に対応する並び替えバッファを備える。【００１０】
特許文献１によれば、並び替えバッファの容量は、受信装置における総フロー数に比例する。このため、サーバに例示されるような多数のフローを扱うことが多い受信装置は、並び替えバッファのために大量のメモリを消費してしまうという課題がある。【００１１】
一般に、容量が少ないメモリは、容量が多いメモリよりも高速に動作する。必要とされるメモリが少なければ、マイクロプロセッサ内のキャッシュメモリやＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）に例示される高速なメモリを並び替えバッファとして使用できる。一方、そのような高速なメモリでは容量が不足する場合には、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）に例示される比較的低速なメモリを並び替えバッファとして使用せざるを得なくなる。【００１２】
特許文献１のように多数のフローにおいてパケット１０の並び替えを行う場合、並び替えバッファのためにメモリ資源が過剰に消費される。これに伴って、大容量だが低速なメモリの使用を余儀なくされる。そのため、パケットの並び替え処理に伴うメモリアクセスに係る所要時間が増加し、並び替え処理の速度が低下するという課題も存在する。【００１３】
なお、特許文献２は、通信パケットの遅延・喪失の発生や、通信障害の発生においても高品質のサービスを安価で提供することができるパケット通信システムを開示している。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開２００７−０２８６５３号公報
【特許文献２】特開２００７−０１３５１０号公報
【発明の概要】
【００１５】
本発明は、上述の事情を鑑みてなされたものであり、受信されたパケットの並び替え処理に用いられるメモリ資源を節約することが可能なパケット整列装置を実現することを目的とする。
【００１６】
本発明の一つの観点としてパケット整列装置が提供される。本発明のパケット整列装置は、複数の通信フローのパケットを格納するために設けられた一つのバッファと、パケットを受信する度に受信パケットが順序誤りパケットであるかを判定処理により判定し、受信パケットが順序誤りパケットである場合は順序誤りパケットと順序誤りパケットの通信フロー識別情報との組をバッファへ格納することにより受信パケットを正しい順序に並べ替えて出力する制御部とを備える。順序誤りパケットは、送信時の順序とは異なる順序で受信された受信パケットである。通信フロー情報は、複数の通信フローの各々を識別するための情報である。
【００１７】
本発明の他の観点としてパケット整列装置を備える受信装置が提供される。本発明のパケット整列装置を備える受信装置は、上述のパケット整列装置を備える。
【００１８】
本発明のさらに他の観点としてパケット整列方法が提供される。本発明のパケット整列方法は、パケット整列装置におけるパケット整列方法である。パケット整列装置は、複数の通信フローのパケットを格納するために設けられた一つのバッファと制御部とを備える。パケット整列方法は、パケットを受信するステップと、受信パケットを受信する度に受信パケットが順序誤りパケットであるかを判定処理により判定するステップと、受信パケットが順序誤りパケットである場合は順序誤りパケットと順序誤りパケットの通信フロー識別情報との組をバッファへ格納するステップと、受信パケットを正しい順序に並べ替えて出力するステップとを具備する。順序誤りパケットは、送信時の順序とは異なる順序で受信された受信パケットである。通信フロー情報は、複数の通信フローの各々を識別するための情報である。
【００１９】
本発明によれば、受信されたパケットの並び替え処理に用いられるメモリ資源を節約することが可能なパケット整列装置を実現することができる。また、メモリ資源が小容量で済むため、小容量で高速なメモリを並び替えバッファとして使用することが可能となり、並び替え処理を高速化することができる。
【図面の簡単な説明】
【００２０】
上記発明の目的、効果、特徴は、添付される図面と連携して実施の形態の記述から、より明らかになる。【００２１】
【図１】図１は、一般的な受信装置が複数の送信装置からパケットを受信する状況を示す概念図である。
【図２】図２は、特許文献１に開示された移動体通信ネットワークにおいてＵＴＲＡＮを構成するＲＮＣのＭＡＣサブレイヤの構成を示す図である。
【図３】図３は、本発明の実施形態におけるパケット整列装置１の適用される通信ネットワークを示す図である。
【図４】図４は、本発明の実施形態におけるパケット整列装置１の構成を示す図である。
【図５】図５は、本発明の実施形態におけるフロー情報テーブル２１を示す図である。
【図６】図６は、本発明の実施形態における並び替えバッファ２２を示す図である。
【図７】図７は、本発明の実施形態におけるパケット整列装置１の動作フローである。
【図８】図８は、本発明の実施形態におけるパケット整列装置１によるパケット１０の並び替えを処理の具体例を示す図である。
【図９】図９は、本発明の実施形態の具体例におけるフロー情報テーブル２１と並び替えバッファ２２とに記憶された情報を示す図である。
【図１０】図１０は、本発明の実施形態におけるパケット整列装置１を情報処理装置に適用した場合の構成を示す図である。
【発明を実施するための形態】
【００２２】
添付図面を参照して、本発明の実施形態によるパケット整列装置を以下に説明する。
【００２３】
［通信ネットワークの構成］
はじめに、本実施形態におけるパケット整列装置１が適用される通信ネットワークの説明を行う。図３は、本実施形態におけるパケット整列装置１が適用される通信ネットワークを示す図である。
【００２４】
図３の通信ネットワークは、送信装置２１０−１〜Ｎ（Ｎは自然数）と、ネットワーク２００と、受信装置２１２とを備える。以下、単に任意の送信装置を指し示す場合は２１０の符号を付する。
【００２５】
まず、ネットワーク２００は、送信装置２１０−１〜Ｎと受信装置２１２との間で送受信されるパケット１０を転送する。ネットワーク２００は、予め定められた転送経路に沿って、あるいはパケット１０に含まれる宛先情報に従って、パケット１０を適切な送信先へ転送する。ネットワーク２００では、パケット１０の消失や、パケット１０の順序入れ替わりが発生する可能性がある。
【００２６】
次に、送信装置２１０は、受信装置２１２との間でネットワーク２００を介したパケット１０の送受信を行う。パケット１０は、フロー情報３０とシーケンス番号３１をヘッダ、あるいはペイロードに格納している。フロー情報３０は、パケット１０が属するフローを識別するための情報である。フロー情報３０は、送信装置２１０によりパケット１０へ格納される。フロー情報３０は、送受信装置のＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスや、ポート番号や、ユーザ識別子や、アプリケーション識別子等、あるいはこれらの組み合わせに例示される。なお、フロー情報３０は、パケット１０が属するフローを識別することが可能であればこれらの例に限定しない。
【００２７】
シーケンス番号３１は、フロー毎のパケット１０の送信順序を示す。送信装置２１０は、シーケンス番号３１をパケット毎に付与する。送信装置２１０は、送信されたパケット１０の消失を検知して、消失したパケット１０を再送する機能を備える。送信装置２１０は、受信装置２１２からの通知によりパケット１０の消失を検知してもよい。送信装置２１０は、消失したパケット１０に付与されたシーケンス番号３１と同じシーケンス番号３１を付与したパケット１０を再送する。
【００２８】
ここで、シーケンス番号３１は、必ずしも「１、２、３、・・・」のように連続した番号である必要は無い。また、シーケンス番号３１の初期値は、フロー毎に定められた任意の値であってよい。ただし、シーケンス番号３１の初期値は、送信装置２１０と受信装置２１２との間で整合していなければならない。
【００２９】
次に、受信装置２１２は、下位レイヤ処理部２２１と、パケット整列装置１と、上位レイヤ処理部２２２と、物理ポート２２０−１〜Ｍ（Ｍは自然数）を備える。以下、単に任意の物理ポートを指し示すときは２２０の符号を付する。物理ポート２２０−１〜Ｍは、ネットワーク２００と受信装置２１２とを接続する。
【００３０】
下位レイヤ処理部２２１は、物理ポート２２０から入力される入力信号に対して下位レイヤである物理層とリンク層の処理を行ってパケット１０の検出処理を行う。下位レイヤ処理部２２１は、検出されたパケット１０をパケット整列装置１へ出力する。下位レイヤ処理部２２１による入力信号からパケット１０の検出処理は、公知の技術であるのでここでは説明を省略する。
【００３１】
パケット整列装置１は、パケット１０を送信装置２１０により送信された順序に並べ替える。パケット整列装置１は、正しい順序に整列されたパケット１０を整列済パケット１１として上位レイヤ処理部２２２へ出力する。パケット整列装置１の構成は、後に詳細に説明する。
【００３２】
上位レイヤ処理部２２２は、パケット整列装置１から入力される整列済パケット１１に対して上位レイヤであるアプリケーション層の処理を行う。ここで、アプリケーション層の処理には、セッション層やプレゼンテーション層の処理も含み、アプリケーションへのデータの受け渡しやアプリケーションの機能の実行が行われる。上位レイヤ処理部２２２によるアプリケーション層の処理は、公知の技術であるためここでは説明を省略する。なお、受信装置２１２は、必ずしも上位レイヤ処理部２２２を備えなくとも良い。
【００３３】
［パケット整列装置の構成］
次に、上述のような通信ネットワークに適用される本実施形態におけるパケット整列装置１の構成の説明を行う。図４は、本実施形態におけるパケット整列装置１の構成を示す図である。パケット整列装置１は、記憶部２０と、制御部２５とを備える。
【００３４】
はじめに、記憶部２０の説明を行う。記憶部２０は、パケット整列装置１の機能を実現するコンピュータプログラムやデータを記憶する。記憶部２０は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）や、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）や、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）に例示される。記憶部２０は、フロー情報テーブル２１と、並び替えバッファ２２と、期待シーケンス番号レジスタ２３と、蓄積パケット数レジスタ２４とを備える。以下、各構成について説明を行う。
【００３５】
まず、フロー情報テーブル２１は、受信装置２１２と送信装置２１０との間で通信中であるパケット１０のフロー情報３０を記憶する。図５は、本実施形態におけるフロー情報テーブル２１を示す図である。フロー情報テーブル２１は、フロー情報エントリ４０を格納する。フロー情報エントリ４０は、受信装置２１２が通信中であるフローの一つに対応している。フロー情報エントリ４０には、フロー情報４１と、期待シーケンス番号４２と、蓄積パケット数４３との組が記録される。なお、フロー情報テーブル２１の内容は、初期状態で空である。
【００３６】
フロー情報４１は、パケット１０に格納されたフロー情報３０である。フロー情報４１は、パケット１０から抽出されてフロー情報テーブル２１に記録される。期待シーケンス番号４２は、フロー情報４１のフローにおいて、次に受信されるパケット１０に格納されるべきシーケンス番号３１の期待値を示す。つまり、パケット１０に格納されたシーケンス番号３１が期待シーケンス番号４１と一致すれば、パケット１０は送信順序どおりに受信されたことを示す。蓄積パケット数４３は、並び替えバッファ２２に蓄積されているフロー情報４１毎のパケット１０の数である。
【００３７】
次に、並び替えバッファ２２は、誤った順序でパケット整列装置１に受信されたパケット１０を蓄積する。ここで、誤った順序で受信されるとは、送信装置２１０により送信された順序とは異なる順序で受信されることを示す。図６は、本実施形態における並び替えバッファ２２を示す図である。並び替えバッファ２２は、パケットエントリ５０を備える。パケットエントリ５０は、誤った順序でパケット整列装置１に受信されたパケット１０の一つに対応している。パケットエントリ５０には、パケット１０のフロー情報５１と、シーケンス番号５２と、パケット５３との組が記録される。なお、並び替えバッファ２２は、初期状態で空である。
【００３８】
フロー情報５１は、パケット１０に格納されたフロー情報３０である。フロー情報５１は、パケット１０から抽出されて並び替えバッファ２２に記録される。シーケンス番号５２は、パケット１０に格納されたシーケンス番号３１である。シーケンス番号５２は、パケット１０から抽出されて並び替えバッファ２２に記録される。パケット５３は、パケット１０自体である。パケット５３は、パケット１０自体が並び替えバッファ２２に記憶される。
【００３９】
次に、期待シーケンス番号レジスタ２３は、期待シーケンス番号４２を保持する。期待シーケンス番号レジスタ２３は、主制御部２７が処理中のパケット１０のフロー情報３０と組でフロー情報テーブル２１に記憶された期待シーケンス番号４２の値を保持する。期待シーケンス番号レジスタ２３は、期待シーケンス番号４２を主制御部２７により書き込まれる。
【００４０】
次に、蓄積パケット数レジスタ２４は、パケット蓄積数４３を保持する。蓄積パケット数レジスタ２４は、主制御部２７が処理中のパケット１０のフロー情報３０と組みでフロー情報テーブル２１に記憶された蓄積パケット数４３の値を保持する。蓄積パケット数レジスタ２４は、蓄積パケット数４３を主制御部２７により書き込まれる。以上が、記憶部２０の説明である。
【００４１】
続いて制御部２５の説明を行う。制御部２５は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に例示される。制御部２５は、記憶部２０に記憶されたコンピュータプログラムを実行することでパケット整列装置１の機能を実現する。制御部２５は、フロー情報抽出部２６と、主制御部２７とを備える。以下、これらの構成を説明する。
【００４２】
まず、フロー情報抽出部２６は、下位レイヤ処理部２２１からパケット１０を入力して、パケット１０に格納されたフロー情報３０及びシーケンス番号３１を取得する。フロー情報抽出部２６は、パケット１０から取得されたフロー情報３０及びシーケンス番号３１を主制御部２７へ出力する。
【００４３】
次に、主制御部２７は、パケット１０の並び替え処理を実行する。主制御部２７は、下位レイヤ処理部２２１からパケット１０を入力する。主制御部２７は、フロー情報抽出部２６から入力されたフロー情報３０及びシーケンス番号３１に基づいて、パケット１０の並び替え処理を行う。主制御部２７は、並び替え後のパケット１０を整列済パケット１１として上位レイヤ処理部２２２へ出力する。以上が、制御部２５の説明である。
【００４４】
なお、パケット整列装置１は、上述のようにソフトウェアにより実現されても良いし、ハードウェアにより実現されてもよい。あるいは、パケット整列装置１は、ハードウェアとソフトウェアとを複合した構成により実現されてもよい。記憶部２０及び制御部２５は、ハードウェアによる構成として実現される場合、回路基板やメモリチップに例示されるデバイスにより実現されてもよい。
【００４５】
また、ソフトウェアによりパケット整列装置１を実現する場合、記憶部２０に記憶されるコンピュータプログラムは、記録媒体８０に記録しておくことが可能である。ここで、記録媒体８０は、パケット整列装置１のハードディスクやＲＯＭに例示される。また、コンピュータプログラムは、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）に例示される移動可能な記録媒体８０に、一時的、あるいは、永続的に記録しておくことが可能である。コンピュータプログラムは、移動可能な記憶媒体８０からパケット整列装置１へ直接導入される。コンピュータプログラムは、アプリケーションダウンロードサーバからネットワークを介してパケット整列装置１へ導入されても良い。以上が、本実施形態におけるパケット整列装置１の構成の説明である。
【００４６】
［パケット整列装置１の動作］
次に、上述のような構成による本実施形態におけるパケット整列装置１の動作の説明を行う。図７は、本実施形態におけるパケット整列装置１の動作フローである。
【００４７】
パケット整列装置１は、下位レイヤ処理部２２１からパケット１０を入力する（ステップＳ１００）。パケット１０は、フロー情報抽出部２６と主制御部２７とへ入力される。フロー情報抽出部２６は、パケット１０からフロー情報３０とシーケンス番号３１とを抽出する（ステップＳ１０１）。フロー情報抽出部２６は、抽出されたフロー情報３０とシーケンス番号３１とを主制御部２７へ出力する。主制御部２７は、フロー情報抽出部２６から入力されたフロー情報３０と一致するフロー情報４１がフロー情報テーブル２１に存在するか検索する（ステップＳ１０２）。主制御部２７は、一致するフロー情報４１が存在するか判定する（ステップＳ１０３）。存在した場合、検索成功となり、フローはステップＳ１０４へ進む。一方、存在しない場合、検索失敗となり、フローはステップＳ１０５へ進む。
【００４８】
主制御部２７は、フロー情報３０と一致するフロー情報４１がフロー情報テーブル２１に存在する場合（ステップＳ１０３のＹｅｓ）、当該フロー情報４１のフロー情報エントリ４０に記録された期待シーケンス番号４２を期待シーケンス番号レジスタ２３へ、蓄積パケット数４３を蓄積パケット数レジスタ２３へそれぞれ代入する（ステップＳ１０４）。一方、主制御部２７は、フロー情報３０と一致するフロー情報４１がフロー情報テーブル２１に存在しない場合（ステップＳ１０３のＮｏ）、期待シーケンス番号レジスタ２３と蓄積パケット数レジスタ２３とを初期化する（ステップＳ１０５）。ここで、期待シーケンス番号レジスタ２３の初期値は、処理を行っているパケット１０のフロー情報３０に対応するフローのシーケンス番号３１の初期値に等しい。また、蓄積パケット数レジスタ２４の初期値は、「０」である。
【００４９】
続いて、主制御部２７は、パケット１０のシーケンス番号３１と期待シーケンス番号レジスタ２３との値が等しいか否かを判定する（ステップＳ１０６）。等しい場合、フローはステップＳ１０９へ進む。一方、等しくない場合、フローはステップＳ１０７へ進む。主制御部２７は、パケット１０のシーケンス番号３１と期待シーケンス番号レジスタ２３との値が等しくない場合（ステップＳ１０６のＮｏ）、並び替えバッファ２２にパケットエントリ５０を登録する（ステップＳ１０７）。シーケンス番号の期待値と実際のシーケンス番号とが一致しないため、パケット１０の順序誤りが発生したと考えられるからである。
【００５０】
ここで、前述の通り、パケットエントリ５０には、フロー情報５１、シーケンス番号５２、パケット５３が記録される。この場合のフロー情報５１及びシーケンス番号５２は、主制御部２７が処理を行っているパケット１０に格納されたフロー情報３０及びシーケンス番号３１である。また、パケット５３は、パケット１０自体である。主制御部２７は、蓄積パケット数レジスタ２４に「１」を加算する（ステップＳ１０８）。この後、ステップＳ１１７へ進む。
【００５１】
一方、主制御部２７は、パケット１０のシーケンス番号３１と期待シーケンス番号レジスタ２３との値が等しい場合（ステップＳ１０６のＹｅｓ）、パケット１０を整列済パケット１１として上位レイヤ処理部２２２へ出力する（ステップＳ１０９）。シーケンス番号の期待値と実際のシーケンス番号が一致しているため、パケット１０は正しい順序で受信されたパケットであるからである。その後、主制御部２７は、期待シーケンス番号レジスタ２３の値を、処理を行ったパケット１０の属するフローにおいて次に受信するべきシーケンス番号３１の期待値へ更新する（ステップＳ１１０）。例えば、シーケンス番号３１が「１、２、３、・・・」のように「１」を加算される方法で付与されているのであれば、主制御部２７は、期待シーケンス番号レジスタ２３の値に「１」を加算する。あるいは、シーケンス番号３１がパケット１０の情報等を用いて演算される場合は、主制御部２７は、演算を行って算出された値へ、期待シーケンス番号レジスタ２３の値を更新する。
【００５２】
続いて、主制御部２７は、蓄積パケット数レジスタ２４の値が「０」であるか否かを判定する（ステップＳ１１１）。「０」である場合、送信された順序と異なる順序で受信されたパケット１０は蓄積パケット数レジスタ２４には存在しない。そのため、フローは、ステップＳ１１７へ進む。一方、「０」でない場合、送信された順序と異なる順序で受信されたパケット１０が蓄積パケット数レジスタ２４に存在する。そのため、フローは、当該パケット１０の処理を行うべくステップＳ１１２へ進む。
【００５３】
主制御部２７は、蓄積パケット数レジスタ２４の値が「０」でない場合（ステップＳ１１１のＮｏ）、並び替えバッファ２２を検索する（ステップＳ１１２）。主制御部２７は、並び替えバッファ２２に、整列済みパケット１１として出力されたパケット１０のフロー情報３０と一致するフロー情報５１を記録し、かつ、更新された期待シーケンス番号レジスタ２３の値と一致する値のシーケンス番号５２を記録したパケットエントリ５０が存在するか検索する。これは、直前に上位レイヤ処理部２２２へ出力されたパケット１０の後続のパケット１０が並び替えバッファ２２に記録されているか確認することを意味する。
【００５４】
主制御部２７は、条件に一致するパケットエントリ５０が存在するかを判定する（ステップＳ１１３）。存在しない場合、検索失敗となり、処理を行うべきパケットエントリ５０は存在しないため、フローはステップＳ１１７へ進む。存在した場合、検索成功となり、当該パケットエントリ５０の処理を行うため、フローはステップＳ１１４へ進む。
【００５５】
主制御部２７は、条件に一致するパケットエントリ５０が存在した場合（ステップＳ１１３のＹｅｓ）、当該パケットエントリ５０のパケット５３を整列済パケット１１として上位レイヤ処理部２２２へ出力する（ステップＳ１１４）。上述の条件に一致するパケットエントリ５０のパケット１０は、直前に整列済みパケット１１として上位レイヤ処理部２２２に出力されたパケット１０の後続のパケット１０であるからである。主制御部２７は、パケット５３が出力されたパケットエントリ５０のデータを削除する（ステップＳ１１５）。そして、主制御部２７は、蓄積パケット数レジスタ２４から「１」を減算する（ステップＳ１１６）。その後、フローは、ステップＳ１１０へ戻る。
【００５６】
ステップＳ１０８の後、また、ステップＳ１１１がＹＥＳの場合、あるいは、ステップＳ１１３がＮｏの場合、フローはステップＳ１１７へ移行する。主制御部２７は、フロー情報テーブル２１にフロー情報エントリ４０を登録する（ステップＳ１１７）。主制御部２７は、期待シーケンス番号レジスタ２３の値及び蓄積パケット数レジスタ２４の値を、処理が行われたパケット１０のフロー情報３０と組でフロー情報テーブル２１へ登録する。このとき、主制御部２７は、既に処理が行われたパケット１０のフロー情報３０と一致するフロー情報４１がフロー情報テーブル２１に存在する場合、既存のデータを上書きすることにより登録を行う。このようにして、パケット整列装置１は、受信されたパケット１０の処理を完了する。この後、また、パケット整列装置１０が新たにパケット１０を受信すると、再び、ステップＳ１００から処理を開始する。以上が、本実施形態におけるパケット整列装置１の動作の説明である。
【００５７】
［パケット整列装置１の具体的動作の例］
次に、本実施形態におけるパケット整列装置１の動作を具体的な例を用いて説明する。図８は、本実施形態におけるパケット整列装置１によるパケット１０の並び替えを処理の具体例を示す図である。図８を参照すると、ある「フローＡ」に属する４つのパケット１０がパケット装置１へ入力されている。４つのパケット１０に付与された「１〜４」の番号は、パケット１０のシーケンス番号３１を示している。パケット１０は、この順番で送信装置２１０から送信されたこととする。パケット装置１は、４つのパケットを、「１、４、２、３」の順番で入力している。このため、何かしらの原因でパケット１０の到着順序が入れ替わっていることが理解できる。また、４つのパケットは、それぞれフロー情報３０として「フローＡ」を格納しているとする。また、図９は、本実施形態の具体例におけるフロー情報テーブル２１と並び替えバッファ２２とに記憶された情報を示す図である。以下、図７、図８、図９を参照して、４つのパケット１０を受信した場合を例として、パケット整列装置１の動作を説明する。
【００５８】
はじめに、パケット整列装置１は、「フローＡ」に属する１つ目のパケット１０を入力する（ステップＳ１００）。フロー情報抽出部２６は、パケット１０からフロー情報３０として「フローＡ」、シーケンス番号３１として「１」を抽出する（ステップＳ１０１）。主制御部２７は、フロー情報抽出部２６により抽出された「フローＡ」に基づいて、フロー情報テーブル２１を検索する（ステップＳ１０２）。主制御部２７は、「フローＡ」と一致するフロー情報３０が記録されたフロー情報エントリ４０がフロー情報テーブル２１に存在するか否かを判定する（ステップＳ１０３）。図９（初期状態）に示すように、この時点では、フロー情報テーブル２１は空であるので、検索は失敗となる（ステップＳ１０３のＮｏ）。そのため、主制御部２７は、期待シーケンス番号レジスタ２３と、蓄積パケット数レジスタ２４とを初期化する（ステップＳ１０５）。これにより、期待シーケンス番号レジスタ２３は、「１」となり、蓄積パケット数レジスタ２４は、「０」となる。
【００５９】
続いて、主制御部２７は、受信されたパケット１０のシーケンス番号３１と期待シーケンス番号レジスタ２３との値が等しいかを判定する（ステップＳ１０６）。受信されたパケット１０のシーケンス番号３１と期待シーケンス番号レジスタ２３との値は、共に「１」である。そのため、主制御部２７は、等しいと判定する（ステップＳ１０６のＹｅｓ）。主制御部２７は、パケット１０が期待されたシーケンス番号３１を有するパケットであるため、当該パケット１０（シーケンス番号３１が「１」）を整列済パケット１１として上位レイヤ処理部２２２へ出力する（ステップＳ１０９）。
【００６０】
主制御部２７は、期待シーケンス番号レジスタ２３の値を、パケット整列装置１が「フローＡ」において次に受信するべきシーケンス番号３１の期待値へ更新する（ステップＳ１１０）。本説明では、シーケンス番号３１が「１、２、３、４、・・・」と増加するため、主制御部２７は、期待シーケンス番号レジスタ２３の値に「１」を加算して、期待シーケンス番号レジスタ２３の値を「２」とする。その後、主制御部２７は、蓄積パケットレジスタ２４の値が「０」であるか否かを判定する（ステップＳ１１１）。蓄積パケットレジスタ２４の値は、ステップＳ１０５で初期化されて「０」である（ステップＳ１１１のＹｅｓ）。つまり、並び替えバッファ２２に蓄積されたパケットは存在しない。そのため、主制御部２７は、フロー情報テーブル２１にフロー情報エントリ４０を登録する（ステップＳ１１７）。このとき、主制御部２７は、フロー情報４１をパケット１０（シーケンス番号３１が「１」）の「フローＡ」、期待シーケンス番号４２を期待シーケンス番号レジスタ２３の「２」、蓄積パケット数４３を蓄積パケット数レジスタ２３の「０」、としてフロー情報テーブル２１に新規エントリを登録する。これによって、パケット整列装置１は、シーケンス番号３１が「１」のパケット１０の処理を完了する。図９を参照すると、シーケンス番号３１が「１」のパケット１０を処理した後のフロー情報テーブル２１と並び替えバッファ２２の状態を確認できる（図９のパケット＃１の処理完了時）。
【００６１】
次に、パケット整列装置１は、「フローＡ」に属する２つ目のパケット１０を入力する（ステップＳ１００）。フロー情報抽出部２６は、パケット１０からフロー情報３０として「フローＡ」、シーケンス番号３１として「４」を抽出する（ステップＳ１０１）。主制御部２７は、フロー情報抽出部２６により抽出された「フローＡ」に基づいて、フロー情報テーブル２１を検索する（ステップＳ１０２）。主制御部２７は、「フローＡ」と一致するフロー情報４１が記録されたフロー情報エントリ４０がフロー情報テーブル２１に存在するか否かを判定する（ステップＳ１０３）。図９（パケット＃１の処理完了時）に示すように、この時点でフロー情報テーブル２１には「フローＡ」に対応するフロー情報エントリ４０が存在するので、検索は成功となる（ステップＳ１０３のＹｅｓ）。そのため、主制御部２７は、「フローＡ」に対応するフロー情報エントリ４０の期待シーケンス番号４２の値と蓄積パケット数４３の値とを、それぞれ期待シーケンス番号レジスタ２３と蓄積パケット数レジスタ２４とへ代入する（ステップＳ１０４）。これにより、期待シーケンス番号レジスタ２３は、「２」となり、蓄積パケット数レジスタ２４は、「０」となる。
【００６２】
続いて、主制御部２７は、受信されたパケット１０のシーケンス番号３１と期待シーケンス番号レジスタ２３との値が等しいかを判定する（ステップＳ１０６）。受信されたパケット１０のシーケンス番号３１が「４」で、期待シーケンス番号レジスタ２３の値が「２」である。そのため、主制御部２７は、等しくないと判定する（ステップＳ１０６のＮｏ）。主制御部２７は、並び替えバッファ２２にパケットエントリ５０を登録する（ステップＳ１０７）。このとき、主制御部２７は、フロー情報５１をパケット１０の「フローＡ」、シーケンス番号５２をパケット１０のシーケンス番号３１である「４」、パケット５３をパケット１０自体、として新規エントリを登録する。そして、主制御部２７は、蓄積パケット数レジスタ２４に「１」を加算する（ステップＳ１０８）。これにより、蓄積パケット数レジスタ２４の値は、「１」となる。
【００６３】
その後、主制御部２７は、フロー情報テーブル２１にフロー情報エントリ４０を登録する（ステップＳ１１７）。フロー情報テーブル２１には、「フローＡ」に対応するフロー情報エントリ４０が既に存在する。そのため、主制御部２７は、「フローＡ」に対応するフロー情報エントリ４０を、フロー情報４１をパケット１０の「フローＡ」、期待シーケンス番号４２を期待シーケンス番号レジスタ２３の「２」、蓄積パケット数４３を蓄積パケット数レジスタ２３の「１」へそれぞれ更新する。これによって、パケット整列装置１は、シーケンス番号３１が「４」のパケット１０の処理を完了する。図９を参照すると、シーケンス番号３１が「４」のパケット１０を処理した後のフロー情報テーブル２１と並び替えバッファ２２の状態を確認できる（図９のパケット＃４の処理完了時）。
【００６４】
次に、パケット整列装置１は、「フローＡ」に属する３つ目のパケット１０を入力する（ステップＳ１００）。フロー情報抽出部２６は、パケット１０からフロー情報３０として「フローＡ」、シーケンス番号３１として「２」を抽出する（ステップＳ１０１）。主制御部２７は、フロー情報抽出部２６により抽出された「フローＡ」に基づいて、フロー情報テーブル２１を検索する（ステップＳ１０２）。主制御部２７は、「フローＡ」と一致するフロー情報４１が記録されたフロー情報エントリ４０がフロー情報テーブル２１に存在するか否かを判定する（ステップＳ１０３）。図９（パケット＃４の処理完了時）に示すように、この時点でフロー情報テーブル２１には、「フローＡ」に対応するフロー情報エントリ４０が存在するので、検索は成功となる（ステップＳ１０３のＹｅｓ）。そのため、主制御部２７は、「フローＡ」に対応するフロー情報エントリ４０の期待シーケンス番号４２と蓄積パケット数４３とを、それぞれ期待シーケンス番号レジスタ２３と蓄積パケット数レジスタ２４とへ代入する（ステップＳ１０４）。これにより、期待シーケンス番号レジスタ２３は、「２」となり、蓄積パケット数レジスタ２４は、「１」となる。
【００６５】
続いて、主制御部２７は、受信されたパケット１０のシーケンス番号３１と期待シーケンス番号レジスタ２３との値が等しいかを判定する（ステップＳ１０６）。受信されたパケット１０のシーケンス番号３１が「２」で、期待シーケンス番号レジスタ２３の値も「２」である。そのため、主制御部２７は、等しいと判定する（ステップＳ１０６のＹｅｓ）。主制御部２７は、パケット１０（シーケンス番号３１が「２」）を整列済パケット１１として上位レイヤ処理部２２２へ出力する（ステップＳ１０９）。
【００６６】
その後、主制御部２７は、期待シーケンス番号レジスタ２３の値を、パケット整列装置１が「フローＡ」において次に受信するべきシーケンス番号３１の期待値へ更新する（ステップＳ１１０）。これにより、期待シーケンス番号レジスタ２３の値は、「３」となる。それから、主制御部２７は、蓄積パケットレジスタ２４の値が「０」であるか否かを判定する（ステップＳ１１１）。蓄積パケットレジスタ２４の値は、ステップＳ１０４で値を代入されて「１」である（ステップＳ１１１のＮｏ）。そのため、主制御部２７は、受信されたパケット１０のフロー情報３０と一致するフロー情報５１を記録し、かつ、期待シーケンス番号レジスタ２３の値と一致するシーケンス番号５２を記録したパケットエントリ５０を並び替えバッファ２２から検索する（ステップＳ１１２）。ここでは、主制御部２７は、「フローＡ」に対応し、かつ、シーケンス番号３１が「３」であるパケットエントリ５０を並び替えバッファ２２から検索する。図９（パケット＃４の処理完了時）に示すように、この条件に該当するパケットエントリ５０が存在しないため、主制御部２７による検索は、検索失敗となる（ステップＳ１１３のＮｏ）。
【００６７】
そして、主制御部２７は、フロー情報テーブル２１にフロー情報エントリ４０を登録する（ステップＳ１１７）。このとき、フロー情報テーブル２１には「フローＡ」に対応するフロー情報エントリ４０が既に存在する。そのため、主制御部２７は、「フローＡ」に対応するフロー情報エントリ４０を、フロー情報４１をパケット１０の「フローＡ」、期待シーケンス番号４２を期待シーケンス番号レジスタ２３の「３」、蓄積パケット数４３を蓄積パケット数レジスタ２３の「１」へそれぞれ更新する。これによって、パケット整列装置１は、シーケンス番号３１が「２」のパケット１０の処理を完了する。図９を参照すると、シーケンス番号３１が「２」のパケット１０を処理した後のフロー情報テーブル２１と並び替えバッファ２２の状態を確認できる（図９のパケット＃２の処理完了時）。
【００６８】
次に、パケット整列装置１は、「フローＡ」に属する４つ目のパケット１０を入力する（ステップＳ１００）。フロー情報抽出部２６は、パケット１０からフロー情報３０として「フローＡ」、シーケンス番号３１として「３」を抽出する（ステップＳ１０１）。主制御部２７は、フロー情報抽出部２６により抽出された「フローＡ」に基づいて、フロー情報テーブル２１を検索する（ステップＳ１０２）。主制御部２７は、「フローＡ」と一致するフロー情報３０が記録されたフロー情報エントリ４０がフロー情報テーブル２１に存在するか否かを判定する（ステップＳ１０３）。図９（パケット＃２の処理完了時）に示すように、この時点でフロー情報テーブル２１には、「フローＡ」に対応するフロー情報エントリ４０が存在するので、検索は成功となる（ステップＳ１０３のＹｅｓ）。そのため、主制御部２７は、「フローＡ」に対応するフロー情報エントリ４０の期待シーケンス番号４２と蓄積パケット数４３とを、それぞれ期待シーケンス番号レジスタ２３と蓄積パケット数レジスタ２４とへ代入する（ステップＳ１０４）。これにより、期待シーケンス番号レジスタ２３は、「３」となり、蓄積パケット数レジスタ２４は、「１」となる。
【００６９】
続いて、主制御部２７は、受信されたパケット１０のシーケンス番号３１と期待シーケンス番号レジスタ２３との値が等しいかを判定する（ステップＳ１０６）。受信されたパケット１０のシーケンス番号３１が「３」で、期待シーケンス番号レジスタ２３の値も「３」である。そのため、主制御部２７は、等しいと判定する（ステップＳ１０６のＹｅｓ）。主制御部２７は、パケット１０（シーケンス番号３１が「３」）を整列済パケット１１として上位レイヤ処理部２２２へ出力する（ステップＳ１０９）。
【００７０】
主制御部２７は、期待シーケンス番号レジスタ２３の値を、パケット整列装置１が「フローＡ」において次に受信するべきシーケンス番号３１の期待値に更新する（ステップＳ１１０）。これにより、期待シーケンス番号レジスタ２３の値は、「４」となる。その後、主制御部２７は、蓄積パケットレジスタ２４の値が「０」であるか否かを判定する（ステップＳ１１１）。蓄積パケットレジスタ２４の値は、ステップＳ１０４で値を代入されて「１」である（ステップＳ１１１のＮｏ）。そのため、主制御部２７は、受信されたパケット１０（シーケンス番号が「４」）のフロー情報３０と一致するフロー情報５１を記録し、かつ、期待シーケンス番号レジスタ２３の値と一致するシーケンス番号５２を記録したパケットエントリ５０を並び替えバッファ２２から検索する（ステップＳ１１２）。ここでは、主制御部２７は、「フローＡ」に対応し、かつ、シーケンス番号３１が「４」であるパケットエントリ５０を検索する（ステップＳ１１３）。図９（パケット＃２の処理完了時）に示すように、この条件に該当するパケットエントリ５０が存在するため、主制御部２７による検索は、検索成功となる（ステップＳ１１３のＹｅｓ）。
【００７１】
そのため、主制御部２７は、検索されたパケットエントリ５０に格納されたパケット５３（シーケンス番号３１が「４」）を整列済パケット１１として上位レイヤ処理部２２２へ出力する（ステップＳ１１４）。そして、主制御部２７は、整列済パケット１１としてパケット５３（シーケンス番号３１が「４」）が出力されたパケットエントリ５０のデータを削除する（ステップＳ１１５）。主制御部２７は、蓄積パケット数レジスタ２４から「１」を減算する（ステップＳ１１６）。これによって、蓄積パケット数レジスタ２４の値は、「０」となる。
【００７２】
その後、主制御部２７は、期待シーケンス番号レジスタ２３の値を、パケット整列装置１が「フローＡ」において次に受信するべきシーケンス番号３１の期待値に更新する（ステップＳ１１０）。これにより、期待シーケンス番号レジスタ２３の値は、「５」となる。それから、主制御部２７は、蓄積パケットレジスタ２４の値が「０」であるか否かを判定する（ステップＳ１１１）。蓄積パケットレジスタ２４の値は、ステップＳ１１６で値を「１」減算されて「０」である（ステップＳ１１１のＹｅｓ）。つまり、並び替えバッファ２２にパケット１０は蓄積されていない。
【００７３】
そのため、主制御部２７は、フロー情報テーブル２１にフロー情報エントリ４０を登録する（ステップＳ１１７）。フロー情報テーブル２１には「フローＡ」に対応するフロー情報エントリ４０が既に存在する。そのため、主制御部２７は、「フローＡ」に対応するフロー情報エントリ４０を、フロー情報４１をパケット１０の「フローＡ」、期待シーケンス番号４２を期待シーケンス番号レジスタ２３の「５」、蓄積パケット数４３を蓄積パケット数レジスタ２３の「０」へそれぞれ更新する。これによって、パケット整列装置１は、シーケンス番号３１が「３」のパケット１０の処理を完了する。図９を参照すると、シーケンス番号３１が「３」のパケット１０を処理した後のフロー情報テーブル２１と並び替えバッファ２２の状態を確認できる（図９のパケット＃３の処理完了時）。以上が、本実施形態におけるパケット整列装置１の動作の具体的な例を用いた説明である。
【００７４】
本発明のパケット整列装置１は、並び替えバッファ２２をパケット整列装置１で処理する全てのフローで共有する。並び替えバッファ２２は、フロー情報３０と期待シーケンス番号４２とにパケット１０を対応させて記憶しているため、異なるフローに属する同一のシーケンス番号３１を有した複数のパケット１０が登録されていたとしても適切に並び替え処理を行うことができる。
【００７５】
このような構成により、本発明のパケット整列装置１は、フローの数だけ並び替えバッファを設ける場合と比較して、並び替えバッファに用いるメモリ量を削減することができる。そのため、小容量だが高速なメモリを並び替えバッファとして利用可能となり、パケット整列装置１の処理速度を向上させることができる。
【００７６】
また、パケット整列装置１は、蓄積パケット数レジスタ２４の蓄積パケット数４３が「０」である場合、並び替えバッファ２２に対するパケット５３の検索を行わない。蓄積パケット数レジスタ２４の値が「０」であることは、並び替えバッファ２２に当該フローに対応するパケット５３が蓄積されていないことを示しているためである。このように、本実施形態におけるパケット整列装置１は、冗長な検索を排除することによって、パケット１０が送信順序どおりにパケット整列装置１へ到着している間に、並び替えバッファ２２へのアクセスが一切行われなくなり、平均的な処理性能が向上する。
【００７７】
続いて、本発明のパケット整列装置１を他の構成例を説明する。例えば、本発明のパケット整列装置１は、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）等の情報処理装置に適用可能である。図１０は、本実施形態におけるパケット整列装置１を情報処理装置に適用した場合の構成を示す図である。図１０を参照すると、パケット整列装置１は、データ処理装置１０１と記憶装置１０２とで構成される。
【００７８】
データ処理装置１０１は、ＣＰＵに例示される制御装置である。データ処理装置１０１は、フロー情報抽出部１２０と主制御部１２５とを備える。フロー情報抽出部１２０と主制御部１２５とは、前述の実施形態におけるフロー情報抽出部２６と主制御部２７と同様に機能、動作するので、ここでは、説明を省略する。
【００７９】
記憶装置１０２は、ＲＡＭやＨＤＤ等の記録媒体である。記憶装置１０２は、フロー情報テーブル２１、並び替えバッファ２２、期待シーケンス番号記憶領域１２３と、蓄積パケット数記憶領域１２４とを備える。期待シーケンス番号記憶領域１２３と蓄積パケット数記憶領域１２４は、それぞれ、前述の実施形態においてハードウェアであるレジスタとして設けられた期待シーケンス番号レジスタ２３と蓄積パケット数レジスタに対応し、同様の値を記憶する。なお、フロー情報テーブル２１、並び替えバッファ２２は、前述の実施形態におけるフロー情報抽出部２６と主制御部２７と同様であるので説明を省略する。このように、本発明のパケット整列装置１は、ＰＣ等の情報処理装置にも適用が可能である。
【００８０】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【００８１】
この出願は、２０１０年１月７日に出願された日本出願特願２０１０−００１８５２を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１】
2011083670.tif 000003
【図２】
2011083670.tif 000004
【図３】
2011083670.tif 000005
【図４】
2011083670.tif 000006
【図５】
2011083670.tif 000007
【図６】
2011083670.tif 000008
【図７】
2011083670.tif 000009
【図８】
2011083670.tif 000010
【図９】
2011083670.tif 000011
【図１０】
2011083670.tif 000012
【国際調査報告】
2011083670.tif 000013
2011083670.tif 000014