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