(57)【特許請求の範囲】
【請求項１】
複数の汎用プロセッサと、ネットワークプロセッサとを備えたデータ転送装置において、
前記ネットワークプロセッサが、
それぞれにエージカウンタが設けられたセッション管理エントリを複数有するセッション管理テーブルと、
前記複数の汎用プロセッサの内の１つを選択する汎用プロセッサ選択部と、
前記複数の汎用プロセッサの内の任意の汎用プロセッサによる処理が必要なパケットを受信した時、該パケットの送信元IPアドレス、宛先IPアドレス、送信元ポート、宛先ポートとハッシュ関数とからセッション番号を求め、該求めたセッション番号に前記パケットの送信側ネットワークプロセッサの識別子を付加することによりエントリ番号を求め、該求めたエントリ番号に対応するセッション管理エントリのエージカウンタの値に基づいて前記セッション管理エントリが無効になっていると判定した場合は、前記セッション管理エントリに前記汎用プロセッサ選択部が選択した汎用プロセッサの識別子を登録する処理、前記汎用プロセッサ選択部が選択した汎用プロセッサに前記パケットを引き渡す処理および前記セッション管理エントリのエージカウンタに所定値を設定する処理を行い、前記求めたエントリ番号に対応するセッション管理エントリのエージカウンタの値に基づいて前記セッション管理エントリが有効になっていると判定した場合は、前記セッション管理エントリに登録されている識別子が示す汎用プロセッサに前記パケットを引き渡す処理および前記セッション管理エントリのエージカウンタに所定値を設定する処理を行う受信側セッション管理部と、
前記各セッション管理エントリのエージカウンタを、一定時間毎に一定値ずつ更新するエージング部とを備えたことを特徴とするデータ転送装置。
【請求項２】
請求項１記載のデータ転送装置において、
前記ネットワークプロセッサが、
汎用プロセッサからパケットが引き渡されたとき、該パケットの送信元IPアドレス、宛先IPアドレス、送信元ポート、宛先ポートとハッシュ関数とからセッション番号を求め、該求めたセッション番号に前記パケットの受信側ネットワークプロセッサの識別子を付加することによりエントリ番号を求め、該求めたエントリ番号に対応するセッション管理エントリに前記汎用プロセッサの識別子を登録すると共に前記セッション管理エントリのエージカウンタに所定値を設定する送信側セッション管理部を備えたことを特徴とするデータ転送装置。
【請求項３】
請求項１または２記載のデータ転送装置において、
前記ネットワークプロセッサが複数存在することを特徴とするデータ転送装置。
【請求項４】
請求項１乃至３の何れか１項に記載のデータ転送装置において、
前記複数の汎用プロセッサの内の特定の汎用プロセッサによる処理が必要なパケットを受信したとき、該受信したパケットを前記特定の汎用プロセッサに引き渡す受信側パケット処理部を備えたことを特徴とするデータ転送装置。
【請求項５】
請求項１乃至４の何れか１項に記載のデータ転送装置において、
前記汎用プロセッサ選択部が、
前記複数の汎用プロセッサの内の最も負荷の低い汎用プロセッサを選択する構成、予め定められている順番に従って前記複数の汎用プロセッサの内の１つを選択する構成、もしくは、自ネットワークプロセッサと同一ボード上の汎用プロセッサを優先的に選択する構成を有することを特徴とするデータ転送装置。
【請求項６】
複数の汎用プロセッサと、複数のセッション管理エントリを有し、各セッション管理エントリにエージカウンタが設けられたセッション管理テーブルを備えたネットワークプロセッサとから構成されるデータ転送装置の構成要素であるネットワークプロセッサをコンピュータによって実現するためのプログラムであって、
前記コンピュータを、
前記複数の汎用プロセッサの内の１つを選択する汎用プロセッサ選択部、
前記複数の汎用プロセッサの内の任意の汎用プロセッサによる処理が必要なパケットを受信した時、該パケットの送信元IPアドレス、宛先IPアドレス、送信元ポート、宛先ポートとハッシュ関数とからセッション番号を求め、該求めたセッション番号に前記パケットの送信側ネットワークプロセッサの識別子を付加することによりエントリ番号を求め、該求めたエントリ番号に対応するセッション管理エントリのエージカウンタの値に基づいて前記セッション管理エントリが無効になっていると判定した場合は、前記セッション管理エントリに前記汎用プロセッサ選択部が選択した汎用プロセッサの識別子を登録する処理、前記汎用プロセッサ選択部が選択した汎用プロセッサに前記パケットを引き渡す処理および前記セッション管理エントリのエージカウンタに所定値を設定する処理を行い、前記求めたエントリ番号に対応するセッション管理エントリのエージカウンタの値に基づいて前記セッション管理エントリが有効になっていると判定した場合は、前記セッション管理エントリに登録されている識別子が示す汎用プロセッサに前記パケットを引き渡す処理および前記セッション管理エントリのエージカウンタに所定値を設定する処理を行う受信側セッション管理部、
前記各セッション管理エントリのエージカウンタを、一定時間毎に一定値ずつ更新するエージング部として機能させるためのプログラム。
【請求項７】
請求項６記載のプログラムにおいて、
前記コンピュータを、
汎用プロセッサからパケットが引き渡されたとき、該パケットの送信元IPアドレス、宛先IPアドレス、送信元ポート、宛先ポートとハッシュ関数とからセッション番号を求め、該求めたセッション番号に前記パケットの受信側ネットワークプロセッサの識別子を付加することによりエントリ番号を求め、該求めたエントリ番号に対応するセッション管理エントリに前記汎用プロセッサの識別子を登録すると共に前記セッション管理エントリのエージカウンタに所定値を設定する送信側セッション管理部として機能させるためのプログラム。
【請求項８】
請求項６または７記載のプログラムにおいて、
前記ネットワークプロセッサが複数存在することを特徴とするプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パケットを中継、終端するデータ転送装置に関し、特に、ネットワークプロセッサと複数の汎用プロセッサとを備えたデータ転送装置において、同じセッションに属するパケットは常に同じ汎用プロセッサで処理されるようにするセッション管理技術に関する。
【０００２】
【従来の技術】
従来から、データ転送装置においては、セッション管理テーブルの内容に基づいて同一セッションに属するパケットを同一出力先に出力する等のセッション管理を行なっている（例えば、特許文献１参照）。ところで、このようなデータ転送装置の実現方法としては種々の方法が考えられるが、例えば、ネットワークプロセッサと汎用プロセッサの２種類のプロセッサを使用する方法が考えられる。ネットワークプロセッサ、汎用プロセッサはそれぞれ次のような特徴を有する。
【０００３】
ネットワークプロセッサは、高速なパケット転送処理をソフトウェアによって実装できるため、ASIC等の専用のハードウェアと比較して高い柔軟性を持つ。しかし、プログラムメモリの容量が少ないことや低級言語によるプログラミングのため、複雑な処理の実装が困難である。例えば以下のような処理が問題となる。
【０００４】
(a)レイヤー３のパケット転送においてパケットヘッダの中にオプション情報を含む場合、オプションの解析および処理の実装が必要となる。これらを実装することはプログラムメモリを圧迫する。
【０００５】
(b)セッション単位のフィルタリングを必要とする場合、各パケットに対する処理が過去に受信したパケットの処理結果に依存する。これを実装するためにはセッションごとの状態管理が必要となり、ネットワークプロセッサのプログラムメモリ、検索用メモリ、処理時間を圧迫する。
【０００６】
(c)本装置においてアプリケーションレイヤによる処理を必要とする場合、一連のパケットをレイヤー４(セッション層)のプロトコルで終端する必要がある。これらの処理を実装することはプログラムメモリ及びデータメモリを圧迫する。
【０００７】
一方、汎用プロセッサは、ネットワークプロセッサに比べて処理速度が大きく劣るが、十分なメモリ容量を持ち、また、汎用のオペレーティングシステムが動作することから、高級言語を用いて複雑な機能を実装することが容易である。また、汎用プロセッサ上で動作する多くのオペレーティングシステムは、TCP/IPのプロトコル処理を実装し、更に、フィルタリング、アドレス変換、暗号化等の機能を実装するものも存在する。また、各種オペレーティングシステム上で動作する多くのアプリケーションソフトウェアが利用できる。
【０００８】
そこで、TCP/IPを処理するデータ転送装置の構成として、レイヤ３以下の単純なパケット転送処理をネットワークプロセッサ上に実装し、オプション処理及びレイヤ４(セッション層)以上の複雑な処理を汎用プロセッサ上に実装することが考えられる。但し、ネットワークプロセッサに比べて汎用プロセッサの処理速度は大きく劣るため、１つの装置内に複数の汎用プロセッサを搭載し、負荷分散を行なうことで性能を向上させる。
【０００９】
【特許文献１】
特開２００２−３５９６３７号公報
【００１０】
【発明が解決しようとする課題】
上記したように、１つのデータ転送装置内に複数の汎用プロセッサを搭載し、負荷分散を行なうことで性能を向上させると、以下の課題が発生する。
【００１１】
IPパケット転送では、同じセッションに属するパケットの追い越しを防ぐことが望ましい。そのため、同じセッションに属するパケットは常に同じ汎用プロセッサで処理させる必要がある。同じセッションに属するパケットを複数の汎用プロセッサで別々に処理すれば、パケットの追い越しが頻繁に発生する。
【００１２】
セッション単位のフィルタリングでは、セッションの状態管理を伴うため、同じセッションに属するパケットは同じ汎用プロセッサで処理させる必要がある。
【００１３】
１つの汎用プロセッサが終端するセッションに属するパケットは全て、同じ汎用プロセッサで処理させる必要がある。アプリケーションゲートウェイ機能はTCPのセッションを終端するため、この課題を解決する必要がある。
【００１４】
そこで、本発明は、TCP/IPに関するデータ転送装置において、複数の汎用プロセッサを用いて負荷分散する場合に、ネットワークプロセッサによって、同じセッションに属するパケットを常に同じ汎用プロセッサへ転送することを可能とする。
【００１５】
【課題を解決するための手段】
本発明にかかる第１のデータ転送装置は、
複数の汎用プロセッサと、ネットワークプロセッサとを備えたデータ転送装置において、
前記ネットワークプロセッサが、
それぞれにエージカウンタが設けられたセッション管理エントリを複数有するセッション管理テーブルと、
前記複数の汎用プロセッサの内の１つを選択する汎用プロセッサ選択部と、
前記複数の汎用プロセッサの内の任意の汎用プロセッサによる処理が必要なパケットを受信した時、該パケットの送信元IPアドレス、宛先IPアドレス、送信元ポート、宛先ポートとハッシュ関数とからセッション番号を求め、該求めたセッション番号に前記パケットの送信側ネットワークプロセッサの識別子を付加することによりエントリ番号を求め、該求めたエントリ番号に対応するセッション管理エントリのエージカウンタの値に基づいて前記セッション管理エントリが無効になっていると判定した場合は、前記セッション管理エントリに前記汎用プロセッサ選択部が選択した汎用プロセッサの識別子を登録する処理、前記汎用プロセッサ選択部が選択した汎用プロセッサに前記パケットを引き渡す処理および前記セッション管理エントリのエージカウンタに所定値を設定する処理を行い、前記求めたエントリ番号に対応するセッション管理エントリのエージカウンタの値に基づいて前記セッション管理エントリが有効になっていると判定した場合は、前記セッション管理エントリに登録されている識別子が示す汎用プロセッサに前記パケットを引き渡す処理および前記セッション管理エントリのエージカウンタに所定値を設定する処理を行う受信側セッション管理部と、
前記各セッション管理エントリのエージカウンタを、一定時間毎に一定値ずつ更新するエージング部とを備えたことを特徴とする。
【００１６】
本発明にかかる第２のデータ転送装置は、第１のデータ転送装置において、
前記ネットワークプロセッサが、
汎用プロセッサからパケットが引き渡されたとき、該パケットの送信元IPアドレス、宛先IPアドレス、送信元ポート、宛先ポートとハッシュ関数とからセッション番号を求め、該求めたセッション番号に前記パケットの受信側ネットワークプロセッサの識別子を付加することによりエントリ番号を求め、該求めたエントリ番号に対応するセッション管理エントリに前記汎用プロセッサの識別子を登録すると共に前記セッション管理エントリのエージカウンタに所定値を設定する送信側セッション管理部を備えたことを特徴とする。
【００１７】
本発明にかかる第３のデータ転送装置は、第１または第２のデータ転送装置において、
前記ネットワークプロセッサが複数存在することを特徴とする。
【００１８】
本発明にかかる第４のデータ転送装置は、第１〜第３のデータ転送装置の何れかにおいて、
前記複数の汎用プロセッサの内の特定の汎用プロセッサによる処理が必要なパケットを受信したとき、該受信したパケットを前記特定の汎用プロセッサに引き渡す受信側パケット処理部を備えたことを特徴とする。
【００２０】
本発明にかかる第５のデータ転送装置は、第１〜第４の何れかのデータ転送装置において、
前記汎用プロセッサ選択部が、
前記複数の汎用プロセッサの内の最も負荷の低い汎用プロセッサを選択する構成、予め定められている順番に従って前記複数の汎用プロセッサの内の１つを選択する構成、もしくは、自ネットワークプロセッサと同一ボード上の汎用プロセッサを優先的に選択する構成を有する。
【００２１】
【作用】
任意の汎用プロセッサによる処理を必要とするパケットを受信したとき、受信側セッション管理部は、セッション管理テーブルに、上記パケットが属するセッションのセッション特定情報と対応付けてパケットの引き渡し先にする汎用プロセッサの識別子が登録されていなければ、汎用プロセッサ選択部によって選択された汎用プロセッサの識別子を、上記セッション特定情報と対応付けてセッション管理テーブルに登録すると共に、選択された汎用プロセッサにパケットを引き渡す。このような処理は、セッションに属する最初のパケットの受信時等において行われる。その後、上記セッションに属するパケットを受信した場合には、セッション管理テーブルに、上記セッションのセッション特定情報と対応付けてパケットの引き渡し先にする汎用プロセッサの識別子が登録されているので、受信側セッション管理部は、登録されている識別子によって示される汎用プロセッサにパケットを引き渡す。従って、同一セッションに属するパケットは、常に同一汎用プロセッサに引き渡すことが可能になる。
【００２２】
また、本発明では、セッション管理テーブルのエントリ数を少なくするため、ハッシュ関数を利用している。即ち、パケットの送信元IPアドレス、宛先IPアドレス、送信元ポート、宛先ポートとハッシュ関数とから求まるセッション番号（ハッシュ値）に、上記パケットの送信側あるいは受信側ネットワークプロセッサの識別子を付加することにより得られるエントリ番号を、上記パケットが属するセッション用のセッション番号としているので、セッション管理テーブルのエントリ数を少なくすることができる。また、ハッシュ値をそのままエントリ番号とするのではなく、ハッシュ値に送信側あるいは受信側ネットワークプロセッサの識別子を付加したものをエントリ番号としているので、異なるセッションに同一エントリ番号が付与される危険性を極めて低くすることができる。
【００２３】
【発明の実施の形態】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００２４】
・全体構成
本発明が対象とするTCP/IPに関するデータ転送装置は、IPパケット転送、フィルタリング、アドレス変換、アプリケーションゲートウェイ等のデータ転送機能を有し、ネットワークプロセッサと、同一のソフトウェアを実装する複数の汎用プロセッサから構成される。
【００２５】
図１は本発明の実施例のブロック図であり、本発明が対象とするデータ転送装置１の全体構成と、本装置１を用いて構成されたネットワークの接続例を示す。データ転送装置１は、複数の汎用プロセッサCPU1、CPU2、CPU3と、複数のネットワーウプロセッサNP4、NP5、NP6と、物理回線インタフェースIF41、IF42、IF51、IF52、IF61、IF62とから構成される。
【００２６】
データ転送装置１内の全ての汎用プロセッサCPU1〜CPU3及びネットワークプロセッサNP4〜NP6には、データ転送装置１内で固有のデバイス番号が割り当てられる。本実施例では、汎用プロセッサCPU1、CPU2、CPU3にそれぞれデバイス番号1、2、3を割り当て、ネットワークプロセッサNP4、NP5、NP6にそれぞれデバイス番号4、5、6を割り当てるものとする。
【００２７】
同様に、ネットワークプロセッサNP4、NP5、NP6が収容する物理回線インタフェースIF41〜IF62には、データ転送装置１内で固有の回線番号が割り当てられる。本実施例では、物理回線インタフェースIF41、IF42、IF51、IF52、IF61、IF62にそれぞれ回線番号41、42、51、52、61、62を割り当てるものとする。また、各物理回線インタフェースIF41〜IF62には、汎用プロセッサの個数＋１個(図１では４個)のIPアドレスを割り当てる。
【００２８】
ネットワークプロセッサNP4は、ネットワークN1、N2を介してホストコンピュータ（ホスト）H41、H42と接続され、ネットワークプロセッサNP5は、ネットワークN3、N4を介してホストH51、H52と接続され、ネットワークプロセッサNP6は、ネットワークN5、N6を介してホストH61、H62と接続されている。
【００２９】
・汎用プロセッサ
汎用プロセッサCPU1、CPU2、CPU3は、TCP/IPに関する各種データ転送機能を有する。具体的には、IPパケットルーティング、セッションフィルタリング、アドレス変換、各種アプリケーションゲートウェイ等が挙げられる。これらの機能はソフトウェアによって実装されるものとする。これらの機能を提供するために汎用プロセッサCPU1〜CPU3上に実装されるソフトウェアの構成例を図２に示す。
【００３０】
本実施例では、アプリケーション処理部2-1-1〜2-1-3とプロトコル処理部2-2は既存のソフトウェアモジュールを流用し、装置内インタフェース処理部2-4のみ新規に実装する。
【００３１】
アプリケーション処理部2-1-1、2-1-2、2-1-3は、IPネットワークに接続された他のホストとの間でTCPまたはUDPのセッションを用いて双方向のデータ通信を行なう。アプリケーションゲートウェイ機能は、アプリケーション処理部2-1-1、2-1-2、2-1-3に実装される。
【００３２】
プロトコル処理部2-2は、アプリケーション処理部2-1-1、2-1-2、2-1-3に対してTCP、UDPセッションの終端機能を提供する。また、本データ転送装置１が終端しないIPパケットに対してはルーティングテーブル2-3の設定に従いIPパケット転送を行なう。これらの機能に加え、セッション単位のフィルタリング機能、アドレス変換機能、IPSecVPNなどを提供する場合もある。
【００３３】
ルーティングテーブル2-3は、複数のルーティングエントリから構成され、1つのルーティングエントリは、宛先IPアドレスの集合に対して、送信側回線の識別子（回線番号）、次の転送先ノードのIPアドレス等を格納する。ルーティングテーブル2-3の内容は、ユーザまたはアプリケーション処理部2-1-1、2-1-2、2-1-3から設定される。
【００３４】
装置内インタフェース処理部2-4は、プロトコル処理部2-2に対し物理回線へのパケットの送受信機能を提供する。具体的には、プロトコル処理部2-2と装置内インタフェースとの間でデータ構造の変換等を行なう。
【００３５】
・ネットワークプロセッサ
ネットワークプロセッサNP4、NP5、NP6は、複数の物理回線インタフェースを収容し、物理回線へのパケットの送受信、及び、ルーティングテーブルの設定に基づくIPパケット転送機能を持つ。これに加え、汎用プロセッサCPU1〜CPU3の処理を必要とするパケットに対し、同一のセッションに属するパケットを常に同一の汎用プロセッサへ転送するよう、セッションの管理を行なう。これらの機能は、主にソフトウェアによって実装される。
【００３６】
図３は、本実施例においてネットワークプロセッサNP4〜NP6上に実装されるソフトウェア構成を示す。
【００３７】
ネットワークプロセッサNP4〜NP6のソフトゥエアは、回線インタフェース処理部3-1、受信側パケット処理部3-2、ルーティングテーブル3-3、受信側セッション管理部3-4、セッション管理テーブル3-5、汎用プロセッサ選択部3-6、装置内インタフェース処理部3-7、送信側セッション管理部3-8、送信側パケット処理部3-9、及び、エージング部3-10から構成される。言い換えれば、ネットワークプロセッサNP4〜NP6は、記録媒体（ディスク、半導体メモリ、その他のメモリ）に記録された、上記各部3-1〜3-10を実現するためのプログラムを読み込み、読み込んだプログラムに従って自ネットワークプロセッサNP4〜NP6の動作を制御することにより、自ネットワークプロセッサNP4〜NP6に上記各部3-1〜3-10を実現する。
【００３８】
回線インタフェース処理部3-1は、物理回線インタフェースに対しパケットの送受信を行なう。即ち、物理回線から受信した信号からパケットを抽出し、パケットと受信回線番号を受信側パケット処理部3-2へ引き渡す。また、送信側パケット処理部3-9から引き渡されたパケットを送信回線番号で指定された物理回線へ送出する。
【００３９】
受信側パケット処理部3-2は、図４のフローチャートに従い、回線インタフェース処理部3-1からパケットを引き取り、各種パケット処理を行ない、ルーティングテーブル3-3から宛て先IPアドレスに対応する送信側デバイス番号と送信回線番号を転送情報として取得し、それらの結果に基づいて装置内インタフェース処理部3-7または受信側セッション管理部3-4へパケットとその転送情報を引き渡す。
【００４０】
ルーティングテーブル3-3は、複数のルーティングエントリから構成される。各ルーティングエントリには、宛先IPアドレスの集合、送信側デバイス番号、送信回線番号が格納される。送信側デバイス番号には、特定のネットワークプロセッサまたは汎用プロセッサを示すデバイス番号、または、任意の汎用プロセッサを示す値として０が格納される。図１１は、ルーティングテーブル3-3の設定例を示す。
【００４１】
受信側セッション管理部3-4は、図５のフローチャートに従い、任意の汎用プロセッサへ転送する必要のあるパケットとその転送情報とを受信側パケット処理部3-2からを引き取り、セッション管理テーブル3-5、汎用プロセッサ選択部3-6を用いて転送先の汎用プロセッサを決定し、セッション管理テーブル3-5のエントリを更新し、装置内インタフェース処理部3-7へパケットとその転送情報を引き渡す。その処理において、図７のフローチャートに示す計算方法により、パケットヘッダの各種情報からセッション番号を計算する。図７の計算方法は、同一セッションに属するパケットを常に同一のセッション番号に対応付ける。セッション番号と送信側デバイス番号から、セッション管理テーブル3-5のエントリ番号を決定する。
【００４２】
セッション管理テーブル3-5は、エントリ番号をアドレスとする複数のセッション管理エントリから構成される。セッション管理エントリは、転送先デバイス番号、及び、エージカウンタから構成される。転送先デバイス番号には、パケットの転送先となる汎用プロセッサのデバイス番号が格納される。エージカウンタが０のとき、そのエントリは無効であることを示す。エージカウンタが０以外のとき、そのエントリは有効であることを示す。エージカウンタは、受信側セッション管理部3-4または送信側セッション管理部3-8によって最大値(全ビットを１)に設定され、エージング部3-10によって、一定時間ごとに１ずつ減少され、０になったらそのエントリに格納されたデバイス番号が無効になる。図１１に、セッション管理テーブル3-5の内容例を示す。
【００４３】
汎用プロセッサ選択部3-6は、新しいセッションに次に割り当てるべき汎用プロセッサを選択し、そのデバイス番号を受信側セッション管理部3-4へ通知する。例えば、その時点で最も負荷の低い汎用プロセッサを選択する方式、複数の汎用プロセッサを順に選択する方式などがある。また、装置内の構成により、受信側ネットワークプロセッサまたは送信側ネットワークプロセッサと同じボード上に実装された汎用プロセッサの中から選択する方式も考えられる。
【００４４】
装置内インタフェース処理部3-7は、図８のフローチャートに従い、受信側パケット処理部3-2または受信側セッション管理部3-4からパケットとその転送情報を引き取り、転送先デバイス番号に基づき、送信側パケット処理部3-9、または、他のネットワークプロセッサの装置内インタフェース処理部3-7、または、汎用プロセッサの装置内インタフェース処理部2-4へパケットとその転送情報を引き渡す。
【００４５】
また、装置内インタフェース処理部3-7は、図９のフローチャートに従い、他のネットワークプロセッサまたは汎用プロセッサからパケットとその転送情報を引き取り、転送元デバイス番号に基づき、送信側セッション管理部3-8、または、送信側パケット処理部3-9へパケットと転送情報を引き渡す。
【００４６】
送信側セッション管理部3-8は、図６のフローチャートに従い、装置内インタフェース部3-7からパケットとその転送情報を引き取り、セッション管理テーブル3-5を更新し、パケットと送信回線番号を送信側パケット処理部3-9へ引き渡す。受信側セッション管理部3-4と同様に、図7のフローチャートの計算により、パケットヘッダ情報からセッション番号を計算し、セッション番号と受信側デバイス番号からセッション管理テーブル3-5のエントリ番号を決定する。
【００４７】
送信側パケット処理部3-9は、装置内インタフェース処理部3-7または送信側セッション管理部3-8からパケットと送信回線番号を引き取り、パケット転送情報の内容に従い必要な処理を行ない、それらを回線インタフェース処理部3-1へ引き渡す。
【００４８】
・設定内容
図１のネットワーク構成例において、汎用プロセッサCPU1〜CPU3のプロトコル処理部2-2に設定するIPアドレスを図１０に示す。
【００４９】
汎用プロセッサCPU1、CPU2、CPU3は、各物理回線インタフェースに対して同一のサブネットに属する２種類のIPアドレスを割り当てる。プライマリIPアドレスは、データ転送装置１が要求元ホストとなるセッションにおいて使用される。セカンダリIPアドレスは、データ転送装置１が要求先ホストとなるセッションにおいて本装置１の代表IPアドレスとして使用される。プライマリIPアドレスは、汎用プロセッサごとに異なる値を設定し、セカンダリIPアドレスは、全ての汎用プロセッサで同じ値を設定する。従って、各物理回線インタフェースには、汎用プロセッサの個数＋１個のIPアドレスを割り当てることになる。
【００５０】
図１のネットワーク構成例において、ネットワークプロセッサNP4〜NP6のルーティングテーブル3-3に設定される内容を図１１に示す。
【００５１】
宛先IPアドレスが192.41.＊.＊〜192.62.＊.＊のエントリは、IPパケット転送のためのルーティングエントリであり、送信側デバイス番号は、ネットワークプロセッサを示す値(4、5、6)となる。これらのルーティングエントリは、汎用プロセッサCPU1、CPU2、CPU3のルーティングテーブル2-3に設定される内容と同一である。それ以外のエントリは、本データ転送装置１宛てのパケットを汎用プロセッサへ転送するためのルーティングエントリである。
【００５２】
送信側デバイス番号が1、2、3のエントリは、特定の汎用プロセッサへ転送することを示しており、このルーティングエントリの宛先IPアドレスは、汎用プロセッサに設定したプライマリIPアドレスに一致する。
【００５３】
送信側デバイス番号が０のエントリは、任意の汎用プロセッサへ転送することを示しており、これらのルーティングエントリの宛先IPアドレスは、汎用プロセッサに設定したセカンダリIPアドレスに一致する。また、これらの送信側デバイス番号が０のエントリにマッチしたパケットは、ネットワークプロセッサの受信側セッション管理部3-4及び汎用プロセッサ選択部3-6の処理によって転送先の汎用プロセッサが決定される。
【００５４】
【実施例の動作の説明】
次に本実施例の動作について詳細に説明する。以下の説明では、次のことを仮定する。
【００５５】
図７のフローチャートの中のハッシュ関数は、引数A1、A2、A3、A4の和の下位８ビットを返すものとする。セッション管理テーブル3-5のエントリ番号は12ビット幅とし、図５、図６のフローチャートにおいて、エントリ番号の上位８ビットにセッション番号を設定し、下位４ビットに送信側デバイス番号または受信側デバイス番号を設定するものとする。ネットワークプロセッサNP4、NP5、NP6の受信側パケット処理部3-2は、ここで説明する全ての受信パケットについて、汎用プロセッサによる処理が必要であると判定し、全てのパケットを受信側セッション管理部3-4へ引き渡すものとする。
【００５６】
・セッションS1順方向
図１２は、図１のネットワークにおいて、ホストH41とホストH51の間で確立されたTCPセッションS1（セッションS1）、及び、ホストH42とホストH61の間で確立されたTCPセッションS2（セッションS2）を示す。
【００５７】
最初に、セッションS1について、動作を説明する。セッションS1では、要求元ホストH41、要求先ホストH51の間で、要求元IPアドレス192.41.1.1、要求元ポート5632、要求先IPアドレス192.51.1.1、要求先ポート25を用いてTCPによるデータ転送が行なわれるものとする。
【００５８】
最初に、ホストH41は、ホストH51へ向けて、送信元IPアドレス192.41.1.1、宛先IPアドレス192.51.1.1、送信元ポート5632、宛先ポート25を持つIPパケットを送信する。このパケットは、ネットワークN1を経由してデータ転送装置１のネットワークプロセッサNP4へ配送される。
【００５９】
ネットワークプロセッサNP4の回線インタフェース処理部3-1は、物理回線インタフェースIF41からこのパケットを受信し、このパケットと受信回線番号41を受信側パケット処理部3-2へ引き渡す。
【００６０】
受信側パケット処理部3-2は、図４のフローチャートに示すように、パケットと受信回線番号41を引き取ると、各種パケット処理を行う（Ａ１、Ａ２）。その後、受信側パケット処理部3-2は、ルーティングテーブル3-3（図１１参照）から、パケットの宛先IPアドレス192.51.1.1に対応する送信側デバイス番号５と送信回線番号51を取得する（Ａ３）。受信側パケット処理部3-2は、ステップＡ３で取得したのが送信側デバイス番号５であることから、引き取ったパケットを特定のネットワークプロセッサNP5に引き渡す必要があると判定する（Ａ４）。更に、ステップＡ５においては、パケットヘッダ部のオプションフィールドの内容に基づいて、汎用プロセッサによる処理が必要であるか否かを判断する。この例の場合、上述の仮定から汎用プロセッサによる処理が必要であると判定し、このパケットと受信回線番号41、送信側デバイス番号５を受信側セッション管理部3-4へ引き渡す（Ａ５、Ａ８）。なお、汎用プロセッサによる処理が不要であると判定した場合は、ステップＡ６、Ａ７の処理を行なう。
【００６１】
受信側セッション管理部3-4は、このパケットの送信元IPアドレス192.41.1.1、宛先IPアドレス192.51.1.1、送信元ポート5632、宛先ポート25から図７のフローチャートに従いセッション番号を計算する（図５のＢ１、Ｂ２）。上述の仮定により、ハッシュ関数が各引数の和の下位８ビットを返すものとすると、セッション番号0x1Bが計算から得られる。更に、上述の仮定により、セッション管理テーブル3-5のエントリ番号の上位８ビットをセッション番号、下位４ビットを送信側デバイス番号とすると、エントリ番号0x1B5が得られる（Ｂ３）。ここで、図７のフローチャートについて説明しておく。先ず、引数A1〜A4を次のように決定する（Ｄ１）。引数A1を送信元IPアドレス、宛先IPアドレスの内の小さい方とし、引数A2を送信元IPアドレス、宛先IPアドレスの内の大きい方とする。また、引数A3,A4を０とする。その後、パケット種別を判定し（Ｄ２、Ｄ３、…）、パケット種別に応じた引数A3、A4を決定する（Ｄ４、Ｄ５、…）。この例の場合、パケット種別はTCPであるので、ステップＤ４の処理が行われ、送信元ポート、宛先ポートの内の小さい方が引数A3とされ、大きい方が引数A4とされる。そして、最後に、ハッシュ関数と引数A1〜A4とを用いてセッション番号を計算する（Ｄ６）。
【００６２】
再び図５に戻り、受信側セッション管理部3-4は、エントリ番号0x1B5を求めると、セッション管理エントリへのアクセス権を獲得した後、セッション管理テーブル3-5の0x1B5のエントリからエージカウンタを読み出す（Ｂ４、Ｂ５）。エージカウンタは初期値０であることから、本エントリは無効である（Ｂ６）。そこで、汎用プロセッサ選択部3-6を利用して転送先となる汎用プロセッサのデバイス番号を取得する。ここでは、デバイス番号１、即ち汎用プロセッサCPU1が選択されるものとする。次に、このデバイス番号１をセッション管理テーブル3-5の0x1B5番目のエントリに書き込み、同時に、エージカウンタを最大値に設定し、このエントリを有効にする（Ｂ７、Ｂ９）。エージカウンタの値は、エージング部3-10によって、一定時間ごとに1ずつ減少される。
【００６３】
その後、受信側セッション管理部3-4は、セッション管理エントリへのアクセス権を返却し、最後に、このパケットと受信回線番号41、転送先デバイス番号１を装置内インタフェース処理部3-7へ引き渡す（Ｂ10、Ｂ11）。
【００６４】
装置内インタフェース処理部3-7は、パケットと受信回線番号41、受信側デバイス番号としてこのネットワークプロセッサNP4のデバイス番号４を、装置内インタフェースを介して、転送先デバイスである汎用プロセッサCPU1の装置内インタフェース処理部2-4へ引き渡す（図８のＥ１〜Ｅ３、Ｅ５）。なお、この例では、転送先デバイス番号１が汎用プロセッサを示すものであるので、ステップＥ５の処理が行なわれるが、もし、転送先デバイス番号が自ネットワークプロセッサNP4を示すものである場合には、ステップＥ４の処理を行い、他のネットワークプロセッサを示すものである場合は、ステップＥ６、Ｅ７の処理を行なう。ステップＥ４では、送信側パケット処理部3-9へパケットと送信回線番号を引き渡す処理を行なう。ステップＥ６では、受信側デバイス番号を転送元デバイス番号とする処理を行い、次のステップＥ７では、転送先デバイス番号で示されるネットワークプロセッサの装置内インタフェース部3-7へ、パケット、送信回線番号、転送元デバイス番号、受信側デバイス番号を引き渡す処理を行なう。
【００６５】
汎用プロセッサCPU1の装置内インタフェース処理部2-4は、引き取ったパケットと受信側デバイス番号４、受信回線番号41をプロトコル処理部2-2で規定されるデータ構造へ格納し、プロトコル処理部2-2へ引き渡す。
【００６６】
プロトコル処理部2-2は、このパケットに対し各種処理を行ない、ルーティングテーブル2-3より宛先IPアドレス192.51.1.1に対応する送信回線IF51の識別子51及びデバイス番号５を取得し、これらの情報を装置内インタフェース処理部2-4へ引き渡す。
【００６７】
装置内インタフェース処理部2-4は、プロトコル処理部2-2から渡されたデータ構造から、受信側デバイス番号４、送信回線番号51を取得し、自汎用プロセッサCPU１のデバイス番号1を転送元デバイス番号とし、これらの情報とともにパケットをネットワークプロセッサNP5の装置内インタフェース処理部3-7へ引き渡す。
【００６８】
ネットワークプロセッサNP5の装置内インタフェース処理部3-7は、図９のフローチャートに示すように、引き取ったパケットと送信回線番号51、受信側デバイス番号４、転送元デバイス番号1を送信側セッション管理部3-8へ引き渡す（Ｆ１〜Ｆ４）。即ち、転送元デバイス番号１が汎用プロセッサCPU１に対応し（Ｆ２）、受信側デバイス番号４が０でないので（Ｆ３）、装置内インタフェース処理部3-7は、ステップＦ４の処理を行うことになる。
【００６９】
送信側セッション管理部3-8は、図６のフローチャートに示すように、装置内インタフェース処理部3-7からパケット、受信側デバイス番号４及び転送元デバイス番号１を引き取ると、図７のフローチャートに従い、パケットの送信元IPアドレス192.41.1.1、宛先IPアドレス192.51.1.1、送信元ポート5632、宛先ポート25からセッション番号0x1Bを求める（Ｃ１、Ｃ２）。次に、セッション管理テーブル3-5のエントリ番号の上位８ビットをセッション番号、下位４ビットを受信側デバイス番号とし、エントリ番号0x1B4を求める（Ｃ３）。
【００７０】
次に、送信側セッション管理部3-8は、セッション管理エントリへのアクセス権を取得し、装置内インタフェース処理部3-7から引き取った転送元デバイス番号１を、セッション管理テーブル3-5の0x1B4番目のエントリの転送先デバイス番号へ書き込む（Ｃ４、Ｃ５）。同時に、同エントリのエージカウンタに最大値を設定し、このエントリを有効にする（Ｃ６）。
【００７１】
その後、送信側セッション管理部3-8は、セッション管理エントリへのアクセス権を返却し、最後に、パケットと送信回線番号51を送信側パケット処理部3-9へ引き渡す（Ｃ７、Ｃ８）。
【００７２】
送信側パケット処理部3-9は、パケット転送に関する処理を行なった後、回線インタフェース処理部3-1へパケットと送信回線番号51を引き渡す。回線インタフェース処理部3-1は、このパケットを物理回線インタフェースIF51へ送信する。物理回線インタフェースIF51から送信されたパケットは、ネットワークN3を経由して、ホストH51へ配送される。
【００７３】
・セッションS1逆方向
次に、ホストH51は、ホストH41へ向けて、送信元IPアドレス192.51.1.1、宛先IPアドレス192.41.1.1、送信元ポート25、宛先ポート5632を持つIPパケットを送信する。このパケットは、ネットワークN3を経由してデータ転送装置１のネットワークプロセッサNP5へ配送される。
【００７４】
ネットワークプロセッサNP5の回線インタフェース処理部3-1は、物理回線インタフェースIF51からこのパケットを受信し、このパケットと受信回線番号51を受信側パケット処理部3-2へ引き渡す。
【００７５】
受信側パケット処理部3-2は、ルーティングテーブル3-3（図１１参照）から、パケットの宛先IPアドレス192.41.1.1に対応する送信側デバイス番号４と送信回線番号41を取得する（図４のＡ１〜Ａ３）。受信側パケット処理部3-2は、このパケットは特定のネットワークプロセッサNP4に引き渡すことが必要であり、且つ汎用プロセッサによる処理が必要であると判定し（Ａ４、Ａ５）、このパケットと受信回線番号51、送信側デバイス番号４を受信側セッション管理部3-4へ引き渡す（Ａ８）。
【００７６】
受信側セッション管理部3-4は、このパケットの送信元IPアドレス192.51.1.1、宛先IPアドレス192.41.1.1、送信元ポート25、宛先ポート5632から図７のフローチャートに従いセッション番号0x1Bを求める（図５のＢ１、Ｂ２）。このセッション番号0x1Bは、前述したセッションS1順方向時に求めたセッション番号と同一値となる。即ち、図７のステップＤ１において、送信元IPアドレス、宛先IPアドレスの内の小さい方、大きい方をそれぞれ引数A1、A2とし、ステップＤ４において送信元ポート、宛先ポートの内の小さい方、大きい方をそれぞれ引数A3、A4としているので、セッションS1順方向時とでは送信元、宛先が入れ代わったセッションS1逆方向時においても、同一のセッション番号0x1Bが得られる。その後、セッション管理テーブル3-5のエントリ番号の上位8ビットをセッション番号、下位4ビットを送信側デバイス番号とし、エントリ番号0x1B4が得られる（Ｂ３）。
【００７７】
次に、受信側セッション管理部3-4は、セッション管理テーブル3-5の0x1B4番目のエントリを読み出す（Ｂ４、Ｂ５）。先にホストH41からホストH51へ転送されたパケットにより、このエントリには転送先デバイス番号１が書き込まれており、エージカウンタには０以外の値が格納されているため、この転送先デバイス番号１を使用する（Ｂ６、Ｂ８）。
【００７８】
その後、受信側セッション管理部3-4は、エージカウンタに最大値を設定し、セッション管理エントリへのアクセス権を返却する（Ｂ９、Ｂ10）。そして、最後に受信側セッション管理部3-4は、このパケットと受信回線番号51、転送先デバイス番号１を装置内インタフェース処理部3-7へ引き渡す（Ｂ11）。
【００７９】
装置内インタフェース処理部3-7は、パケットと受信回線番号51、受信側デバイス番号としてこのネットワークプロセッサNP5のデバイス番号５を、装置内インタフェースを介して、転送先デバイスである汎用プロセッサCPU1の装置内インタフェース処理部2-4へ引き渡す（図８、Ｅ１〜Ｅ３、Ｅ５）。
【００８０】
汎用プロセッサCPU1の装置内インタフェース処理部2-4は、引き取ったパケットと受信側デバイス番号５、受信回線番号51をプロトコル処理部2-2で規定されるデータ構造へ格納し、プロトコル処理部2-2へ引き渡す。
【００８１】
プロトコル処理部2-2は、このパケットに対し各種処理を行ない、ルーティングテーブル2-3より宛先IPアドレス192.41.1.1に対応する送信回線IF41の識別子41及びデバイス番号４を取得し、これらの情報を装置内インタフェース処理部2-4へ引き渡す。
【００８２】
装置内インタフェース処理部2-4は、プロトコル処理部2-2から渡されたデータ構造から、受信側デバイス番号５、送信回線番号41を取得し、自汎用プロセッサCPU１のデバイス番号１を転送元デバイス番号とし、これらの情報とともにパケットをネットワークプロセッサNP4の装置内インタフェース処理部3-7へ引き渡す。
【００８３】
ネットワークプロセッサNP4の装置内インタフェース処理部3-7は、図９のフローチャートに示すように、引き取ったパケットと送信回線番号41、受信側デバイス番号５、転送元デバイス番号１を送信側セッション管理部3-8へ引き渡す（Ｆ１〜Ｆ４）。
【００８４】
送信側セッション管理部3-8は、図６のフローチャートに示すように、パケットの送信元IPアドレス192.51.1.1、宛先IPアドレス192.41.1.1、送信元ポート25、宛先ポート5632からセッション番号0x1Bを求める（Ｃ1、Ｃ２）。次に、セッション管理テーブル3-5のエントリ番号の上位８ビットをセッション番号、下位４ビットを受信側デバイス番号とし、エントリ番号0x1B5を求める（Ｃ３）。
【００８５】
次に、送信側セッション管理部3-8は、装置内インタフェース処理部3-7から引き取った転送元デバイス番号１を、セッション管理テーブル3-5の0x1B5番目のエントリの転送先デバイス番号へ書き込み（Ｃ４、Ｃ５）、同時に、同エントリのエージカウンタに最大値を設定する（Ｃ６）。そして、最後に、パケットと送信回線番号41を送信側パケット処理部3-9へ引き渡す（Ｃ７、Ｃ８）。
【００８６】
送信側パケット処理部3-9は、パケット転送に関する処理を行なった後、回線インタフェース処理部3-1へパケットと送信回線番号41を引き渡す。回線インタフェース処理部3-1は、このパケットを物理回線インタフェースIF41へ送信する。物理回線インタフェースIF41から送信されたパケットは、ネットワークN1を経由して、ホストH41へ配送される。
【００８７】
この時点で、ネットワークプロセッサNP4のセッション管理テーブルの0x1B5番目のエントリと、ネットワークプロセッサNP5のセッション管理テーブルの0x1B4番目のエントリには、共に、転送先デバイス番号１が書き込まれている。これらのエントリが有効の間(即ちエージカウンタが０以外の間)、ホストH41とホストH51の間で転送されるセッションS1に属するパケットは全て、汎用プロセッサCPU1を経由する。なお、本セッションのパケットの転送が一定時間停止すると、エージング部3-10によってセッション管理テーブル3-5のエージングカウンタが０にされ、エントリが無効になる。この場合、再び同一セッションのパケットが転送されても、受信側セッション管理部3-4によって新たに転送先の汎用プロセッサが選択される。
【００８８】
次に、セッションS2について、本発明の動作を説明する。
【００８９】
・セッションS2順方向
セッションS2では、要求元ホストH42と要求先ホストH61の間で、要求元IPアドレス192.42.1.1、要求元ポート1753、要求先IPアドレス192.61.1.1、要求先ポート110を用いてTCPによるデータ転送が行なわれるものとする。
【００９０】
最初に、ホストH42は、ホストH61へ向けて、送信元IPアドレス192.42.1.1、宛先IPアドレス192.61.1.1、送信元ポート1753、宛先ポート110を持つIPパケットを送信する。このパケットは、ネットワークN2を経由してデータ転送装置１のネットワークプロセッサNP4へ配送される。
【００９１】
ネットワークプロセッサNP4の回線インタフェース処理部3-1は、物理回線インタフェースIF42からこのパケットを受信し、このパケットと受信回線番号42を受信側パケット処理部3-2へ引き渡す。
【００９２】
受信側パケット処理部3-2は、図４のフローチャートに示すように、ルーティングテーブル3-3（図１１参照）から、パケットの宛先IPアドレス192.61.1.1に対応する送信側デバイス番号６と送信回線番号61を取得する。（Ａ１〜Ａ３）。受信側パケット処理部3-2は、このパケットは特定のネットワークプロセッサNP6に引き渡すことが必要であり、且つ汎用プロセッサによる処理が必要であると判定し（Ａ４、Ａ５）、このパケットと受信回線番号42、送信側デバイス番号６を受信側セッション管理部3-4へ引き渡す（Ａ８）。
【００９３】
受信側セッション管理部3-4は、図５のフローチャートに示すように、このパケットの送信元IPアドレス192.42.1.1、宛先IPアドレス192.61.1.1、送信元ポート1753、宛先ポート110からセッション番号0x49を求める（Ｂ１、Ｂ２）。次に、セッション管理テーブル3-5のエントリ番号の上位８ビットをセッション番号、下位４ビットを送信側デバイス番号とし、エントリ番号0x496を求める（Ｂ３）。
【００９４】
次に、受信側セッション管理部3-4は、セッション管理テーブル3-5の0x496番目のエントリを読み出す（Ｂ４、Ｂ５）。エージカウンタは初期値０であることから、本エントリは無効である（Ｂ６）。そこで、汎用プロセッサ選択部3-6から転送先となる汎用プロセッサのデバイス番号を取得する。ここでは、デバイス番号３、即ち汎用プロセッサCPU3が選択されるものとする。次に、このデバイス番号３をセッション管理テーブル3-6の0x496番目のエントリに書き込み、同時に、エージカウンタを最大値に設定し、このエントリを有効にする（Ｂ７、Ｂ９）。その後、受信側セッション管理部3-4は、セッション管理エントリへのアクセス権を返却し、最後に、このパケットと受信回線番号42、転送先デバイス番号3を装置内インタフェース処理部3-7へ引き渡す（Ｂ10、Ｂ11）。
【００９５】
装置内インタフェース処理部3-7は、図８のフローチャートに示すように、パケットと受信回線番号42、受信側デバイス番号として自ネットワークプロセッサNP4のデバイス番号４を、装置内インタフェースを介して、転送先デバイスである汎用プロセッサCPU3の装置内インタフェース処理部2-4へ引き渡す（Ｅ１〜Ｅ３、Ｅ５）。
【００９６】
汎用プロセッサCPU3の装置内インタフェース処理部2-4は、引き取ったパケットと受信側デバイス番号４、受信回線番号42をプロトコル処理部2-2で規定されるデータ構造へ格納し、プロトコル処理部2-2へ引き渡す。
【００９７】
プロトコル処理部2-2は、このパケットに対し各種処理を行ない、ルーティングテーブル2-3より宛先IPアドレス192.61.1.1に対応する送信回線IF61の識別子61及びデバイス番号６を取得し、これらの情報を装置内インタフェース処理部2-4へ引き渡す。
【００９８】
装置内インタフェース処理部2-4は、プロトコル処理部2-2から渡されたデータ構造から、受信側デバイス番号４、送信回線番号61を取得し、自汎用プロセッサCPU3のデバイス番号３を転送元デバイス番号とし、これらの情報とともにパケットをネットワークプロセッサNP6の装置内インタフェース処理部3-7へ引き渡す。
【００９９】
ネットワークプロセッサNP6の装置内インタフェース処理部3-7は、図９のフローチャートに示すように、引き取ったパケットと送信回線番号61、受信側デバイス番号４、転送元デバイス番号３を送信側セッション管理部3-8へ引き渡す（Ｆ１〜Ｆ４）。
【０１００】
送信側セッション管理部3-8は、図６のフローチャートに示すように、図７のフローチャートに従い、パケットの送信元IPアドレス192.42.1.1、宛先IPアドレス192.61.1.1、送信元ポート1753、宛先ポート110からセッション番号0x49を求める（Ｃ１、Ｃ２）。次に、セッション管理テーブル3-5のエントリ番号の上位８ビットをセッション番号、下位４ビットを受信側デバイス番号とし、エントリ番号0x494を求める（Ｃ３）。
【０１０１】
次に、送信側セッション管理部3-8は、装置内インタフェース処理部3-7から引き取った転送元デバイス番号３を、セッション管理テーブル3-5の0x494番目のエントリの転送先デバイス番号へ書き込む（Ｃ４、Ｃ５）。同時に、同エントリのエージカウンタに最大値を設定し、このエントリを有効にする（Ｃ６）。そして、最後に、パケットと送信回線番号61を送信側パケット処理部3-9へ引き渡す（Ｃ７、Ｃ８）。
【０１０２】
送信側パケット処理部3-9は、パケット転送に関する処理を行なった後、回線インタフェース処理部3-1へパケットと送信回線番号61を引き渡す。回線インタフェース処理部3-1は、このパケットを物理回線インタフェースIF61へ送信する。物理回線インタフェースIF61から送信されたパケットは、ネットワークN5を経由して、ホストH61へ配送される。
【０１０３】
・セッションS2逆方向
次に、ホストH61は、ホストH42へ向けて、送信元IPアドレス192.61.1.1、宛先IPアドレス192.42.1.1、送信元ポート110、宛先ポート1753を持つIPパケットを送信する。このパケットは、ネットワークN5を経由してデータ転送装置１のネットワークプロセッサNP6へ配送される。
【０１０４】
ネットワークプロセッサNP6の回線インタフェース処理部3-1は、物理回線インタフェースIF61からこのパケットを受信し、このパケットと受信回線番号61を受信側パケット処理部3-2へ引き渡す。
【０１０５】
受信側パケット処理部3-2は、図４のフローチャートに示すように、ルーティングテーブル3-3（図１１参照）から、パケットの宛先IPアドレス192.42.1.1に対応する送信側デバイス番号４と送信回線番号42を取得する（Ａ１〜Ａ３）。受信側パケット処理部3-2は、このパケットは特定のネットワークプロセッサNP4に受け渡す必要があり、且つ汎用プロセッサによる処理が必要であると判定し（Ａ４、Ａ５）、このパケットと受信回線番号61、送信側デバイス番号４を受信側セッション管理部3-4へ引き渡す（Ａ８）。
【０１０６】
受信側セッション管理部3-4は、図５のフローチャートに示すように、このパケットの送信元IPアドレス192.61.1.1、宛先IPアドレス192.42.1.1、送信元ポート110、宛先ポート1753から図７のフローチャートに従いセッション番号0x49を求める（Ｂ１、Ｂ２）。セッション管理テーブル3-5のエントリ番号の上位８ビットをセッション番号、下位４ビットを送信側デバイス番号とし、エントリ番号0x494が得られる（Ｂ３）。
【０１０７】
次に、受信側セッション管理部3-4は、セッション管理テーブル3-5の0x494番目のエントリを読み出す（Ｂ４、Ｂ５）。先にホストH42からホストH61へ転送されたパケットにより、このエントリには転送先デバイス番号３が書き込まれており、エージカウンタは０以外の値が格納されているため、この転送先デバイス番号３を取得する（Ｂ６、Ｂ８）。その後、セッション管理エントリへのアクセス権を返却し、最後に、このパケットと受信回線番号61、転送先デバイス番号３を装置内インタフェース処理部3-7へ引き渡す。
【０１０８】
装置内インタフェース処理部3-7は、パケットと受信回線番号61、受信側デバイス番号としてこのネットワークプロセッサNP6のデバイス番号６を、装置内インタフェースを介して、転送先デバイスである汎用プロセッサCPU3の装置内インタフェース処理部2-4へ引き渡す（図８のＥ１〜Ｅ３、Ｅ５）。
【０１０９】
汎用プロセッサCPU3の装置内インタフェース処理部2-4は、引き取ったパケットと受信側デバイス番号６、受信回線番号61をプロトコル処理部2-2で規定されるデータ構造へ格納し、プロトコル処理部2-2へ引き渡す。
【０１１０】
プロトコル処理部2-2は、このパケットに対し各種処理を行ない、ルーティングテーブル2-3より宛先IPアドレス192.42.1.1に対応する送信回線IF42の識別子42及びデバイス番号４を取得し、これらの情報を装置内インタフェース処理部2-4へ引き渡す。
【０１１１】
装置内インタフェース処理部2-4は、プロトコル処理部2-2から渡されたデータ構造から、受信側デバイス番号６、送信回線番号42を取得し、自汎用プロセッサCPU3のデバイス番号３を転送元デバイス番号とし、これらの情報とともにパケットをネットワークプロセッサNP4の装置内インタフェース処理部3-7へ引き渡す。
【０１１２】
ネットワークプロセッサNP4の装置内インタフェース処理部3-7は、引き取ったパケットと送信回線番号42、受信側デバイス番号６、転送元デバイス番号３を送信側セッション管理部3-8へ引き渡す（図９のＦ１〜Ｆ４）。
【０１１３】
送信側セッション管理部3-8は、図７のフローチャートに従い、パケットの送信元IPアドレス192.61.1.1、宛先IPアドレス192.42.1.1、送信元ポート110、宛先ポート1753からセッション番号0x49を求める（図６のＣ１、Ｃ２）。次に、セッション管理テーブル3-5のエントリ番号の上位８ビットをセッション番号、下位4ビットを受信側デバイス番号とし、エントリ番号0x496を求める（Ｃ３）。
【０１１４】
次に、送信側セッション管理部3-8は、装置内インタフェース処理部3-7から引き取った転送元デバイス番号３を、セッション管理テーブル3-5の0x496番目のエントリの転送先デバイス番号へ書き込み、同時に、同エントリのエージカウンタに最大値を設定する（Ｃ４〜Ｃ６）。そして、最後に、送信側セッション管理部3-8は、パケットと送信回線番号42を送信側パケット処理部3-9へ引き渡す（Ｃ７、Ｃ８）。
【０１１５】
送信側パケット処理部3-9は、パケット転送に関する処理を行なった後、回線インタフェース処理部3-1へパケットと送信回線番号42を引き渡す。回線インタフェース処理部3-1は、このパケットを物理回線インタフェースIF42へ送信する。物理回線インタフェースIF42から送信されたパケットは、ネットワークN2を経由して、ホストH42へ配送される。
【０１１６】
この時点で、ネットワークプロセッサNP4のセッション管理テーブル3-5の0x496番目のエントリと、ネットワークプロセッサNP6のセッション管理テーブル3-5の0x494番目のエントリには、共に、転送先デバイス番号３が書き込まれている。これらのエントリが有効の間(即ちエージカウンタが０以外の間)、ホストH42とホストH61の間で転送されるセッションS2に属するパケットは全て、汎用プロセッサCPU3を経由する。なお、本セッションのパケットの転送が一定時間停止すると、エージング部3-10によってセッション管理テーブルのエージングカウンタが０にされ、エントリが無効になる。この場合、再び同一セッションのパケットが転送されても、受信側セッション管理部3-4によって新たに転送先の汎用プロセッサが選択される。
【０１１７】
・セッションS3順方向
図１３は、図１のネットワークにおいて、ホストH52と汎用プロセッサCPU2の間で確立されたTCPセッションS3、及び、汎用プロセッサCPU2とホストH62の間で確立されたTCPセッションS4を示す。これらのセッションは、データ転送装置１をアプリケーションゲートウェイとして使用し、ホストH52とホストH62の間でデータ転送を行なった場合を想定している。
【０１１８】
最初に、セッションS3について、動作を説明する。
【０１１９】
セッションS3では、要求元ホストH52とデータ転送装置１の間で、要求元IPアドレス192.52.1.1、要求元ポート1959、要求先IPアドレス192.52.0.4、要求先ポート8080を用いてTCPによるデータ転送が行なわれるものとする。
【０１２０】
最初に、ホストH52は、データ転送装置１へ向けて、送信元IPアドレス192.52.1.1、宛先IPアドレス192.52.0.4、送信元ポート1959、宛先ポート8080を持つIPパケットを送信する。このパケットは、ネットワークN4を経由してデータ転送装置１のネットワークプロセッサNP5へ配送される。なお、上記宛先IPアドレス192.52.0.4は、セカンダリIPアドレスである。
【０１２１】
ネットワークプロセッサNP5の回線インタフェース処理部3-1は、物理回線インタフェースIF52からこのパケットを受信し、このパケットと受信回線番号52を受信側パケット処理部3-2へ引き渡す。
【０１２２】
受信側パケット処理部3-2は、図４のフローチャートに示すように、ルーティングテーブル3-3（図１１参照）から、パケットの宛先IPアドレス192.52.0.4に対応する送信側デバイス番号０を取得する（Ａ１〜Ａ３）。送信側デバイス番号０は、任意の汎用プロセッサ宛てのパケットであることをから、このパケットと、受信回線番号52及び送信側デバイス番号０とを受信側セッション管理部3-4へ引き渡す（Ａ４、Ａ８）。
【０１２３】
受信側セッション管理部3-4は、このパケットの送信元IPアドレス192.52.1.1、宛先IPアドレス192.52.0.4、送信元ポート1959、宛先ポート8080から図７のフローチャートに従いセッション番号0x3Cを求める（図５のＢ１、Ｂ２）。次に、セッション管理テーブル3-5のエントリ番号の上位８ビットをセッション番号、下位４ビットを送信側デバイス番号とし、エントリ番号0x3C0を求める（Ｂ２）。
【０１２４】
次に、受信側セッション管理部3-4は、セッション管理テーブル3-5の0x3C0番目のエントリを読み出す（Ｂ４、Ｂ５）。エージカウンタは初期値０であることから、本エントリは無効である。そこで、汎用プロセッサ選択部3-6から転送先となる汎用プロセッサのデバイス番号を取得する。ここでは、デバイス番号２、即ち汎用プロセッサCPU2が選択されるものとする。次に、このデバイス番号２をセッション管理テーブル3-6の0x3C0番目のエントリに書き込み、同時に、エージカウンタを最大値に設定し、このエントリを有効にする（Ｂ６〜Ｂ９）。そして、最後に、受信側セッション管理部3-4は、このパケットと受信回線番号52、転送先デバイス番号２を装置内インタフェース処理部3-7へ引き渡す（Ｂ10、Ｂ11）。
【０１２５】
装置内インタフェース処理部3-7は、図８のフローチャートに示すように、パケットと受信回線番号52、受信側デバイス番号としてこのネットワークプロセッサNP5のデバイス番号５を、装置内インタフェースを介して、転送先デバイスである汎用プロセッサCPU2の装置内インタフェース処理部2-4へ引き渡す（Ｅ１〜Ｅ３、Ｅ５）。
【０１２６】
汎用プロセッサCPU2の装置内インタフェース処理部2-4は、引き取ったパケットと受信側デバイス番号５、受信回線番号52をプロトコル処理部2-2で規定されるデータ構造へ格納し、プロトコル処理部2-2へ引き渡す。
【０１２７】
プロトコル処理部2-2は、このパケットの宛先IPアドレス192.52.0.4がこの汎用プロセッサCPU2に設定された物理回線インタフェースIF52のセカンダリIPアドレスに一致することから、TCPを終端し、宛先ポート番号8080に対応するアプリケーション処理部（例えば、アプリケーション処理部2-1-1）へデータを引き渡す。
【０１２８】
・セッションS3逆方向
次に、汎用プロセッサCPU2のアプリケーション処理部2-1-1は、セッションS1順方向で、ホストH52から送られてきたパケットに対する応答として、送信元IPアドレス192.52.0.4、宛先IPアドレス192.52.1.1、送信元ポート8080、宛先ポート1959を用いてホストH52へ向けてデータを送信する。
【０１２９】
プロトコル処理部2-2は、アプリケーション処理部2-1-1から受け渡されたデータから、送信元IPアドレス192.52.0.4、宛先IPアドレス192.52.1.1、送信元ポート8080、宛先ポート1959を持つTCP/IPパケットを生成する。
【０１３０】
プロトコル処理部2-2は、このパケットに対し各種処理を行ない、ルーティングテーブル2-3より宛先IPアドレス192.52.1.1に対応する送信回線IF52の識別子52及びデバイス番号５を取得し、これらの情報を装置内インタフェース処理部2-4へ引き渡す。
【０１３１】
装置内インタフェース処理部2-4は、プロトコル処理部2-2から渡されたデータ構造から、送信回線番号52を取得し、受信側デバイス番号を０とし、この汎用プロセッサCPU2のデバイス番号２を転送元デバイス番号とし、これらの情報とともにパケットをネットワークプロセッサNP5の装置内インタフェース処理部3-7へ引き渡す。
【０１３２】
ネットワークプロセッサNP5の装置内インタフェース処理部3-7は、受信側デバイス番号が０であることから、引き取ったパケットと送信回線番号52を送信側パケット処理部3-9へ引き渡す（図９のＦ１〜Ｆ３、Ｆ５）。
【０１３３】
送信側パケット処理部3-9は、パケット転送に関する処理を行なった後、回線インタフェース処理部3-1へパケットと送信回線番号52を引き渡す。回線インタフェース処理部3-1は、このパケットを物理回線インタフェースIF52へ送信する。物理回線インタフェースIF52から送信されたパケットは、ネットワークN4を経由して、ホストH52へ配送される。
【０１３４】
この時点で、ネットワークプロセッサNP5のセッション管理テーブル3-5の0x3C0番目のエントリには、転送先デバイス番号２が書き込まれている。このエントリが有効の間(即ちエージカウンタが０以外の間)、ホストH52から送信されるセッションS3に属するパケットは全て、汎用プロセッサCPU2へ配送される。
【０１３５】
・セッションS4順方向
次に、セッションS4について、動作を説明する。
【０１３６】
汎用プロセッサCPU2のアプリケーション処理部（例えば、アプリケーション処理部2-1-1）は、送信元IPアドレス192.62.0.2、宛先IPアドレス192.62.1.1、送信元ポート6709、宛先ポート80を用いてホストH62へ向けてデータを送信する。ここで、送信元IPアドレス192.62.0.2は、この汎用プロセッサCPU2において物理回線インタフェースIF62に設定されたプライマリIPアドレスである。
【０１３７】
プロトコル処理部2-2は、アプリケーション処理部2-1-1から受け渡されたデータから、送信元IPアドレス192.62.0.2、宛先IPアドレス192.62.1.1、送信元ポート6709、宛先ポート80を持つTCP/IPパケットを生成する。
【０１３８】
プロトコル処理部2-2は、このパケットに対し各種処理を行ない、ルーティングテーブル2-3より宛先IPアドレス192.62.1.1に対応する送信回線IF62の識別子62及びデバイス番号６を取得し、これらの情報を装置内インタフェース処理部2-4へ引き渡す。
【０１３９】
装置内インタフェース処理部2-4は、プロトコル処理部2-2から渡されたデータ構造から、送信回線番号62を取得し、受信側デバイス番号を０とし、この汎用プロセッサCPU2のデバイス番号２を転送元デバイス番号とし、これらの情報とともにパケットをネットワークプロセッサNP6の装置内インタフェース処理部3-7へ引き渡す。
【０１４０】
ネットワークプロセッサNP6の装置内インタフェース処理部3-7は、受信側デバイス番号が０であることから、引き取ったパケットと送信回線番号62を送信側パケット処理部3-9へ引き渡す（図９のＦ１〜Ｆ３、Ｆ５）。
【０１４１】
送信側パケット処理部3-9は、パケット転送に関する処理を行なった後、回線インタフェース処理部3-1へパケットと送信回線番号62を引き渡す。回線インタフェース処理部3-1は、このパケットを物理回線インタフェースIF62へ送信する。物理回線インタフェースIF62から送信されたパケットは、ネットワークN6を経由して、ホストH62へ配送される。
【０１４２】
・セッションS4逆方向
次に、ホストH62は、セッションS4順方向で、データ転送装置１から送られてきたパケットに対する応答として、データ転送装置１へ向けて、送信元IPアドレス192.62.1.1、宛先IPアドレス192.62.0.2、送信元ポート80、宛先ポート6709を持つIPパケットを送信する。このパケットは、ネットワークN6を経由してデータ転送装置１のネットワークプロセッサNP6へ配送される。
【０１４３】
ネットワークプロセッサNP6の回線インタフェース処理部3-1は、物理回線インタフェースIF62からこのパケットを受信し、このパケットと受信回線番号62を受信側パケット処理部3-2へ引き渡す。
【０１４４】
受信側パケット処理部3-2は、ルーティングテーブル3-3（図１１参照）から、パケットの宛先IPアドレス192.62.0.2に対応する送信側デバイス番号２を取得する（図４のＡ１〜Ａ３）。これは、特定の汎用プロセッサCPU2へ転送するパケットであることから、転送先デバイス番号に送信側デバイス番号２を設定し、パケットと受信回線番号62、転送先デバイス番号２を装置内インタフェース処理部3-7へ引き渡す（Ａ４、Ａ６、Ａ７）。
【０１４５】
装置内インタフェース処理部3-7は、パケットと受信回線番号62、受信側デバイス番号として自ネットワークプロセッサNP6のデバイス番号６を、装置内インタフェースを介して、転送先デバイスである汎用プロセッサCPU2の装置内インタフェース処理部2-4へ引き渡す（図８、Ｅ１〜Ｅ３、Ｅ５）。
【０１４６】
汎用プロセッサCPU2の装置内インタフェース処理部2-4は、引き取ったパケットと受信側デバイス番号６、受信回線番号62をプロトコル処理部2-2で規定されるデータ構造へ格納し、プロトコル処理部2-2へ引き渡す。
【０１４７】
プロトコル処理部2-2は、このパケットの宛先IPアドレス192.62.0.2がこの汎用プロセッサCPU2に設定された物理回線インタフェースIF62のプライマリIPアドレスに一致することから、TCPを終端し、宛先ポート番号6709対応するアプリケーション処理部へデータを引き渡す。
【０１４８】
セッションS4では、セッション管理テーブル3-5を使用しないが、IPアドレスが特定の汎用プロセッサCPU2を示すことから、ホストH62から送信される本セッションに属するパケットは全て、汎用プロセッサCPU2へ配送される。
【０１４９】
以上で説明したセッションS1、S2、S3、S4が全てが使用されているとき、ネットワークプロセッサNP4、NP5、NP6におけるセッション管理テーブル3-3の内容を図１４に示す。但し、エージカウンタの値は常時変動するため、この限りではない。
【０１５０】
なお、上述した実施例においては、セッションを特定するセッション特定情報として、パケットの送信元IPアドレス、宛先IPアドレス、送信元ポート、宛先ポートとハッシュ関数とから求まるセッション番号（ハッシュ値）に、上記パケットの送信側あるいは受信側ネットワークプロセッサのデバイス番号を付加することにより得られるエントリ番号を使用するようにしたが、これに限られるものではない。
【０１５１】
また、上述した実施例では、ネットワークプロセッサの台数を複数台としたが、１台であっても良い。なお、ネットワークプロセッサの台数を１台とした場合には、受信側セッション管理部3-4が行なう処理、送信側セッション管理部3-8が行なう処理を次のように変更しても良い。
【０１５２】
（受信側セッション管理部3-4側の変更点）
・図５のステップＢ３において、ステップＢ２で計算したセッション番号をそのままエントリ番号とする。
【０１５３】
（送信側セッション管理部3-8側の変更点）
・図６のステップＣ３において、ステップＣ２で計算したセッション番号をそのままエントリ番号とする。
・図６のステップＣ５の処理を削除する。
【０１５４】
【発明の効果】
第１の効果は、同じセッションに属するパケットを同じ汎用プロセッサで処理させるので、パケットの追い越しを防止することが可能になるという点である。
【０１５５】
第２の効果は、セッション単位のフィルタリングにおいて、同じセッションに属するパケットを常に同じ汎用プロセッサで処理させるので、フィルタリングルールの動的な変更を行なうための状態管理を正しく機能させることが可能になるという点である。例えば、或るセッションに属する第１番目のパケット（開始フラグを含むパケット）が第１の汎用プロセッサに引き渡され、上記第１番目のパケットに対する応答パケットが第２の汎用プロセッサに引き渡され、第２の汎用プロセッサにおいて第２番目のパケットを破棄してしまうという事態の発生を防ぐことができる。
【０１５６】
第３の効果は、アプリケーションゲートウェイにおいて、本発明のデータ転送装置が終端する同じセッションに属するパケットを常に同じ汎用プロセッサで処理させるので、セッションを正しく機能させることが可能になるという点である。
【０１５７】
第４の効果は、パケットの送信元IPアドレス、宛先IPアドレス、送信元ポート、宛先ポートとハッシュ関数とから求まるセッション番号（ハッシュ値）に、上記パケットの送信側あるいは受信側ネットワークプロセッサの識別子を付加することにより得られるエントリ番号を、上記パケットが属するセッション用のセッション番号としているので、エントリ管理テーブルのエントリ数を少なくすることができ、且つ、異なるセッションに同一エントリ番号が付与される危険性を極めて少なくできるという点である。
【図面の簡単な説明】
【図１】本発明の実施例のブロック図である。
【図２】汎用プロセッサCPU1〜CPU3の構成例を示すブロック図である。
【図３】ネットワークプロセッサNP4〜NP6の構成例を示すブロック図である。
【図４】受信側パケット処理部3-2の処理例を示すフローチャートである。
【図５】受信側セッション管理部3-4の処理例を示すフローチャートである。
【図６】送信側セッション管理部3-8の処理例を示すフローチャートである。
【図７】セッション番号の計算方法の一例を示すフローチャートである。
【図８】受信側パケット処理部3-2、受信側セッション管理部3-4からパケットが渡されたときの装置内インタフェース処理部3-7の処理例を示すフローチャートである。
【図９】汎用プロセッサCPU1〜CPU3からパケットが渡されたときの装置内インタフェース処理部3-7の処理例を示すフローチャートである。
【図１０】汎用プロセッサCPU1〜CPU3におけるIPアドレスの設定内容の一例を示す図である。
【図１１】ネットワークプロセッサNP4〜NP6内のルーティングテーブル3-3の内容例を示す図である。
【図１２】動作を説明するために、セッションの具体例を挙げた図である。
【図１３】動作を説明するために、セッションの他の具体例を挙げた図である。
【図１４】ネットワークプロセッサNP4〜NP6内のセッション管理テーブル3-5の内容例を示す図である。
【符号の説明】
１…データ転送装置
CPU1〜CPU3…汎用プロセッサ
2-1-1〜2-1-3…アプリケーション処理部
2-2…プロトコル処理部
2-3…ルーティングテーブル
2-4…装置内インタフェース処理部
NP4〜NP6…ネットワークプロセッサ
3-1…回線インタフェース処理部
3-2…受信側パケット処理部
3-3…ルーティングテーブル
3-4…受信側セッション管理部
3-5…セッション管理テーブル
3-6…汎用プロセッサ選択部
3-7…装置内インタフェース処理部
3-8…送信側セッション管理部
3-9…送信側パケット処理部
N1〜N6…ネットワーク
H41〜H62…ホストコンピュータ
IF41〜IF62…物理回線インタフェース
【図１】
0004196732.tif 000002
【図２】
0004196732.tif 000003
【図３】
0004196732.tif 000004
【図４】
0004196732.tif 000005
【図５】
0004196732.tif 000006
【図６】
0004196732.tif 000007
【図７】
0004196732.tif 000008
【図８】
0004196732.tif 000009
【図９】
0004196732.tif 000010
【図１０】
0004196732.tif 000011
【図１１】
0004196732.tif 000012
【図１２】
0004196732.tif 000013
【図１３】
0004196732.tif 000014
【図１４】
0004196732.tif 000015