説明

パケット中継装置

【課題】正確な順番で受信パケットの中継処理を行い、かつセッション確立済みの2番目以降のパケットについても中継処理を可能とするパケット中継装置を提供する。
【解決手段】セッション判別部は、受信したパケットに対応するセッション情報がセッションキャッシュテーブルに記憶されていない場合、該受信したパケットに対応するセッション情報を生成してセッションキャッシュテーブルに記憶するとともに、該受信したパケットに対応する第1のパケット情報を第1のパケット受信キューに送り、受信したパケットに対応するセッション情報がセッションキャッシュテーブルに記憶されている場合、該受信したパケットに対応する第2のパケット情報を第2のパケット受信キューに送る。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、パケット中継装置に関し、特に、複数の通信ネットワーク間でデータ(パケット)を中継するためのパケット中継装置に関するものである。
【背景技術】
【0002】
複数のポートの各々に接続される通信機器の間で、各セッションで送受信される複数のパケットの中継処理を行うパケット中継装置が利用されている。以下、従来のパケット中継装置について一例を挙げて説明する。
【0003】
図5は、従来のパケット中継装置の構成を表す一例のブロック図である。同図に示すパケット中継装置40は、特許文献1に開示されたものであり、それぞれの通信機器を接続するための複数のポート42を備えている。セッションキャッシュテーブル52には、フローデータベースが記憶される。フローデータベースには複数のエントリが登録され、各々のエントリには、パケットの内容に基づいて生成されたエントリ検索用のキー、パケットの中継処理のために用いられる中継情報等が登録される。
【0004】
パケット中継装置40は、いずれかのポート42に接続された通信機器から、そのポート42に対応するネットワークインタフェース44を介してパケットスイッチコントローラ46にパケットを受信する。パケットスイッチコントローラ46は、パケットを受信すると、パケット処理部48に受信通知を行い、パケット処理部48が、テーブル検索エンジン50に対してセッションキャッシュテーブル52の検索を要求する。
【0005】
テーブル検索エンジン50は、受信したパケットの内容に基づいて生成した検索キーを用いてセッションキャッシュテーブル52を検索し、ヒットした(検索キーと一致するキーを有するエントリの登録があった)か否かをパケット処理部48に通知する。また、テーブル検索エンジン50は、ヒットしたエントリに対応する中継情報をパケット処理部48に通知する。
【0006】
パケット処理部48は、検索の結果がヒットでない場合、メインCPU54に受信パケットを送信する。これを受けて、メインCPU54は、受信パケットの中継処理を行い、指定の送信先ポート42から、受信パケットが送信されるようにパケットスイッチコントローラ46に指示する。また、メインCPU54は、受信パケットの検索キーと関連づけるキーと中継情報を新たなエントリとしてセッションキャッシュテーブル52に登録する。
【0007】
一方、テーブル検索エンジン50から受けた検索結果の通知がヒットである場合、パケット処理部48は、中継情報を用いて、指定の送信先ポート42から受信パケットが送信されるようにパケットスイッチコントローラ46に要求する。
【0008】
上記のパケット中継装置40では、セッションキャッシュテーブル52にエントリ登録されていないパケットを受信すると、受信パケットはパケット処理部48において新規なパケット(セッションの1番目のパケット)であると判断されてメインCPU54に渡され、中継処理が行われる。
【0009】
この中継処理中に、さらにパケットを受信した場合を考える。もし、このパケットがメインCPU54において中継処理中のパケットとは無関係のセッションのパケットであり、かつセッションキャッシュテーブル52に登録済みであれば、パケットスイッチコントローラ46は、メインCPU54の処理に関わらずこのパケットを中継処理することができる。また、セッションキャッシュテーブル52に登録されていない場合は、メインCPU54用の処理待ちキューに追加され、中継処理を待つ。
【0010】
しかし、メインCPU54で中継処理中のパケットと同一セッションのパケットを受信した場合は注意が必要である。このセッションにおける1番目のパケットは、メインCPU54で中継処理中であるため、セッションキャッシュテーブル52には、エントリが未登録の状態である。
【0011】
そのため、2番目、3番目の受信パケットについて、テーブル検索エンジン50が、セッションキャッシュテーブル52を検索するとミスヒットとなり、これらのパケットは、メインCPU54用の処理待ちキューに追加される。その後、メインCPU54は、セッションの1番目のパケットの中継処理を完了すると、処理結果をセッションキャッシュテーブル52に反映し、セッションの2番目のパケットの中継処理を開始することになる。この時点で、セッションの4番目のパケットを受信すると、すでにセッションキャッシュテーブル52にエントリが登録されているため、4番目のパケットは、パケットスイッチコントローラ46に渡されて中継処理が行われる。
【0012】
パケットスイッチコントローラ46での中継処理は、メインCPU54での中継処理に比べて高速なため、セッションの4番目のパケットの中継処理の方が早く完了して送信されてしまう可能性がある。つまり、パケット中継装置40を通過することで、同一セッションにおける4番目のパケットが2番目、3番目のパケットを追い越す可能性がある。この問題は、あるポート42で受信した同一セッションにおけるパケットの中継処理を複数の処理フローに分散させる装置構成において発生する可能性がある。
【0013】
この問題の最も単純な回避方法としては、メインCPU54におけるパケットの中継処理が完了し、中継処理の結果がセッションキャッシュテーブル52に反映されるまでは、パケット処理部48によるセッションキャッシュテーブル52の検索および受信キューへのパケットの転送を停止させることである。しかし、メインCPU54が中継処理すべきパケットの数が多い場合には、停止時間が長く非効率である。さらに、後続パケットがセッション確立済みであったとしても、その受信パケットを中継処理することができないことになる。
【先行技術文献】
【特許文献】
【0014】
【特許文献1】特開平11−331268号公報
【発明の概要】
【発明が解決しようとする課題】
【0015】
本発明の目的は、前記従来技術に基づく問題点を解消し、正確な順番で受信パケットの中継処理を行い、かつセッション確立済みの2番目以降のパケットについても中継処理を可能とするパケット中継装置を提供することにある。
【課題を解決するための手段】
【0016】
上記目的を達成するために、本発明は、
複数のポートの各々に接続される通信機器の間で、各セッションで送受信される複数のパケットの中継処理を行うパケット中継装置であって、
各セッションを識別するためのセッション情報を記憶するセッションキャッシュテーブルと、
各セッションの1番目のパケットを含む第1のパケット情報を記憶する第1のパケット受信キューと、
前記第1のパケット受信キューに記憶された第1のパケット情報に基づいて各セッションの1番目のパケットの中継処理を行い、各セッションの中継情報を生成する第1の処理部と、
前記複数のポートの各々に対応して設けられた送受信部とを備え、
前記送受信部の各々は、
パケットを受信する毎に、前記セッションキャッシュテーブルに記憶されたセッション情報を検索し、受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されているかいないかを判別するセッション判別部と、
各セッションの2番目以降のパケットのいずれかを含む第2のパケット情報を記憶する第2のパケット受信キューと、
前記第2のパケット受信キューに記憶された第2のパケット情報に基づいて各セッションの2番目以降のパケットの中継処理を行う第2の処理部と、
送信先の通信機器が接続されたポートを介して送信すべきパケットを記憶するパケット送信キューとを備え、
前記セッション判別部は、受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されていない場合、該受信したパケットに対応するセッション情報を生成して前記セッションキャッシュテーブルに記憶するとともに、該受信したパケットに対応する第1のパケット情報を前記第1のパケット受信キューに送り、前記受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されている場合、該受信したパケットに対応する第2のパケット情報を前記第2のパケット受信キューに送ることを特徴とするパケット中継装置を提供するものである。
【0017】
ここで、前記セッション情報は、セッションを識別するためのセッションキーを含み、
前記セッション判別部は、受信したパケットからヘッダ情報を抽出し、該抽出したヘッダ情報から前記セッションキーを生成し、該生成したセッションキーを入力として前記セッションキャッシュテーブルに記憶されたセッション情報を検索し、受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されていない場合、該受信したパケットに対応するセッションキーを含むセッション情報を生成して前記セッションキャッシュテーブルに記憶することが好ましい。
【0018】
また、前記第1の処理部は、各セッションの1番目のパケットの中継処理が完了した後、該1番目のパケットを、前記送信すべきパケットとして、送信先の通信機器が接続されたポートに対応するパケット送信キューに送り、
前記第2のパケット受信キューに記憶された第2のパケット情報のうち、前記1番目のパケットと同じセッションに含まれる2番目以降のパケットに対応する第2のパケット情報に前記中継情報を書き込むとともに、前記1番目のパケットの中継処理が完了したことを表す第1のフラグを書き込み、
前記セッションキャッシュテーブルに記憶されたセッション情報のうち、前記1番目のパケットに対応するセッションのセッション情報に前記中継情報を書き込むとともに、前記1番目のパケットの中継処理が完了したことを表す第2のフラグを書き込むことが好ましい。
【0019】
また、前記第1の処理部は、前記第2のパケット受信キューに記憶された第2のパケット情報、および、前記セッションキャッシュテーブルに記憶されたセッション情報を更新する期間、前記中継処理が完了した1番目のパケットを受信したポートに対応する送受信部のセッション判別部を一時停止することが好ましい。
【0020】
また、前記第2の処理部は、対応するパケット送信キューに、前記送信すべきパケットが記憶されている場合、該送信すべきパケットを対応するポートから送信し、
対応するパケット送信キューに、前記送信すべきパケットが記憶されておらず、かつ、対応する第2のパケット受信キューに第2のパケット情報が記憶されている場合、前記第1のフラグが、前記1番目のパケットの中継処理が完了したことを表すものから順に、前記第2のパケット情報に含まれる中継情報に基づいて各セッションの2番目以降のパケットの中継処理を行い、該中継処理が完了した2番目以降のパケットを、送信先の通信機器が接続されたポートに対応する送受信部のパケット送信キューに送ることが好ましい。
【発明の効果】
【0021】
本発明では、パケットの順序を正確に保つことができ、さらに、メインCPUがセッションの1番目のパケットを中継処理している期間であっても、セッション確立済みの2番目以降のパケットが受信されれば、高速にセッション確立済みのパケットを中継処理することができる。
【図面の簡単な説明】
【0022】
【図1】本発明に関わるパケット中継装置の構成を表す一実施形態のブロック図である。
【図2】図1に示すセッション判別部の動作を表すフローチャートである。
【図3】図1に示す第1の処理部の動作を表すフローチャートである。
【図4】図1に示す第2の処理部の動作を表すフローチャートである。
【図5】従来のパケット中継装置の構成を表す一例のブロック図である。
【発明を実施するための形態】
【0023】
以下に、添付の図面に示す好適実施形態に基づいて、本発明のパケット中継装置を詳細に説明する。
【0024】
図1は、本発明に関わるパケット中継装置の構成を表す一実施形態のブロック図である。同図に示すパケット中継装置10は、複数のポートの各々に接続される通信機器の間で、各セッションで送受信される複数のパケットの中継処理を行うものであって、メインCPU12と、メインCPU用受信キュー14と、セッションキャシュテーブル16と、メインメモリ18と、複数のポート20の各々に対応して設けられた送受信部22(22a、22b、…)とによって構成されている。
【0025】
セッションキャッシュテーブル16は、各々の送受信部22に設けられたセッション判別部26と相互に接続されている。また、セッションキャッシュテーブル16は、内部バス34を介してメインCPU12と相互に接続されている。セッションキャッシュテーブル16は、各セッションを識別するためのセッション情報(エントリ)を記憶する。
【0026】
ここで、セッション情報は、表1に示すように、セッションキーと、中継情報へのポインタと、セッション番号と、セッション状態フラグ(第2のフラグ)を含む。
【0027】
【表1】

【0028】
セッションキーは、各々のセッションを識別するための情報であり、パケットのヘッダ情報を所定の条件で変換して生成される。ここで、ヘッダ情報は、送信元IPアドレス、送信先IPアドレス、送信元ポート番号、送信先ポート番号、通信プロトコル等の情報を含む。また、セッション番号は、セッションキーを番号化したものである。中継情報へのポインタは、メインメモリ18に記憶された中継情報の格納位置(アドレス)を表す。セッション状態フラグは、各々のセッションの中継処理が、セッションの中継処理が完了していない状態である「セッション確立中」か、セッションの中継処理が完了した状態である「セッション確立済み」のいずれかの状態を表す。
【0029】
セッションキーとセッション番号とセッション状態フラグは、各々の送受信部22のセッション判別部26により書き込まれ、中継情報へのポインタとセッション状態フラグ(第2のフラグ)はメインCPU12により書き込まれる。
【0030】
続いて、メインCPU用受信キュー14(第1のパケット受信キュー)には、各々の送受信部22のセッション判別部26の出力(第1のパケット情報)が入力される。メインCPU用受信キュー14は、各々の送受信部22のセッション判別部26から受信した各セッションの1番目のパケットへのポインタを含む第1のパケット情報を記憶する。
【0031】
ここで、第1のパケット情報は、表2に示すように、セッション番号と、受信ポート番号と、パケットへのポインタを含む。第1のパケット情報は、送受信部22に設けられたセッション判別部26により書き込まれる。
【0032】
【表2】

【0033】
メインCPU12(第1の処理部)には、メインCPU用受信キュー14の出力(第1のパケット情報)が入力される。また、メインCPU12は、内部バス34を介してメインメモリ18、セッションキャッシュテーブル16、各送受信部22のアクセラレータ用送信キュー32と相互に接続されている。メインCPU12は、例えば、メインCPU用受信キュー14に第1のパケット情報が記憶された順序で、メインCPU用受信キュー14に記憶された第1のパケット情報に基づいて各セッションの1番目のパケットの中継処理を行い、各セッションの中継情報を生成する。
【0034】
ここで、中継情報は、中継処理を行った結果の情報であり、出力先(送信先)のポートを示す情報を含む。また、中継情報は、本実施形態の場合、メインCPU12によりメインメモリ18に記憶される。
【0035】
続いて、送受信部22について説明する。なお、各々の送受信部22a、22b、…は同じ構成のものであるから、以下、送受信部22aを例に挙げて説明する。
【0036】
送受信部22aは、ネットワークインタフェース24と、セッション判別部26と、アクセラレータ用受信キュー28と、アクセラレータ30と、アクセラレータ用送信キュー32とによって構成されている。
【0037】
セッション判別部26には、ポート20と相互に接続されたネットワークインタフェース24の出力(パケット)と、メインCPU12の出力(停止/停止解除の制御信号)が入力される。また、セッション判別部26は、セッションキャッシュテーブル16と相互に接続され、内部バス34を介してメインメモリ18と相互に接続されている。セッション判別部26は、ポート20に接続された通信機器からネットワークインタフェース24を介してパケットを受信する毎に、セッションキャッシュテーブル16に記憶されたセッション情報を検索し、受信したパケットに対応するセッション情報がセッションキャッシュテーブル16に記憶されているかいないかを判別する。
【0038】
続いて、アクセラレータ用受信キュー28(第2のパケット受信キュー)には、セッション判別部26の出力とメインCPU12の出力(第2のパケット情報)が入力される。アクセラレータ用受信キュー28は、各セッションの2番目以降のパケットのいずれかを含む第2のパケット情報を記憶する。
【0039】
ここで、第2のパケット情報は、表3に示すように、セッション番号(第1のフラグ)と、パケットへのポインタと、中継情報へのポインタを含む。セッション番号は、セッション判別部26とメインCPU12により書き込まれ、パケットへのポインタは、セッション判別部26により書き込まれる。中継情報へのポインタは、セッションキャッシュテーブル16に中継情報へのポインタが記憶されている場合には、セッション判別部26により書き込まれ、セッションキャッシュテーブル16に中継情報へのポインタが記憶されていない場合には、メインCPU12により書き込まれる。
【0040】
【表3】

【0041】
アクセラレータ30(第2の処理部)は、例えば、アクセラレータ用受信キュー28に第2のパケット情報が記憶された順序で、アクセラレータ用受信キュー28に記憶された第2のパケット情報に基づいて各セッションの2番目以降のパケットの中継処理を行う。
【0042】
アクセラレータ用送信キュー32(パケット送信キュー)は、内部バス34を介して、メインCPU12および各々の送受信部22のアクセラレータ30と相互に接続されている。アクセラレータ用送信キュー32は、送信先の通信機器に対応するポート20を介して送信すべきパケットを記憶する。アクセラレータ30により、アクセラレータ用送信キュー32から、送信すべきパケットが読み出され、ネットワークインタフェース24を介して、ポート20に接続された通信機器に送信される。
【0043】
次に、図2〜4のフローチャートを参照しながら、パケット中継装置10の動作を説明する。以下、一例として、送受信部22aのポート20に接続された通信機器からパケットを受信し、送受信部22bのポート20に接続された通信機器にパケットを送信する場合について説明する。
【0044】
図2に示すように、パケットが、例えば、送受信部22aのポート20に接続された通信機器から、ネットワークインタフェース24を介してセッション判別部26に受信される(ステップS1)。
【0045】
なお、記載を省略しているが、受信したパケットは、セッション判別部26の内部に設けられているDMA(ダイレクトメモリアクセス)によりメインメモリ18に記憶(格納)され、セッション判別部26は、メインメモリ18に記憶された、受信したパケットへのポインタを取得する。
【0046】
セッション判別部26は、受信したパケットからヘッダ情報を抽出し(ステップS2)、抽出したヘッダ情報からセッションキーを生成し(ステップS3)、生成したセッションキーを入力として、セッションキャッシュテーブル16に記憶されたセッション情報の検索を行う(ステップS4)。
【0047】
検索後のセッションキャッシュテーブル16の出力は、検索結果(一致するセッション情報の有無)と、受信したパケットに対応する(一致する)セッション情報(セッションキー)がセッションキャッシュテーブル16に記憶されている場合には、さらに、受信したパケットに対応するセッション情報に含まれている、中継情報へのポインタと、セッション番号と、セッション状態フラグである。
【0048】
セッション判別部26は、セッションキャッシュテーブル16から受け取った情報に基づいて、受信したパケットに対応するパケット情報を、メインCPU用受信キュー14とアクセラレータ用受信キュー28のうち、適切な受信キューに送信する。
【0049】
検索の結果、受信したパケットに対応するセッション情報(セッションキー)がセッションキャッシュテーブル16に記憶されていない場合、セッション判別部26は、受信したパケットがセッションの1番目のパケットであると判断し、受信したパケットに対応するセッション情報を生成してセッションキャッシュテーブル16に記憶するとともに、受信したパケットに対応する第1のパケット情報を生成してメインCPU用受信キュー14に送る(ステップS5)。
【0050】
ここで、セッション判別部26により生成されるセッション情報は、ステップS3で生成したセッションキーと、このセッションキーから生成したセッション番号と、「セッション確立中」に状態を設定したセッション状態フラグを含む。また、セッション判別部26により生成される第1のパケット情報は、セッション番号と、受信ポート番号と、メインメモリ18に記憶されたパケットへのポインタとを含む。
【0051】
その後、セッション判別部26は、第1のパケット情報をメインCPU用受信キュー14へ送信したことを割り込み信号によりメインCPU12に通知する(ステップS6)。
【0052】
また、検索の結果、受信したパケットに対応するセッション情報がセッションキャッシュテーブル16に記憶されている場合、セッション判別部26は、受信したパケットがセッションの2番目以降のパケットであると判断し、受信したパケットに対応する第2のパケット情報を生成してアクセラレータ用受信キュー28に送る(ステップS13aおよびS13b)。
【0053】
ここで、セッション判別部26は、セッション状態フラグが「セッション確立中」である場合(ステップS13a)、メインCPU12により1番目のパケットが中継処理中であると判断する。この場合、セッション判別部26により生成される第2のパケット情報は、セッション番号と、メインメモリ18に記憶されたパケットへのポインタとを含む。つまり、中継情報へのポインタは含まない。
【0054】
また、セッション判別部26は、セッション状態フラグが「セッション確立済み」である場合(ステップS13b)、受信したパケットが確立済みのセッションに含まれるパケットであると判断する。この場合、セッション判別部26により生成される第2のパケット情報は、メインメモリ18に記憶されたパケットへのポインタと、同じくメインメモリ18に記憶された中継情報へのポインタとを含む。なお、セッション番号はクリアされる(「セッション確立済み」となる)。
【0055】
メインCPU12は、図3に示すように、セッション判別部26からの割り込み信号を受け取ると(ステップS6)、メインCPU用受信キュー14の先頭に記載された第1のパケット情報を取り出す(読み出す)(ステップS7)。つまり、第1のパケット受信キュー14に第1のパケット情報が記憶された順序で、第1のパケット情報を取り出す。そして、パケットの中継処理を行う(ステップS7)。
【0056】
メインCPU12は、セッションの1番目のパケットの中継処理が完了した後、この1番目のパケットを、送信すべきパケットとして、内部バス34を介して、送信先の通信機器が接続されたポート20に対応する送受信部22bのパケット送信キュー32に送る(ステップS8)。
【0057】
続いて、メインCPU12は、中継処理が完了した1番目のパケットを受信したポート20(第1のパケット情報に含まれる受信ポート)に対応する送受信部22aのセッション判別部26を一時停止させる(ステップS9)。そして、セッション番号を入力としてアクセラレータ用受信キュー28を検索し、アクセラレータ用受信キュー28に記憶された第2のパケット情報のうち、中継処理が完了した1番目のパケットと同じセッションに含まれる2番目以降のパケットに対応する第2のパケット情報に中継情報へのポインタを書き込むとともに、そのセッション番号(第1のフラグ)をクリアする。つまり、第2のパケット情報に1番目のパケットの中継処理が完了したことを表す第1のフラグを書き込む(ステップS10)。
【0058】
さらに、メインCPU12は、セッション番号を入力としてセッションキャッシュテーブル16を検索し、セッションキャッシュテーブル16に記憶されたセッション情報のうち、中継処理が完了した1番目のパケットに対応するセッション情報に中継情報へのポインタを書き込むとともに、そのセッション状態フラグ(第2のフラグ)を「セッション確立済み」の状態に更新する。つまり、セッション情報に、1番目のパケットの中継処理が完了したことを表す第2のフラグを書き込む(ステップS11)。
【0059】
その後、メインCPU12は、中継処理が完了した1番目のパケットの受信ポート20に対応する送受信部22aのセッション判別部24の一時停止を解除する(ステップS12)。
【0060】
上記のように、本実施形態では、アクセラレータ用受信キュー28とセッションキャッシュテーブル16の更新を行っている期間のみ、そのポートに対応するセッション判別部26を停止する。セッション判別部26を一時停止することにより、アクセラレータ用受信キュー28が同一セッションのパケットを受信し続けた場合に、アクセラレータ用受信キュー28の更新処理を確実に完了させることができる。
【0061】
なお、本実施形態のように、セッション判別部26を一時停止させる場合であっても、その停止時間は、メインCPU12によるパケットの中継処理にかかる時間と比較すれば十分に短い時間である。
【0062】
アクセラレータ30は、図4に示すように、対応するアクセラレータ用送信キュー32に、送信すべきパケットが記憶されているかいないかを確認する(ステップS14)。アクセラレータ30は、対応するパケットの送信キュー32に、送信すべきパケットが記憶されている場合(ステップS14で‘YES’)、アクセラレータ用送信キュー32に記憶されているパケットをアクセラレータ用送信キュー32から読み出し、ネットワークインタフェース24を介して対応するポート20から送信する(ステップS15)。その後、ステップS14へ戻り、アクセラレータ30は上記の動作を繰り返す。
【0063】
一方、ステップS14において、対応するパケット送信キュー32に、送信すべきパケットが記憶されていない場合(ステップS14で‘NO’)、アクセラレータ30は、対応するアクセラレータ用受信キュー28に、第2のパケット情報が記憶されているかいないかを確認する(ステップS16)。
【0064】
ここで、アクセラレータ30が中継処理を行うパケットは、セッションの2番目以降のパケットである。アクセラレータ30は、第2のパケット情報にセッション番号が設定されていることにより「セッション確立中」の状態であると判断し、セッション番号が設定されていない(セッション番号がクリアされている)ことにより「セッション確立済み」の状態であると判断する。
【0065】
アクセラレータ30は、対応するアクセラレータ用受信キュー28に第2のパケット情報が記憶されていない場合(ステップS16で‘NO’)、ステップS14へ戻り、上記の動作を繰り返す。
【0066】
一方、対応するアクセラレータ用受信キュー28に第2のパケット情報が記憶されている場合(ステップS16で‘YES’)、アクセラレータ30は、例えば、セッション番号を入力として、毎度アクセラレータ用受信キュー28の先頭から「セッション確立済み」の状態である第2のパケット情報を検索し、アクセラレータ用受信キュー28に第2のパケット情報が記憶された順序で、かつ、第1のフラグが、1番目のパケットの中継処理が完了したことを表すものから順に受信する(ステップS17)。
【0067】
続いて、アクセラレータ30は、「セッション確立済み」の状態である第2のパケット情報に含まれる中継情報に基づいてセッションの2番目以降のパケットの中継処理を行う(ステップS18)。つまり、アクセラレータ30は、アクセラレータ用受信キュー28に第2のパケット情報が記憶された順序で、かつ、セッション番号がクリアされているもの(つまり、「セッション確立済み」な状態のパケット)から順に中継処理を行う。
【0068】
続いて、アクセラレータ30は、中継処理が完了した2番目以降のパケットを、送信先の通信機器が接続されたポート20に対応する送受信部22bのアクセラレータ用送信キュー32に送る(ステップS19)。
【0069】
その後、アクセラレータ30は、ステップS14に戻り、上記の動作を繰り返し行う。
【0070】
このように、パケット中継装置10では、セッションの1番目のパケットは、メインCPU用受信キュー14に渡されて中継処理され、この後に受信された2番目以降のパケットは、「セッション確立中」であるため、対応するアクセラレータ用受信キュー28に置かれる(この時点ではアクセラレータ30により処理されない)。1番目のパケットの中継処理を完了した後にメインCPU12が2番目以降のパケットについてセッション状態を「セッション確立済み」とすると、アクセラレータ30は2番目以降のパケットを順に処理することができる。そのため、2番目以降のパケットの順序が入れ替わってしまうことはない。さらに、メインCPU12が1番目のパケットを処理している期間に、アクセラレータ用受信キュー28内に「セッション確立済み」のパケットがあれば、アクセラレータ30はアクセラレータ用受信キュー28の中でそのパケットを見つけ出し、処理を行うことができる。
【0071】
なお、実施形態では、第1および第2のパケット情報としてパケットへのポインタを使用している。第1および第2のパケット情報内にパケットそのものを使用してもよいが、パケット転送の処理負荷を軽減するため、上記実施形態のようにパケットへのポインタを使用する方が望ましい。また、セッション情報と第2のパケット情報として中継情報へのポインタを使用しているが、中継情報そのものを使用することもできる。
【0072】
また、パケットと中継情報を同じメインメモリ18に記憶しているが、これも限定されず、両者を別のメモリに記憶してもよい。
【0073】
また、実施形態では、セッション番号をクリアすることにより第1のフラグとして使用しているが、本発明はこれに限定されない。例えば、「セッション確立済み」な状態を表すために、セッション番号をクリアするのではなく、あらかじめ設定された特定の数値に設定してもよいし、セッション番号とは別に、「セッション確立中」か「セッション確立済み」かを表す第1のフラグを記憶するようにしてもよい。
【0074】
本発明は、基本的に以上のようなものである。
以上、本発明について詳細に説明したが、本発明は上記実施形態に限定されず、本発明の主旨を逸脱しない範囲において、種々の改良や変更をしてもよいのはもちろんである。
【符号の説明】
【0075】
10、40 パケット中継装置
12、54 メインCPU
14 メインCPU用受信キュー
16、52 セッションキャッシュテーブル
18 メインメモリ
20、42 ポート
22a、22b 送受信部
24、44 ネットワークインタフェース
26 セッション判別部
28 アクセラレータ用受信キュー
30 アクセラレータ
32 アクセラレータ用送信キュー
34 内部バス
46 パケットスイッチコントローラ
48 パケット処理部
50 テーブル検索エンジン

【特許請求の範囲】
【請求項1】
複数のポートの各々に接続される通信機器の間で、各セッションで送受信される複数のパケットの中継処理を行うパケット中継装置であって、
各セッションを識別するためのセッション情報を記憶するセッションキャッシュテーブルと、
各セッションの1番目のパケットを含む第1のパケット情報を記憶する第1のパケット受信キューと、
前記第1のパケット受信キューに記憶された第1のパケット情報に基づいて各セッションの1番目のパケットの中継処理を行い、各セッションの中継情報を生成する第1の処理部と、
前記複数のポートの各々に対応して設けられた送受信部とを備え、
前記送受信部の各々は、
パケットを受信する毎に、前記セッションキャッシュテーブルに記憶されたセッション情報を検索し、受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されているかいないかを判別するセッション判別部と、
各セッションの2番目以降のパケットのいずれかを含む第2のパケット情報を記憶する第2のパケット受信キューと、
前記第2のパケット受信キューに記憶された第2のパケット情報に基づいて各セッションの2番目以降のパケットの中継処理を行う第2の処理部と、
送信先の通信機器が接続されたポートを介して送信すべきパケットを記憶するパケット送信キューとを備え、
前記セッション判別部は、受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されていない場合、該受信したパケットに対応するセッション情報を生成して前記セッションキャッシュテーブルに記憶するとともに、該受信したパケットに対応する第1のパケット情報を前記第1のパケット受信キューに送り、前記受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されている場合、該受信したパケットに対応する第2のパケット情報を前記第2のパケット受信キューに送ることを特徴とするパケット中継装置。
【請求項2】
前記セッション情報は、セッションを識別するためのセッションキーを含み、
前記セッション判別部は、受信したパケットからヘッダ情報を抽出し、該抽出したヘッダ情報から前記セッションキーを生成し、該生成したセッションキーを入力として前記セッションキャッシュテーブルに記憶されたセッション情報を検索し、受信したパケットに対応するセッション情報が前記セッションキャッシュテーブルに記憶されていない場合、該受信したパケットに対応するセッションキーを含むセッション情報を生成して前記セッションキャッシュテーブルに記憶することを特徴とする請求項1に記載のパケット中継装置。
【請求項3】
前記第1の処理部は、各セッションの1番目のパケットの中継処理が完了した後、該1番目のパケットを、前記送信すべきパケットとして、送信先の通信機器が接続されたポートに対応するパケット送信キューに送り、
前記第2のパケット受信キューに記憶された第2のパケット情報のうち、前記1番目のパケットと同じセッションに含まれる2番目以降のパケットに対応する第2のパケット情報に前記中継情報を書き込むとともに、前記1番目のパケットの中継処理が完了したことを表す第1のフラグを書き込み、
前記セッションキャッシュテーブルに記憶されたセッション情報のうち、前記1番目のパケットに対応するセッションのセッション情報に前記中継情報を書き込むとともに、前記1番目のパケットの中継処理が完了したことを表す第2のフラグを書き込むことを特徴とする請求項1または2に記載のパケット中継装置。
【請求項4】
前記第1の処理部は、前記第2のパケット受信キューに記憶された第2のパケット情報、および、前記セッションキャッシュテーブルに記憶されたセッション情報を更新する期間、前記中継処理が完了した1番目のパケットを受信したポートに対応する送受信部のセッション判別部を一時停止することを特徴とする請求項3に記載のパケット中継装置。
【請求項5】
前記第2の処理部は、対応するパケット送信キューに、前記送信すべきパケットが記憶されている場合、該送信すべきパケットを対応するポートから送信し、
対応するパケット送信キューに、前記送信すべきパケットが記憶されておらず、かつ、対応する第2のパケット受信キューに第2のパケット情報が記憶されている場合、前記第1のフラグが、前記1番目のパケットの中継処理が完了したことを表すものから順に、前記第2のパケット情報に含まれる中継情報に基づいて各セッションの2番目以降のパケットの中継処理を行い、該中継処理が完了した2番目以降のパケットを、送信先の通信機器が接続されたポートに対応する送受信部のパケット送信キューに送ることを特徴とする請求項3または4に記載のパケット中継装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate