(57)【要約】【課題】正確な順番で受信パケットの中継処理を行い、かつセッション確立済みの２番目以降のパケットについても中継処理を可能とするパケット中継装置を提供する。【解決手段】セッション判別部は、受信したパケットに対応するセッション情報がセッションキャッシュテーブルに記憶されていない場合、該受信したパケットに対応するセッション情報を生成してセッションキャッシュテーブルに記憶するとともに、該受信したパケットに対応する第１のパケット情報を第１のパケット受信キューに送り、受信したパケットに対応するセッション情報がセッションキャッシュテーブルに記憶されている場合、該受信したパケットに対応する第２のパケット情報を第２のパケット受信キューに送る。【選択図】図１
2010219637.tif 000002
【特許請求の範囲】
【請求項１】
複数のポートの各々に接続される通信機器の間で、各セッションで送受信される複数のパケットの中継処理を行うパケット中継装置であって、
各セッションを識別するためのセッション情報を記憶するセッションキャッシュテーブルと、
各セッションの１番目のパケットを含む第１のパケット情報を記憶する第１のパケット受信キューと、
前記第１のパケット受信キューに記憶された第１のパケット情報に基づいて各セッションの１番目のパケットの中継処理を行い、各セッションの中継情報を生成する第１の処理部と、
前記複数のポートの各々に対応して設けられた送受信部とを備え、
前記送受信部の各々は、
パケットを受信する毎に、前記セッションキャッシュテーブルに記憶されたセッション情報を検索し、受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されているかいないかを判別するセッション判別部と、
各セッションの２番目以降のパケットのいずれかを含む第２のパケット情報を記憶する第２のパケット受信キューと、
前記第２のパケット受信キューに記憶された第２のパケット情報に基づいて各セッションの２番目以降のパケットの中継処理を行う第２の処理部と、
送信先の通信機器が接続されたポートを介して送信すべきパケットを記憶するパケット送信キューとを備え、
前記セッション判別部は、受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されていない場合、該受信したパケットに対応するセッション情報を生成して前記セッションキャッシュテーブルに記憶するとともに、該受信したパケットに対応する第１のパケット情報を前記第１のパケット受信キューに送り、前記受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されている場合、該受信したパケットに対応する第２のパケット情報を前記第２のパケット受信キューに送ることを特徴とするパケット中継装置。
【請求項２】
前記セッション情報は、セッションを識別するためのセッションキーを含み、
前記セッション判別部は、受信したパケットからヘッダ情報を抽出し、該抽出したヘッダ情報から前記セッションキーを生成し、該生成したセッションキーを入力として前記セッションキャッシュテーブルに記憶されたセッション情報を検索し、受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されていない場合、該受信したパケットに対応するセッションキーを含むセッション情報を生成して前記セッションキャッシュテーブルに記憶することを特徴とする請求項１に記載のパケット中継装置。
【請求項３】
前記第１の処理部は、各セッションの１番目のパケットの中継処理が完了した後、該１番目のパケットを、前記送信すべきパケットとして、送信先の通信機器が接続されたポートに対応するパケット送信キューに送り、
前記第２のパケット受信キューに記憶された第２のパケット情報のうち、前記１番目のパケットと同じセッションに含まれる２番目以降のパケットに対応する第２のパケット情報に前記中継情報を書き込むとともに、前記１番目のパケットの中継処理が完了したことを表す第１のフラグを書き込み、
前記セッションキャッシュテーブルに記憶されたセッション情報のうち、前記１番目のパケットに対応するセッションのセッション情報に前記中継情報を書き込むとともに、前記１番目のパケットの中継処理が完了したことを表す第２のフラグを書き込むことを特徴とする請求項１または２に記載のパケット中継装置。
【請求項４】
前記第１の処理部は、前記第２のパケット受信キューに記憶された第２のパケット情報、および、前記セッションキャッシュテーブルに記憶されたセッション情報を更新する期間、前記中継処理が完了した１番目のパケットを受信したポートに対応する送受信部のセッション判別部を一時停止することを特徴とする請求項３に記載のパケット中継装置。
【請求項５】
前記第２の処理部は、対応するパケット送信キューに、前記送信すべきパケットが記憶されている場合、該送信すべきパケットを対応するポートから送信し、
対応するパケット送信キューに、前記送信すべきパケットが記憶されておらず、かつ、対応する第２のパケット受信キューに第２のパケット情報が記憶されている場合、前記第１のフラグが、前記１番目のパケットの中継処理が完了したことを表すものから順に、前記第２のパケット情報に含まれる中継情報に基づいて各セッションの２番目以降のパケットの中継処理を行い、該中継処理が完了した２番目以降のパケットを、送信先の通信機器が接続されたポートに対応する送受信部のパケット送信キューに送ることを特徴とする請求項３または４に記載のパケット中継装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット中継装置に関し、特に、複数の通信ネットワーク間でデータ（パケット）を中継するためのパケット中継装置に関するものである。
【背景技術】
【０００２】
複数のポートの各々に接続される通信機器の間で、各セッションで送受信される複数のパケットの中継処理を行うパケット中継装置が利用されている。以下、従来のパケット中継装置について一例を挙げて説明する。
【０００３】
図５は、従来のパケット中継装置の構成を表す一例のブロック図である。同図に示すパケット中継装置４０は、特許文献１に開示されたものであり、それぞれの通信機器を接続するための複数のポート４２を備えている。セッションキャッシュテーブル５２には、フローデータベースが記憶される。フローデータベースには複数のエントリが登録され、各々のエントリには、パケットの内容に基づいて生成されたエントリ検索用のキー、パケットの中継処理のために用いられる中継情報等が登録される。
【０００４】
パケット中継装置４０は、いずれかのポート４２に接続された通信機器から、そのポート４２に対応するネットワークインタフェース４４を介してパケットスイッチコントローラ４６にパケットを受信する。パケットスイッチコントローラ４６は、パケットを受信すると、パケット処理部４８に受信通知を行い、パケット処理部４８が、テーブル検索エンジン５０に対してセッションキャッシュテーブル５２の検索を要求する。
【０００５】
テーブル検索エンジン５０は、受信したパケットの内容に基づいて生成した検索キーを用いてセッションキャッシュテーブル５２を検索し、ヒットした（検索キーと一致するキーを有するエントリの登録があった）か否かをパケット処理部４８に通知する。また、テーブル検索エンジン５０は、ヒットしたエントリに対応する中継情報をパケット処理部４８に通知する。
【０００６】
パケット処理部４８は、検索の結果がヒットでない場合、メインＣＰＵ５４に受信パケットを送信する。これを受けて、メインＣＰＵ５４は、受信パケットの中継処理を行い、指定の送信先ポート４２から、受信パケットが送信されるようにパケットスイッチコントローラ４６に指示する。また、メインＣＰＵ５４は、受信パケットの検索キーと関連づけるキーと中継情報を新たなエントリとしてセッションキャッシュテーブル５２に登録する。
【０００７】
一方、テーブル検索エンジン５０から受けた検索結果の通知がヒットである場合、パケット処理部４８は、中継情報を用いて、指定の送信先ポート４２から受信パケットが送信されるようにパケットスイッチコントローラ４６に要求する。
【０００８】
上記のパケット中継装置４０では、セッションキャッシュテーブル５２にエントリ登録されていないパケットを受信すると、受信パケットはパケット処理部４８において新規なパケット（セッションの１番目のパケット）であると判断されてメインＣＰＵ５４に渡され、中継処理が行われる。
【０００９】
この中継処理中に、さらにパケットを受信した場合を考える。もし、このパケットがメインＣＰＵ５４において中継処理中のパケットとは無関係のセッションのパケットであり、かつセッションキャッシュテーブル５２に登録済みであれば、パケットスイッチコントローラ４６は、メインＣＰＵ５４の処理に関わらずこのパケットを中継処理することができる。また、セッションキャッシュテーブル５２に登録されていない場合は、メインＣＰＵ５４用の処理待ちキューに追加され、中継処理を待つ。
【００１０】
しかし、メインＣＰＵ５４で中継処理中のパケットと同一セッションのパケットを受信した場合は注意が必要である。このセッションにおける１番目のパケットは、メインＣＰＵ５４で中継処理中であるため、セッションキャッシュテーブル５２には、エントリが未登録の状態である。
【００１１】
そのため、２番目、３番目の受信パケットについて、テーブル検索エンジン５０が、セッションキャッシュテーブル５２を検索するとミスヒットとなり、これらのパケットは、メインＣＰＵ５４用の処理待ちキューに追加される。その後、メインＣＰＵ５４は、セッションの１番目のパケットの中継処理を完了すると、処理結果をセッションキャッシュテーブル５２に反映し、セッションの２番目のパケットの中継処理を開始することになる。この時点で、セッションの４番目のパケットを受信すると、すでにセッションキャッシュテーブル５２にエントリが登録されているため、４番目のパケットは、パケットスイッチコントローラ４６に渡されて中継処理が行われる。
【００１２】
パケットスイッチコントローラ４６での中継処理は、メインＣＰＵ５４での中継処理に比べて高速なため、セッションの４番目のパケットの中継処理の方が早く完了して送信されてしまう可能性がある。つまり、パケット中継装置４０を通過することで、同一セッションにおける４番目のパケットが２番目、３番目のパケットを追い越す可能性がある。この問題は、あるポート４２で受信した同一セッションにおけるパケットの中継処理を複数の処理フローに分散させる装置構成において発生する可能性がある。
【００１３】
この問題の最も単純な回避方法としては、メインＣＰＵ５４におけるパケットの中継処理が完了し、中継処理の結果がセッションキャッシュテーブル５２に反映されるまでは、パケット処理部４８によるセッションキャッシュテーブル５２の検索および受信キューへのパケットの転送を停止させることである。しかし、メインＣＰＵ５４が中継処理すべきパケットの数が多い場合には、停止時間が長く非効率である。さらに、後続パケットがセッション確立済みであったとしても、その受信パケットを中継処理することができないことになる。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開平１１−３３１２６８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
本発明の目的は、前記従来技術に基づく問題点を解消し、正確な順番で受信パケットの中継処理を行い、かつセッション確立済みの２番目以降のパケットについても中継処理を可能とするパケット中継装置を提供することにある。
【課題を解決するための手段】
【００１６】
上記目的を達成するために、本発明は、
複数のポートの各々に接続される通信機器の間で、各セッションで送受信される複数のパケットの中継処理を行うパケット中継装置であって、
各セッションを識別するためのセッション情報を記憶するセッションキャッシュテーブルと、
各セッションの１番目のパケットを含む第１のパケット情報を記憶する第１のパケット受信キューと、
前記第１のパケット受信キューに記憶された第１のパケット情報に基づいて各セッションの１番目のパケットの中継処理を行い、各セッションの中継情報を生成する第１の処理部と、
前記複数のポートの各々に対応して設けられた送受信部とを備え、
前記送受信部の各々は、
パケットを受信する毎に、前記セッションキャッシュテーブルに記憶されたセッション情報を検索し、受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されているかいないかを判別するセッション判別部と、
各セッションの２番目以降のパケットのいずれかを含む第２のパケット情報を記憶する第２のパケット受信キューと、
前記第２のパケット受信キューに記憶された第２のパケット情報に基づいて各セッションの２番目以降のパケットの中継処理を行う第２の処理部と、
送信先の通信機器が接続されたポートを介して送信すべきパケットを記憶するパケット送信キューとを備え、
前記セッション判別部は、受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されていない場合、該受信したパケットに対応するセッション情報を生成して前記セッションキャッシュテーブルに記憶するとともに、該受信したパケットに対応する第１のパケット情報を前記第１のパケット受信キューに送り、前記受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されている場合、該受信したパケットに対応する第２のパケット情報を前記第２のパケット受信キューに送ることを特徴とするパケット中継装置を提供するものである。
【００１７】
ここで、前記セッション情報は、セッションを識別するためのセッションキーを含み、
前記セッション判別部は、受信したパケットからヘッダ情報を抽出し、該抽出したヘッダ情報から前記セッションキーを生成し、該生成したセッションキーを入力として前記セッションキャッシュテーブルに記憶されたセッション情報を検索し、受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されていない場合、該受信したパケットに対応するセッションキーを含むセッション情報を生成して前記セッションキャッシュテーブルに記憶することが好ましい。
【００１８】
また、前記第１の処理部は、各セッションの１番目のパケットの中継処理が完了した後、該１番目のパケットを、前記送信すべきパケットとして、送信先の通信機器が接続されたポートに対応するパケット送信キューに送り、
前記第２のパケット受信キューに記憶された第２のパケット情報のうち、前記１番目のパケットと同じセッションに含まれる２番目以降のパケットに対応する第２のパケット情報に前記中継情報を書き込むとともに、前記１番目のパケットの中継処理が完了したことを表す第１のフラグを書き込み、
前記セッションキャッシュテーブルに記憶されたセッション情報のうち、前記１番目のパケットに対応するセッションのセッション情報に前記中継情報を書き込むとともに、前記１番目のパケットの中継処理が完了したことを表す第２のフラグを書き込むことが好ましい。
【００１９】
また、前記第１の処理部は、前記第２のパケット受信キューに記憶された第２のパケット情報、および、前記セッションキャッシュテーブルに記憶されたセッション情報を更新する期間、前記中継処理が完了した１番目のパケットを受信したポートに対応する送受信部のセッション判別部を一時停止することが好ましい。
【００２０】
また、前記第２の処理部は、対応するパケット送信キューに、前記送信すべきパケットが記憶されている場合、該送信すべきパケットを対応するポートから送信し、
対応するパケット送信キューに、前記送信すべきパケットが記憶されておらず、かつ、対応する第２のパケット受信キューに第２のパケット情報が記憶されている場合、前記第１のフラグが、前記１番目のパケットの中継処理が完了したことを表すものから順に、前記第２のパケット情報に含まれる中継情報に基づいて各セッションの２番目以降のパケットの中継処理を行い、該中継処理が完了した２番目以降のパケットを、送信先の通信機器が接続されたポートに対応する送受信部のパケット送信キューに送ることが好ましい。
【発明の効果】
【００２１】
本発明では、パケットの順序を正確に保つことができ、さらに、メインＣＰＵがセッションの１番目のパケットを中継処理している期間であっても、セッション確立済みの２番目以降のパケットが受信されれば、高速にセッション確立済みのパケットを中継処理することができる。
【図面の簡単な説明】
【００２２】
【図１】本発明に関わるパケット中継装置の構成を表す一実施形態のブロック図である。
【図２】図１に示すセッション判別部の動作を表すフローチャートである。
【図３】図１に示す第１の処理部の動作を表すフローチャートである。
【図４】図１に示す第２の処理部の動作を表すフローチャートである。
【図５】従来のパケット中継装置の構成を表す一例のブロック図である。
【発明を実施するための形態】
【００２３】
以下に、添付の図面に示す好適実施形態に基づいて、本発明のパケット中継装置を詳細に説明する。
【００２４】
図１は、本発明に関わるパケット中継装置の構成を表す一実施形態のブロック図である。同図に示すパケット中継装置１０は、複数のポートの各々に接続される通信機器の間で、各セッションで送受信される複数のパケットの中継処理を行うものであって、メインＣＰＵ１２と、メインＣＰＵ用受信キュー１４と、セッションキャシュテーブル１６と、メインメモリ１８と、複数のポート２０の各々に対応して設けられた送受信部２２（２２ａ、２２ｂ、…）とによって構成されている。
【００２５】
セッションキャッシュテーブル１６は、各々の送受信部２２に設けられたセッション判別部２６と相互に接続されている。また、セッションキャッシュテーブル１６は、内部バス３４を介してメインＣＰＵ１２と相互に接続されている。セッションキャッシュテーブル１６は、各セッションを識別するためのセッション情報（エントリ）を記憶する。
【００２６】
ここで、セッション情報は、表１に示すように、セッションキーと、中継情報へのポインタと、セッション番号と、セッション状態フラグ（第２のフラグ）を含む。
【００２７】
【表１】
2010219637.tif 000003
【００２８】
セッションキーは、各々のセッションを識別するための情報であり、パケットのヘッダ情報を所定の条件で変換して生成される。ここで、ヘッダ情報は、送信元ＩＰアドレス、送信先ＩＰアドレス、送信元ポート番号、送信先ポート番号、通信プロトコル等の情報を含む。また、セッション番号は、セッションキーを番号化したものである。中継情報へのポインタは、メインメモリ１８に記憶された中継情報の格納位置（アドレス）を表す。セッション状態フラグは、各々のセッションの中継処理が、セッションの中継処理が完了していない状態である「セッション確立中」か、セッションの中継処理が完了した状態である「セッション確立済み」のいずれかの状態を表す。
【００２９】
セッションキーとセッション番号とセッション状態フラグは、各々の送受信部２２のセッション判別部２６により書き込まれ、中継情報へのポインタとセッション状態フラグ（第２のフラグ）はメインＣＰＵ１２により書き込まれる。
【００３０】
続いて、メインＣＰＵ用受信キュー１４（第１のパケット受信キュー）には、各々の送受信部２２のセッション判別部２６の出力（第１のパケット情報）が入力される。メインＣＰＵ用受信キュー１４は、各々の送受信部２２のセッション判別部２６から受信した各セッションの１番目のパケットへのポインタを含む第１のパケット情報を記憶する。
【００３１】
ここで、第１のパケット情報は、表２に示すように、セッション番号と、受信ポート番号と、パケットへのポインタを含む。第１のパケット情報は、送受信部２２に設けられたセッション判別部２６により書き込まれる。
【００３２】
【表２】
2010219637.tif 000004
【００３３】
メインＣＰＵ１２（第１の処理部）には、メインＣＰＵ用受信キュー１４の出力（第１のパケット情報）が入力される。また、メインＣＰＵ１２は、内部バス３４を介してメインメモリ１８、セッションキャッシュテーブル１６、各送受信部２２のアクセラレータ用送信キュー３２と相互に接続されている。メインＣＰＵ１２は、例えば、メインＣＰＵ用受信キュー１４に第１のパケット情報が記憶された順序で、メインＣＰＵ用受信キュー１４に記憶された第１のパケット情報に基づいて各セッションの１番目のパケットの中継処理を行い、各セッションの中継情報を生成する。
【００３４】
ここで、中継情報は、中継処理を行った結果の情報であり、出力先（送信先）のポートを示す情報を含む。また、中継情報は、本実施形態の場合、メインＣＰＵ１２によりメインメモリ１８に記憶される。
【００３５】
続いて、送受信部２２について説明する。なお、各々の送受信部２２ａ、２２ｂ、…は同じ構成のものであるから、以下、送受信部２２ａを例に挙げて説明する。
【００３６】
送受信部２２ａは、ネットワークインタフェース２４と、セッション判別部２６と、アクセラレータ用受信キュー２８と、アクセラレータ３０と、アクセラレータ用送信キュー３２とによって構成されている。
【００３７】
セッション判別部２６には、ポート２０と相互に接続されたネットワークインタフェース２４の出力（パケット）と、メインＣＰＵ１２の出力（停止／停止解除の制御信号）が入力される。また、セッション判別部２６は、セッションキャッシュテーブル１６と相互に接続され、内部バス３４を介してメインメモリ１８と相互に接続されている。セッション判別部２６は、ポート２０に接続された通信機器からネットワークインタフェース２４を介してパケットを受信する毎に、セッションキャッシュテーブル１６に記憶されたセッション情報を検索し、受信したパケットに対応するセッション情報がセッションキャッシュテーブル１６に記憶されているかいないかを判別する。
【００３８】
続いて、アクセラレータ用受信キュー２８（第２のパケット受信キュー）には、セッション判別部２６の出力とメインＣＰＵ１２の出力（第２のパケット情報）が入力される。アクセラレータ用受信キュー２８は、各セッションの２番目以降のパケットのいずれかを含む第２のパケット情報を記憶する。
【００３９】
ここで、第２のパケット情報は、表３に示すように、セッション番号（第１のフラグ）と、パケットへのポインタと、中継情報へのポインタを含む。セッション番号は、セッション判別部２６とメインＣＰＵ１２により書き込まれ、パケットへのポインタは、セッション判別部２６により書き込まれる。中継情報へのポインタは、セッションキャッシュテーブル１６に中継情報へのポインタが記憶されている場合には、セッション判別部２６により書き込まれ、セッションキャッシュテーブル１６に中継情報へのポインタが記憶されていない場合には、メインＣＰＵ１２により書き込まれる。
【００４０】
【表３】
2010219637.tif 000005
【００４１】
アクセラレータ３０（第２の処理部）は、例えば、アクセラレータ用受信キュー２８に第２のパケット情報が記憶された順序で、アクセラレータ用受信キュー２８に記憶された第２のパケット情報に基づいて各セッションの２番目以降のパケットの中継処理を行う。
【００４２】
アクセラレータ用送信キュー３２（パケット送信キュー）は、内部バス３４を介して、メインＣＰＵ１２および各々の送受信部２２のアクセラレータ３０と相互に接続されている。アクセラレータ用送信キュー３２は、送信先の通信機器に対応するポート２０を介して送信すべきパケットを記憶する。アクセラレータ３０により、アクセラレータ用送信キュー３２から、送信すべきパケットが読み出され、ネットワークインタフェース２４を介して、ポート２０に接続された通信機器に送信される。
【００４３】
次に、図２〜４のフローチャートを参照しながら、パケット中継装置１０の動作を説明する。以下、一例として、送受信部２２ａのポート２０に接続された通信機器からパケットを受信し、送受信部２２ｂのポート２０に接続された通信機器にパケットを送信する場合について説明する。
【００４４】
図２に示すように、パケットが、例えば、送受信部２２ａのポート２０に接続された通信機器から、ネットワークインタフェース２４を介してセッション判別部２６に受信される（ステップＳ１）。
【００４５】
なお、記載を省略しているが、受信したパケットは、セッション判別部２６の内部に設けられているＤＭＡ（ダイレクトメモリアクセス）によりメインメモリ１８に記憶（格納）され、セッション判別部２６は、メインメモリ１８に記憶された、受信したパケットへのポインタを取得する。
【００４６】
セッション判別部２６は、受信したパケットからヘッダ情報を抽出し（ステップＳ２）、抽出したヘッダ情報からセッションキーを生成し（ステップＳ３）、生成したセッションキーを入力として、セッションキャッシュテーブル１６に記憶されたセッション情報の検索を行う（ステップＳ４）。
【００４７】
検索後のセッションキャッシュテーブル１６の出力は、検索結果（一致するセッション情報の有無）と、受信したパケットに対応する（一致する）セッション情報（セッションキー）がセッションキャッシュテーブル１６に記憶されている場合には、さらに、受信したパケットに対応するセッション情報に含まれている、中継情報へのポインタと、セッション番号と、セッション状態フラグである。
【００４８】
セッション判別部２６は、セッションキャッシュテーブル１６から受け取った情報に基づいて、受信したパケットに対応するパケット情報を、メインＣＰＵ用受信キュー１４とアクセラレータ用受信キュー２８のうち、適切な受信キューに送信する。
【００４９】
検索の結果、受信したパケットに対応するセッション情報（セッションキー）がセッションキャッシュテーブル１６に記憶されていない場合、セッション判別部２６は、受信したパケットがセッションの１番目のパケットであると判断し、受信したパケットに対応するセッション情報を生成してセッションキャッシュテーブル１６に記憶するとともに、受信したパケットに対応する第１のパケット情報を生成してメインＣＰＵ用受信キュー１４に送る（ステップＳ５）。
【００５０】
ここで、セッション判別部２６により生成されるセッション情報は、ステップＳ３で生成したセッションキーと、このセッションキーから生成したセッション番号と、「セッション確立中」に状態を設定したセッション状態フラグを含む。また、セッション判別部２６により生成される第１のパケット情報は、セッション番号と、受信ポート番号と、メインメモリ１８に記憶されたパケットへのポインタとを含む。
【００５１】
その後、セッション判別部２６は、第１のパケット情報をメインＣＰＵ用受信キュー１４へ送信したことを割り込み信号によりメインＣＰＵ１２に通知する（ステップＳ６）。
【００５２】
また、検索の結果、受信したパケットに対応するセッション情報がセッションキャッシュテーブル１６に記憶されている場合、セッション判別部２６は、受信したパケットがセッションの２番目以降のパケットであると判断し、受信したパケットに対応する第２のパケット情報を生成してアクセラレータ用受信キュー２８に送る（ステップＳ１３ａおよびＳ１３ｂ）。
【００５３】
ここで、セッション判別部２６は、セッション状態フラグが「セッション確立中」である場合（ステップＳ１３ａ）、メインＣＰＵ１２により１番目のパケットが中継処理中であると判断する。この場合、セッション判別部２６により生成される第２のパケット情報は、セッション番号と、メインメモリ１８に記憶されたパケットへのポインタとを含む。つまり、中継情報へのポインタは含まない。
【００５４】
また、セッション判別部２６は、セッション状態フラグが「セッション確立済み」である場合（ステップＳ１３ｂ）、受信したパケットが確立済みのセッションに含まれるパケットであると判断する。この場合、セッション判別部２６により生成される第２のパケット情報は、メインメモリ１８に記憶されたパケットへのポインタと、同じくメインメモリ１８に記憶された中継情報へのポインタとを含む。なお、セッション番号はクリアされる（「セッション確立済み」となる）。
【００５５】
メインＣＰＵ１２は、図３に示すように、セッション判別部２６からの割り込み信号を受け取ると（ステップＳ６）、メインＣＰＵ用受信キュー１４の先頭に記載された第１のパケット情報を取り出す（読み出す）（ステップＳ７）。つまり、第１のパケット受信キュー１４に第１のパケット情報が記憶された順序で、第１のパケット情報を取り出す。そして、パケットの中継処理を行う（ステップＳ７）。
【００５６】
メインＣＰＵ１２は、セッションの１番目のパケットの中継処理が完了した後、この１番目のパケットを、送信すべきパケットとして、内部バス３４を介して、送信先の通信機器が接続されたポート２０に対応する送受信部２２ｂのパケット送信キュー３２に送る（ステップＳ８）。
【００５７】
続いて、メインＣＰＵ１２は、中継処理が完了した１番目のパケットを受信したポート２０（第１のパケット情報に含まれる受信ポート）に対応する送受信部２２ａのセッション判別部２６を一時停止させる（ステップＳ９）。そして、セッション番号を入力としてアクセラレータ用受信キュー２８を検索し、アクセラレータ用受信キュー２８に記憶された第２のパケット情報のうち、中継処理が完了した１番目のパケットと同じセッションに含まれる２番目以降のパケットに対応する第２のパケット情報に中継情報へのポインタを書き込むとともに、そのセッション番号（第１のフラグ）をクリアする。つまり、第２のパケット情報に１番目のパケットの中継処理が完了したことを表す第１のフラグを書き込む（ステップＳ１０）。
【００５８】
さらに、メインＣＰＵ１２は、セッション番号を入力としてセッションキャッシュテーブル１６を検索し、セッションキャッシュテーブル１６に記憶されたセッション情報のうち、中継処理が完了した１番目のパケットに対応するセッション情報に中継情報へのポインタを書き込むとともに、そのセッション状態フラグ（第２のフラグ）を「セッション確立済み」の状態に更新する。つまり、セッション情報に、１番目のパケットの中継処理が完了したことを表す第２のフラグを書き込む（ステップＳ１１）。
【００５９】
その後、メインＣＰＵ１２は、中継処理が完了した１番目のパケットの受信ポート２０に対応する送受信部２２ａのセッション判別部２４の一時停止を解除する（ステップＳ１２）。
【００６０】
上記のように、本実施形態では、アクセラレータ用受信キュー２８とセッションキャッシュテーブル１６の更新を行っている期間のみ、そのポートに対応するセッション判別部２６を停止する。セッション判別部２６を一時停止することにより、アクセラレータ用受信キュー２８が同一セッションのパケットを受信し続けた場合に、アクセラレータ用受信キュー２８の更新処理を確実に完了させることができる。
【００６１】
なお、本実施形態のように、セッション判別部２６を一時停止させる場合であっても、その停止時間は、メインＣＰＵ１２によるパケットの中継処理にかかる時間と比較すれば十分に短い時間である。
【００６２】
アクセラレータ３０は、図４に示すように、対応するアクセラレータ用送信キュー３２に、送信すべきパケットが記憶されているかいないかを確認する（ステップＳ１４）。アクセラレータ３０は、対応するパケットの送信キュー３２に、送信すべきパケットが記憶されている場合（ステップＳ１４で‘ＹＥＳ’）、アクセラレータ用送信キュー３２に記憶されているパケットをアクセラレータ用送信キュー３２から読み出し、ネットワークインタフェース２４を介して対応するポート２０から送信する（ステップＳ１５）。その後、ステップＳ１４へ戻り、アクセラレータ３０は上記の動作を繰り返す。
【００６３】
一方、ステップＳ１４において、対応するパケット送信キュー３２に、送信すべきパケットが記憶されていない場合（ステップＳ１４で‘ＮＯ’）、アクセラレータ３０は、対応するアクセラレータ用受信キュー２８に、第２のパケット情報が記憶されているかいないかを確認する（ステップＳ１６）。
【００６４】
ここで、アクセラレータ３０が中継処理を行うパケットは、セッションの２番目以降のパケットである。アクセラレータ３０は、第２のパケット情報にセッション番号が設定されていることにより「セッション確立中」の状態であると判断し、セッション番号が設定されていない（セッション番号がクリアされている）ことにより「セッション確立済み」の状態であると判断する。
【００６５】
アクセラレータ３０は、対応するアクセラレータ用受信キュー２８に第２のパケット情報が記憶されていない場合（ステップＳ１６で‘ＮＯ’）、ステップＳ１４へ戻り、上記の動作を繰り返す。
【００６６】
一方、対応するアクセラレータ用受信キュー２８に第２のパケット情報が記憶されている場合（ステップＳ１６で‘ＹＥＳ’）、アクセラレータ３０は、例えば、セッション番号を入力として、毎度アクセラレータ用受信キュー２８の先頭から「セッション確立済み」の状態である第２のパケット情報を検索し、アクセラレータ用受信キュー２８に第２のパケット情報が記憶された順序で、かつ、第１のフラグが、１番目のパケットの中継処理が完了したことを表すものから順に受信する（ステップＳ１７）。
【００６７】
続いて、アクセラレータ３０は、「セッション確立済み」の状態である第２のパケット情報に含まれる中継情報に基づいてセッションの２番目以降のパケットの中継処理を行う（ステップＳ１８）。つまり、アクセラレータ３０は、アクセラレータ用受信キュー２８に第２のパケット情報が記憶された順序で、かつ、セッション番号がクリアされているもの（つまり、「セッション確立済み」な状態のパケット）から順に中継処理を行う。
【００６８】
続いて、アクセラレータ３０は、中継処理が完了した２番目以降のパケットを、送信先の通信機器が接続されたポート２０に対応する送受信部２２ｂのアクセラレータ用送信キュー３２に送る（ステップＳ１９）。
【００６９】
その後、アクセラレータ３０は、ステップＳ１４に戻り、上記の動作を繰り返し行う。
【００７０】
このように、パケット中継装置１０では、セッションの１番目のパケットは、メインＣＰＵ用受信キュー１４に渡されて中継処理され、この後に受信された２番目以降のパケットは、「セッション確立中」であるため、対応するアクセラレータ用受信キュー２８に置かれる（この時点ではアクセラレータ３０により処理されない）。１番目のパケットの中継処理を完了した後にメインＣＰＵ１２が２番目以降のパケットについてセッション状態を「セッション確立済み」とすると、アクセラレータ３０は２番目以降のパケットを順に処理することができる。そのため、２番目以降のパケットの順序が入れ替わってしまうことはない。さらに、メインＣＰＵ１２が１番目のパケットを処理している期間に、アクセラレータ用受信キュー２８内に「セッション確立済み」のパケットがあれば、アクセラレータ３０はアクセラレータ用受信キュー２８の中でそのパケットを見つけ出し、処理を行うことができる。
【００７１】
なお、実施形態では、第１および第２のパケット情報としてパケットへのポインタを使用している。第１および第２のパケット情報内にパケットそのものを使用してもよいが、パケット転送の処理負荷を軽減するため、上記実施形態のようにパケットへのポインタを使用する方が望ましい。また、セッション情報と第２のパケット情報として中継情報へのポインタを使用しているが、中継情報そのものを使用することもできる。
【００７２】
また、パケットと中継情報を同じメインメモリ１８に記憶しているが、これも限定されず、両者を別のメモリに記憶してもよい。
【００７３】
また、実施形態では、セッション番号をクリアすることにより第１のフラグとして使用しているが、本発明はこれに限定されない。例えば、「セッション確立済み」な状態を表すために、セッション番号をクリアするのではなく、あらかじめ設定された特定の数値に設定してもよいし、セッション番号とは別に、「セッション確立中」か「セッション確立済み」かを表す第１のフラグを記憶するようにしてもよい。
【００７４】
本発明は、基本的に以上のようなものである。
以上、本発明について詳細に説明したが、本発明は上記実施形態に限定されず、本発明の主旨を逸脱しない範囲において、種々の改良や変更をしてもよいのはもちろんである。
【符号の説明】
【００７５】
１０、４０  パケット中継装置
１２、５４  メインＣＰＵ
１４  メインＣＰＵ用受信キュー
１６、５２  セッションキャッシュテーブル
１８  メインメモリ
２０、４２  ポート
２２ａ、２２ｂ  送受信部
２４、４４  ネットワークインタフェース
２６  セッション判別部
２８  アクセラレータ用受信キュー
３０  アクセラレータ
３２  アクセラレータ用送信キュー
３４  内部バス
４６  パケットスイッチコントローラ
４８  パケット処理部
５０  テーブル検索エンジン
【図１】
2010219637.tif 000006
【図２】
2010219637.tif 000007
【図３】
2010219637.tif 000008
【図４】
2010219637.tif 000009
【図５】
2010219637.tif 000010