(57)【特許請求の範囲】
【請求項１】
通信のコネクション毎にコネクション管理制御表によってコネクションの状態を管理する通信制御システムにおけるコネクション管理方法において，
コネクションの相手ポート番号をキーにしたハッシュテーブルによって，同じエントリに属するコネクション管理制御表の中の先頭のコネクション管理制御表をポイントし，
各コネクション管理制御表には，コネクションの状態に応じた複数のキューポインタを設け，
前記ハッシュテーブルのエントリからポイントされる先頭のコネクション管理制御表から，同じエントリに属する他のコネクション管理制御表を，前記コネクションの状態に応じた複数のキューポインタを用いてマルチリンクでポイントし，
かつ，前記コネクション管理制御表に，少なくともコネクションの未確立・確立済・会話中のコネクションの状態情報を格納する領域と，自側ポート番号を格納する領域と，相手ポート番号を格納する領域と，未確立のコネクション管理制御表をリンクするキューポインタの領域と，確立済のコネクション管理制御表を会話中のコネクション管理制御表より優先させてリンクするキューポインタの領域と，会話中のコネクション管理制御表を確立済のコネクション管理制御表より優先させてリンクするキューポインタの領域とを設け，
コネクション管理制御表の検索時には，相手ポート番号によって該当するハッシュテーブルのエントリを求め，求めたハッシュテーブルのエントリからポイントされる先頭のコネクション管理制御表およびそのコネクション管理制御表の該当する状態のキューポインタによってポイントされるコネクション管理制御表を順次検索する
ことを特徴とするコネクション管理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は，サーバ／クライアント・システム等における通信制御プログラムのコネクション管理方法に関するものである。
【０００２】
【従来の技術】
図１３はコネクション管理方法を用いる通信制御システムの説明図である。
ＴＣＰ／ＩＰ等による通信機能を持つサーバ／クライアント・システムにおける通信制御システムでは，例えば図１３（Ａ）に示すように，サーバ装置９０のアプリケーション（ＡＰＬ）９１とクライアント装置９２のアプリケーション（ＡＰＬ）９３との間の通信は，与えられたポート９４を介して行われる。通常，各ポート９４は通信を要求する各アプリケーション（ＡＰＬ）９３に対して与えられ，クライアント装置９２の通信制御プログラム９５は，各ポート９４を用いた通信の制御を行う。
【０００３】
ＴＣＰ／ＩＰ等による通信制御システムでは，図１３（Ｂ）に示すように，通信制御プログラム９５間の通信は，まず相手ポートと自側ポートとのコネクションを確立することにより行われる。通信制御プログラム９５は，このコネクションの状態を管理するコネクション管理制御表９８ａ，９８ｂ，…を持ち，このコネクション管理制御表９８ａ，９８ｂ，…の検索を高速化するために，ハッシュテーブル９７を用いている。ハッシュテーブル９７では，相手ポート番号からハッシュ関数でテーブルエントリを決め，そのエントリから該当する相手ポート番号のコネクション管理制御表９８をポイントしている。
【０００４】
図１４は，従来のコネクション管理制御表を管理するためのハッシュテーブルを説明する図である。
従来のハッシュテーブル９７には，相手ポート番号をキーにしてハッシュ関数を適用したエントリごとにエントリ域とオーバーフロー域が設けられ，エントリ域から自側ポート番号と相手ポート番号との組で表されるコネクション対応のコネクション管理制御表９８をポイントするようにしている。
【０００５】
ここで，例えば「１２８」の相手ポート番号に対して複数のコネクションが存在し重複した場合には，通信要求分だけオーバーフローハッシュテーブル９７’が作成され，オーバーフローハッシュテーブル９７’から相手ポート番号「１２８」のコネクション管理制御表９８’がポイントされる。
【０００６】
【発明が解決しようとする課題】
図１４に示すような従来のコネクション管理方法では，ハッシュテーブル９７のオーバーフロー域からオーバーフローハッシュテーブル９７’へのリンクは単純なリンク構造であるため，相手ポート番号が多数重複するような場合に，該当するコネクション管理制御表９８を検索するときの効率が悪いという問題があった。
【０００７】
本発明は上記問題点の解決を図り，通信制御プログラムにおいて多数のコネクションを管理する場合のコネクション管理制御表の検索処理を高速化することを目的とする。
【０００８】
【課題を解決するための手段】
図１は本発明の原理説明図であり，図中，１０はハッシュテーブル，１１〜１４は，同一エントリに属するコネクション管理制御表（ＣＮＣＢ）を表す。
【０００９】
本発明のコネクション管理方法は，上記の問題を解決するため，コネクションの相手ポート番号をキーにしたハッシュテーブル１０によって，同じエントリに属するコネクション管理制御表１１〜１４の中の先頭のコネクション管理制御表１１をポイントし，コネクション管理制御表１１〜１４には，コネクションの状態に応じた複数のキューポインタを設け，ハッシュテーブル１０のエントリからポイントされる先頭のコネクション管理制御表１１から，同じエントリに属する他のコネクション管理制御表１２〜１４を，前記コネクションの状態に応じた複数のキューポインタを用いてマルチリンクでポイントするようにしている。
【００１０】
また，コネクション管理制御表１１〜１４に，少なくともコネクションの未確立・確立済・会話中のコネクションの状態情報を格納する領域と，自側ポート番号を格納する領域と，相手ポート番号を格納する領域と，未確立のコネクション管理制御表をリンクするキューポインタの領域（ＮＸＴ１）と，確立済のコネクション管理制御表を会話中のコネクション管理制御表より優先させてリンクするキューポインタの領域（ＮＸＴ２）と，会話中のコネクション管理制御表を確立済のコネクション管理制御表より優先させてリンクするキューポインタの領域（ＰＲＶ２）とを設けている。
【００１１】
さらに，コネクション管理制御表１１〜１４の検索時には，相手ポート番号によって該当するハッシュテーブル１０のエントリを求め，求めたハッシュテーブル１０のエントリからポイントされる先頭のコネクション管理制御表１１およびそのコネクション管理制御表１１の該当する状態のキューポインタ（ＮＸＴ１，ＮＸＴ２，ＰＲＶ２）によってポイントされるコネクション管理制御表１２〜１４を順次検索するようにしている。
【００１２】
図１では，ハッシュテーブル１０のＣＮＣＢ（２）のエントリに相手ポート番号「１２８」のコネクション管理制御表１１〜１４がつながれている。このエントリは，相手ポート番号「１２８」に所定のハッシュ関数を適用して得られたものである。コネクション管理制御表１１，１３のコネクション状態が会話中，コネクション管理制御表１２のコネクション状態が確立済，コネクション管理制御表１４のコネクション状態が未確立となっている。
【００１３】
この場合に，コネクション管理制御表１１のＮＸＴ１（未確立）のキューポインタは，コネクション管理制御表１４をポイントし，コネクション管理制御表１４のＮＸＴ１（未確立）のキューポインタは，図１には図示しないが，コネクション状態が未確立であるコネクション管理制御表（ＣＮＣＢ）をポイントしている。これを未確立リンクという。
【００１４】
また，コネクション管理制御表１１のＮＸＴ２（確立済）のキューポインタは，状態が確立済であるコネクション管理制御表１２をポイントし，コネクション管理制御表１２のＮＸＴ２（確立済）のキューポインタは，他に確立済のコネクション管理制御表（ＣＮＣＢ）がないので，状態が会話中であるコネクション管理制御表１３をポイントし，コネクション管理制御表１３は，先頭のコネクション管理制御表１１をポイントしたリンク構造となっている。これをＦｒｅｅリンクという。
【００１５】
また，コネクション管理制御表１１のＰＲＶ２（会話中）のキューポインタは，状態が会話中のコネクション管理制御表１３をポイントし，コネクション管理制御表１３は，他に会話中のコネクション管理制御表がないので，状態が確立済であるコネクション管理制御表１２をポイントし，コネクション管理制御表１２は先頭のコネクション管理制御表１１をポイントしたリンク構造となっている。これをＢｕｓｙリンクという。このようにして，コネクション管理制御表１１〜１４は，例えば，未確立リンク，Ｆｒｅｅリンク，Ｂｕｓｙリンクで，マルチリンクされる。
【００１６】
図２は，図１に示す場合の各コネクション管理制御表のリンク関係を示す図である。ここで，未確立のキューポインタのリンクは，コネクション管理制御表１１，コネクション管理制御表１４の順でリンクされている。また，確立済のコネクション管理制御表を会話中のコネクション管理制御表より優先させてリンクするＦｒｅｅリンクは，コネクション管理制御表１１，コネクション管理制御表１２，コネクション管理制御表１３の順でリンクされている。さらに，会話中のコネクション管理制御表を確立済のコネクション管理制御表より優先させてリンクするＢｕｓｙリンクは，コネクション管理制御表１１，コネクション管理制御表１３，コネクション管理制御表１２の順でリンクされている。
【００１７】
ここで，ＢｕｓｙリンクとＦｒｅｅリンクとは，逆方向へポイントするリンクとなっている。
なお，先頭のコネクション管理制御表１１は，状態の如何にかかわらずハッシュテーブル１０からポイントされ，固定となっている。これは実際には相手ポート番号が１個の場合が多いので，キューの管理を容易にするためである。また，ハッシュテーブル１０内にコネクションの状態に応じた複数のキューポインタを設けると，１エントリの領域サイズが大きくなるので，そのメモリ容量の節約のためでもある。
【００１８】
【発明の実施の形態】
以下，本発明の実施の形態について説明する。
図３は，コネクション管理制御表の構成例を示す図である。「コネクション状態情報領域」は，コネクションの状態に関する情報を格納する領域である。「自側ポート番号」は，通信を行う自側のポート番号を格納する領域である。「相手ポート番号」は，通信相手のポート番号を格納する領域である。「未確立コネクションのキュー領域（ＮＸＴ１）」は，未確立のコネクション管理制御表をリンクするキューポインタの領域である。「確立済コネクションのキュー領域（ＮＸＴ２）」は，確立済のコネクション管理制御表を会話中のコネクション管理制御表より優先させてリンクするキューポインタの領域である。「会話中コネクションのキュー領域（ＰＲＶ２）」は，会話中のコネクション管理制御表を確立済のコネクション管理制御表より優先させてリンクするキューポインタの領域である。
【００１９】
図４，図５は，相手システムが３つの場合（相手ポート番号「１２８」に対してコネクション管理制御表が３つの場合）のマルチリンクの処理の説明図である。
【００２０】
図４（Ａ）は，初期状態を示している。ハッシュテーブル１０のＣＮＣＢ（２）は，ポート番号＝１２８のエントリであり，先頭のコネクション管理制御表２１をポイントしている。初期状態が各ポートとも未確立であるので，先頭のコネクション管理制御表２１のＮＸＴ１のキューポインタにより，コネクション管理制御表２２，コネクション管理制御表２３の順にキューポイントされ，未確立リンクでリンクされている。
【００２１】
図４（Ｂ）は，あるアプリケーションからコネクション確立要求（自側ポート＝２００，相手ポート＝１２８）があり，コネクション管理制御表２２が確立済となる場合のリンク構造を示している。
【００２２】
コネクション確立要求があると，ハッシュテーブル１０における相手ポート番号＝１２８のエントリを検索し，最初にコネクション管理制御表２１の自側ポート番号が「２００」であるかどうかをチェックする。コネクション管理制御表２１の自側ポート番号は「１０」で，要求の自側ポート＝２００と一致しないので，ＮＸＴ１のキューポインタでコネクション管理制御表２２のチェックへ移る。再度，コネクション管理制御表２２の自側ポート番号をチェックする。ここでは，コネクション管理制御表２２の自側ポート番号と一致するので，コネクション管理制御表２２のコネクション状態情報領域に確立済を設定し，コネクション管理制御表２１のＮＸＴ２のキューポインタでコネクション管理制御表２２へポイントし，さらに，コネクション管理制御表２２のＮＸＴ２のキューポインタでコネクション管理制御表２１をポイントする。同時に，コネクション管理制御表２１のＮＸＴ１のキューポインタを書き換え，コネクション管理制御表２３をポイントする。
【００２３】
図５（Ａ）は，他のコネクション管理制御表２１，２３もコネクション確立要求により，確立済となった場合のリンク構造を示している。全てのコネクション管理制御表２１，２２，２３に確立済の状態が設定され，各々がＮＸＴ２で順次ポイントされている。
【００２４】
図５（Ｂ）は，図５（Ａ）に示すリンク状態において，コネクション管理制御表２２が会話中の状態に遷移した場合のリンク構造を示している。
コネクション管理制御表２２のコネクションの状態が確立済から会話中に変わると，コネクション管理制御表２１のＰＲＶ２のキューポインタで，コネクション管理制御表２２をポイントし，ＮＸＴ２のキューポインタをコネクション管理制御表２２からコネクション管理制御表２３へ書き換える。また，コネクション管理制御表２２のＰＲＶ２のキューポインタで，コネクション管理制御表２３をポイントし，ＮＸＴ２のキューポインタをコネクション管理制御表２３からコネクション管理制御表２１へ書き換える。また，コネクション管理制御表２３のＰＲＶ２のキューポインタで，コネクション管理制御表２１をポイントし，ＮＸＴ２のキューポインタをコネクション管理制御表２１からコネクション管理制御表２２へ書き換える。
【００２５】
したがって，各コネクション管理制御表は，コネクション管理制御表２１→コネクション管理制御表２２→コネクション管理制御表２３→コネクション管理制御表２１の順でリンクされたＢｕｓｙリンクと，コネクション管理制御表２１→コネクション管理制御表２３→コネクション管理制御表２２→コネクション管理制御表２１の順でリンクされたＦｒｅｅリンクとでリンクされることになる。
【００２６】
このように，ＮＸＴ１，ＮＸＴ２，ＰＲＶ２の３つのキューポインタにより未確立，Ｂｕｓｙ，Ｆｒｅｅリンクでマルチリンクすることで，目的ごとのキューを効率良く処理することが可能となる。
【００２７】
図６は，コネクション確立要求に対する検索及びリンク処理（未確立から確立済）の処理フローチャートである。
ステップＳ１１では，要求のあった相手ポート番号をキーとして，ハッシュテーブルから該当エントリを検出する。例えば，相手ポート番号＝「１２８」であれば，それにハッシュ関数を適用してポート番号「１２８」のエントリを検出し，同じエントリに属するコネクション管理制御表のうち，先頭のコネクション管理制御表を得る。
【００２８】
ステップＳ１２では，コネクション管理制御表の自側ポート番号と，要求の自側ポート番号が一致するかどうかを判定する。自側ポート番号が一致しない場合には，ステップＳ１３へ進み，自側ポート番号が一致する場合にはステップＳ１４へ進む。ステップＳ１３では，ＮＸＴ１をサーチして，未確立キューにリンクされた次のコネクション管理制御表を得る。
【００２９】
自側ポート番号が一致した場合，ステップＳ１４では，コネクション管理制御表のコネクション状態領域に確立済を設定する。その後，ステップＳ１５では，ＮＸＴ２にＮＸＴ１の値を設定するなどしてキューポインタを書き換え，キューの張り替えを行う。
【００３０】
図６に示す処理フローチャートは，自側ポート番号を判定するように処理した場合の例であるが，アプリケーションが自側ポート番号を指定せずにコネクションの確立を要求する場合には，自側ポート番号の判定の処理ステップで，自側ポート番号が一致するとして処理を行えばよい。この場合，通信制御プログラムは，コネクションが確立したならば，そのときの自側ポート番号をコネクション管理制御表から得て，要求元のアプリケーションに通知する。
【００３１】
図７は，図５（Ａ）に示す状態において「自側ポート番号＝２００，相手ポート番号＝１２８」のコネクション管理制御表を検索して，確立済から会話中に遷移する場合の検索及びリンク処理の処理フローチャートである。
【００３２】
ステップＳ２１では，要求のあった相手ポート番号をキーとして，ハッシュテーブルから該当エントリを検出し，エントリの先頭のコネクション管理制御表を得る。ステップＳ２２では，コネクション管理制御表の自側ポート番号と，要求の自側ポート番号が一致するかどうかを判定する。自側ポート番号が一致しない場合にはステップＳ２３へ進み，自側ポート番号が一致する場合にはステップＳ２４へ進む。ステップＳ２３では，ＮＸＴ２をサーチして，確立済キューにリンクされた次のコネクション管理制御表を得る。
【００３３】
自側ポート番号が一致する場合，ステップＳ２４では，コネクション管理制御表のコネクション状態領域に会話中を設定する。その後，ステップＳ２５では，ＰＲＶ２にＮＸＴ２の値を設定するなどしてキューポインタを書き換え，キューの張り替えを行う。
【００３４】
例えば，ステップＳ２１で，相手ポート番号＝１２８のエントリから先頭のコネクション管理制御表２１を参照し，ステップＳ２２で，コネクション管理制御表２１の自側ポート番号を判定する。判定の結果，自側ポート番号は一致しないので，ステップＳ２３で，ＮＸＴ２により，コネクション管理制御表２２へ移る。再度，ステップＳ２２で，コネクション管理制御表２２の自側ポート番号を判定する。判定の結果，自側ポート番号が一致するので，ステップＳ２４で，コネクション管理制御表２２のコネクション状態情報を会話中に設定し，ステップＳ２５で，ＰＲＶ２にＮＸＴ２の値を設定する処理等を行う。
【００３５】
この処理により，リンク構造は図５（Ｂ）に示すようになる。
図８は，図５（Ｂ）に示す状態において「自側ポート番号＝２００，相手ポート番号＝１２８」のコネクション管理制御表を検索して会話を終了する場合の検索及びリンク処理の処理フローチャートである。
【００３６】
ステップＳ３１では，要求のあった相手ポート番号をキーとして，ハッシュテーブルから該当エントリを検出する。検出結果から，同じエントリに属するコネクション管理制御表のうち，先頭のコネクション管理制御表へのポインタを得る。ステップＳ３２では，コネクション管理制御表の自側ポート番号と，要求の自側ポート番号が一致するかどうかを判定する。自側ポート番号が一致しない場合にはステップＳ３３へ進み，自側ポート番号が一致する場合にはステップＳ３４へ進む。ステップＳ３３では，ＰＲＶ２をサーチして，会話中キューにリンクされた次のコネクション管理制御表を得る。
【００３７】
ステップＳ３４では，コネクション管理制御表のコネクション状態領域に確立済を設定する。その後，ステップＳ３５では，ＮＸＴ２にＰＲＶ２の値を設定するなどしてキューポインタを書き換え，キューの張り替えを行う。
【００３８】
例えば，ステップＳ３１で，相手ポート番号＝１２８のエントリから，先頭のコネクション管理制御表２１を参照し，ステップＳ３２で，コネクション管理制御表２１の自側ポート番号を判定する。判定の結果，自側ポート番号は一致しないので，ステップＳ３３で，ＰＲＶ２によりコネクション管理制御表２２へ移る。再度，ステップＳ３２で，コネクション管理制御表２２の自側ポート番号が判定される。判定の結果，自側ポート番号が一致するので，ステップＳ３４で，コネクション管理制御表２２のコネクション状態情報を確立済に設定し，ステップＳ３５で，ＮＸＴ２にＰＲＶ２の値を設定する処理等を行う。
【００３９】
【実施例】
図９は，本発明の実施例を説明するためのコネクション管理制御表の状態を示す図である。
【００４０】
図９に示すように，同一エントリ（同一相手ポート番号）に属するコネクション管理制御表が，確立済リンク，Ｂｕｓｙリンク，Ｆｒｅｅリンクでリンクされ，Ｂｕｓｙリンクは，コネクション管理制御表３１→コネクション管理制御表３３→コネクション管理制御表３２→コネクション管理制御表３１の順で，Ｆｒｅｅリンクは，コネクション管理制御表３１→コネクション管理制御表３２→コネクション管理制御表３３→コネクション管理制御表３１の順で，さらに未確立リンクはコネクション管理制御表３１→コネクション管理制御表３４→コネクション管理制御表３５の順でリンクされているとする。
【００４１】
図１０は，図９に示す状態から新たなコネクションが確立された場合のリンク状態を示す図である。
図９に示す状態からコネクション確立要求により，図１０に示すようにコネクション管理制御表３４のコネクション状態が確立済となり，キューポインタの設定が変更されて，Ｂｕｓｙリンクは，コネクション管理制御表３１→コネクション管理制御表３３→コネクション管理制御表３２→コネクション管理制御表３４→コネクション管理制御表３１の順，Ｆｒｅｅリンクは，コネクション管理制御表３１→コネクション管理制御表３４→コネクション管理制御表３２→コネクション管理制御表３３→コネクション管理制御表３１の順，未確立リンクはコネクション管理制御表３１→コネクション管理制御表３５の順となる。
【００４２】
図１１は，図９に示す状態で，コネクション管理制御表３２が会話に使用された場合のリンク状態を示す図である。
図９に示す状態から会話の開始により，図１１に示すようにコネクション管理制御表３２のコネクション状態が会話中となると，Ｂｕｓｙリンクは，コネクション管理制御表３１→コネクション管理制御表３２→コネクション管理制御表３３→コネクション管理制御表３１の順，Ｆｒｅｅリンクは，コネクション管理制御表３１→コネクション管理制御表３３→コネクション管理制御表３２→コネクション管理制御表３１の順，さらに未確立リンクはコネクション管理制御表３１→コネクション管理制御表３４→コネクション管理制御表３５の順となる。
【００４３】
図１２は，図１１に示すリンク状態で，コネクション管理制御表３２の会話が終了した場合のリンク状態を示している。
図１１に示す状態から会話の終了により，コネクション管理制御表３２のコネクション状態が確立済となる。各キューポインタの設定は，図１２に示すように変更される。
【００４４】
【発明の効果】
以上説明したように，コネクション管理制御表を，例えば会話中，確立済，未確立の３つの状態に応じて，３つのキューポインタでリンクすることにより，また，キューポインタをダイナミックに切り替えることにより，目的ごとのキューを効率よく検索することが可能となる。
【００４５】
また，ハッシュテーブルは，常に同一エントリに属するコネクション管理制御表の１つをポイントするようにするため，オーバーフローハッシュテーブルを持つ必要がなくなり，オーバーフローハッシュテーブルの領域を削減でき，また，オーバーフローハッシュテーブルの検索により生じる検索効率の低下をなくすことが可能となる。
【図面の簡単な説明】
【図１】  本発明の原理説明図である。
【図２】  コネクション管理制御表のリンク関係を示す図である。
【図３】  コネクション管理制御表の構成例を示す図である。
【図４】  本発明の実施の形態におけるマルチリンクの処理を説明する図である。
【図５】  本発明の実施の形態におけるマルチリンクの処理を説明する図である。
【図６】  コネクション確立要求に対する検索及びリンク処理（未確立から確立済）の処理フローチャートである。
【図７】  会話開始要求に対する検索及びリンク処理（確立済から会話中）の処理フローチャートである。
【図８】  会話終了要求に対する検索及びリンク処理（会話中から確立済）の処理フローチャートである。
【図９】  本発明の実施例を説明する図である。
【図１０】  本発明の実施例を説明する図である。
【図１１】  本発明の実施例を説明する図である。
【図１２】  本発明の実施例を説明する図である。
【図１３】  コネクション管理方法を用いる通信制御システムの説明図である。
【図１４】  従来のハッシュテーブルを説明する図である。
【符号の説明】
１０  ハッシュテーブル
１１〜１４  コネクション管理制御表（ＣＮＣＢ）
【図１】
0003708602.tif 000002
【図２】
0003708602.tif 000003
【図３】
0003708602.tif 000004
【図４】
0003708602.tif 000005
【図５】
0003708602.tif 000006
【図６】
0003708602.tif 000007
【図７】
0003708602.tif 000008
【図８】
0003708602.tif 000009
【図９】
0003708602.tif 000010
【図１０】
0003708602.tif 000011
【図１１】
0003708602.tif 000012
【図１２】
0003708602.tif 000013
【図１３】
0003708602.tif 000014
【図１４】
0003708602.tif 000015