(57)【要約】【課題】ＣＰＵ負荷を軽減する。【解決手段】本実施形態に係る通信装置は、ネットワークを介して相手装置と通信する通信装置であって、外部のＣＰＵにより生成された、前記相手装置へ送信する送信フレーム、または前記相手装置から受信した受信フレームを解析するプロトコル解析部を備える。通信装置は、前記プロトコル解析部による解析の結果、前記送信フレームまたは前記受信フレームからコネクション確立要求が検出された場合、前記ＣＰＵと共有して使用するコネクション情報を格納するための記憶領域を、前記ＣＰＵによりアクセス可能な所定の記憶装置内に確保するコネクション情報管理部を備える。前記プロトコル解析部は、前記コネクション情報管理部により確保された記憶領域を示す情報を前記ＣＰＵに通知する。【選択図】図２
2015177263.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して相手装置と通信する通信装置であって、
外部のＣＰＵにより生成された、前記相手装置へ送信する送信フレーム、または前記相手装置から受信した受信フレームを解析するプロトコル解析部と、
前記プロトコル解析部による解析の結果、前記送信フレームまたは前記受信フレームからコネクション確立要求が検出された場合、前記ＣＰＵと共有して使用するコネクション情報を格納するための記憶領域を、前記ＣＰＵによりアクセス可能な所定の記憶装置内に確保するコネクション情報管理部と、
を備え、
前記プロトコル解析部は、前記コネクション情報管理部により確保された記憶領域を示す情報を前記ＣＰＵに通知する
通信装置。
【請求項２】
前記コネクション情報管理部は、コネクション情報を格納するための未使用状態の記憶領域を複数管理し、前記複数の未使用状態の記憶領域から、前記コネクション情報を格納するための記憶領域を決定する
請求項１に記載の通信装置。
【請求項３】
前記コネクション情報管理部は、前記未使用状態の記憶領域それぞれを識別する記憶領域識別情報を管理し、
前記プロトコル解析部は、前記決定した記憶領域を識別する記憶領域識別情報を、前記コネクション情報管理部により確保された記憶領域を示す情報として通知する
請求項２に記載の通信装置。
【請求項４】
前記記憶領域識別情報は、前記コネクション情報が格納される記憶領域の先頭アドレスである
請求項３に記載の通信装置。
【請求項５】
前記プロトコル解析部は、解析の結果、前記送信フレームまたは前記受信フレームからコネクション確立要求が検出された場合、前記送信フレームまたは前記受信フレームに含まれるヘッダ情報を、前記コネクション情報の一部として、前記コネクション情報管理部が確保した記憶領域に格納する
請求項１から４のいずれか一項に記載の通信装置。
【請求項６】
前記プロトコル解析部は、解析の結果、前記送信フレームからコネクション確立要求が検出された場合、前記送信フレームとともに前記ＣＰＵから取得した、受信データの書き込み先の領域を示す情報及び送信データの読み出し元の領域を示す情報を、前記コネクション情報の一部として、前記コネクション情報管理部が確保した記憶領域に格納する
請求項１から５のいずれか一項に記載の通信装置。
【請求項７】
所定のプロトコル処理を実行するＣＰＵと、
ネットワークを介して相手装置と通信する通信装置と、
を備える情報処理装置であって、
前記通信装置は、
前記ＣＰＵにより生成された、前記相手装置へ送信する送信フレーム、または前記相手装置から受信した受信フレームを解析するプロトコル解析部と、
前記プロトコル解析部による解析の結果、前記送信フレームまたは前記受信フレームからコネクション確立要求が検出された場合、前記ＣＰＵと共有して使用するコネクション情報を格納するための記憶領域を、前記ＣＰＵによりアクセス可能な所定の記憶装置内に確保するコネクション情報管理部と、
を備え、
前記プロトコル解析部は、前記コネクション情報管理部により確保された記憶領域を示す情報を前記ＣＰＵに通知する、
情報処理装置。
【請求項８】
前記ＣＰＵは、前記受信フレームから検出されたコネクション確立要求を受諾するか否か判定し、前記コネクション確立要求を受諾しないと判定した場合、前記コネクション情報管理部に対して、前記コネクション確立要求に対して確保された記憶領域の解放を要求し、
前記コネクション情報管理部は、前記ＣＰＵの要求に応じて、前記記憶領域を解放する
請求項７に記載の情報処理装置。
【請求項９】
ネットワークを介して相手装置と通信する通信装置が実行する通信方法であって、
プロトコル解析部が、外部のＣＰＵにより生成された、前記相手装置へ送信する送信フレーム、または前記相手装置から受信した受信フレームを解析するステップと、
コネクション情報管理部が、前記プロトコル解析部による解析の結果、前記送信フレームまたは前記受信フレームからコネクション確立要求が検出された場合、前記ＣＰＵと共有して使用するコネクション情報を格納するための記憶領域を、前記ＣＰＵによりアクセス可能な所定の記憶装置内に確保するステップと、
前記プロトコル解析部が、前記コネクション情報管理部により確保された記憶領域を示す情報を前記ＣＰＵに通知するステップと、
を有する通信方法。
【請求項１０】
ネットワークを介して相手装置と通信する通信装置に、
外部のＣＰＵにより生成された、前記相手装置へ送信する送信フレーム、または前記相手装置から受信した受信フレームを解析する第１のステップと、
前記第１のステップによる解析の結果、前記送信フレームまたは前記受信フレームからコネクション確立要求が検出された場合、前記ＣＰＵと共有して使用するコネクション情報を格納するための記憶領域を、前記ＣＰＵによりアクセス可能な所定の記憶装置内に確保する第２のステップと、
前記第２のステップにより確保された記憶領域を示す情報を前記ＣＰＵに通知する第３のステップと、
を実行させるための通信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、通信装置、情報処理装置、通信方法および通信プログラムに関する。
【背景技術】
【０００２】
近年、複数のホストで通信を行うプロトコルとしてＴＣＰ／ＩＰ(Transmission Control Protocol/Internet Protocol)が広く用いられている。ＴＣＰ／ＩＰの処理は受信時および送信時にプロトコルの規定に従い処理が行われるが、この処理は一般的にＣＰＵ上で動作するソフトウェアによって行われることが一般的である。
【０００３】
通信の際には、ＴＣＰのコネクション情報を格納するため、ＩＰアドレス、ポート番号、シーケンス番号、ウィンドウサイズなどを含む情報をメモリに格納する。このコネクション情報を格納するメモリの領域は有限のため、一度利用したコネクション情報の領域は再利用をする必要がある。この場合、コネクション確立の際には、未使用のメモリ領域からコネクション情報を記憶するメモリ領域を確保し、コネクション情報の初期化を行う必要がある。従来の通信装置ではこれらの処理をＣＰＵ（Central Processing Unit）で行っていた。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−６１２２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特にサーバなどの多数のコネクションを処理する場合、従来装置では、ＣＰＵで多数のコネクション確立処理を行うため、ＣＰＵ負荷が増大する問題があった。
【０００６】
本実施形態は、上記問題に鑑みてなされたものであり、ＣＰＵ負荷の軽減を可能とする通信装置、情報処理装置、通信方法および通信プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本実施形態に係る通信装置は、ネットワークを介して相手装置と通信する通信装置であって、外部のＣＰＵにより生成された、前記相手装置へ送信する送信フレーム、または前記相手装置から受信した受信フレームを解析するプロトコル解析部を備える。通信装置は、前記プロトコル解析部による解析の結果、前記送信フレームまたは前記受信フレームからコネクション確立要求が検出された場合、前記ＣＰＵと共有して使用するコネクション情報を格納するための記憶領域を、前記ＣＰＵによりアクセス可能な所定の記憶装置内に確保するコネクション情報管理部を備える。前記プロトコル解析部は、前記コネクション情報管理部により確保された記憶領域を示す情報を前記ＣＰＵに通知する。
【図面の簡単な説明】
【０００８】
【図１】本実施形態における情報処理装置１００の構成を示す概略ブロック図である。
【図２】本実施形態における通信部１とＣＰＵ２の機能構成を示す概略ブロック図である。
【図３】コネクション情報記憶部１２に記憶されるコネクション情報の一例である。
【図４】コネクション情報管理部１３で管理されている、未使用状態の記憶領域の先頭アドレスが格納されたキューの一例である。
【図５】第１のプロトコル処理部１１と第２のプロトコル処理部２１でフレームとそのフレームの付随情報を送受する方法を示す図である。
【図６】パッシブオープンとアクティブオープンの処理の流れを示すシーケンス図である。
【図７】本実施形態の同時オープンの処理の流れを示すシーケンス図である。
【図８】本実施形態におけるコネクション確立のパッシブオープンにおける処理の流れの一例を示すフローチャートである。
【図９】本実施形態におけるハッシュテーブルの一例である。
【図１０】本実施形態におけるコネクション確立のアクティブオープンにおける処理の流れの一例を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下、本発明の実施形態について説明する。
本実施形態では、ネットワークを介してデータを送る単位であるＰＤＵ（Protocol Data Unit）を、データリンク層ではフレーム、ネットワーク層ではパケット、トランスポート層ではセグメントまたはデータグラムと呼ぶ。また、ＴＣＰのＳＹＮフラグのビットが１であるセグメントをＳＹＮセグメント、ＳＹＮフラグとＡＣＫフラグが１のセグメントをＳＹＮ／ＡＣＫセグメント、ＡＣＫフラグが１のセグメントをＡＣＫセグメント、ＦＩＮフラグが１のセグメントをＦＩＮセグメント、ＦＩＮに対するＡＣＫセグメントをＦＩＮ／ＡＣＫセグメント、ＲＳＴフラグが１のセグメントをＲＳＴセグメントと呼んで説明を行う。
【００１０】
本実施形態に係る情報処理装置１００は、コネクションの確立を行ってから、ネットワーク２００を介して他の通信装置とデータ通信を行う。本実施形態に係る情報処理装置１００は、一例として、サーバである。以下、本実施形態に係る情報処理装置１００について図１を用いて説明する。図１は、本実施形態における情報処理装置１００の構成を示す概略ブロック図である。図１に示すように、情報処理装置１００は、通信部１、ＣＰＵ２、メモリ３、チップセット４、及びディスク５を備える。図１に示すように、各構成部品はバスで接続されている。
【００１１】
通信部１は、ＣＰＵ２と接続され、ネットワーク２００を介して他の通信装置（以下、相手装置という）とデータの送受信を行う。本実施形態では、通信部１は、一例として、ＰＣＩ（Peripheral Component Interconnect）  Ｅｘｐｒｅｓｓカードであり、情報処理装置１００と抜き差し可能に接続されている。ＰＣＩ  Ｅｘｐｒｅｓｓカード上に実装されたオフロードエンジンが、ＣＰＵ２に代わって通信のプロトコル処理を行うことにより、高速なＴＣＰ／ＩＰによる通信を実現する。ＰＣＩ  Ｅｘｐｒｅｓｓカードは情報処理装置１００のＰＣＩ  Ｅｘｐｒｅｓｓスロットに接続するためのコネクタを備えており、また、ネットワーク２００と通信するためのポートを備えている。更に、このＰＣＩ  Ｅｘｐｒｅｓｓカードは、一例として、ＦＰＧＡ（Field Programmable Gate Array）とメモリを搭載する。
【００１２】
なお、通信部１は、図１に示すようにＣＰＵ２と直接接続されているが、これに限らず、チップセット４と接続されていてもよい。具体的には、ＰＣＩ  Ｅｘｐｒｅｓｓバスは図１に示すようにＣＰＵ２に直接接続してもよいし、チップセット４を介して接続してもよい。
【００１３】
ディスク５には、チップセット４が接続されており、オペレーティングシステムや各種ライブラリ、その他のアプリケーションの実行ファイルが格納されている。ディスク５は一例としてハードディスクである。
メモリ３は、ＣＰＵ２が読み書き可能なメモリで、一例として、ランダムアクセスメモリである。
【００１４】
ＣＰＵ２は、通信部１、メモリ３、チップセット４と接続されている。ＣＰＵ２は、チップセット４を介してディスク５からディスク５の内容をメモリ３に読み出し、命令を実行することで第２のプロトコル処理部の機能を有する。
【００１５】
続いて、図２を用いて、通信部１とＣＰＵ２の構成について説明する。図２は、本実施形態における通信部１とＣＰＵ２の機能構成を示す概略ブロック図である。図２に示すように、通信部１は、第１のプロトコル処理部（プロトコル解析部）１１、コネクション情報記憶部１２、及びコネクション情報管理部１３を備える。本実施形態では一例として、第１のプロトコル処理部１１とコネクション情報管理部１３は、上述したＦＰＧＡで動作するようにプログラミングされている。コネクション情報記憶部１２はＰＣＩ  Ｅｘｐｒｅｓｓカード上のメモリによって実現される。ＦＰＧＡには図示しない機能として、サーバと接続するためのＰＣＩ  Ｅｘｐｒｅｓｓのコントローラや、ネットワーク２００と接続するためのＥｔｈｅｒｎｅｔ（登録商標）コントローラ、メモリを制御するメモリコントローラなど、必要な機能が実装されている。
【００１６】
第１のプロトコル処理部１１は、図１に示すようにネットワーク２００と接続され、コネクション情報管理部１３、コネクション情報記憶部１２と内部バスによって接続されている。
【００１７】
例えば、第１のプロトコル処理部１１は、受信したフレーム（以下、受信フレームという）を制御フレームとデータフレームに分別して処理する。第１のプロトコル処理部１１は、制御フレームと判断した場合、ＰＣＩ  Ｅｘｐｒｅｓｓバスによって接続された第２のプロトコル処理部２１にそのフレームを渡す。そして、第２のプロトコル処理部２１でフレームの処理を行う。一方、第１のプロトコル処理部１１は、データフレームと判断した場合、取得したデータをコネクション情報により指定されたメモリ領域に格納する。
【００１８】
また、第１のプロトコル処理部１１は、外部のＣＰＵにより生成された、相手装置へ送信する送信フレーム、または相手装置から受信した受信フレームを解析する。より詳細には、第１のプロトコル処理部１１は、送信フレームまたは受信フレームが所定のプロトコルの場合、送信フレームまたは受信フレームを解析する。本実施形態では一例として、所定のプロトコルとは、データリンク層がＥｔｈｅｒｎｅｔ（登録商標）で、且つネットワーク層がＩＰｖ４で、且つトランスポート層がＴＣＰである。なお、データリンク層は、ＩＥＥＥ８０２．１１の無線ＬＡＮ  ＭＡＣ層であってもよい。
【００１９】
また、第１のプロトコル処理部１１は、解析した結果、送信フレームまたは受信フレームからコネクション確立要求を検知した場合、コネクション情報管理部１３にＣＰＵ２と共有して使用するコネクション情報を格納するための記憶領域の確保を要求する。例えば、第１のプロトコル処理部１１は、ＴＣＰのＳＹＮフラグのみが１のフレームを受信した場合、コネクション情報管理部１３にコネクション情報を格納するための記憶領域の確保を要求する。その後、第１のプロトコル処理部１１は、その要求に応じてコネクション情報管理部１３により確保された記憶領域を示す情報をＣＰＵ２に通知する。具体的には例えば、第１のプロトコル処理部１１は、コネクション情報管理部１３が決定した記憶領域を識別する記憶領域識別情報を、コネクション情報管理部１３により確保された記憶領域を示す情報としてＣＰＵ２に通知する。
【００２０】
一方、第１のプロトコル処理部１１は、受信フレームを解析した結果、受信フレームからコネクション確立要求以外の要求を検知した場合、コネクション確立以外の処理を処理する第２のプロトコル処理部２１へ受信フレームを出力する。
【００２１】
第１のプロトコル処理部１１は、コネクション情報を格納するための記憶領域の確保後、送信フレームまたは受信フレームを解析し、送信フレームまたは受信フレームに含まれるヘッダ情報を、コネクション情報の一部として、コネクション情報管理部１３が確保した記憶領域に格納する。この格納を初期化という。初期化によって、コネクション情報に含まれる情報処理装置１００（以下、自装置ともいう）のＩＰアドレス、相手装置のＩＰアドレス、自装置のＴＣＰポート番号、相手装置のＴＣＰポート番号、コネクション状態などの値が格納される。例えば、第１のプロトコル処理部１１は、受信フレームを受信した場合に、この受信フレームに含まれるヘッダ情報に基づいて、コネクション情報を更新する。
【００２２】
また、第１のプロトコル処理部１１は、送信側の処理として第２のプロトコル処理部２１から送信を指示されたフレームにＥｔｈｅｒｎｅｔ（登録商標）ヘッダの生成を行って送信する。また、第１のプロトコル処理部１１は、コネクション情報により指定されたメモリ領域からデータを読み出し、ＴＣＰのセグメントを生成してＩＰｖ４、Ｅｔｈｅｒｎｅｔ（登録商標）のヘッダ生成を行い、ネットワーク２００に送信する。
【００２３】
また、第１のプロトコル処理部１１は、コネクション情報記憶部１２に記憶されたコネクション情報にアクセス可能である。また、第１のプロトコル処理部１１は、受信フレームとその付随情報を第２のプロトコル処理部２１へ渡すことが可能である。ここで、付随情報は、フレームに関連する情報であり、コネクション情報を格納するために確保された記憶領域のアドレス、及びコネクション情報の初期化で格納する情報を含む。これにより、コネクション情報の初期化で付随情報に含まれている情報を、コネクション情報に含ませることができる。
【００２４】
フレームを受信したときには、第１のプロトコル処理部１１は、付随情報に、コネクション情報を格納するための記憶領域を識別する記憶領域識別情報（本実施形態では、一例として記憶領域の先頭アドレス）を含ませる。これにより、第２のプロトコル処理部２１は、コネクション確立要求に応じて第１のプロトコル処理部１１が確保した記憶領域にアクセスすることができ、コネクション情報を読み書き可能になる。
【００２５】
コネクション情報管理部１３は、コネクション情報を格納するための未使用状態の記憶領域を複数管理する。具体的には、コネクション情報管理部１３は、未使用状態の記憶領域それぞれを識別する記憶領域識別情報を管理する。ここで、本実施形態では、記憶領域識別情報は、一例として、コネクション情報が格納される記憶領域の先頭アドレスである。そして、コネクション情報管理部１３は、複数の未使用状態の記憶領域から、コネクション情報を格納するための記憶領域を決定する。
【００２６】
ここで、コネクション情報は、相手装置との接続に関する情報である。相手装置とは複数のコネクション（接続）を張ることができるので、コネクション情報は、コネクション毎の情報である。コネクション情報には、自装置のＩＰアドレス、相手装置のＩＰアドレス、自装置のＴＣＰポート番号、相手装置のＴＣＰポート番号という四つの情報を含む。これらの四つの情報によって、コネクションを識別可能である。
【００２７】
コネクション情報管理部１３は、第１のプロトコル処理部１１による解析の結果、送信フレームまたは受信フレームからコネクション確立要求が検出された場合、ＣＰＵ２と共有して使用するコネクション情報を格納するための記憶領域を、ＣＰＵ２によりアクセス可能な所定の記憶装置内に確保する。ここで、本実施形態では、所定の記憶装置は、一例として、コネクション情報記憶部１２である。
【００２８】
例えば、コネクション情報管理部１３は、第１のプロトコル処理部１１の要求に応じて、コネクション情報を格納するための記憶領域を確保する。具体的には、コネクション情報管理部１３は、第１のプロトコル処理部１１からコネクション情報を格納するための記憶領域の確保要求があると、その要求に応じて現在未使用状態である記憶領域の先頭アドレスを取得し、それを第１のプロトコル処理部１１へ伝える。
【００２９】
一方、例えば第２のプロトコル処理部２１からコネクション解放要求として現在使用中であるコネクション情報の先頭アドレスが指示されると、コネクション情報管理部１３は、それを未使用状態として管理する。これにより、コネクション情報管理部１３は、後のコネクション情報を格納するための記憶領域の確保要求に対して、この未使用状態として管理した記憶領域の先頭アドレスを利用することができる。
【００３０】
コネクション情報記憶部１２は、第１のプロトコル処理部１１と第２のプロトコル処理部２１でプロトコル処理を行う際に共有するコネクション情報を記憶する。
【００３１】
ＣＰＵ２は、ディスク５の内容をメモリ３に読み出し、プログラムを実行することにより第２のプロトコル処理部２１として機能する。第２のプロトコル処理部２１はＰＣＩ  Ｅｘｐｒｅｓｓバスを介してコネクション情報管理部１３、コネクション情報記憶部１２、第１のプロトコル処理部１１にアクセスすることができる。
【００３２】
第２のプロトコル処理部２１は、第１のプロトコル処理部１１とは異なるハードウェアで構成され、送受信フレームのプロトコル処理を行う。例えば、第２のプロトコル処理部２１は、データリンク層のＭＡＣアドレスを得るために、最初にＡＲＰコマンドの送信フレームを第１のプロトコル処理部１１に渡し、相手装置に送るよう第１のプロトコル処理部１１に指示する。ここでＡＲＰコマンドは、相手装置のＩＰアドレスに対応するＭＡＣアドレスを取得するコマンドである。
【００３３】
第２のプロトコル処理部２１は、送信フレームがコネクション確立要求を行うものであった場合に、第１のプロトコル処理部１１に対して、送信フレームがコネクション確立要求であることを伝達する。第１のプロトコル処理部１１は、第２のプロトコル処理部２１からコネクション確立要求であることを伝達された場合、コネクション情報管理部１３にコネクション情報を格納するための記憶領域の確保を要求する。
【００３４】
また、第２のプロトコル処理部２１は、送信フレームがコネクション確立要求を行うものであった場合、前記送信フレームと関連付けてコネクション情報に格納すべき付随情報を生成する。第１のプロトコル処理部１１は、コネクション情報管理部１３が確保した記憶領域に、第２のプロトコル処理部２１が生成した付随情報に含まれる情報を格納する。
【００３５】
ここで、付随情報には、受信データの書き込み先の領域を示す情報及び送信データの読み出し元の領域を示す情報が含まれる。ここで、受信データの書き込み先の領域を示す情報は、例えば、受信データの書き込み領域のアドレスと受信データの書き込み領域の長さである。また、送信データの読み出し元の領域を示す情報は、送信データの読み出し領域のアドレスと送信データの読み出し領域の長さである。このように、第１のプロトコル処理部１１は、解析の結果、送信フレームからコネクション確立要求が検出された場合、送信フレームとともにＣＰＵ２から取得した、受信データの書き込み先の領域を示す情報及び送信データの読み出し元の領域を示す情報を、コネクション情報の一部として、コネクション情報管理部１３が確保した記憶領域に格納する。
なお、この付随情報は、送信フレームがコネクション確立要求であることを示してもよい。
【００３６】
第２のプロトコル処理部２１は、受信フレームから検出されたコネクション確立要求を受諾するか否か判定する。第２のプロトコル処理部２１は、コネクション確立要求を受諾しないと判定した場合、コネクション情報管理部１３に対して、コネクション確立要求に対して確保された記憶領域の解放を要求する。この要求に応じて、コネクション情報管理部１３は、ＣＰＵ２の要求に応じて、上記記憶領域を解放する。
【００３７】
一方、第２のプロトコル処理部２１は、コネクション確立要求が受諾すると判定した場合、コネクション確立応答セグメント（ＳＹＮ／ＡＣＫセグメント）を生成する。そして、第２のプロトコル処理部２１は、第１のプロトコル処理部１１にこのコネクション確立応答セグメントに応じたコネクション確立応答フレームの送信を指示する。
【００３８】
また、第２のプロトコル処理部２１は、コネクション情報記憶部１２に記憶されたコネクション情報にアクセス可能である。また、第２のプロトコル処理部２１は、送信フレームとその付随情報を第１のプロトコル処理部１１へ渡すことが可能である。
例えば、フレームを送信するときに、第２のプロトコル処理部２１は、受信データの書き込み領域と、送信データの書き込み領域を確保しておいて、この確保した受信データの書き込み領域のアドレス及び長さ、送信データの書き込み領域のアドレス及び長さを、送信フレームデスクリプタの「フレームの付随情報」に設定する。これにより、第１のプロトコル処理部１１は、コネクション情報を初期化するときに、コネクション情報内の該当する箇所に「フレームの付随情報」に含まれる情報を書きこむことができる。
【００３９】
このため、送信したＳＹＮセグメントに対する返事を第１のプロトコル処理部１１が受信する前に、コネクション情報に「受信データの書き込み領域のアドレス及び長さ、送信データの書き込み領域のアドレス及び長さ」を書きこむことができる。このようにすることで、この書き込みの前に、相手装置からＳＹＮ／ＡＣＫセグメントを受信することを回避することができるため、相手装置からＳＹＮ／ＡＣＫセグメントをいつ受信してもハッシュテーブル内でそのＳＹＮセグメントを送ったときのコネクションを探すことができる。
【００４０】
なお、本実施形態では一例として、第２のプロトコル処理部２１は、ＴＣＰという一つのプロトコルのコネクション情報を管理したが、これに限らず、ＴＣＰとＳＣＴＰなど二つ以上のプロトコルのコネクション情報を管理してもよい。
【００４１】
続いて、図３を用いて、コネクション情報記憶部１２に記憶されるコネクション情報について説明する。図３は、コネクション情報記憶部１２に記憶されるコネクション情報の一例である。コネクション情報記憶部１２に記憶されるコネクション情報はそれぞれ図３に示すような要素から成り立っている。各コネクション情報は、コネクションを決定するための自装置のＩＰアドレス、相手装置のＩＰアドレス、自装置のポート番号、相手装置のポート番号の他に、コネクション状態、前のコネクション情報へのポインタ（ＰＲＥＶ）と次のコネクション情報へのポインタ（ＮＥＸＴ）、ＲＣＶ．ＮＸＴ（次に受信が期待されるシーケンス番号）、ＲＣＶ．ＷＮＤ（受信ウィンドウサイズ）、ＳＮＤ．ＵＮＡ（まだ確認応答されていないシーケンス番号）、ＳＮＤ．ＮＸＴ（次に送信する時に使用するシーケンス番号）、ＳＮＤ．ＷＮＤ（送信ウィンドウサイズ）、ＳＮＤ．ＷＬ１（最後のウィンドウアップデートのシーケンス番号）、ＳＮＤ．ＷＬ２（最後のウィンドウアップデートの確認応答番号）、受信データの書き込み領域のアドレス、受信データの書き込み領域の長さ、送信データの読み出し領域のアドレス、送信データの読み出し領域の長さなどを有する。
【００４２】
もちろんこれに限定される必要はなく、例えばＲＦＣ７９３で定義されるその他の情報を含んでもよいし、ＳＡＣＫ（Selective ACKnowledgement：選択的確認応答）等のオプションとして定義される情報や、相手のＭＡＣ（Media Access Control）アドレスやＴＯＳ（Type Of Service）値、ＴＴＬ（Time To Live）値等を含んでもよい。ここでＲＦＣ７９３は、転送制御プロトコルＤＡＲＰＡインターネットプログラムプロトコル仕様書である。
【００４３】
図４は、コネクション情報管理部１３で管理されている、未使用状態の記憶領域を識別する記憶領域識別情報の先頭アドレスが格納されたキューの一例である。図４に示すようにコネクション情報管理部１３は、一例として、未使用状態の記憶領域の先頭アドレスをキューで管理する。ここで、一例として、初期段階で、ＣＰＵ２が、コネクション情報記憶部１２に確保されている全ての記憶領域について、キューに、各記憶領域の先頭アドレスを格納する。
【００４４】
以下、コネクション情報管理部１３の処理の一例について説明する。後述するコネクションが切断される場合、コネクション情報管理部１３は、第２のプロトコル処理部２１からの記憶領域解放要求により指定された記憶領域の先頭アドレスをキューの要素としてキューの最後に追加する。一方、コネクション情報管理部１３は、第１のプロトコル処理部１１から記憶領域確保要求を受けた場合、キューの先頭から記憶領域の先頭アドレスを取り出し、取り出した記憶領域の先頭アドレスを第１のプロトコル処理部１１に伝える。
【００４５】
なお、キューは装置の起動時に第２のプロトコル処理部２１から全記憶領域について解放要求を発行することで、全ての記憶領域が未使用状態で動作を開始することができる。この処理は起動時にコネクション情報管理部１３で自発的に行ってもよい。
【００４６】
図４の、キューには、未使用状態の記憶領域の先頭アドレスの代わりに、未使用状態の記憶領域のＩＤが格納されていてもよい。このように、キューに格納されている情報は、記憶領域を識別できる記憶領域識別情報であればよい。
【００４７】
図５は、第１のプロトコル処理部１１と第２のプロトコル処理部２１でフレームとそのフレームの付随情報を送受する方法を示す図である。第１のプロトコル処理部１１から第２のプロトコル処理部２１へのフレームとその付随情報の伝達にはリングバッファで構成される受信フレームデスクリプタリングを用いる。第２のプロトコル処理部２１から第１のプロトコル処理部１１へのフレームの伝達には同じくリングバッファで構成される送信フレームデスクリプタリングを用いる。受信フレームデスクリプタリングと送信フレームデスクリプタとを総称して、以下デスクリプタリングという。
【００４８】
どちらのデスクリプタリングもメモリ３に格納されている。ここでは、どちらのデスクリプタリングもそれぞれ八つの要素（デスクリプタ）を持つリングを図示しているが、実際には第１のプロトコル処理部１１と第２のプロトコル処理部２１の処理速度差を吸収するのに必要な数のデスクリプタを備える。各デスクリプタリングはそれぞれｈｅａｄとｔａｉｌという値を用いて制御される。
【００４９】
（受信したフレームとその付随情報を伝達する方法について）
まず、第１のプロトコル処理部１１から第２のプロトコル処理部２１に受信したフレームとその付随情報を伝達する方法について説明する。受信フレームデスクリプタリングの各要素は、フレームの書き込み先アドレス、フレームの長さ、フレームの付随情報、及びステータス情報で構成される。ステータス情報には、第１のプロトコル処理部１１で発生したエラーの情報を示すビットや第１のプロトコル処理部１１がデスクリプタの書き込みを完了したことを示すＤＯＮＥビットが含まれる。ｈｅａｄとｔａｉｌという２つの変数を用いて第１のプロトコル処理部１１が受信フレームデスクリプタリングへの書き込みを管理する。例えば、第１のプロトコル処理部１１は、ｈｅａｄからｔａｉｌ−１まで受信フレームデスクリプタリングの書き込みが可能というように定める。
【００５０】
ただし、第１のプロトコル処理部１１が書き込み可能なデスクリプタの数の最大値はデスクリプタの最大値−１であり、この例では７になる。ｈｅａｄとｔａｉｌが一致している状況では、第１のプロトコル処理部１１が書き込み可能な受信フレームデスクリプタリングがないことを示す。このｈｅａｄとｔａｉｌの値は第１のプロトコル処理部１１と第２のプロトコル処理部２１でそれぞれに管理されている。第１のプロトコル処理部１１は、これらｈｅａｄとｔａｉｌの値を通知しあったり、受信フレームデスクリプタリングの先頭アドレスやデスクリプタの長さを通知しあったりするためのレジスタインタフェース１１７を更に備える。また、第１のプロトコル処理部１１は、第２のプロトコル処理部２１に処理するデスクリプタがあることを示す割り込み通知インタフェース１１８を更に備える。
【００５１】
第２のプロトコル処理部２１は初期化処理として、メモリ３に受信フレームデスクリプタリングを構成するために必要な領域を確保し、前述のレジスタインタフェース１１７を介して第１のプロトコル処理部１１に受信フレームデスクリプタリングの先頭アドレスとデスクリプタの長さを設定する。
【００５２】
続いて、第２のプロトコル処理部２１は、受信フレームデスクリプタリングに含まれる各デスクリプタの初期化処理として、メモリに受信したフレームを格納するための十分な領域をそれぞれ確保し、そのアドレスをフレームの書き込み先アドレスとして設定する。この際、第２のプロトコル処理部２１は、フレームの長さとフレームの付随情報とステータス情報は０にクリアしておく。
【００５３】
受信フレームデスクリプタリングに含まれる全てのデスクリプタについてこの初期化処理が終わったら、第２のプロトコル処理部２１は自身の管理するｈｅａｄを０にクリアし、ｔａｉｌに７を設定する。そして、第２のプロトコル処理部２１は、第１のプロトコル処理部に対して第１のプロトコル処理部１１の管理するｈｅａｄとｔａｉｌの値を同じ値に設定するよう指示する。
【００５４】
第１のプロトコル処理部１１は、これを契機に動作を開始し、受信したフレームが制御フレームとして第２のプロトコル処理部２１に渡すと判定した場合、ｈｅａｄの位置のデスクリプタに含まれる情報（以下、デスクリプタ情報という）を読み出す。そして、第１のプロトコル処理部１１は、読み出したデスクリプタ情報に含まれるフレームの書き込み先アドレスを取得する。第１のプロトコル処理部１１は、メモリ３内の、取得した書き込み先アドレスが示す記憶領域に制御フレームを書き込み、デスクリプタに含まれる「フレームの長さ」に、書き込んだ制御フレームの長さを設定する。
【００５５】
その際、この制御フレームに関連するコネクション情報があれば、第１のプロトコル処理部１１は、フレームの付随情報に含まれるコネクション情報の領域にコネクション情報の先頭アドレスを格納する。特に関連するコネクション情報がなければ、第１のプロトコル処理部１１は、０などの特別な値を格納する。
【００５６】
制御フレームの書き込みと受信フレームデスクリプタリングに含まれるデスクリプタの他の部分の書き込みが終わったら、第１のプロトコル処理部１１は、ステータス情報のＤＯＮＥビットに１を格納する。そして、第１のプロトコル処理部１１は、割り込み通知インタフェース１１８を介して第２のプロトコル処理部２１に割り込み通知を行う。その後、第１のプロトコル処理部１１は、第１のプロトコル処理部１１で管理しているｈｅａｄの値を１増加させ、ｈｅａｄがｔａｉｌ−１の位置に追いつかない限り、次の制御フレームの処理を新しいｈｅａｄの位置で行う。
【００５７】
第２のプロトコル処理部２１は、割り込み通知インタフェース１１８を介して第１のプロトコル処理部１１から割り込み通知を受けると、自身で管理しているｔａｉｌの指すデスクリプタのステータス情報のＤＯＮＥビットを読み出す。このときＤＯＮＥビットが０であれば、第２のプロトコル処理部２１は、何も処理を行わない。
【００５８】
一方、ＤＯＮＥビットが１であれば、それは第１のプロトコル処理部１１がそのデスクリプタの処理を完了したことを示しているので、第２のプロトコル処理部２１は、フレームの書き込み先アドレスが示すメモリの領域からフレームの長さが示す長さ分を受信フレームとして取得する。また、第２のプロトコル処理部２１は、必要に応じてフレームの付随情報に含まれるコネクション情報を用いてフレームの処理を行う。ここで行うフレームの処理の詳細については後程動作例を示して説明する。
【００５９】
このフレームの処理が完了すると、第２のプロトコル処理部２１はステータスビットのＤＯＮＥビットを０に設定し、自身で管理するｔａｉｌの値を１増加させ、ｔａｉｌの値を第１のプロトコル処理部１１のｔａｉｌの値に反映させる。これにより、処理の完了したデスクリプタに第１のプロトコル処理部１１が新たに格納することができるようになる。第２のプロトコル処理部２１は、割り込みがあるたび、この動作を繰り返す。なお、フレームの書き込み先アドレスは毎回新たに確保したメモリの領域を設定するようにしてもよい。
【００６０】
（送信したいフレームを伝達する方法について）
続いて、第２のプロトコル処理部２１から第１のプロトコル処理部１１に送信したいフレームを伝達する方法について説明する。送信デスクリプタリングに含まれる各デスクリプタはフレームの読み出し元アドレス、フレームの長さ、フレームの付随情報、及びステータス情報で構成される。ステータス情報には受信フレームデスクリプタリングと同様に、エラーの情報を示すビットやＤＯＮＥビットが含まれる。ｈｅａｄとｔａｉｌの使用方法も受信側と同様であるのでここでは説明を省略する。
なお、図３では割り込み通知インタフェース１１８は一つとなっているが、送信側と受信側で適宜別々のインタフェースに分けてもよい。
【００６１】
第２のプロトコル処理部２１は、初期化処理として、情報処理装置１００のメモリ３にデスクリプタリングを構成するために必要な領域を確保し、前述のレジスタインタフェース１１７を介して第１のプロトコル処理部１１にデスクリプタリングの先頭アドレスとデスクリプタの長さを設定する。続いて、第２のプロトコル処理部２１は、自身で管理するｈｅａｄとｔａｉｌの値を０に設定し、第１のプロトコル処理部１１のｈｅａｄとｔａｉｌの値も０に設定する。
【００６２】
第２のプロトコル処理部２１は、フレームを送信しようとすると、自身の管理するｔａｉｌの位置のデスクリプタのフレームの読み出し元アドレスとフレームの長さにそれぞれ送信しようとしているフレームのアドレスと長さを設定する。またこのとき、フレームに付随する情報としてコネクション情報に格納したい値などがあれば、第２のプロトコル処理部２１は、フレームの付随情報にそれを格納する。そして、第２のプロトコル処理部２１は、ステータス情報を全て０にクリアした後、ｔａｉｌの値を１増加させ、第１のプロトコル処理部１１にそのｔａｉｌの値を通知する。
【００６３】
これを受けた第１のプロトコル処理部１１はｈｅａｄの指すデスクリプタからフレームの読み出し元アドレス、フレームの長さ、及びフレームの付随情報を取得し、フレームの付随情報に従って処理を行った後、そのフレームをネットワーク２００に送信する。そして、第１のプロトコル処理部１１は、デスクリプタのステータス情報のＤＯＮＥビットを１に書き換え、自身の管理するｈｅａｄの値を１増加させた後、割り込み通知インタフェース１１８を介して割り込み通知を行う。
【００６４】
割り込み通知を受けた第２のプロトコル処理部２１は、自身の管理しているｈｅａｄの位置にあるデスクリプタのＤＯＮＥビットをチェックし、これが０であれば処理を行わない。これが１であれば第１のプロトコル処理部１１により処理が完了しているので第２のプロトコル処理部２１は、送信し終わったフレームのメモリを解放する処理を行い、自身の管理するｈｅａｄの値を１増加させる。
【００６５】
ＴＣＰにおけるコネクションの確立は、自装置からコネクション確立を行うアクティブオープンと、相手装置からコネクション確立を行うパッシブオープンと、同時に両方のホストがコネクション確立を行う同時オープンに分けられる。
【００６６】
図６を用いてパッシブオープンとアクティブオープンについて説明する。図６は、パッシブオープンとアクティブオープンの処理の流れを示すシーケンス図である。なお、この図６においては各ＴＣＰのセグメントに含まれるシーケンス番号と確認応答番号等については省略している。ＲＦＣ７９３の規定と同様にＳＹＮフラグを１バイトと数えて確認応答番号を送信するものとする。
【００６７】
（パッシブオープンの処理の流れ）
まず、パッシブオープンについて説明する。
（Ｔ２１）自装置はまず、相手装置からのコネクション確立要求を待ち受けるため、コネクション状態がＬＩＳＴＥＮのコネクション情報を作成する。
【００６８】
（Ｔ１１）相手装置は、通信を行うためのコネクション情報を作成し、コネクション状態をＳＹＮ＿ＳＥＮＴに遷移させる。
【００６９】
（Ｔ１２）そして、相手装置は、ＳＹＮセグメントを送信する。
【００７０】
（Ｔ２２）自装置は、このＳＹＮセグメントを受信し、コネクション状態がＳＹＮ＿ＲＥＣＥＩＶＥＤのコネクション情報を新たに作成する。
【００７１】
（Ｔ２４）そして、自装置は、作成したＳＹＮ／ＡＣＫセグメントを相手装置へ送信する。
【００７２】
（Ｔ１３）相手装置はこのセグメントを受信し、コネクション状態をＥＳＴＡＢＬＩＳＨＥＤに移行させる。
【００７３】
（Ｔ１５）相手装置はＡＣＫセグメントを自装置に向けて送信する。
【００７４】
（Ｔ２５）自装置は、このＡＣＫセグメントを受信し、コネクション状態をＥＳＴＡＢＬＩＳＨＥＤに遷移させ、両方のコネクションが確立する。
【００７５】
（アクティブオープンの処理概要）
続いて、アクティブオープンのおいては、先ほどの相手装置の動きと同様となり、相手装置が、コネクション状態がＬＩＳＴＥＮのコネクション情報を作成し、コネクション確立要求を待ち受けているときに、自装置はコネクションを作成する。そして、自装置は、コネクション状態をＳＹＮ＿ＳＥＮＴに遷移させ、ＳＹＮセグメントを送信する。そして、自装置は、ＳＹＮ／ＡＣＫを受信して、コネクション状態をＥＳＴＡＢＬＩＳＨＥＤに遷移させ、ＡＣＫセグメントを送信し、両方のコネクションが確立する。
【００７６】
（同時オープンの処理の流れ）
次に図７を用いて同時オープンについて説明する。図７は、本実施形態の同時オープンの処理の流れを示すシーケンス図である。同時オープンは自装置と相手装置が同時にコネクション確立要求を送信した時に発生する。
【００７７】
（Ｔ３１、Ｔ４１）まず自装置でコネクションを作成してコネクション状態をＳＹＮ＿ＳＥＮＴに遷移させる。
【００７８】
（Ｔ３２、Ｔ４２）そして、自装置はＳＹＮセグメントを送信する。
【００７９】
（Ｔ３３、Ｔ４３）ＳＹＮセグメント送信後に、自装置は、相手装置からもＳＹＮセグメントを受信する。
【００８０】
（Ｔ３４、Ｔ４４）相手装置からもＳＹＮセグメントを受信すると、コネクション状態をＳＹＮ＿ＳＥＮＴからＳＹＮ＿ＲＥＣＥＩＶＥＤに遷移させる（Ｔ３４、Ｔ４４）。
【００８１】
（Ｔ３５、Ｔ４５）そして、自装置はＳＹＮ／ＡＣＫセグメントを相手装置へ送信する。
【００８２】
（Ｔ３６、Ｔ４６）相手からも同様にＳＹＮ／ＡＣＫセグメントが送信されるので、自装置はこれを受信する。
【００８３】
（Ｔ３７、Ｔ４７）自装置はＳＹＮ／ＡＣＫセグメントを受信すると、コネクション状態をＥＳＴＡＢＬＩＳＨＥＤに遷移させ、コネクションが確立する。
【００８４】
続いて、本実施形態におけるコネクション確立のパッシブオープンにおける処理の流れについて図８を用いて説明する。図８は、本実施形態におけるコネクション確立のパッシブオープンにおける処理の流れの一例を示すフローチャートである。
【００８５】
（ステップＳ１０１）まず、第２のプロトコル処理部２１は、コネクション確立要求の待ち受けを行うため、コネクション状態がＬＩＳＴＥＮのコネクションを作成する。このコネクションは必ずしもコネクション情報記憶部１２に保存しなくてもよく、メモリ３に保存してもよい。
【００８６】
相手装置からは、コネクション確立要求であるＳＹＮセグメントが送信される。ＳＹＮセグメントはネットワークを介して第１のプロトコル処理部１１に到達し、第１のプロトコル処理部１１は各層のプロトコルの処理を行う。第１のプロトコル処理部１１は、例えば、Ｅｔｈｅｒｎｅｔ（登録商標）とＩＰｖ４、ＴＣＰのデータ部分の処理機能を備えており、例えば、ＡＲＰやＩＣＭＰパケット、ＴＣＰのＡＣＫフラグやＰＳＨフラグ以外が１であるセグメントなど、自身で処理が完了できないものについては制御フレームとして、第２のプロトコル処理部２１に渡す。
【００８７】
第１のプロトコル処理部１１は例えば、データリンク層がＥｔｈｅｒｎｅｔ（登録商標）の場合、フレームの先頭検出、ＦＣＳ（Frame Check Sequence）の検算、終点ＭＡＣアドレスが自装置宛のものであること、及びタイプフィールドから上位層のプロトコルを示すＩＤの検出を行う。ＦＣＳの検算の結果、フレームの破損が検出されるとそのフレームは第１のプロトコル処理部１１により破棄される。
【００８８】
続いて、第１のプロトコル処理部１１は例えば、ネットワーク層プロトコルがＩＰｖ４の倍、ヘッダチェックサムの検算、バージョンフィールドのチェック、ヘッダ長の検出、パケット長のチェック、フラグメントの検出とリアセンブル処理を行う。また、第１のプロトコル処理部１１は例えば、上位層のプロトコル番号の検出、終点ＩＰアドレスが自装置宛であるかの確認、始点ＩＰアドレスと始点ＭＡＣアドレスを用いたＡＲＰテーブル登録を行う。また、第１のプロトコル処理部１１は例えば、終点ＩＰアドレスによってはルーティング動作を行う。もしもヘッダチェックサムの検算の結果、パケットの破損が検出されれば、そのパケットは第１のプロトコル処理部１１により破棄される。
【００８９】
また、ネットワーク層のプロトコルがＩＰｖ４以外であれば、第１のプロトコル処理部１１は、受信フレームを制御フレームとして第２のプロトコル処理部２１に渡す。
【００９０】
その上位層であるトランスポート層のプロトコルがＴＣＰの場合、第１のプロトコル処理部１１は例えば、チェックサムの検算を行い、始点ポート番号、終点ポート番号、シーケンス番号、確認応答番号、オフセット、コントロールフラグ、ウィンドウサイズを取得する。この場合もチェックサムの検算の結果、破損が検出されればそのセグメントは第１のプロトコル処理部１１により破棄される。
【００９１】
（ステップＳ１０２）チェックサムの検算の結果、破損が検出されなければ、第１のプロトコル処理部１１は、まず取得したセグメントのコントロールフラグの解析を行い、受信フレームから、コネクション確立要求が検出されたか否か判定する。
【００９２】
なお、上記の条件に加え、例えばＩＰアドレスやＴＣＰのポート番号など、各プロトコルのヘッダ情報を基に判定を行うようにして、特定のホストとのコネクションや、特定のポート番号のコネクションに関してのみコネクション確立要求であると判定するようにしてもよい。また、コネクション確立時のＡＣＫセグメントの受信を契機にコネクション確立要求であると判定するようにしてもよい。
【００９３】
（ステップＳ１０３）ステップＳ１０２で、受信フレームからコネクション確立要求が検出された場合、第１のプロトコル処理部１１はコネクション情報管理部１３に対して、ＣＰＵ２と共有して使用するコネクション情報を格納するための記憶領域の確保を要求する。この要求に応じて、コネクション情報管理部１３は、ＣＰＵ２と共有して使用するコネクション情報を格納するための記憶領域を、コネクション情報記憶部１２内に確保する。
【００９４】
（ステップＳ１０４）次に、第１のプロトコル処理部１１は、受信フレームに含まれるヘッダ情報を、コネクション情報の一部として、ステップ１０３でコネクション情報管理部１３が確保した記憶領域に格納する。ここで、第１のプロトコル処理部１１が初期化のため、格納する情報としては、受信フレームから取り出した自装置のＩＰアドレス、相手装置のＩＰアドレス、自装置のポート番号、相手装置のポート番号、コネクション状態、相手装置のシーケンス番号、相手装置のウィンドウサイズである。もちろん第１のプロトコル処理部１１は、これ以外のＴＣＰオプションであるウィンドウスケーリング値やタイムスタンプなどの情報を書き込んでもよい。また、第１のプロトコル処理部１１は、受信フレームデスクリプタの「フレームの付随情報」に、コネクション情報を格納するための記憶領域の先頭アドレスを書きこむ。
【００９５】
この処理が完了すると、第１のプロトコル処理部１１は第２のプロトコル処理部２１に対して、前述した受信フレームデスクリプタリングを用いて、受信フレームの情報を伝達する。このとき、第１のプロトコル処理部１１は、受信フレームの書き込み先アドレスを、受信フレームデスクリプタリングに含まれるデスクリプタ内の「フレームの書き込み先アドレス」に格納する。その後、第１のプロトコル処理部１１は、ステップＳ１０３で確保された記憶領域の先頭アドレスをフレームの付随情報として当該デスクリプタに含ませる。そして、第１のプロトコル処理部１１は、当該デスクリプタに含まれるステータス情報のＤＯＮＥビットを１に設定し、割り込み通知を行う。
【００９６】
なお、このとき、第１のプロトコル処理部１１は、フレームの付随情報としてネットワーク層のプロトコル種別やトランスポート層のプロトコル種別など、すでに受信フレームから抽出した情報を含ませてもよい。これにより第２のプロトコル処理部２１では一部の処理を省略することが可能となる。
【００９７】
（ステップＳ１０５）ステップＳ１０２で受信フレームからコネクション確立要求が検出されなかった場合、第１のプロトコル処理部１１は、受信フレームは制御フレームであるか否か判定する。
例えば、第１のプロトコル処理部１１は、取得したコントロールフラグのＦＩＮフラグ、ＲＳＴフラグのいずれかが１であればその受信フレームを制御フレームと判定する（ＹＥＳ）。そして、第１のプロトコル処理部１１は、その受信フレームを制御フレームとして、第２のプロトコル処理部２１に渡し、第２のプロトコル処理部２１はステップＳ１０６の処理を実行する。一方、受信フレームが制御フレームでない場合（ＮＯ）、第１のプロトコル処理部１１の処理をステップＳ１０７へ進める。
【００９８】
それ以外のセグメントについては、第１のプロトコル処理部１１は、コネクション情報記憶部１２からコネクション情報の探索を行う。コネクション情報の探索は、始点ＩＰアドレス、終点ＩＰアドレス、及びＴＣＰの始点ポート番号と終点ポート番号を用いて行われ、先程取得した情報を基に、これらの全てが合致するコネクションを探索する。その際、第１のプロトコル処理部１１は例えば、処理を高速化するため、ＩＰアドレスやポート番号をキーとして、コネクション情報記憶部１２に記憶されているハッシュテーブルを用いて探索の高速化を行う。ハッシュテーブルの詳細については、後述する。
【００９９】
（ステップＳ１０６）ステップＳ１０４の処理が終了した場合、またはステップＳ１０５で受信フレームが制御フレームと判定された場合、第２のプロトコル処理部２１は、フレームの解析処理を行う。具体的には例えば、第２のプロトコル処理部２１は、フレームの情報と、フレームの付随情報に含まれる記憶領域の先頭アドレスを取得する。第２のプロトコル処理部２１は、コネクション情報からフレームの始点ＩＰアドレス、終点ＩＰアドレス、ＴＣＰの始点ポート番号、ＴＣＰの終点ポート番号を取得し、これらを用いて、コネクション状態がＬＩＳＴＥＮのコネクション情報を探して、コネクション情報記憶部１２内を探索する。
【０１００】
（ステップＳ１０７）合致するコネクション情報が見つかり、受信したＴＣＰセグメントにデータがあり、それがシーケンス番号等の確認の結果、受容できるものであれば、第１のプロトコル処理部１１はコネクション情報に含まれる受信データの書き込み領域のアドレスと長さで指定されたメモリ領域にデータの書き込みを行う。このメモリ領域は、メモリ３内の領域である。そして、第１のプロトコル処理部１１はデータ受信をしたことを示すため確認応答のＴＣＰセグメントを相手装置へ送信する。ＴＣＰにおいては、受信したＴＣＰセグメントのシーケンス番号の確認には様々な規定があるが、ここでは割愛する。
【０１０１】
（ステップＳ１０８）次に、第２のプロトコル処理部２１は、ステップＳ１０６での解析処理の結果、コネクション確立要求を受諾するか否か判定する。例えば、ステップＳ１０６でコネクション状態がＬＩＳＴＥＮのコネクション情報の探索の結果、合致するコネクション情報があれば、第２のプロトコル処理部２１はコネクション確立が受諾されると判定する。一方、合致しない場合、第２のプロトコル処理部２１はコネクション確立が受諾されないと判定する。
コネクション確立が受諾される場合（ＹＥＳ）、第２のプロトコル処理部２１はステップＳ１０９へ進む。コネクション確立が受諾されない場合（ＮＯ）、第２のプロトコル処理部２１はステップＳ１１１へ進む。
【０１０２】
（ステップＳ１０９）ステップＳ１０８でコネクション確立要求を受諾すると判定された場合、第２のプロトコル処理部２１は、ハッシュテーブルへの接続を行い、ステップＳ１０３で確保された記憶領域に、受信データの書き込み領域のアドレスと長さ、送信データの読み出し領域のアドレスと長さなどを格納する。そして、第２のプロトコル処理部２１は、コネクション確立応答フレーム（ＳＹＮ／ＡＣＫセグメント）を生成し、生成したコネクション確立応答フレームを第１のプロトコル処理部１１に渡す。
【０１０３】
（ステップＳ１１０）第１のプロトコル処理部１１は、ステップＳ１０９で生成されたコネクション確立応答フレームをネットワーク２００を介して相手装置へ送信する。第１のプロトコル処理部１１は、このコネクション確立応答フレームから送信シーケンス番号や自装置のウィンドウサイズなどを取得し、取得した情報をステップＳ１０３で確保された記憶領域に格納する。なお、このステップＳ１０３で確保された記憶領域への格納は第２のプロトコル処理部２１が行ってもよい。
【０１０４】
（ステップＳ１１１）ステップＳ１０８でコネクション確立を受諾しないと判定された場合、第２のプロトコル処理部２１は、ＳＹＮセグメントを受信したときに確保されたコネクション情報を格納するための記憶領域の解放をコネクション情報管理部１３に指示する。その際、第２のプロトコル処理部２１は、コネクション情報を格納するための記憶領域の先頭アドレスをコネクション情報管理部１３に伝える。
【０１０５】
なお、パケットフィルタなどでそのポートへの受信が制限されている場合にも、第２のプロトコル処理部２１は、ＳＹＮセグメントを受信したときに確保されたコネクション情報を格納するための記憶領域の解放をコネクション情報管理部１３に要求してもよい。
【０１０６】
ＳＹＮ／ＡＣＫセグメントが相手装置に届くと、相手装置からはＡＣＫセグメントが送信される。これを受信した第１のプロトコル処理部１１はコネクション情報の探索を行い、先ほど確保したコネクション状態がＳＹＮ＿ＲＥＣＥＩＶＥＤのコネクション情報を探し出す。コネクション確立の条件を満たせば、第１のプロトコル処理部１１は必要なコネクション情報の更新を行ったうえで、コネクション状態をＥＳＴＡＢＬＩＳＨＥＤに遷移させる。
【０１０７】
以降は、第２のプロトコル処理部２１の指示などにより、コネクション情報とレジスタインタフェースを用いて、データの送信も受信も第１のプロトコル処理部１１で処理が行われる。全てのデータの送受信が完了した場合や途中でコネクションを切断するような事象が発生した場合にはＴＣＰのコントロールフラグのうち、ＦＩＮフラグやＲＳＴフラグが１に設定されたセグメントでコネクションの切断を行う。この場合、第１のプロトコル処理部１１から第２のプロトコル処理部２１に対してこれらのＴＣＰのセグメントが制御フレームとして渡され、第２のプロトコル処理部２１は、コネクション状態をＣＬＯＳＥＤへ遷移させる。
【０１０８】
コネクション状態がＣＬＯＳＥＤに遷移するとこれ以上、このコネクション情報は使用されないため、第２のプロトコル処理部２１は、コネクション情報管理部１３に対して、このコネクション情報を格納するための記憶領域解放するよう要求する。これにより、この記憶領域は未使用状態としてキューに蓄積され、再度コネクション確保要求があった時に使用される。なお、本実施形態においては、上述した記憶領域解放要求は第２のプロトコル処理部２１が行うが、これは第１のプロトコル処理部１１が行ってもよい。
【０１０９】
図９は、本実施形態におけるハッシュテーブルの一例である。このハッシュテーブルには、ハッシュ値が同じコネクション情報が関連づけられた概念図である。図９には、ハッシュ値がインデックスとなるルート配列と、そのルート配列の各要素と関連づけられたコネクション情報Ｃ０１、Ｃ０２、Ｃ１１、Ｃ２１、Ｃ２２、Ｃ２３、Ｃ４１、Ｃ４２、及びＣｎ１（ｎは正の整数）が示されている。このルート配列の要素はハッシュ値の数だけ用意されており、ルート配列の各要素には、対応するハッシュ値のポインタが格納されている。図９の例では、ルート配列［２］には、コネクション情報Ｃ２１を格納するための記憶領域の先頭アドレスが格納されている。
【０１１０】
第１のプロトコル処理部１１は、コネクション情報の探索の際に、コネクション情報について所定の計算式でハッシュ値を算出する。所定の計算式は、例えば、受信したフレームから得られた相手のＩＰアドレス、相手のＴＣＰポート番号のＸＯＲである。第１のプロトコル処理部１１は例えば、算出したハッシュ値を用いて、ハッシュテーブルを探索することで、探索対象となるコネクション情報を格納するための記憶領域の先頭アドレスを探し出す。
【０１１１】
例えば、探索対象がコネクション情報Ｃ２１の場合、第１のプロトコル処理部１１は、受信したフレームからハッシュ値として２を算出し、ルート配列［２］から、コネクション情報Ｃ２１を格納するための記憶領域の先頭アドレスを探し出す。そして、第１のプロトコル処理部１１は、探し出した先頭アドレスから所定の長さの領域の情報をコネクション情報記憶部１２から読み出すことで、探索対象のコネクション情報Ｃ２１を取得することができる。
【０１１２】
ここで、各コネクション情報は、前のコネクション情報を指すポインタ（以下、前ポイントという）ＰＲＥＶと次のコネクション情報を指すポインタ（以下、次ポインタという）ＮＥＸＴを更に有する。これにより、ルート配列から同じハッシュ値を持つコネクション情報をたどることができる。例えば、コネクション情報Ｃ２１に含まれる次ポインタＮＥＸＴには、コネクション情報Ｃ２２を格納するための記憶領域の先頭アドレスが格納されているので、コネクション情報Ｃ２１からコネクション情報Ｃ２２をたどることができる。
【０１１３】
また、コネクション情報Ｃ２２に含まれる前ポインタＰＲＥＶには、コネクション情報Ｃ２１を格納するための記憶領域の先頭アドレスが格納され、コネクション情報Ｃ２２に含まれる次ポインタＮＥＸＴには、コネクション情報Ｃ２３を格納するための記憶領域の先頭アドレスが格納されているので、コネクション情報Ｃ２２からコネクション情報Ｃ２３をたどることができる。このように第１のプロトコル処理部１１は、同じハッシュ値をもつコネクション情報を辿り、受信したフレームとコネクション情報とでＩＰアドレスとポート番号の一致性を確認してコネクションの探索を行う。
【０１１４】
ハッシュテーブルへの接続と削除は、コネクション情報を格納するための記憶領域確保後に、第１のプロトコル処理部１１、第２のプロトコル処理部２１によりハッシュテーブルへの接続を行い、コネクション情報を格納するための記憶領域の解放前に第２のプロトコル処理部２１によりハッシュテーブルからの削除を行う。
具体的には、第１のプロトコル処理部１１は、コネクションが確保された場合、すなわちコネクション情報が有効な場合、そのコネクション情報をハッシュテーブルにつなげる。これにより、第１のプロトコル処理部１１は、対象となるコネクション情報が有効であるか否かを、ハッシュテーブルにつながっているかいないかで判断できる。
【０１１５】
なお、ハッシュテーブルはコネクション状態毎に分けて使用してもよい。ハッシュテーブルのルート配列は、コネクション情報記憶部１２にその領域を設けてもよいし、情報処理装置１００が別途ハッシュテーブルの記憶部を備えてもよい。
【０１１６】
なお、第２のプロトコル処理部２１は、例えば、前のコネクション情報の次ポインタＮＥＸＴに、第１のプロトコル処理部１１がこれから確保する「受信データの書き込み領域の先頭アドレス」を書くことを第１のプロトコル処理部１１へ指示してもよい。ここで、前のコネクション情報とは、第１のプロトコル処理部１１がこれから確保するコネクション情報と同じハッシュ値を有するコネクション情報のうち、図９のハッシュテーブルで終端に接続されるコネクション情報である。これにより、第１のプロトコル処理部１１は、前のコネクション情報から、これから確保するコネクション情報をたどることができる。
【０１１７】
また、第２のプロトコル処理部２１は、例えば、第１のプロトコル処理部１１がこれから確保するコネクション情報のＰＲＥＶに、上述した前のコネクション情報の「受信データの書き込み領域の先頭アドレス」を書くことを第１のプロトコル処理部１１へ指示してもよい。これにより、第１のプロトコル処理部１１は、これから確保するコネクション情報から、前のコネクション情報をたどることができる。
【０１１８】
（アクティブオープンの流れ）
次に、本実施形態におけるアクティブオープンの流れを図１０のフローチャートを用いて説明する。図１０は、本実施形態におけるコネクション確立のアクティブオープンにおける処理の流れの一例を示すフローチャートである。
【０１１９】
（ステップＳ２０１）まず、第２のプロトコル処理部２１は、送信フレームの出力処理を行う。例えば、第２のプロトコル処理部２１は、コネクション確立を行うためのＳＹＮセグメントの生成を行う。第２のプロトコル処理部２１は、ＳＹＮセグメントを生成したら生成したセグメントのアドレスと長さをフレームの読み出し元アドレスとフレームの長さとして送信フレームデスクリプタリングのデスクリプタに格納する。このとき、第２のプロトコル処理部２１は、フレームの付随情報として、受信データの書き込み領域のアドレスと長さ、送信データの読み出し領域のアドレスと長さを含ませておく。ここで、これらの情報を含ませておくのは、これらの情報はＳＹＮセグメントに含まれない情報であるので、後にコネクション情報を確保した時にコネクション情報内にこれらの値を設定できるようにするためである。
【０１２０】
更に、第２のプロトコル処理部２１は、ハッシュテーブルのリストにコネクション情報を接続するため、確保されるコネクション情報を挿入する位置の前後のコネクション情報のアドレスや値（コネクション情報接続情報）を取得してデスクリプタに書き込む。例えば、確保されるコネクション情報を挿入する位置の次のコネクション情報の先頭アドレスと、確保されるコネクション情報を挿入する位置の次のコネクション情報の「前のコネクション情報へのポインタ（ＰＲＥＶ）」のアドレスと、確保されるコネクション情報を挿入する位置の前のコネクション情報の「次のコネクション情報へのポインタ（ＮＥＸＴ）」のアドレスを書き込む。
【０１２１】
このとき、確保されるコネクション情報がリストの最後尾に位置するならば、確保されるコネクション情報を挿入する位置の次のコネクション情報の先頭アドレスとしてＮＵＬＬなどの存在しないことを示す特別な値を書き込む。また、確保されるコネクション情報がリストの先頭に位置するならば、確保されるコネクション情報を書き込む位置の前のコネクション情報の「次のコネクション情報へのポインタ（ＮＥＸＴ）」のアドレスとしてルート配列の対応する要素のアドレスを書き込む。
【０１２２】
なお、その際、第２のプロトコル処理部２１は、フレームの付随情報として明示的にこのフレームがコネクション確立要求であることを示してもよい。その場合、第１のプロトコル処理部１１はその情報からコネクション確立要求であると判定してもよい。そして、第２のプロトコル処理部２１は、このデスクリプタの送信を第１のプロトコル処理部１１に指示する。
【０１２３】
（ステップＳ２０２）第１のプロトコル処理部１１はフレームの読み出しを行い、ＴＣＰのＳＹＮセグメントであることをヘッダの解析により検出することで、送信フレームからコネクション確立要求が検出されたか否か判定する。
【０１２４】
（ステップＳ２０３）ステップＳ２０２で送信フレームからコネクション確立要求が検出された場合、第１のプロトコル処理部１１はコネクション情報管理部１３にコネクション情報を格納するための記憶領域の確保を要求する。この要求に応じて、コネクション情報管理部１３は、第１のプロトコル処理部１１による解析の結果、送信フレームまたは受信フレームからコネクション確立要求が検出された場合、ＣＰＵ２と共有して使用するコネクション情報を格納するための記憶領域を、コネクション情報記憶部１２内に確保する。具体的には例えば、コネクション情報管理部１３は、このコネクション情報が格納される記憶領域の先頭アドレスを決定する。
【０１２５】
（ステップＳ２０４）次に、第１のプロトコル処理部１１は、送信フレームに含まれるヘッダ情報を、コネクション情報の一部として、コネクション情報管理部１３が確保した記憶領域に格納する。具体的には例えば、第１のプロトコル処理部１１は、確保された記憶領域に対してＳＹＮセグメントに含まれる情報から自身のＩＰアドレス、相手のＩＰアドレス、自身のＴＣＰポート番号、相手のＴＣＰポート番号、送信シーケンス番号、自身のウィンドウサイズ等の情報を格納する。このときコネクション状態もＳＹＮセグメントを送信しているので、コネクション状態がＳＹＮ＿ＳＥＮＴに設定される。なお、ＳＹＮセグメントに含まれる終点ＭＡＣアドレスやＴＴＬ値、ＴＯＳ値等の情報を書き込んでもよい。
【０１２６】
（ステップＳ２０５）また、第１のプロトコル処理部１１は、送信フレームデスクリプタリングに含まれるフレームの付随情報に含まれる情報を、コネクション情報の一部として、コネクション情報管理部１３が確保した記憶領域に格納する。具体的には例えば、第１のプロトコル処理部１１は、上記付随情報から、受信データの書き込み先アドレスと長さ、送信データの読み出し元アドレスと長さを取得し、取得した情報を、コネクション情報の一部として、コネクション情報管理部１３が確保した記憶領域に格納する。
【０１２７】
（ステップＳ２０６）更に、第１のプロトコル処理部１１は、コネクション情報の初期化が完了すると、その確保したコネクション情報のハッシュテーブルへの接続を行う。デスクリプタから取得したコネクション情報接続情報を用いてハッシュテーブルのリストの接続処理を行う。まず、第１のプロトコル処理部１１は、その確保したコネクション情報の「次のコネクション情報へのポインタ」にコネクション情報を挿入する位置の次のコネクション情報の先頭アドレスを書き込む。次に、第１のプロトコル処理部１１は、 確保されるコネクション情報を挿入する位置の次のコネクション情報がないことを示すＮＵＬＬ等の値でなければ、確保されるコネクション情報を挿入する位置の次のコネクション情報の「前のコネクション情報へのポインタ（ＰＲＥＶ）」に、確保したコネクション情報の先頭アドレスを書き込む。次に、第１のプロトコル処理部１１は、確保されるコネクション情報を挿入する位置の前のコネクション情報の「次のコネクション情報へのポインタ（ＮＥＸＴ）」に確保したコネクション情報の先頭アドレスを書き込む。
【０１２８】
なお、付随情報に、ハッシュテーブルにコネクション情報を接続するための情報が含まれない場合には、第１のプロトコル処理部１１でコネクション情報の接続を実行してもよい。具体的には例えば、第１のプロトコル処理部１１は、送信フレームからハッシュ値を算出し、算出したハッシュ値がインデックスとなるルート配列の要素を抽出する。このルート配列の要素は、ハッシュ値に関連づけられた第１のコネクション情報が格納されている記憶領域の先頭アドレスである。そして、第１のプロトコル処理部１１は、この先頭アドレスから所定のビットだけ離れたアドレスの記憶領域から「ＮＥＸＴ」の値を読み出す。この「ＮＥＸＴ」の値は、第１のコネクション情報に関連づけられた第２のコネクション情報を格納するための記憶領域の先頭アドレスである。第１のプロトコル処理部１１は、この処理を繰り返す。
【０１２９】
この処理を繰り返す中で、第１のプロトコル処理部１１は、第ｉ（ｉは自然数）のコネクション情報を格納するための記憶領域の先頭アドレスから所定のビットだけ離れたアドレスの記憶領域に「ＮＥＸＴ」の値がＮＵＬＬなど未だ格納されていない場合、その記憶領域に、当該コネクション情報を格納するための記憶領域の先頭アドレスを格納する。これにより、第ｉ（ｉは自然数）のコネクション情報に含まれる「ＮＥＸＴ」の値が、当該コネクション情報を格納するための記憶領域の先頭アドレスが設定される。そして、第１のプロトコル処理部１１は、当該コネクション情報の「ＰＲＥＶ」を格納するための記憶領域に、第ｉ（ｉは自然数）のコネクション情報を格納するための記憶領域の先頭アドレスを格納する。
【０１３０】
（ステップＳ２０７）ステップＳ２０６の処理が終了した場合、またはステップＳ２０２で送信フレームからコネクション確立要求が検出されなかった場合、第１のプロトコル処理部１１は、送信フレームを送信する。例えば、ステップＳ２０６から遷移した場合、第１のプロトコル処理部１１は、ＳＹＮセグメントがネットワークを介して相手装置に送信される。
【０１３１】
なお、ハッシュテーブルへの接続を容易にするため、あらかじめ第２のプロトコル処理部２１でＳＹＮセグメントのハッシュ値を計算し、ハッシュテーブルの終端のエントリのアドレスを計算してもよい。
【０１３２】
第１のプロトコル処理部１１は、相手装置から応答であるＳＹＮ／ＡＣＫセグメントを受信すると、受信したＳＹＮ／ＡＣＫセグメントの各層のプロトコル処理を行う。そして、第１のプロトコル処理部１１は、コネクション情報の探索が行う。探索の結果、先ほど確保と初期化を行ったコネクション情報が見つかる。このコネクション情報は、コネクション状態がＳＹＮ＿ＳＥＮＴである。これに対して、第１のプロトコル処理部１１は、シーケンス番号や確認応答番号などのチェックを行い、コネクション確立の条件を満たせば、コネクション状態をＳＹＮ＿ＳＥＮＴからＥＳＴＡＢＬＩＳＨＥＤに遷移させる。
【０１３３】
次に、第１のプロトコル処理部１１は、ＡＣＫセグメントを相手装置に送信する。そして、相手装置でＡＣＫセグメントが処理され両方でコネクションが確立し、データの送受信が行えるようになる。コネクションの切断についてはパッシブオープンと同様であるため省略する。
【０１３４】
（同時オープンの流れ）
最後に、本実施形態における同時オープンの流れについて説明する。同時オープンの場合は、途中までアクティブオープンと同じシーケンスである。第２のプロトコル処理部２１でＳＹＮセグメントが生成され送信されるのはアクティブオープンと同じ手順で行われる。次にその応答としてＳＹＮセグメントが受信されるところから処理が異なる。
【０１３５】
第１のプロトコル処理部１１は、ＳＹＮセグメントを受信すると各層のプロトコル処理が行う。その処理の結果、第１のプロトコル処理部１１は、コネクション確立要求と判定し、コネクション情報管理部１３へコネクション情報を格納するための記憶領域確保要求を行う。そして、第１のプロトコル処理部１１は、コネクション情報の初期化を行った後、コネクション情報と合わせて受信したＳＹＮセグメントを第２のプロトコル処理部２１に渡す。
【０１３６】
第２のプロトコル処理部２１は、コネクション情報を探索し、同時オープンであることを検知して、コネクション状態がＳＹＮ＿ＳＥＮＴのコネクション情報とコネクション状態がＳＹＮ＿ＲＥＣＥＩＶＥＤのコネクション情報の二つができてしまっている。このため、第２のプロトコル処理部２１は、コネクション状態がＳＹＮ＿ＳＥＮＴのコネクション情報を削除するようにコネクション情報管理部１３に、そのコネクション情報を格納するための記憶領域解放要求を行う。このとき、コネクション情報管理部１３は、コネクション状態がＳＹＮ＿ＳＥＮＴのコネクション情報を格納するための記憶領域を解放するのではなく、コネクション状態がＳＹＮ＿ＲＥＣＥＩＶＥＤのコネクション情報を格納するための記憶領域を解放して、コネクション状態をＳＹＮ＿ＳＥＮＴからＳＹＮ＿ＲＥＣＥＩＶＥＤにしてもよい。
【０１３７】
第２のプロトコル処理部２１は、コネクション状態がＳＹＮ＿ＲＥＣＥＩＶＥＤのコネクションについて、ＳＹＮ／ＡＣＫセグメントを生成して、第１のプロトコル処理部１１に送信を指示する。同様にして相手からＳＹＮ／ＡＣＫセグメントが送信されてくるので、第１のプロトコル処理部１１は、各層のプロトコル処理を行った後、コネクション情報を探索する。その探索の結果、第２のプロトコル処理部２１は、コネクション状態がＳＹＮ＿ＲＥＣＥＩＶＥＤのコネクションを見つける。そして、第２のプロトコル処理部２１は、コネクション確立判定を行い、その確立判定の結果、コネクション状態がＥＳＴＡＢＬＩＳＨＥＤに設定され、以後データの送受信を行うことが可能となる。
【０１３８】
＜効果＞
以上、本実施形態によれば、第１のプロトコル処理部１１は、外部のＣＰＵにより生成された、前記相手装置へ送信する送信フレーム、または前記相手装置から受信した受信フレームを解析する。コネクション情報管理部１３は、第１のプロトコル処理部１１による解析の結果、前記送信フレームまたは前記受信フレームからコネクション確立要求が検出された場合、ＣＰＵ２と共有して使用するコネクション情報を格納するための記憶領域を、ＣＰＵ２によりアクセス可能な所定の記憶装置内に確保する。１のプロトコル処理部１１は、コネクション情報管理部１３により確保された記憶領域を示す情報をＣＰＵ２に通知する。
【０１３９】
これにより、ＣＰＵ２がコネクション情報を格納するための記憶領域の確保を行わなくてよいので、ＣＰＵ２の負荷を軽減することができる。また、ＣＰＵ２を介さず通信部１の第１のプロトコル処理部１１がコネクション情報を格納するための記憶領域を確保するので、コネクション情報を格納するための記憶領域の確保にかかる時間の短縮を可能とする。
【０１４０】
また、第１のプロトコル処理部１１が、通信部１内のコネクション情報記憶部１２にコネクション情報を格納するための記憶領域を確保する。これにより、コネクション情報を格納するための記憶領域の確保のために、ＣＰＵ２と通信部１との間の通信が必要ないので、ＣＰＵ２と通信部１との間のバス帯域使用率を低減することができる。それとともに、コネクション情報を確保するための記憶領域の確保に要する時間を短縮することができる。
特に、情報処理装置１００が、多数のコネクション確立を行って広帯域でデータ配信を行う場合、ＣＰＵ２の負荷やバス帯域使用率を軽減し、高速なコネクション確立とデータ送受信を実現することが可能となる。
【０１４１】
また、通信部１の第１のプロトコル処理部１１が、受信フレームまたは送信フレームに含まれる情報から、コネクション情報の初期化を行うことで、コネクション情報の初期化にかかる時間の短縮が可能となる。
【０１４２】
また、コネクション情報管理部１３は、未使用のコネクション情報をキューで管理することにより、未使用のコネクション情報を探索することなく即時に確保することが可能となる。
【０１４３】
なお、上述の実施形態では、ハッシュテーブルを用いてコネクション情報の探索を行う例を示したが、コネクション情報そのものの使用または未使用を表すビットを設けて全コネクション情報をこのビットをチェックしながら探索してもよいし、あらかじめ使用または未使用を管理するビットマップ領域を使って探索を行ってもよい。
【０１４４】
また、上述の実施形態ではＴＣＰを例にしたが、ＳＣＴＰ(Stream Control Transmission Protocol)など他のコネクション確立後にデータ通信を行うプロトコルにも使用できる。ＳＣＴＰにおいては、ＩＮＩＴパケットや、ＣＯＯＫＩＥ−ＥＣＨＯパケットをコネクション確立要求と見なして動作してもよい。通信部１のオフロードエンジンはＡＳＩＣ（Application Specific Integrated Circuit）などのハードウェアによって実現してもよいし、ネットワークプロセッサや、ＤＳＰ(Digital Signal Processor)、ＧＰＵ(Graphics Processing Unit)、他の汎用プロセッサなどによって実現してもよい。
【０１４５】
また、上述の実施形態ではコネクション情報記憶部１２を通信部１に備える例を示したが、コネクション情報記憶部１２はメモリ３上に備えてもよい。この場合、バス帯域使用率の低減効果はないが、ＣＰＵ負荷を軽減することができる。
【０１４６】
なお、この通信部１は、例えば、コンピュータ装置（例えば、ＰＣＩカード）に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、通信部１は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、第１のプロトコル処理部１１は、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【０１４７】
以上、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【０１４８】
１００  情報処理装置
１  通信部
１１  第１のプロトコル処理部（プロトコル解析部）
１１７  レジスタインタフェース
１１８  割り込み通知インタフェース
１２  コネクション情報記憶部
１３  コネクション情報管理部
２  ＣＰＵ
２１  第２のプロトコル処理部
３  メモリ
４  チップセット
５  ディスク
２００  ネットワーク
【図１】
2015177263.tif 000003
【図２】
2015177263.tif 000004
【図３】
2015177263.tif 000005
【図４】
2015177263.tif 000006
【図５】
2015177263.tif 000007
【図６】
2015177263.tif 000008
【図７】
2015177263.tif 000009
【図８】
2015177263.tif 000010
【図９】
2015177263.tif 000011
【図１０】
2015177263.tif 000012