(57)【要約】【課題】  通信の信頼性を維持しつつ、新たな通信回線の接続を早期に確立することができるようにする。【解決手段】  TIME＿WAITに状態が遷移したコネクションに対応するソケット情報を、内部メモリ１０３（内部メモリソケット検索テーブル２０１）から外部メモリ１０４（外部メモリソケット検索テーブル３０１）に移動させる。これにより、TIME＿WAITにあるコネクションのソケット情報が内部メモリ１０３を占めることがなくなり、新たなコネクションを早期に確立できる。また、TIME＿WAITにあるコネクションのソケット情報は破棄するのではなく、外部メモリ１０４に退避することで通信の信頼性を維持することが可能になる。【選択図】  図１
2010283615.tif 000002
【特許請求の範囲】
【請求項１】
コネクション型の通信を行う通信装置であって、
コネクションの通信端点に関する通信端点情報を記憶する第１のメモリと、
前記第１のメモリに記憶された通信端点情報のうち、切断待ち状態となっているコネクションの通信端点情報を前記第１のメモリから第２のメモリに移動する移動手段とを有することを特徴とする通信装置。
【請求項２】
コネクションが前記切断待ち状態に遷移したか否かを判定する判定手段を有し、
前記移動手段は、前記判定手段により、前記切断待ち状態に遷移したと判定されると、当該コネクションに対応する通信端点情報を前記第１のメモリから第２のメモリに移動することを特徴とする請求項１に記載の通信装置。
【請求項３】
前記第１のメモリに記憶されている通信端点情報の数が閾値であるか否かを判定する判定手段を有し、
前記移動手段は、前記判定手段により、前記第１のメモリに記憶されている通信端点情報の数が閾値であると判定されると、前記第１のメモリに記憶されている通信端点情報のうち、前記切断待ち状態に遷移した順に基づいて、前記第１のメモリに記憶されている通信端点情報を第２のメモリに移動することを特徴とする請求項１に記載の通信装置。
【請求項４】
前記移動手段は、コネクション確立が新たに要求されると、前記第１のメモリに記憶された通信端点情報のうち、前記切断待ち状態となっているコネクションに対応する通信端点情報を前記第１のメモリから第２のメモリに移動することを特徴とする請求項１〜３の何れか１項に記載の通信装置。
【請求項５】
前記第２のメモリに記憶されている通信端点情報を検索する検索手段を有し、
前記検索手段は、前記切断待ち状態の遷移順と逆順に、前記第２のメモリに記憶された通信端点情報を検索することを特徴とする請求項１〜４の何れか１項に記載の通信装置。
【請求項６】
前記切断待ち状態への遷移順に前記第２のメモリに記憶されている通信端点情報を削除する削除手段を有することを特徴とする請求項１〜５の何れか１項に記載の通信装置。
【請求項７】
コネクション型の通信を行う通信装置の制御方法であって、
コネクションの通信端点に関する通信端点情報を記憶する第１のメモリに記憶された当該通信端点情報のうち、切断待ち状態となっているコネクションに対応する通信端点情報を当該第１のメモリから第２のメモリに移動する移動ステップを有することを特徴とする通信装置の制御方法。
【請求項８】
コネクション型の通信を行う通信装置を制御することをコンピュータに実行させるためのコンピュータプログラムであって、
コネクションの通信端点に関する通信端点情報を記憶する第１のメモリに記憶された当該通信端点情報のうち、切断待ち状態となっているコネクションに対応する通信端点情報を当該第１のメモリから第２のメモリに移動する移動ステップをコンピュータに実行させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、通信装置の制御方法、及びコンピュータプログラムに関し、特に、待ち状態が経過した後に通信回線の接続を切断するために用いて好適なものである。
【背景技術】
【０００２】
従来から、ネットワーク通信において、通信の信頼性を保証する通信プロトコルを使用して通信を行う通信装置が知られている。このような通信プロトコルには、通信状況を、タイマを使用して一定時間監視するものがあり、例えばインターネットで使用されているTCP（Transmission Control Protocol）が知られている。TCPの特徴としては、コネクション型の通信、パケットの再送機能、フロー制御機能等が挙げられる。
【０００３】
TCPの基本仕様は、インターネットに関する全ての公式標準であるRFC（Request For Comment）の中のRFC793に記述されている。TCPの通信手順は、まず、ホストコンピュータ（以下、「ホスト」と称する）の通信端点を割り当てる。これは、バークレーのソケットインタフェースに対応させると、socketシステムコールに対応する処理である。このsocketシステムコールでできた通信端点はソケットと呼ばれる。これにより、通信に必要な資源が一定量割り当てられる。次いで、相手ホストの特定アプリケーションに対して接続処理を行う。この接続処理で、接続のためのパケットが実際に送受信される。この処理はソケットインタフェースでは、connectシステムコールに対応する。接続が完了すると、データの送受信が可能となり、送受信が行われる。データの送受信が完了した後、切断処理のための通信を行い、それが終了すると、通信端点は削除され、通信のための資源が解放、すなわち通信回線が解放される。この切断処理は、ソケットインタフェースでは、closeシステムコールに対応する。
【０００４】
TCPの通信では、切断待ち状態であるTIME＿WAITから切断状態であるCLOSEDへは、タイマ等を用いて一定時間（2MSL（Max Segment Lifetime）時間）が経過してから遷移させるのが一般的である。多くの実装では、2MSL時間として１分から４分の値をタイマに設定し、タイムアウト後にCLOSEDに遷移する。このように一定時間の経過を待つようにするのは、こちらが送信したACKパケットが相手ホストに確かに届いたか否かを確認するためである。すなわち、自ホストは相手ホストにACKパケットを送信してTIME＿WAITに遷移したが、ACKパケットが何らかの事由で消失し、相手ホストに到着しない場合がある。相手ホストは、自ホストから送信したACKパケットが到着しない場合、FINパケットを再送するため、自ホストは、その再送されたFINパケットに対するACKパケットを返送して相手ホストとの切断を正常に終了させる必要がある。従って、FINパケットの再送の有無を確認するため、2MSL時間の待ち状態を継続、すなわち、相手ホストとの接続状態を維持する必要があるのである。
【０００５】
また、TCPの通信では、パケットの受信時に、受信したパケットがどのコネクションのものかを判別するためにTCPソケットの検索が行われる。そのため、ネットワークプロトコル処理装置は、コネクション毎に、相手ポート番号、自ポート番号、相手IPアドレス、自IPアドレスで構成されるソケット情報を記憶したTCPソケット検索テーブルを持つ。そして、パケットの受信時に、当該パケットに設定された"自ポート番号"、"相手ポート番号"、"自IPアドレス"、"相手IPアドレス"でTCPソケット検索テーブルを検索することで、当該パケットがどのコネクション宛てのパケットかを判定している。従来の通信装置では、前記TCPソケット検索テーブルを内部メモリに格納することで、TCPソケットの検索を高速化し、通信性能を向上させていた。しかし、相手ホストとの切断の正常な終了を確認するために、2MSL時間の経過を待つ間も、ソケット情報をTCPソケット検索テーブルに確保し、いつでも通信可能にしておく必要がある。そのため、新たに通信回線の接続を確立しようとした場合に、新たなソケット情報を格納するための空きが内部メモリにない場合がある。その場合には、いずれかの通信回線についてTIME＿WAITが終了し、内部メモリが解放されるまで待たされるという問題があった。特に、通信回線の接続と切断のサイクルが短い状況下では、データ通信が完了しているにも関わらず、TIME＿WAITになっているために開放状態となっていない通信端点が多くなる。組み込み機器のように、限られた容量の内部メモリしか許さない機器においては、内部メモリが不足し、新たな通信回線の接続の確立が待たされる事態が頻繁に発生し得る。
【０００６】
そこで、通信の信頼性を極力維持しつつ、TIME＿WAITにある通信回線の利用を早期に図り、新たな接続を早期に確立することができる手法が考えられている（特許文献１を参照）。特許文献１では、内部メモリが不足し、新たに通信回線の接続を確立できない場合、TIME＿WAITにおける経過時間に関わらず、最も古くTIME＿WAITに遷移した通信回線が確保している内部メモリを開放し、新たな通信回線の確立を可能にする。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０００−３４９８５６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１に記載の技術では、データ転送時間が非常に短く、通信端点の新規割り当てから切断までのサイクルが短い状況では、TIME＿WAITに遷移してから、2MSL時間の経過を待たずに、新たな接続のためにCLOSEに遷移する。これでは、2MSL時間を設定する意義がなくなり、通信の信頼性に与える影響を無視できない。
本発明はこのような問題点に鑑みてなされたものであり、通信の信頼性を維持しつつ、新たな通信回線の接続を早期に確立することができるようにすることを目的とする。
【課題を解決するための手段】
【０００９】
本発明の通信装置は、コネクション型の通信を行う通信装置であって、コネクションの通信端点に関する通信端点情報を記憶する第１のメモリと、前記第１のメモリに記憶された通信端点情報のうち、切断待ち状態となっているコネクションの通信端点情報を前記第１のメモリから第２のメモリに移動する移動手段とを有することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、待ち状態にある接続に対応する通信端点情報を第１のメモリから第２のメモリに移動するので、通信の信頼性を維持しつつ、新たな通信回線の接続を早期に確立することが可能になる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施形態のネットワークプロトコル処理装置の構成を示す図である。
【図２】内部メモリ内のデータ構造を示す図である。
【図３】外部メモリ内のデータ構造を示す図である。
【図４】能動オープン時の装置の動作を説明するフローチャートである。
【図５】受動オープン時の装置の動作を説明するフローチャートである。
【図６】コネクションの切断時の装置の動作を説明するフローチャートである。
【図７】TCPソケットの検索時の装置の動作を説明するフローチャートである。
【図８】第２の実施形態における能動オープン時の装置の動作を説明するフローチャートである。
【図９】受動オープン時の装置の動作を説明するフローチャートである。
【図１０】コネクションの切断時の装置の動作を説明するフローチャートである。
【発明を実施するための形態】
【００１２】
（第１の実施形態）
以下、図面を参照しながら、本発明の第１の実施形態を説明する。
図１は、コネクション型の通信を行い、複数のコネクションの接続、切断を行うネットワークプロトコル処理装置の構成の一例を示す図である。図１において、１０１はＣＰＵであり、TCP/IPネットワークプロトコル処理をソフトウェアにより実行する。１０２はＲＯＭであり、ＣＰＵ１０１が実行するソフトウェアが格納されている。１０３は内部メモリであり、通信回線の接続の状態としてコネクションがTIME＿WAIT以外にあるソケット情報の検索テーブルとして使用される。１０４は外部メモリであり、コネクションが切断待ち状態であるTIME＿WAITにあるソケット情報の検索テーブルや、ＣＰＵ１０１の実行ワークエリアとして使用される。１０５はＭＡＣ（Media Access Controller）、１０６はＰＨＹ（PHYsical layer）であり、メディア層以下の通信制御を行う。１０７はＤＭＡＣ（Direct Memory Access Controller）であり、TCP/IPネットワークで送受信するデータの外部メモリ１０４とＭＡＣ１０５との間の転送を管轄する。１０８は2MSLタイマであり、タイマの設定後2MSL時間（所定時間）が経過すると割り込み信号をアサートする。１０９は割り込みコントローラであり、ＭＡＣ１０５、ＤＭＡＣ１０７、２ＭＳＬタイマ１０８からの割り込み信号をＣＰＵ１０１へ通知する。１１０はバスであり、ＣＰＵ１０１、ＲＯＭ１０２、内部メモリ１０３、外部メモリ１０４、ＭＡＣ１０５、ＤＭＡＣ１０７、２ＭＳＬタイマ１０８、及び割り込みコントローラ１０９を相互に接続する。
尚、本実施形態では、内部メモリ１０３は高速なオンチップＳＲＡＭ、外部メモリ１０４は安価なＤＲＡＭで実現しているが、内部メモリ１０３及び外部メモリ１０４は、データの書き換えが可能な記憶媒体であれば、何れの記憶媒体で実施されてもよい。
【００１３】
図２は、内部メモリ１０３内のデータ構造の一例を示す図である。内部メモリ１０３は、内部メモリソケット検索テーブル２０１として利用される。内部メモリソケット検索テーブル２０１には、コネクションがTIME＿WAIT以外にあるソケット情報が格納される。２０２〜２０６はソケット情報であり、相手ポート番号２０７、自ポート番号２０８、相手IPアドレス２０９、自IPアドレス２１０、TIME＿WAITフラグ２１７、前ポインタ２１１、及び次ポインタ２１２で構成される。相手ポート番号２０７、自ポート番号２０８、相手IPアドレス２０９、及び自IPアドレス２１０には、そのソケット情報に対応するコネクションと同じ情報が格納される。TIME＿WAITフラグ２１７は、そのソケット情報に対応するコネクションがTIME＿WAITに遷移している場合には「１」が、遷移していない場合には「０」が格納される。ソケット情報２０２〜２０６は、双方向リストで管理され、前ポインタ２１１は一つ前のソケット情報のアドレスを格納し、次ポインタ２１２は一つ後のソケット情報のアドレスを格納する。
【００１４】
双方向リストの先頭にあるソケット情報２０２の前ポインタ２１１ａと、末尾のソケット情報２０６の次ポインタ２１２ｅの値は「０」であり、前後にソケット情報が存在しないことを示す。２１３は先頭ポインタであり、双方向リストの先頭にあるソケット情報２０２のアドレスを格納する。２１４は末尾ポインタであり、双方向リストの末尾にあるソケット情報２０６のアドレスを格納する。先頭ポインタ２１３と末尾ポインタ２１４の初期値は「０」であり、その値が「０」の場合はソケット情報が内部メモリソケット検索テーブル２０１に存在しないことを示す。２１５はエントリカウンタであり、内部メモリソケット検索テーブル２０１に格納されているソケット情報の数をカウントする。エントリカウンタ２１５の値が、内部メモリソケット検索テーブル２０１に格納できるソケット情報の最大数と同じである場合、ネットワークプロトコル処理装置１００は新しくコネクションを確立できない。このため、アプリケーションに対してエラーが通知される。
【００１５】
２１６はTIME＿WAITエントリカウンタであり、内部メモリソケット検索テーブル２０１に格納されているコネクションがTIME＿WAITにあるソケット情報の数をカウントする。TIME＿WAITエントリカウンタ２１６は、本実施形態では使用しない。内部メモリソケット検索テーブル２０１のソケット情報は、コネクションの確立の要求がある等してコネクションを確立する時に追加される。そして、当該ソケット情報は、当該ソケット情報に対応するコネクションがTIME＿WAITに遷移した際に削除される。本実施形態において、内部メモリソケット検索テーブル２０１は、ソケット情報を双方向リストで構成し、ＣＰＵ１０１が双方向リストを逐次的に読み出し、受信したパケットの情報との比較を行うことでソケット情報の検索を実現している。しかし、ＣＡＭ（Content Address Memory）や他の検索ハードウェアでソケット情報の検索を実現してもよい。
【００１６】
図３は、外部メモリ１０４内のデータ構造の一例を示す図である。尚、図３では、本実施形態を説明するために必要なデータのみを示している。図示しないがネットワークプロトコル処理を実現するために必要なデータは、図３に示すものの他にも存在する。例えば、ＣＰＵ１０１が処理するワークデータ等がそれに該当する。
図３において、３１６は送受信データ領域であり、ネットワークプロトコル処理装置１００が送受信するパケットを格納する。３０１は外部メモリソケット検索テーブルであり、コネクションがTIME＿WAITにあるソケット情報を格納する。３０２〜３０６はソケット情報であり、相手ポート番号３０７、自ポート番号３０８、相手IPアドレス３０９、自IPアドレス３１０、前ポインタ３１１、及び次ポインタ３１２で構成される。相手ポート番号３０７、自ポート番号３０８、相手IPアドレス３０９、及び自IPアドレス３１０には、そのソケット情報に対応するコネクションと同じ情報が格納される。ソケット情報３０２〜３０６は、双方向リストで管理され、前ポインタ３１１は一つ前のソケット情報のアドレスを格納し、次ポインタ３１２は一つ後のソケット情報のアドレスを格納する。
【００１７】
双方向リストの先頭にあるソケット情報３０２の前ポインタ３１１ａと、末尾のソケット情報３０６の次ポインタ３１２ｅの値は「０」であり、前後にソケット情報が存在しないことを示す。３１３は先頭ポインタであり、双方向リストの先頭にあるソケット情報３０２のアドレスを格納する。３１４は末尾ポインタであり、双方向リストの末尾にあるソケット情報３０６のアドレスを格納する。先頭ポインタ３１３と末尾ポインタ３１４の初期値は「０」であり、その値が「０」の場合はソケット情報が外部メモリソケット検索テーブル３０１に存在しないことを示す。３１５はエントリカウンタであり、外部メモリソケット検索テーブル３０１に格納されているソケット情報の数をカウントする。内部メモリソケット検索テーブル２０１のエントリが一杯であり、全てのエントリに対するコネクションが一斉にTIME_WAIT状態になってもオーバフローしないようにする必要がある。よって、外部メモリソケット検索テーブル３０１は内部メモリソケット検索テーブル２０１のエントリ分の空きを持っていることが必要である。そのため、エントリカウンタ３１５の値が「外部メモリソケット検索テーブル３０１に格納できるソケット情報の最大数−内部メモリソケット検索テーブル２０１のエントリカウンタ２１５の値」と同じである場合、新しくコネクションを確立できない。このため、アプリケーションに対してエラーが通知される。外部メモリソケット検索テーブル３０１のソケット情報は、そのソケット情報に対応するコネクションがTIME＿WAITへ遷移した際に追加され、TIME＿WAITに遷移してから2MSL時間が経過した際に削除される。
【００１８】
2MSLタイマ１０８は、起動されると、起動された時間から2MSL時間を加えたタイムアウト時間を内部に保持する。2MSLタイマ１０８は、現在時間がタイムアウト時間と等しくなると割り込み信号をアサートし、割り込みコントローラ１０９経由でＣＰＵ１０１に2MSL時間の経過を通知する。本実施形態では、2MSLタイマ１０８が並列に2MSL時間を計測できる数は、ネットワークプロトコル処理装置１００が同時に確立できるコネクションの数と同じである。
【００１９】
続いて、本実施形態に係るネットワークプロトコル処理装置１００におけるコネクションの確立時の動作の一例を、図４と図５を用いて説明する。図４は能動オープン時のフローチャートであり、図５は受動オープン時のフローチャートである。図４と図５のフローチャートはＣＰＵ１０１により実行される。
まず、能動オープン時のネットワークプロトコル処理装置１００の動作の一例を、図４を用いて説明する。
ステップＳ４０１において、ＣＰＵ１０１は、コネクションを確立できるか否かを判定する。具体的に、ＣＰＵ１０１は、以下の第１の条件及び第２の条件が成立しているか否かを判定する。
第１の条件：内部メモリソケット検索テーブル２０１のエントリカウンタ２１５の値＝内部メモリソケット検索テーブル２０１に格納できるソケット情報の最大数
第２の条件：外部メモリソケット検索テーブル３０１のエントリカウンタ３１５の値＝外部メモリソケット検索テーブル３０１に格納できるソケット情報の最大数−内部メモリソケット検索テーブル２０１のエントリカウンタ２１５の値
これら第１の条件及び第２の条件のどちらかの条件が成立した場合には、コネクションを確立できないのでステップＳ４１４に進む。ステップＳ４１４に進むと、ＣＰＵ１０１は、アプリケーションへエラーを通知して処理を終了する。
【００２０】
一方、これら第１の条件及び第２の条件のどちらの条件も成立しない場合には、コネクションを確立できるのでステップＳ４０２へ進む。ステップＳ４０２に進むと、ＣＰＵ１０１は、相手ホストへSYNパケットを送信し、SYN＿SENTへ状態を遷移させる。次に、ステップＳ４０３において、ＣＰＵ１０１は、パケットの受信待ちを行う。そして、パケットを受信すると、ステップＳ４０４において、ＣＰＵ１０１は、受信したパケットがSYNパケットを送信した相手ホストからのSYN+ACKパケットであるか否かを判定する。この判定の結果、受信したパケットがSYN+ACKパケットである場合には、ステップＳ４０５に進む。ステップＳ４０５に進むと、ＣＰＵ１０１は、ACKパケットを送信する処理を行い、ESTABLISHEDへ状態を遷移させる。次に、ステップＳ４０６において、ＣＰＵ１０１は、新たに確立されたコネクションのソケット情報を、内部メモリソケット検索テーブル２０１に追加すると共に、内部メモリソケット検索テーブル２０１内のエントリカウンタ２１５の値に「１」を加算する。
【００２１】
内部メモリソケット検索テーブル２０１へのソケット情報の追加手順の一例を以下に示す。
ＣＰＵ１０１は、内部メモリソケット検索テーブル２０１内に新しくソケット情報を生成する。そして、ＣＰＵ１０１は、生成したソケット情報の"相手ポート番号２０７"、"自ポート番号２０８"、"相手IPアドレス２０９"、及び"自IPアドレス２１０"に新しく確立したコネクションの対応する情報を格納する。また、ＣＰＵ１０１は、そのソケット情報の前ポインタ２１１に、末尾ポインタ２１４の内容を格納する。また、ＣＰＵ１０１は、そのソケット情報の次ポインタ２１２に、「０」を格納する。
【００２２】
次に、前ポインタ２１１に格納した末尾ポインタ２１４が「０」でない場合、ＣＰＵ１０１は、その末尾ポインタ２１４が示すソケット情報の次ポインタ２１２に、生成したソケット情報のアドレスを格納する。そして、ＣＰＵ１０１は、末尾ポインタ２１４に、生成したソケット情報のアドレスを格納する。
一方、前ポインタ２１１に格納した末尾ポインタ２１４が「０」であった場合、ＣＰＵ１０１は、先頭ポインタ２１３と末尾ポインタ２１４に、生成したソケット情報のアドレスを格納する。以上に説明した手順により、内部メモリソケット検索テーブル２０１に新たに確立したコネクションのソケット情報を追加する。また、内部メモリソケット検索テーブル２０１に格納されるソケット情報が増えたため、ＣＰＵ１０１は、エントリカウンタ２１５の値に「１」を加算する。
【００２３】
図４の説明に戻り、ステップＳ４０４において、受信したパケットがSYNパケットを送信した相手ホストからのSYN+ACKパケットでないと判定された場合には、ステップＳ４０７に進む。ステップＳ４０７に進むと、ＣＰＵ１０１は、受信したパケットが相手ホストからのSYNパケットであるか否かを判定する。この判定の結果、受信したパケットが相手ホストからのSYNパケットである場合には、ステップＳ４０８に進む。ステップＳ４０８に進むと、ＣＰＵ１０１は、相手ホストにACKパケットを送信する処理を行い、SYN＿RECEIVEDに状態を遷移させる。
次に、ステップＳ４０９において、ＣＰＵ１０１は、パケットの受信待ちを行う。そして、パケットを受信すると、ステップＳ４１０に進み、ＣＰＵ１０１は、受信したパケットが送信したSYNパケットに対するACKパケットであるか否かを判定する。この判定の結果、受信したパケットが送信したSYNパケットに対するACKパケットであった場合には、ステップＳ４１１に進む。ステップＳ４１１に進むと、ＣＰＵ１０１は、ESTABLISHEDへ状態を遷移させ、前述したステップＳ４０６へ進む。
【００２４】
ステップＳ４０７において、受信したパケットが相手ホストからのSYNパケットでなかったと判定された場合には、ステップＳ４１２に進む。ステップＳ４１２に進むと、ＣＰＵ１０１は、受信したパケットに対応した処理を行った後、前述したステップＳ４０３でパケットの受信待ちを行う。
また、ステップＳ４１０において、受信したパケットが送信したSYNパケットに対するACKパケットでなかった場合には、ステップＳ４１３に進む。ステップＳ４１３に進むと、ＣＰＵ１０１は、受信したパケットに対応した処理を行った後、前述したステップＳ４０９でパケットの受信待ちを行う。
【００２５】
次に、受動オープン時のネットワークプロトコル処理装置１００の動作の一例を、図５を用いて説明する。
ステップＳ５０１において、ＣＰＵ１０１は、パケットの受信待ちを行う。そして、パケットを受信すると、ステップＳ５０２へ進み、ＣＰＵ１０１は、受信したパケットがSYNパケットであるか否かを判定する。この判定の結果、受信したパケットがSYNパケットであった場合には、ステップＳ５０３に進む。ステップＳ５０３に進むと、ＣＰＵ１０１は、コネクションを確立できるか否かを判定する。具体的に、ＣＰＵ１０１は、以下の第１の条件及び第２の条件が成立しているか否かを判定する。
第１の条件：内部メモリソケット検索テーブル２０１のエントリカウンタ２１５の値＝内部メモリソケット検索テーブル２０１に格納できるソケット情報の最大数
第２の条件：外部メモリソケット検索テーブル３０１のエントリカウンタ３１５の値＝外部メモリソケット検索テーブル３０１に格納できるソケット情報の最大数−内部メモリソケット検索テーブル２０１のエントリカウンタ２１５の値
これら第１の条件及び第２の条件のどちらかの条件が成立した場合には、コネクションを確立できないのでステップＳ５１１に進む。ステップＳ５１１に進むと、ＣＰＵ１０１は、アプリケーションへエラーを通知して処理を終了する。
【００２６】
一方、これら第１の条件及び第２の条件のどちらの条件も成立しない場合には、コネクションを確立できるのでステップＳ５０４へ進む。ステップＳ５０４に進むと、ＣＰＵ１０１は、SYNパケットを送信した相手ホストへSYN＋ACKパケットを送信する処理を行い、SYN＿RECEIVEDへ状態を遷移させる。次に、ステップＳ５０５において、ＣＰＵ１０１は、パケットの受信待ちを行う。そして、パケットを受信すると、ステップＳ５０６へ進み、ＣＰＵ１０１は、受信したパケットが送信したSYNパケットに対するACKパケットであるか否かを判定する。この判定の結果、受信したパケットが送信したSYNパケットに対するACKパケットであった場合には、ステップＳ５０７に進む。ステップＳ５０７に進むと、ＣＰＵ１０１は、新たに確立されたコネクションのソケット情報を、内部メモリソケット検索テーブル２０１に追加すると共に、内部メモリソケット検索テーブル２０１内のエントリカウンタ２１５の値に「１」を加算する。内部メモリソケット検索テーブル２０１へのソケット情報の追加手順は能動オープン時と同じであるため、その詳細は省略する。
その後、ステップＳ５０８において、ＣＰＵ１０１は、ESTABLISHEDへ状態を遷移させる。
【００２７】
ステップＳ５０２において、受信したパケットがSYNパケットでないと判定された場合には、ステップＳ５０９に進み、ＣＰＵ１０１は、受信したパケットに対応した処理を行った後、前述したステップＳ５０１に進み、パケットの受信待ちを行う。また、ステップＳ５０６において、受信したパケットが送信したSYNパケットに対するACKパケットでないと判定された場合には、ステップＳ５１０に進み、ＣＰＵ１０１は、受信したパケットに対応した処理を行う。そして、前述したステップＳ５０５に進み、ＣＰＵ１０１は、パケットの受信待ちを行う。
尚、図４、図５では、能動オープン時と受動オープン時とで、ESTABLISHEDへの遷移と内部メモリソケット検索テーブル２０１の更新の順序が逆である場合を例に挙げて示しているが、これらが同じであってもよい。すなわち、ステップＳ４０５、Ｓ４１１とステップＳ４０６の順序は、図４に示したものと反対であってもよく、ステップＳ５０７とステップＳ５０８の順序は、図５に示したものと反対であってもよい。
【００２８】
次に、ネットワークプロトコル処理装置１００におけるコネクションの切断時の動作の一例を、図６を用いて説明する。図６は、コネクションの切断時のネットワークプロトコル処理装置１００の動作の一例を説明するフローチャートである。図６のフローチャートはＣＰＵ１０１により実行される。
まず、ステップＳ６０１において、ＣＰＵ１０１は、FINパケットを相手ホストに送信して、FIN＿WAIT＿1に状態を遷移させる。次に、ステップＳ６０２において、ＣＰＵ１０１は、パケットの受信待ちを行う。この状態において、相手ホストから送信される可能性があるパケットとして次の（１）〜（４）の４つが考えられる。
（１）こちらから送信したFINパケットに対するACKパケット。
（２）こちらから送信したFINパケットに対するACKを伴わないFINパケット。
（３）こちらから送信したFINパケットに対するACK及び相手ホストからのFINの双方がのったパケット。
（４）（１）〜（３）以外のパケット。
【００２９】
次いで、ステップＳ６０３において、ＣＰＵ１０１は、受信したパケットに応じた処理を実行する。次に、ステップＳ６０４において、ＣＰＵ１０１は、ステップＳ６０３の処理の結果、TIME＿WAITに状態が遷移したか否かを判定する。
具体的に、ステップＳ６０３では次の（１）〜（４）のような対応処理が行われる。
（１）こちらから送信したFINパケットに対するACKパケットを受信した場合、ＣＰＵ１０１は、FIN＿WAIT＿2に状態を遷移させる。この状態で相手ホストからのFINパケットを受信したら、ＣＰＵ１０１は、それに対するACKパケットを返信する処理を行い、TIME＿WAITに状態を遷移させる。
【００３０】
（２）こちらから送信したFINパケットに対するACKを伴わない相手ホストからのFINパケットを受信した場合、ＣＰＵ１０１は、相手ホストからのFINパケットに対するACKパケットを返信する処理をしてCLOSINGに状態を遷移させる。その後、こちらから送信したFINパケットに対するACKパケットを受信すれば、ＣＰＵ１０１は、TIME＿WAITに状態を遷移させる。
（３）こちらから送信したFINパケットに対するACK及び相手ホストからのFINの双方がのったパケットを受信した場合、ＣＰＵ１０１は、相手ホストからのパケット（FIN）に対するACKパケットを返信する処理をする。そして、ＣＰＵ１０１は、TIME＿WAITへ状態を遷移させる。
（４）これら以外のパケットを受信した場合、ＣＰＵ１０１は、TIME＿WAITに状態を遷移させずに、FIN＿WAIT＿1の状態を維持する。
【００３１】
以上のようなステップＳ６０３の処理を経て、ステップＳ６０４の結果、TIME＿WAITに状態が遷移すると、ステップＳ６０５に進み、ＣＰＵ１０１は、TIME＿WAITの状態を解除するための2MSLタイマ１０８を起動する。ここまでの処理は、TCPの仕様に準拠した処理内容である。本実施形態では更に、ステップＳ６０６において、ＣＰＵ１０１は、TIME＿WAITに遷移したコネクションに対応する"内部メモリソケット検索テーブル２０１内のソケット情報"を、外部メモリソケット検索テーブル３０１の双方向リストの末尾にコピーする。ここで、コピーすべきソケット情報は、切断処理にて、送信したFINパケットに対するACKパケットを受信したときのTCPソケットの検索で一致したソケット情報のアドレスにより、特定することが可能である。
【００３２】
以下に、内部メモリソケット検索テーブル２０１から外部メモリソケット検索テーブル３０１へソケット情報をコピーする手順の一例を示す。
まず、ＣＰＵ１０１は、外部メモリソケット検索テーブル３０１内に新しくソケット情報を生成する。そして、ＣＰＵ１０１は、生成したソケット情報の"相手ポート番号３０７"、"自ポート番号３０８"、"相手IPアドレス３０９"、及び"自IPアドレス３１０"に、コピーすべきソケット情報の対応する情報を格納する。また、ＣＰＵ１０１は、前ポインタ３１１に、末尾ポインタ３１４の内容を格納する。
【００３３】
次に、ＣＰＵ１０１は、前ポインタ３１１に格納した末尾ポインタ３１４が「０」でない場合、その末尾ポインタ３１４が示すソケット情報の次ポインタ３１２に、生成したソケット情報のアドレスを格納する。そして、ＣＰＵ１０１は、末尾ポインタ３１４に、生成したソケット情報のアドレスを格納する。
一方、前ポインタ３１１に格納した末尾ポインタ３１４が「０」であった場合、ＣＰＵ１０１は、先頭ポインタ３１３と末尾ポインタ３１４に、生成したソケット情報のアドレスを格納する。本実施形態では、以上に説明した手順により、内部メモリソケット検索テーブル２０１から外部メモリソケット検索テーブル３０１の双方向リストの末尾に、TIME＿WAITへ遷移したコネクションに対応するソケット情報をコピーする。外部メモリソケット検索テーブル３０１は、TIME＿WAITへの状態が遷移した順番で双方向リストの末尾にソケット情報を追加するため、ソケット情報はTIME＿WAITへの状態の遷移順に並んでいる。外部メモリソケット検索テーブル３０１に格納されるソケット情報が増えたため、ＣＰＵ１０１は、ソケット情報のコピーの後、外部メモリソケット検索テーブル３０１のエントリカウンタ３１５の値に「１」を加算する。
【００３４】
図６の説明に戻り、ステップＳ６０７において、ＣＰＵ１０１は、TIME＿WAITに状態が遷移したコネクションに対応する"内部メモリソケット検索テーブル２０１内のソケット情報"を削除する。以下に、その手順の一例を示す。
まず、削除するべきソケット情報の前ポインタ２１１が「０」でない場合、ＣＰＵ１０１は、削除するべきソケット情報の前ポインタ２１１が示すソケット情報の次ポインタ２１２に、削除するべきソケット情報の次ポインタ２１２の値を格納する。一方、削除するべきソケット情報の前ポインタが「０」であった場合、ＣＰＵ１０１は、先頭ポインタ２１３に、削除するべきソケットの次ポインタ２１２の値を格納する。また、削除するべきソケットの次ポインタ２１２が示すソケット情報の前ポインタ２１１を「０」にする。
【００３５】
また、削除するべきソケット情報の次ポインタ２１２が「０」でない場合、ＣＰＵ１０１は、その次ポインタ２１２が示すソケット情報の前ポインタ２１１に、削除するべきソケット情報の前ポインタ２１１の値を格納する。一方、削除するべきソケット情報の次ポインタが「０」であった場合、ＣＰＵ１０１は、末尾ポインタ２１４に、削除するべきソケット情報の前ポインタ２１１の値を格納する。削除するべきソケットの前ポインタ２１１が示すソケット情報の次ポインタ２１２を「０」にする。
そして、ＣＰＵ１０１は、削除するべきソケット情報を削除する。ソケット情報を削除した後、ＣＰＵ１０１は、内部メモリソケット検索テーブル２０１のエントリカウンタ２１５の値から「１」を減算する。
ステップＳ６０６とステップＳ６０７によれば、TIME＿WAITにあるコネクションのソケット情報が内部メモリ１０３を占めることがなくなり、新たなコネクションを早期に確立することが可能になる。また、TIME＿WAITにあるコネクションのソケット情報は破棄するのではなく、外部メモリ１０４に退避することで通信の信頼性を維持することが可能になる。
【００３６】
次に、2MSLタイマ１０８がタイムアウトした場合のネットワークプロトコル処理装置１００の動作の一例を説明する。
2MSLタイマ１０８がタイムアウトした場合、割り込み信号がアサートされ、割り込みコントローラ１０９経由でＣＰＵ１０１へ2MSL時間が経過したことが通知される。この通知を受けたＣＰＵ１０１は、外部メモリソケット検索テーブル３０１からTIME＿WAITに遷移してから2MSL時間が経過したコネクションのソケット情報を削除する。ソケット情報の削除手順の一例を以下に示す。
外部メモリソケット検索テーブル３０１では、ソケット情報はTIME＿WAITに遷移した順番で並んでいる。そのため、ＣＰＵ１０１は、2MSLタイマ１０８がタイムアウトした場合、最も古いソケット情報を削除すればよい。つまり、双方向リストの先頭のソケット情報を削除すればよい。
【００３７】
そして、先頭ポインタ３１３が示すソケット情報の次ポインタ３１２が「０」でない場合、ＣＰＵ１０１は、次ポインタ３１２が示すソケット情報の前ポインタ３１１に「０」を格納する。更に、ＣＰＵ１０１は、先頭ポインタ３１３に、削除するべきソケット情報の次ポインタ３１２の値を格納する。
一方、先頭ポインタ３１３が示すソケット情報の次ポインタ３１２が「０」である場合、ＣＰＵ１０１は、先頭ポインタ３１３と末尾ポインタ３１４に「０」を格納する。以上の手順が完了した後、ＣＰＵ１０１は、TIME＿WAITに遷移してから2MSL時間が経過したコネクションのソケット情報を削除する。本処理によれば、削除するソケット情報を探索する必要が無くなり、ソケット情報の管理が容易になる。
【００３８】
最後に、TCPソケットの検索時のネットワークプロトコル処理装置１００における動作の一例を、図７を用いて説明する。図７は、TCPソケットの検索時のネットワークプロトコル処理装置１００における動作の一例を説明するフローチャートである。図７のフローチャートはＣＰＵ１０１により実行される。
ステップＳ７０１において、ＣＰＵ１０１は、パケットの受信待ちを行う。そして、パケットを受信すると、ステップＳ７０２へ進む。ステップＳ７０２に進むと、ＣＰＵ１０１は、受信したパケットの"相手ポート番号"、"自ポート番号"、"相手IPアドレス"、及び"自IPアドレス"を用いて、内部メモリソケット検索テーブル２０１を検索する。内部メモリソケット検索テーブル２０１の検索に際し、ＣＰＵ１０１は、まず先頭ポインタ２１３が示すソケット情報を読み出し、受信したパケットの"相手ポート番号"、"自ポート番号"、"相手IPアドレス"、及び"自IPアドレス"と比較する。比較の結果、これらが一致すれば検索を終了する。一方、これらが一致しない場合、ＣＰＵ１０１は、読み出したソケット情報の次ポインタ２１２が示すソケット情報を読み出し、読み出したソケット情報と受信した情報とを比較するという処理を次ポインタ２１２が「０」になるまで繰り返す。次ポインタ２１２が「０」になった場合、受信した情報に一致するソケット情報は内部メモリソケット検索テーブル２０１内に存在しないことになる。
【００３９】
図７の説明に戻り、ステップＳ７０３において、ＣＰＵ１０１は、ステップＳ７０２で検索した結果を判定する。すなわち、ＣＰＵ１０１は、受信した"相手ポート番号"、"自ポート番号"、"相手IPアドレス"、及び"自IPアドレス"と一致するソケット情報が内部メモリソケット検索テーブル２０１にあるか否かを判定する。この判定の結果、受信した情報と一致するソケット情報がある場合、受信したパケットは有効であると判定され、ステップＳ７０４に進む。ステップＳ７０４に進むと、ＣＰＵ１０１は、受信したパケットに対応した処理を行う。
一方、受信した情報と一致するソケット情報がなかった場合、受信したパケットはTIME＿WAITの状態にあるコネクション宛のパケット、又は、確立されていないコネクションに対する無効なパケットであると判定されステップＳ７０５に進む。ステップＳ７０５に進むと、ＣＰＵ１０１は、外部メモリソケット検索テーブル３０１を検索する。外部メモリソケット検索テーブル３０１の検索に際し、ＣＰＵ１０１は、まず末尾ポインタ３１４が示すソケット情報を読み出し、受信したパケットの"相手ポート番号"、"自ポート番号"、"相手IPアドレス"、"自IPアドレス"と比較する。比較の結果、これらが一致すれば検索を終了する。一方、これらが一致しない場合、ＣＰＵ１０１は、読み出したソケット情報の前ポインタ３１１が示すソケット情報を読み出し、読み出したソケット情報と受信した情報とを比較するという処理を前ポインタ３１１が「０」になるまで繰り返す。前ポインタ３１１が「０」になった場合、受信した情報に一致するソケット情報は外部メモリソケット検索テーブル３０１内に存在しないことになる。
【００４０】
図７の説明に戻り、ステップＳ７０４において、ＣＰＵ１０１は、ステップＳ７０２、Ｓ７０５の検索結果と、ステップＳ７０１で受信したパケットに対応した処理を行う。
TIME＿WAITに遷移してからの時間が経つほど通信が実行される可能性が低くなる。このため、ステップＳ７０５で外部メモリソケット検索テーブル３０１をTIME＿WAITに遷移した順番とは逆順で検索することで、受信した情報がHITする確率が向上し、検索にかかる時間を短縮化することが可能になる。
【００４１】
（第２の実施形態）
次に、本発明の第２の実施形態を説明する。本実施形態と前述した第１の実施形態とは、コネクションの確立時、コネクションの切断時、及び2MSLタイマ１０８のタイムアウト時の処理の一部が主として異なる。そこで、本実施形態の説明において、第１の実施形態と同一の部分については、図１〜図７に付した符号と同一の符号を付す等して詳細な説明を省略する。
【００４２】
本実施形態では、TIME＿WAITエントリカウンタ２１６を使用する。TIME＿WAITエントリカウンタ２１６は、内部メモリソケット検索テーブル２０１に格納されているコネクションがTIME＿WAITにあるソケット情報の数をカウントする。したがって、エントリカウンタ２１５の値が、内部メモリソケット検索テーブル２０１に格納できるソケット情報の最大数と同じであり、且つ、TIME＿WAITエントリカウンタ２１６が「０」である場合、新しくコネクションを確立できない。この場合、アプリケーションにエラーが通知される。エントリカウンタ２１５の値が、内部メモリソケット検索テーブル２０１に格納できるソケット情報の最大数でも、TIME＿WAITに遷移しているソケット情報があれば、遷移から最も時間が経過しているソケット情報を外部メモリ検索テーブル３０１に移動する。
【００４３】
しかし、エントリカウンタ３１５の値が外部メモリソケット検索テーブル３０１に格納できるソケット情報の最大数と同じである場合は、内部メモリソケット検索テーブル２０１から外部メモリソケット検索テーブル３０１にソケット情報を移動できない。そのため、新しくコネクションを確立できず、アプリケーションにエラーが通知される。外部メモリソケット検索テーブル３０１のソケット情報は、内部メモリソケット検索テーブル２０１から追い出される際に追加され、対応するコネクションがTIME＿WAITに遷移してから2MSL時間が経過した際に削除される。
【００４４】
続いて、本実施形態に係るネットワークプロトコル処理装置１００のコネクションの確立時の動作の一例を、図８と図９を用いて説明する。図８は能動オープン時のフローチャートであり、図９は受動オープン時のフローチャートである。図８と図９のフローチャートはＣＰＵ１０１により実行される。
まず、能動オープン時のネットワークプロトコル処理装置１００の動作の一例を、図８を用いて説明する。
ステップＳ８０１において、ＣＰＵ１０１は、コネクションを確立できるか否かを判定する。具体的に、ＣＰＵ１０１は、以下の第１の条件及び第２の条件が成立しているか否かを判定する。
第１の条件：以下の（１）且つ（２）
（１）内部メモリソケット検索テーブル２０１のエントリカウンタ２１５の値＝内部メモリソケット検索テーブル２０１に格納できるソケット情報の最大数
（２）TIME＿WAITエントリカウンタ２１６の値＝０
第２の条件：以下の（１）且つ（２）且つ（３）
（１）内部メモリソケット検索テーブル２０１のエントリカウンタ２１５の値＝内部メモリソケット検索テーブル２０１に格納できるソケット情報の最大数
（２）TIME＿WAITエントリカウンタ２１６の値≠０
（３）外部メモリソケット検索テーブル３０１のエントリカウンタ３１５の値＝外部メモリソケット検索テーブル３０１に格納できるソケット情報の最大数
【００４５】
これら第１の条件及び第２の条件のどちらかの条件が成立した場合には、コネクションを確立できないのでステップＳ８１８に進む。ステップＳ８１８に進むと、ＣＰＵ１０１は、アプリケーションへエラーを通知して処理を終了する。
一方、これら第１の条件及び第２の条件のどちらの条件も成立しない場合には、コネクションを確立できるのでステップＳ８０２へ進む。ステップＳ８０２に進むと、ＣＰＵ１０１は、相手ホストへSYNパケットを送信し、SYN＿SENTへ状態を遷移させる。次に、ステップＳ８０３において、ＣＰＵ１０１は、パケットの受信待ちを行う。そして、パケットを受信すると、ステップＳ８０４において、ＣＰＵ１０１は、受信したパケットがSYNパケットを送信した相手ホストからのSYN+ACKパケットであるか否かを判定する。この判定の結果、受信したパケットがSYN+ACKパケットである場合には、ステップＳ８０５に進む。ステップＳ８０５に進むと、ＣＰＵ１０１は、ACKパケットを送信する処理を行い、ESTABLISHEDへ状態を遷移させる。
【００４６】
次に、ステップＳ８０６において、ＣＰＵ１０１は、内部メモリソケット検索テーブル２０１のエントリカウンタ２１５の値が内部メモリソケット検索テーブル２０１に格納できる最大数（閾値）に等しいか否かを判定する。この判定の結果、エントリカウンタ２１５の値が内部メモリソケット検索テーブル２０１に格納できる最大数に等しくない場合、内部メモリソケット検索テーブル２０１には新たに確立されたコネクションのソケット情報を格納する空きがあることになる。このため、ステップＳ８０７へ進み、ＣＰＵ１０１は、新たに確立されたコネクションのソケット情報を、内部メモリソケット検索テーブル２０１に追加する。内部メモリソケット検索テーブル２０１へのソケット情報の追加手順は第１の実施形態と同様であるが、生成したソケット情報のTIME＿WAITフラグ２１７には、コネクションがTIME＿WAITでないことを示すために「０」を格納する。また、内部メモリソケット検索テーブル２０１に格納されるソケット情報が増えたため、ＣＰＵ１０１は、エントリカウンタ２１５の値に「１」を加算する。
【００４７】
ステップＳ８０６において、エントリカウンタ２１５の値が内部メモリソケット検索テーブル２０１に格納できる最大数に等しいと判定された場合にはステップＳ８０８へ進む。ステップＳ８０８に進むと、ＣＰＵ１０１は、内部メモリソケット検索テーブル２０１内で最も古くTIME＿WAITに遷移したコネクションのソケット情報を検索する。以下にその検索手順の一例を示す。
まず、ＣＰＵ１０１は、先頭ポインタ２１３が示すソケット情報を読み出し、そのソケット情報のTIME＿WAITフラグ２１７が「１」であるか否かを確認する。この確認の結果、TIME＿WAITフラグ２１７が「１」であれば、そのソケット情報が最も古くTIME＿WAITに遷移したコネクションのソケット情報である。一方、TIME＿WAITフラグ２１７が「０」であった場合、ＣＰＵ１０１は、先頭ポインタ２１３が示すソケット情報の次ポインタ２１２が示すソケット情報を読み出す。そして、ＣＰＵ１０１は、読み出したソケット情報のTIME＿WAITフラグを確認するという処理をTIME＿WAITフラグが「１」のソケット情報を読み出すまで繰り返す。
【００４８】
次に、ステップＳ８０９において、ＣＰＵ１０１は、ステップＳ８０８で検出した"最も古くTIME＿WAITに状態が遷移したコネクションのソケット情報"を外部メモリソケット検索テーブル３０１へコピーする。内部メモリソケット検索テーブル２０１から外部メモリソケット検索テーブル３０１へソケット情報をコピーする手順は第１の実施形態と同様であるので、その詳細な説明を省略する。ＣＰＵ１０１は、最も古くTIME＿WAITに遷移したコネクションのソケット情報をコピーした後、外部メモリソケット検索テーブル３０１のエントリカウンタ３１５の値に「１」を加算する。続くステップＳ８１０において、ＣＰＵ１０１は、最も古くTIME＿WAITに状態が遷移したコネクションに対応する内部メモリソケット検索テーブル２０１内のソケット情報を削除する。内部メモリソケット検索テーブル２０１のソケット情報を削除する手順は第１の実施形態と同様であるので、その詳細な説明を省略する。最も古くTIME＿WAITに状態が遷移したコネクションに対応するソケット情報を削除した後、ＣＰＵ１０１は、内部メモリソケット検索テーブル２０１のエントリカウンタ２１５の値とTIME＿WAITエントリカウンタ２１６の値から「１」を減算する。そして、前述したステップＳ８０７へ進む。
【００４９】
ステップＳ８０４において、受信したパケットがSYN+ACKパケットでないと判定された場合には、ステップＳ８１１に進む。ステップＳ８１１に進むと、ＣＰＵ１０１は、受信したパケットが相手ホストからのSYNパケットであるか否かを判定する。この判定の結果、受信したパケットが相手ホストからのSYNパケットである場合には、ステップＳ８１２に進む。ステップＳ８１２に進むと、ＣＰＵ１０１は、相手ホストにACKパケットを送信する処理を行い、SYN＿RECEIVEDに状態を遷移させる。
次に、ステップＳ８１３において、ＣＰＵ１０１は、パケットの受信待ちを行い、ステップＳ８１４において、ＣＰＵ１０１は、受信したパケットが送信したSYNパケットに対するACKパケットであるか否かを判定する。この判定の結果、受信したパケットが送信したSYNパケットに対するACKパケットであった場合には、ステップＳ８１５に進む。ステップＳ８１５に進むと、ＣＰＵ１０１は、ESTABLISHEDへ状態を遷移させ、前述したステップＳ８０６へ進む。
【００５０】
ステップＳ８１１において、受信したパケットがSYNパケットでなかったと判定された場合には、ステップＳ８１６に進む。ステップＳ８１６に進むと、ＣＰＵ１０１は、受信したパケットに対応した処理を行った後、前述したステップＳ８０３でパケットの受信待ちを行う。
ステップＳ８１４において、受信したパケットが送信したSYNパケットに対するACKパケットでなかった場合には、ステップＳ８１７に進む。ステップＳ８１７に進むと、ＣＰＵ１０１は、受信したパケットに対応した処理を行った後、前述したステップＳ８１３でパケットの受信待ちを行う。
【００５１】
次に、受動オープン時のネットワークプロトコル処理装置１００の動作の一例を、図９を用いて説明する。
ステップＳ９０１において、ＣＰＵ１０１は、パケットの受信待ちを行う。そして、パケットを受信すると、ステップＳ９０２へ進み、ＣＰＵ１０１は、受信したパケットがSYNパケットであるか否かを判定する。この判定の結果、受信したパケットがSYNパケットであった場合には、ステップＳ９０３に進む。ステップＳ９０３に進むと、ＣＰＵ１０１は、コネクションを確立できるか否かを判定する。具体的に、ＣＰＵ１０１は、以下の第１の条件及び第２の条件が成立しているか否かを判定する。
具体的に、ＣＰＵ１０１は、以下の第１の条件及び第２の条件が成立しているか否かを判定する。
第１の条件：以下の（１）且つ（２）
（１）内部メモリソケット検索テーブル２０１のエントリカウンタ２１５の値＝内部メモリソケット検索テーブル２０１に格納できるソケット情報の最大数
（２）TIME＿WAITエントリカウンタ２１６の値＝０
第２の条件：以下の（１）且つ（２）且つ（３）
（１）内部メモリソケット検索テーブル２０１のエントリカウンタ２１５の値＝内部メモリソケット検索テーブル２０１に格納できるソケット情報の最大数
（２）TIME＿WAITエントリカウンタ２１６の値≠０
（３）外部メモリソケット検索テーブル３０１のエントリカウンタ３１５の値＝外部メモリソケット検索テーブル３０１に格納できるソケット情報の最大数
これら第１の条件及び第２の条件のどちらかの条件が成立した場合には、コネクションを確立できないのでステップＳ９１５に進む。ステップＳ９１５に進むと、ＣＰＵ１０１は、アプリケーションへエラーを通知して処理を終了する。
【００５２】
一方、これら第１の条件及び第２の条件のどちらの条件も成立しない場合には、コネクションを確立できるのでステップＳ９０４へ進む。ステップＳ９０４に進むと、ＣＰＵ１０１は、SYNパケットを送信した相手ホストへSYN＋ACKパケットを送信し、SYN＿RECEIVEDへ状態を遷移させる。次に、ステップＳ９０５において、ＣＰＵ１０１は、パケットの受信待ちを行う。そして、パケットを受信すると、ステップＳ９０６に進み、ＣＰＵ１０１は、受信したパケットが送信したSYNパケットに対するACKパケットであるか否かを判定する。この判定の結果、受信したパケットが送信したSYNパケットに対するACKパケットであった場合には、ステップＳ９０７に進む。
ステップＳ９０７に進むと、ＣＰＵ１０１は、内部メモリソケット検索テーブル２０１のエントリカウンタ２１５の値が内部メモリソケット検索テーブル２０１に格納できる最大数（閾値）に等しいか否かを判定する。この判定の結果、エントリカウンタ２１５の値が内部メモリソケット検索テーブル２０１に格納できる最大数に等しくない場合、内部メモリソケット検索テーブル２０１には新たに確立されたコネクションのソケット情報を格納する空きがあることになる。このため、ステップＳ９０８へ進み、ＣＰＵ１０１は、新たに確立されたコネクションのソケット情報を内部メモリソケット検索テーブル２０１に追加する。内部メモリソケット検索テーブル２０１へのソケット情報の追加手順は能動オープン時と同じであるため、その詳細な説明を省略する。また、内部メモリソケット検索テーブル２０１に格納されるソケット情報が増えたため、ＣＰＵ１０１は、エントリカウンタ２１５の値に「１」を加算する。このように、新たに確立されたコネクションのソケット情報を内部メモリソケット検索テーブル２０１に追加した後、ステップＳ９０８において、ＣＰＵ１０１は、ESTABLISHEDへ状態を遷移させる。
【００５３】
ステップＳ９０２において、受信したパケットがSYNパケットでないと判定された場合には、ステップＳ９１３に進み、ＣＰＵ１０１は、受信したパケットに対応した処理を行った後、前述したステップＳ９０１に進み、パケットの受信待ちを行う。また、ステップＳ９０６において、受信したパケットが送信したSYNパケットに対するACKパケットでないと判定された場合には、ステップＳ９１４に進み、ＣＰＵ１０１は、受信したパケットに対応した処理を行う。そして、前述したステップＳ９０５に進み、ＣＰＵ１０１は、パケットの受信待ちを行う。
【００５４】
ステップＳ９０７において、エントリカウンタ２１５の値が内部メモリソケット検索テーブル２０１に格納できる最大数に等しいと判定された場合にはステップＳ９１０へ進む。ステップＳ９１０に進むと、ＣＰＵ１０１は、内部メモリソケット検索テーブル２０１内で最も古くTIME＿WAITに遷移したコネクションのソケット情報を検索する。この検索の手順は能動オープン時と同じであるため、その詳細な説明を省略する。
次に、ステップＳ９１１において、ＣＰＵ１０１は、ステップＳ９１０で検出した"最も古くTIME＿WAITに状態が遷移したコネクションのソケット情報"を外部メモリソケット検索テーブル３０１へコピーする。このコピーの手順は能動オープン時と同じであるため、その詳細な説明を省略する。そして、ＣＰＵ１０１は、外部メモリソケット検索テーブル３０１のエントリカウンタ３１５の値に「１」を加算する。
【００５５】
次に、ステップＳ９１２において、ＣＰＵ１０１は、最も古くTIME＿WAITに状態が遷移したコネクションに対応する内部メモリソケット検索テーブル２０１内のソケット情報を削除する。この削除の手順は能動オープン時と同じであるため、その詳細な説明を省略する。そして、ＣＰＵ１０１は、内部メモリソケット検索テーブル２０１のエントリカウンタ２１５の値とTIME＿WAITエントリカウンタ２１６の値から「１」を減算する。そして、前述したステップＳ９０８へ進む。
以上のように、TIME＿WAITの状態にあるコネクションのソケット情報が内部メモリ１０３を占めることがなくなり、新たなコネクションを早期に確立することが可能になる。また、TIME＿WAITの状態にあるコネクションのソケット情報は破棄するのではなく、外部メモリに退避することで通信の信頼性を維持することが可能になる。
【００５６】
次に、ネットワークプロトコル処理装置１００におけるコネクションの切断時の動作の一例を、図１０を用いて説明する。図１０は、コネクションの切断時のネットワークプロトコル処理装置１００の動作の一例を説明するフローチャートである。図１０のフローチャートはＣＰＵ１０１により実行される。
ステップＳ１００１〜Ｓ１００５は、第１の実施形態の切断時フローチャートである図６のステップＳ６０１〜６０５と同じであるので、その詳細な説明を省略する。そして、ステップＳ１００６に進むと、ＣＰＵ１０１は、TIME＿WAITの状態に遷移したコネクションに対応するソケット情報のTIME＿WAITフラグ２１７に「１」を格納する。TIME＿WAITフラグ２１７を変更するべきソケット情報は、切断処理にて、送信したFINパケットに対するACKパケットを受信したときのTCPソケットの検索で一致したソケット情報のアドレスにより特定することが可能である。TIME＿WAITフラグ２１７の値を変更した後、TIME＿WAITエントリカウンタ２１６の値に「１」を加算する。
【００５７】
次に、2MSLタイマ１０８がタイムアウトした場合のネットワークプロトコル処理装置１００の動作の一例を説明する。
2MSLタイマ１０８がタイムアウトした場合、割り込み信号がアサートされ、割り込みコントローラ１０９経由でＣＰＵ１０１へ2MSL時間が経過したことが通知される。この通知を受けたＣＰＵ１０１は、外部メモリソケット検索テーブル３０１のエントリカウンタ３１５の値を読み出し、エントリカウンタ３１５の値が「０」でない場合、双方向リストの先頭のソケット情報を削除する。一方、エントリカウンタ３１５の値が「０」であった場合、内部メモリソケット検索テーブル２０１内で、最も古くTIME＿WAITの状態に遷移したコネクションに対応するソケット情報を削除する。最も古くTIME＿WAITの状態に遷移したコネクションに対応するソケット情報の検索手順と、削除手順は、コネクション確立時で説明した手順と同じであるため、その詳細な説明を省略する。以上の手順が完了した後、ＣＰＵ１０１は、TIME＿WAITに遷移してから2MSL時間が経過したコネクションのソケット情報を削除する。本処理によれば、外部メモリソケット検索テーブル３０１から削除するソケット情報を探索する必要が無くなり、ソケット情報の管理が容易になる。
尚、TCPソケットの検索時のネットワークプロトコル処理装置１００の動作は第１の実施形態と同じであるので、その詳細な説明を省略する。
【００５８】
尚、以上の各実施形態では、TIME＿WAITへの状態が遷移した順番で双方向リストの末尾にソケット情報を追加するようにした。そして、前ポインタ３１１、次ポインタ３１２、先頭ポインタ３１３、末尾ポインタ３１４等により、外部メモリソケット検索テーブル３０１内のソケット情報のTIME＿WAITへの遷移順が特定されるようにした。しかしながら、外部メモリソケット検索テーブル３０１内のソケット情報のTIME＿WAITへの遷移順を特定するための方法（情報）は、このようなものに限定されない。例えば、TIME＿WAITへの遷移順をそのまま記述した情報を外部メモリ１０４に記憶するようにしてもよい。
【００５９】
また、以上の各実施形態では、例えば、内部メモリ１０３が第１のメモリの一例であり、外部メモリ１０４が第２のメモリの一例であり、ソケット情報が、通信端点情報の一例である。
また、第１の実施形態では、例えば、図６のステップＳ６０４により判定手段の一例が実現され、ステップＳ６０６、Ｓ６０７により移動手段の一例が実現され、ステップＳ６０６により第２の記憶手段の一例が実現される。また、例えば、図７のステップＳ７０５により検索手段の一例が実現される。
また、第２の実施形態では、例えば、図８のステップＳ８０６により判定手段の一例が実現され、ステップＳ８０９、Ｓ８１０により移動手段の一例が実現され、ステップＳ８０９により第２の記憶手段の一例が実現される。また、例えば、図９のステップＳ９０７により判定手段の一例が実現され、ステップＳ９１１、Ｓ９１２により移動手段の一例が実現され、ステップＳ９１１により第２の記憶手段の一例が実現される。
【００６０】
（本発明の他の実施形態）
前述した本発明の実施形態における通信装置を構成する各手段、並びに通信装置の制御方法の各ステップは、コンピュータのＲＡＭやＲＯＭなどに記憶されたコンピュータプログラムが動作することによって実現できる。このプログラム及び前記プログラムを記録したコンピュータ読み取り可能な記録媒体は本発明に含まれる。
【００６１】
尚、前述した各実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００６２】
１０３  内部メモリ、１０４  外部メモリ、２０１  内部メモリソケット検索テーブル、２０２〜２０６、３０２〜３０６  ソケット情報、３０１  外部メモリソケット検索テーブル
【図１】
2010283615.tif 000003
【図２】
2010283615.tif 000004
【図３】
2010283615.tif 000005
【図４】
2010283615.tif 000006
【図５】
2010283615.tif 000007
【図６】
2010283615.tif 000008
【図７】
2010283615.tif 000009
【図８】
2010283615.tif 000010
【図９】
2010283615.tif 000011
【図１０】
2010283615.tif 000012