(57)【要約】【課題】  情報を圧縮して通信する計算機システムにおいて、情報の高圧縮率及び通信速度の高速化を両立させる。【解決手段】  プロセッサ、前記プロセッサに接続される主記憶装置、及びプロセッサに接続されるネットワークインタフェースを備え、複数の計算機間で送受信されるデータを転送する通信装置であって、主記憶装置に格納され、データを圧縮又は伸張するための圧縮伸張情報を用いて、受信したデータを圧縮又は伸張し、送信先の計算機に送信する圧縮伸張部を備え、圧縮伸張部は、複数の通信先の各々を特定する情報と、複数の圧縮伸張情報とを対応付けて管理し、所定の通信先からデータを受信した場合、所定の通信先との間で送受信されるデータに用いる複数の圧縮伸張情報に基づいて受信したデータの圧縮率を算出し、算出されたデータの圧縮率に基づいて、所定の通信先との間で送受信されるデータに用いる圧縮伸張情報を決定する。【選択図】図１
2015043502.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ、前記プロセッサに接続される主記憶装置、及び前記プロセッサに接続されるネットワークインタフェースを備え、複数の計算機間で送受信されるデータを転送する通信装置であって、
前記主記憶装置に格納され、前記データを圧縮又は伸張するための圧縮伸張情報を用いて、受信した前記データを圧縮又は伸張し、送信先の計算機に送信する圧縮伸張部を備え、
前記圧縮伸張部は、
複数の通信先の各々を特定する情報と、複数の前記圧縮伸張情報とを対応付けて管理し、
所定の通信先からデータを受信した場合、前記所定の通信先との間で送受信されるデータに用いる前記複数の圧縮伸張情報に基づいて前記受信したデータの圧縮率を算出し、
前記算出されたデータの圧縮率に基づいて、前記所定の通信先との間で送受信されるデータに用いる前記圧縮伸張情報を決定することを特徴とする通信装置。
【請求項２】
請求項１に記載の通信装置であって、
前記通信先を特定する情報は、前記データの送信先の計算機又は当該計算機が所属するネットワークのアドレスであって、
前記複数の計算機は、第１の計算機を含み、
前記第１の計算機が含まれる通信先との間で送受信されるデータに用いる前記複数の圧縮伸張情報は、第１の圧縮伸張情報及び第２の圧縮伸張情報を含み、
前記圧縮伸張部は、
前記第１の通信装置から第１のデータを受信した場合、前記第１の圧縮伸張情報を用いて前記第１のデータを圧縮又は伸張し、
圧縮された前記第１のデータ又は伸張された前記第１のデータに基づいて、前記第１のデータの圧縮率を算出し、
前記第１のデータの送信先の計算機に、前記圧縮された第１のデータ又は前記伸張された第１のデータを送信し、
前記第１の圧縮伸張情報を用いた前記第１のデータの圧縮率に基づいて、前記圧縮された第１のデータ又は伸張される前の前記第１のデータが所定の閾値より小さいサイズに圧縮されたデータであるか否かを判定し、
前記圧縮された第１のデータ又は伸張される前の前記第１のデータが所定の閾値より小さいサイズに圧縮されたデータでないと判定された場合、前記第２の圧縮伸張情報を用いて前記第１のデータの圧縮率を算出し、
前記第２の圧縮伸張情報を用いて圧縮された前記第１のデータの圧縮率に基づいて、前記第２の圧縮伸張情報を用いて圧縮された前記第１のデータが所定の閾値より小さいサイズに圧縮されたデータであるか否かを判定し、
前記第２の圧縮伸張情報を用いて圧縮された前記第１のデータが所定の閾値より小さいサイズに圧縮されたデータであると判定された場合、前記第１の計算機が含まれる通信先との間で送受信されるデータに用いる圧縮伸張情報を、前記第１の圧縮伸張情報から前記第２の圧縮伸張情報に切り替え、
前記第２の圧縮伸張情報を用いて圧縮された前記第１のデータが所定の閾値より小さいサイズに圧縮されたデータでないと判定された場合、前記第１のデータに基づいて、新たな第３の圧縮伸張情報を生成し、前記第１の計算機が含まれる通信先との間で送受信されるデータに用いる圧縮伸張情報を、前記第１の圧縮伸張情報から前記第３の圧縮伸張情報に切り替えることを特徴とする通信装置。
【請求項３】
請求項２に記載の通信装置であって、
前記圧縮伸張部は、
前記第１の圧縮伸張情報のサイズが所定の閾値以上であるか否かを判定し、
前記第１の圧縮伸張情報のサイズが所定の閾値より小さいと判定された場合、前記第１の計算機が含まれる通信先との間で送受信されるデータに用いる圧縮伸張情報を、前記第１の圧縮伸張情報に決定することを特徴とする通信装置。
【請求項４】
請求項１に記載の通信装置であって、
前記圧縮伸張部は、
前記複数の通信先の各々の前記複数の圧縮伸張情報のアクセス時間を管理し、
前記アクセス時間に基づいて、前記複数の通信先の各々の複数の圧縮伸張情報の中から一つ以上の前記圧縮伸張情報を選択し、
前記選択された圧縮伸張情報を前記主記憶装置から削除し、
前記複数の通信先の各々に含まれる他の通信装置に、前記削除された圧縮伸張情報に関する情報を通知することを特徴とする通信装置。
【請求項５】
プロセッサ、前記プロセッサに接続される主記憶装置、及び前記プロセッサに接続されるネットワークインタフェースを備え、複数の計算機間で送受信されるデータを転送する通信装置におけるデータ転送制御方法であって、
前記主記憶装置に格納され、前記データを圧縮又は伸張するための圧縮伸張情報を用いて、受信した前記データを圧縮又は伸張し、送信先の計算機に送信する圧縮伸張部を備え、
前記圧縮伸張部は、複数の通信先の各々を特定する情報と、複数の前記圧縮伸張情報とを対応付けて管理し、
前記方法は、
前記圧縮伸張部が、所定の通信先からデータを受信した場合、前記所定の通信先との間で送受信されるデータに用いる前記複数の圧縮伸張情報に基づいて前記受信したデータの圧縮率を算出する第１のステップと、
前記圧縮伸張部が、前記算出されたデータの圧縮率に基づいて、前記所定の通信先との間で送受信されるデータに用いる前記圧縮伸張情報を決定する第２のステップと、を含むことを特徴とするデータ転送制御方法。
【請求項６】
請求項５に記載のデータ転送制御方法であって、
前記通信先を特定する情報は、前記データの送信先の計算機又は当該計算機が所属するネットワークのアドレスであって、
前記複数の計算機は、第１の計算機を含み、
前記第１の計算機が含まれる通信先との間で送受信されるデータに用いる前記複数の圧縮伸張情報は、第１の圧縮伸張情報及び第２の圧縮伸張情報を含み、
前記第１のステップは、
前記第１の通信装置から第１のデータを受信した場合、前記第１の圧縮伸張情報を用いて前記第１のデータを圧縮又は伸張するステップと、
圧縮された前記第１のデータ又は伸張された前記第１のデータに基づいて、前記第１のデータの圧縮率を算出するステップと、
前記第１のデータの送信先の計算機に、前記圧縮された第１のデータ又は前記伸張された第１のデータを送信するステップと、を含み、
前記第２のステップは、
前記第１の圧縮伸張情報を用いた前記第１のデータの圧縮率に基づいて、前記圧縮された第１のデータ又は伸張される前の前記第１のデータが所定の閾値より小さいサイズに圧縮されたデータであるか否かを判定するステップと、
前記圧縮された第１のデータ又は伸張される前の前記第１のデータが所定の閾値より小さいサイズに圧縮されたデータでないと判定された場合、前記第２の圧縮伸張情報を用いて前記第１のデータの圧縮率を算出するステップと、
前記第２の圧縮伸張情報を用いて圧縮された前記第１のデータの圧縮率に基づいて、前記第２の圧縮伸張情報を用いて圧縮された前記第１のデータが所定の閾値より小さいサイズに圧縮されたデータであるか否かを判定するステップと、
前記第２の圧縮伸張情報を用いて圧縮された前記第１のデータが所定の閾値より小さいサイズに圧縮されたデータであると判定された場合、前記第１の計算機が含まれる通信先との間で送受信されるデータに用いる圧縮伸張情報を、前記第１の圧縮伸張情報から前記第２の圧縮伸張情報に切り替えるステップと、
前記第２の圧縮伸張情報を用いて圧縮された前記第１のデータが所定の閾値より小さいサイズに圧縮されたデータでないと判定された場合、前記第１のデータに基づいて、新たな第３の圧縮伸張情報を生成し、前記第１の計算機が含まれる通信先との間で送受信されるデータに用いる圧縮伸張情報を、前記第１の圧縮伸張情報から前記第３の圧縮伸張情報に切り替えるステップと、を含むことを特徴とするデータ転送制御方法。
【請求項７】
請求項６に記載のデータ転送制御方法であって、
前記第２のステップは、
前記第１の圧縮伸張情報のサイズが所定の閾値以上であるか否かを判定するステップと、
前記第１の圧縮伸張情報のサイズが所定の閾値より小さいと判定された場合、前記第１の計算機が含まれる通信先との間で送受信されるデータに用いる圧縮伸張情報を、前記第１の圧縮伸張情報に決定するステップと、を含むことを特徴とするデータ転送制御方法。
【請求項８】
請求項６に記載のデータ転送制御方法であって、
前記方法は、
前記圧縮伸張部が、前記複数の通信先の各々の前記複数の圧縮伸張情報のアクセス時間を管理するステップと、
前記圧縮伸張部が、前記アクセス時間に基づいて、前記複数の通信先の各々の複数の圧縮伸張情報の中から一つ以上の前記圧縮伸張情報を選択するステップと、
前記圧縮伸張部が、前記選択された圧縮伸張情報を前記主記憶装置から削除するステップと、
前記圧縮伸張部が、前記複数の通信先の各々に含まれる他の通信装置に、前記削除された圧縮伸張情報に関する情報を通知するステップとを含むことを特徴とするデータ転送制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報を圧縮して通信する計算機システムに関する。
【背景技術】
【０００２】
データを圧縮又は伸張する方法として以下のような方式が知られている。
【０００３】
［辞書式圧縮］
辞書式圧縮は、データ列中に現れるアルファベットの並びを単語として辞書に登録し、次に同じ単語が現れたときには辞書の登録番号に置き換えることによって、データ列を圧縮する方式である。例えば、非特許文献１に記載のＬＺ７８及びＬＺ７８から派生した手法には、圧縮側の装置等ではデータの圧縮時に、伸張側の装置等ではデータの伸張時に、同一の辞書が動的に生成されるという特徴がある。そのため、圧縮側から伸張側には圧縮後データ列だけを渡せばよい。
【０００４】
図１４は、従来の辞書式圧縮を用いたデータの圧縮及び伸張の手順を示す説明図である。
【０００５】
図１４では、データ列「ａｂａｂａｂａ」をＬＺ７８で圧縮及び伸張する場合の一例を示す。ＬＺ７８では「既知の単語＋１アルファベットを新たな単語として辞書に追加」という平易なルールに基づいてデータを圧縮することによって辞書が生成される。
【０００６】
図１４に示すように、圧縮時には辞書作成手順１４０１から手順１４０４にしたがって辞書が生成され、また、伸張時には辞書作成手順１４１１から手順１４１４にしたがって辞書が生成され、圧縮側及び伸張側の辞書は同一の辞書となる。
【０００７】
ここで辞書とは、データ列中に現れるアルファベットの並びと、それに対する見出しとの対を集めたものを指す。さらにデータ列中に現れるアルファベットの並びのことを単語という。
【０００８】
［エントロピー符号］
エントロピー符号は、データ列中に現れるアルファベットの出現頻度に基づいて、異なる長さの符合語を割り当てることによってデータを圧縮する方式である。例えば、非特許文献２に記載の動的ハフマン符号（Ａｄａｐｔｉｖｅ  Ｈｕｆｆｍａｎ−ｃｏｄｉｎｇ）に代表される動的な符号化手法では、ＬＺ７８と同じく圧縮側と伸張側で同じ頻度表が動的に生成されるという特徴がある。
【０００９】
図１５Ａ、図１５Ｂ及び図１５Ｃは、従来のハフマン符号を用いた符号化の手順を示す説明図である。ここでは、出現頻度に偏りのあるアルファベット「ａ，ｂ，ｃ，ｄ」を例に、非特許文献３に記載のハフマン符号で符号化について説明する。
【００１０】
４文字を単純に符号化する場合の符号長は２ｂｉｔだが、図１５Ｂに示すように、出現回数の多い「ａ」に短い符号を割り当てることによって平均符号長が１８ｂｉｔに下がっている。
【００１１】
ここで頻度表（図１５Ａ）とは、データ中に現れるアルファベット及びアルファベット列と、その出現頻度又は出現回数など頻度を算出するための情報との対を集めたものを指す。また、ハフマン符号におけるハフマン木（図１５Ｂ）など、頻度表をエントロピー符号化しやすい形で扱うことを特徴とする符号化方式とデータ構造もあり、ここではそれらも含めて頻度表と呼ぶ。
【００１２】
［圧縮を利用する通信］
本発明の技術分野の背景技術として、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）パケットの圧縮に関する非特許文献４（例えば、"２．  Ｃｏｍｐｒｅｓｓｉｏｎ  Ｐｒｏｃｅｓｓ"参照）がある。また、本技術分野の別の背景技術としてデータストリームの圧縮に関する特許文献１が存在する。
【００１３】
特許文献１には、「符号化は、ターゲット・セグメント・サイズを判定する段階と、窓サイズを判定する段階と、入力データ内のオフセットにおける記号の窓内のフィンガープリントを識別する段階と、オフセットをカット・ポイントとして指定すべきかどうかを判定する段階と、カット・ポイントの組によって示されるように入力データをセグメント化する段階とを含む。そのように識別された各セグメントについて、エンコーダは、セグメントが参照されるセグメントであるかそれとも参照されないセグメントであるかを判定し、それぞれの参照されるセグメントのセグメント・データを参照ラベルで置き換え、必要に応じて、それぞれの参照されるセグメントの持続セグメント・ストアに参照バインディングを記憶する」ことが記載されている。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】米国特許出願公開第２００４／０１７４２７６号明細書
【非特許文献】
【００１５】
【非特許文献１】Ziv, Jacob; Lempel, Abraham (1978), "Compression of individual sequences via variable-rate coding". IEEE Transactions on Information Theory 24 (5): pp 530-536.
【非特許文献２】Vitter, Jeffrey (1987), "Design and analysis of dynamic Huffman codes". Journal of the ACM, 34(4): pp 825-845
【非特許文献３】Huffman, David (1952), "A Method for the construction of minimum-redundancy codes". Proceedings of the I.R.E.: pp 1098-1102
【非特許文献４】RFC2393 (1998), "IP payload compression protocol (IPComp)"
【非特許文献５】O'neil, Elizabeth (1993), "The LRU-K page replacement algorithm for database disk buffering". ACM SIGMOD Conf.: pp. 297-306
【発明の概要】
【発明が解決しようとする課題】
【００１６】
非特許文献４に記載された技術では、ＩＰパケット毎にしか圧縮を行えない。ＩＰパケットのサイズは通信路のＭＴＵ（Ｍａｘｉｍｕｍ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｕｎｉｔ）以下であり、一般にインターネット環境では１５００Ｂｙｔｅである。したがって、ペイロードはそれ以下のサイズであるため、非特許文献１に記載の手法では圧縮率があがらず、通信量の削減効果が低い。
【００１７】
特許文献１に記載された技術は、単純な演算ではセグメントが既知であるか否かの判定できない。また、持続セグメント・ストアを大容量化することによって通信量削減効果を高めることができるが、持続セグメント・ストアには一般に容量単価の安いＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）が用いられるため、データの検索時のＩ／Ｏ速度（ＨＤＤのランダムアクセス速度は、１００〜２００Ｍｂｐｓ程度）が通信路のＩ／Ｏ速度（例えば、１Ｇｂｐｓ）より低いという問題がある。そのため、特許文献１に記載された技術では、通信量の削減効果を高めることは可能であるが、十分に広い通信帯域を扱うネットワークでは通信速度が低速化するという問題がある。
【００１８】
すなわち情報を圧縮して通信するコンピュータシステムの課題は、情報の高圧縮率及び通信速度の高速化を両立させることである。
【課題を解決するための手段】
【００１９】
上記課題を解決するために、例えば特許請求の範囲に記載の構成を採用する。プロセッサ、前記プロセッサに接続される主記憶装置、及び前記プロセッサに接続されるネットワークインタフェースを備え、複数の計算機間で送受信されるデータを転送する通信装置であって、前記主記憶装置に格納され、前記データを圧縮又は伸張するための圧縮伸張情報を用いて、受信した前記データを圧縮又は伸張し、送信先の計算機に送信する圧縮伸張部を備え、前記圧縮伸張部は、複数の通信先の各々を特定する情報と、複数の前記圧縮伸張情報とを対応付けて管理し、所定の通信先からデータを受信した場合、前記所定の通信先との間で送受信されるデータに用いる前記複数の圧縮伸張情報に基づいて前記受信したデータの圧縮率を算出し、前記算出されたデータの圧縮率に基づいて、前記所定の通信先との間で送受信されるデータに用いる前記圧縮伸張情報を決定することを特徴とする。
【発明の効果】
【００２０】
本発明によれば、圧縮伸張部は、データの圧縮率に基づいて、通信先毎の複数の圧縮伸張情報を切り替えることができる。これによって、データの高圧縮率を実現できる。また、圧縮伸張情報は主記憶装置に格納されるためＩ／Ｏ速度の低下を回避し、通信速度の高速化を実現することができる。
【００２１】
上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施例１における計算機システムの構成の一例を示す説明図である。
【図２】本発明の実施例１における圧縮伸張装置の構成例を示すブロック図である。
【図３Ａ】本発明の実施例１における通信先−辞書対応情報の一例を示す説明図である。
【図３Ｂ】本発明の実施例１における通信先−辞書対応情報の一例を示す説明図である。
【図４】本発明の実施例１における辞書管理情報の一例を示す説明図である。
【図５Ａ】本発明の実施例１における圧縮伸張モジュールがＩＰパケットを受信した場合に実行するＩＰパケットの転送処理を説明するフローチャートである。
【図５Ｂ】本発明の実施例１における圧縮伸張モジュールがＩＰパケットを受信した場合に実行するＩＰパケットの転送処理を説明するフローチャートである。
【図６】本発明の実施例１における圧縮伸張モジュールが実行する辞書管理情報の更新処理を説明するフローチャートである。
【図７】本発明の実施例２における圧縮伸張装置の構成例を示すブロック図である。
【図８】本発明の実施例２における通信先−辞書頻度表対応情報の一例を示す説明図である。
【図９】本発明の実施例２における辞書頻度表管理情報の一例を示す説明図である。
【図１０Ａ】本発明の実施例２における辞書エントロピー圧縮伸張モジュールがＩＰパケットを受信した場合に実行するＩＰパケットの転送処理を説明するフローチャートである。
【図１０Ｂ】本発明の実施例２における辞書エントロピー圧縮伸張モジュールがＩＰパケットを受信した場合に実行するＩＰパケットの転送処理を説明するフローチャートである。
【図１１】本発明の実施例２における辞書エントロピー圧縮伸張モジュールが実行する辞書頻度表管理情報の更新処理を説明するフローチャートである。
【図１２】本発明の実施例３における辞書管理情報の一例を示す説明図である。
【図１３Ａ】本発明の実施例３における辞書の削除処理を説明するフローチャートである。
【図１３Ｂ】本発明の実施例３における辞書の削除処理を説明するフローチャートである。
【図１４】従来の辞書式圧縮を用いたデータの圧縮及び伸張の手順を示す説明図である。
【図１５Ａ】従来のハフマン符号を用いた符号化の手順を示す説明図である。
【図１５Ｂ】従来のハフマン符号を用いた符号化の手順を示す説明図である。
【図１５Ｃ】従来のハフマン符号を用いた符号化の手順を示す説明図である。
【発明を実施するための形態】
【００２３】
以下、実施例を図面を用いて説明する。
【００２４】
本発明では、データ（ＩＰパケットのペイロード）を圧縮又は伸張する場合に用いられる情報として辞書又は頻度表の少なくともいずれかを用いるものとして説明する。ただし、本発明はこれに限定されず、データを圧縮又は伸張するために用いられる情報であればどのような情報であってもよい。
【実施例１】
【００２５】
実施例１では、通信内容に応じて、複数の辞書の中から最も圧縮率の高い辞書を用いて通信内容を圧縮又は伸張する方法、装置及びシステムについて説明する。
【００２６】
図１は、本発明の実施例１における計算機システムの構成の一例を示す説明図である。
【００２７】
図１に示す計算機システムは、クライアント装置１０１、１０２、サーバ１０３、及び圧縮伸張装置１１１、１２１、１３１から構成される。クライアント装置Ａ１０１及びクライアント装置Ｂ１０２と、サーバ１０３との間は広域網１０４を介した接続される。なお、クライアント装置Ａ１０１及びクライアント装置Ｂ１０２とサーバ１０３とは、ＬＡＮ、ＳＡＮ等の広域網１０４以外のネットワークを介して接続されてもよい。
【００２８】
本実施例では、クライアント装置Ａ１０１は、「１９２．１６８．１．０／２４」のサブネット１１２に属し、ＩＰアドレスは「１９２．１６８．１．１０１」である。また、クライアント装置Ｂ１０２は、「１９２．１６８．２．０／２４」のサブネット１２２に属し、ＩＰアドレスは「１９２．１６８．２．１０２」である。また、サーバ１０３は、「１９２．１６８．１０．０／２４」のサブネット１３２に属し、ＩＰアドレスは「１９２．１６８．１０．１０３」である。
【００２９】
クライアント装置Ａ１０１及びクライアント装置Ｂ１０２は、広域網１０４を介して、サーバ１０３との間でデータの送受信を行う。本発明は、送受信されるデータの種別、及び内容等に限定されない。なお、クライアント装置Ａ１０１、クライアント装置Ｂ１０２、及びサーバ１０３は、一般的な計算機であって、ＣＰＵ（図示省略）、メモリ（図示省略）、及びネットワークインタフェース（図示省略）等のハードウェアを備える。
【００３０】
圧縮伸張装置Ａ１１１、圧縮伸張装置Ｂ１２１、及び圧縮伸張装置Ｃ１３１は、送受信されるデータを圧縮し、また、圧縮されたデータを伸張する。ここで、本発明では、圧縮伸張装置がペアとなるように使用する。例えば、圧縮伸張装置Ａ１１１及び圧縮伸張装置Ｃ１３１をペアとし、また、圧縮伸張装置Ｂ１２１及び圧縮伸張装置Ｃ１３１をペアとして使用する。
【００３１】
なお、クライアント装置側の圧縮伸張装置とサーバ側の圧縮伸張装置とは、図１に示すようなｎ対１（図１では２対１）の構成でもよいし、ｎ対ｎの構成であってもよい。
【００３２】
図２は、本発明の実施例１における圧縮伸張装置の構成例を示すブロック図である。図２では、圧縮伸張装置Ａ１１１の構成例を示す。なお、圧縮伸張装置Ｂ１２１及び圧縮伸張装置Ｃ１３１も同一の構成である。
【００３３】
圧縮伸張装置Ａ１１１は、ＣＰＵ２０１、主記憶装置２０２、二次記憶装置２０３、及び二つのネットワークインタフェース（ＮＩＣ)２０４、２０５を備える。
【００３４】
ＣＰＵ２０１は、主記憶装置２０２に格納されるプログラムを実行する。ＣＰＵ２０１がプログラムを実行することによって、圧縮伸張装置Ａ１１１が備える機能を実現することができる。
【００３５】
主記憶装置２０２は、ＣＰＵ２０１によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。また、主記憶装置２０２は、プログラムが一時的にデータを格納するワークエリアを提供する。主記憶装置２０２は、例えば、ＤＩＭＭ等のメモリ等が考えられる。
【００３６】
本実施例では、主記憶装置２０２には、圧縮伸張モジュール２２１、通信先−辞書対応情報２２２、及び辞書管理情報２２３が格納される。圧縮伸張モジュール２２１は、圧縮伸張モジュールプログラム２３１によって実現されるプログラムモジュールである。通信先−辞書対応情報２２２の詳細については図３Ａ及び図３Ｂを用いて後述し、また、辞書管理情報２２３の詳細については図４を用いて後述する。
【００３７】
ＣＰＵ２０１は、圧縮伸張装置Ａ１１１の起動時に、圧縮伸張モジュールプログラム２３１を二次記憶装置２０３から読み出し、主記憶装置２０２上に当該圧縮伸張モジュールプログラム２３１を展開する。さらに、ＣＰＵ２０１は、展開された圧縮伸張モジュールプログラム２３１を実行することによって圧縮伸張モジュール２２１を実現する。圧縮伸張モジュール２２１は、後述する通信先−辞書対応情報２２２及び辞書管理情報２２３を主記憶装置２０２上に展開する。
【００３８】
二次記憶装置２０３は、プログラム及び情報を格納する。二次記憶装置２０３は、例えば、ＨＤＤ又はＳＤＤ等が考えられる。本実施例では、二次記憶装置２０３には、圧縮伸張モジュールプログラム２３１が格納される。
【００３９】
ＮＩＣ１（２０４）及びＮＩＣ２（２０５）は、他の装置と接続するためのインタフェースである。本実施例では、ＮＩＣ１（２０４）は、拠点側の装置、すなわち、クライアント装置Ａ１０１と接続され、また、ＮＩＣ２（２０５）は、広域網１０４と接続される。
【００４０】
ここで、圧縮伸張モジュール２２１について説明する。
【００４１】
圧縮伸張モジュール２２１は、所定の圧縮方式に基づいて、データを圧縮し、また圧縮されたデータを伸張する。本実施例では、ＬＺ７８及びＬＺ７８から派生したＬＺＷのような辞書式圧縮方式に基づいて、圧縮処理及び伸張処理が実行されるものとする。
【００４２】
本実施例の圧縮伸張モジュール２２１は、通信先−辞書対応情報２２２及び辞書管理情報２２３に基づいて、ＮＩＣ１（２０４）から受信したＩＰパケットのペイロードを圧縮し、ＮＩＣ２（２０５）から圧縮されたペイロードを含むＩＰパケットを通信先の装置に転送する。また、圧縮伸張モジュール２２１は、通信先−辞書対応情報２２２及び辞書管理情報２２３に基づいて、ＮＩＣ２（２０５）から受信したＩＰパケットのペイロードを伸張し、ＮＩＣ１（２０４）から伸張されたペイロードを含むＩＰパケットを通信先の装置に転送する。
【００４３】
なお、本発明は、ＬＺ７８及びＬＺＷのような辞書式圧縮方式に限定されず、送信側の圧縮伸張モジュール２２１から受信側の圧縮伸張モジュール２２１に辞書を別途配信しなくとも、受信側の圧縮伸張モジュール２２１が伸張処理を実行可能な辞書式圧縮方式であれば、どのような圧縮方式を使用してもよい。
【００４４】
図３Ａ及び図３Ｂは、本発明の実施例１における通信先−辞書対応情報２２２の一例を示す説明図である。図３Ａは圧縮伸張装置Ｃ１３１が保持する通信先−辞書対応情報２２２を示し、図３Ｂは圧縮伸張装置Ａ１１１が保持する通信先−辞書対応情報２２２を示す。
【００４５】
通信先−辞書対応情報２２２は、通信先の装置のＩＰアドレスの範囲と、通信先の装置との間の通信に用いる辞書との対応関係を示す情報を保持する。具体的には、通信先−辞書対応情報２２２は、ＩＤ３０１、通信先３０２、装置ＩＤ３０３、辞書名３０４、辞書数３０５、現辞書番号３０６、圧縮率短期平均３０７、及び圧縮率長期平均３０８から構成される。
【００４６】
ＩＤ３０１は、通信先−辞書対応情報２２２の各行を識別するための識別番号である。
【００４７】
通信先３０２は、共通の辞書を用いてデータを圧縮又は伸張するＩＰアドレスの範囲である。より具体的には、通信先３０２は、ＩＰパケットの送信先の装置が所属するネットワークを指定するＩＰアドレスの範囲を示すものである。例えば、広域網１４０を介して、ＬＡＮ等の複数のネットワークが接続されるネットワークシステムの場合、通信先３０２には、当該ネットワークを示すＩＰアドレスの範囲が格納される。
【００４８】
図３Ａの行３３２及び３３３の通信先３０２には、ＩＰアドレスの範囲としてサブネットマスクが指定される。また、図３Ｂの行３１２の通信先３０２には、ＩＰアドレスの範囲として個々の装置のＩＰアドレスが指定される。
【００４９】
なお、通信先３０２に格納される値の表現形式は、共通の辞書を用いてデータを圧縮又は伸張するＩＰアドレスの範囲を定義できる表現形式であればどのような表現形式であってもよい。また、通信先３０２に格納される値は、設定ファイルなどの手段によって管理者が設定することを想定しているが、設定方法はどのようなものであってもよい。例えば、通信時に、圧縮伸張装置が互いを自動的に認識し、圧縮伸張装置間で情報を交換することによって、通信先３０２の値を設定する方法が考えられる。
【００５０】
装置ＩＤ３０３は、通信先３０２に対応する装置側に配置される圧縮伸張装置のＩＤである。装置ＩＤ３０３に格納される値は、圧縮伸張装置の起動後に管理者によって入力されることを想定しているが、設定方法はどのようなものであってもよい。例えば、通信時に、圧縮伸張装置が互いを自動的に認識し、圧縮伸張装置間で情報を交換することによって、装置ＩＤ３０３の値を設定する方法が考えられる。
【００５１】
辞書名３０４は、通信先３０２に対応する装置との間の通信において使用される辞書の名前である。辞書名３０４の値は、圧縮伸張モジュール２２１によって決定される。
【００５２】
辞書数３０５は、辞書名３０４に対応する辞書名で定義された辞書の総数である。本実施例では、一つの辞書名に対し、一つ以上の辞書が生成される。
【００５３】
現辞書番号３０６は、辞書名３０４に対応する辞書のうち、現在使用している辞書の番号である。
【００５４】
圧縮率短期平均３０７は、通信先３０２に対応する装置との間の通信におけるデータの圧縮率の、直近短期間の移動平均を表す。
【００５５】
平均を取る期間の長さは、ユーザ定義の値として設定ファイルなどの手段によって管理者が設定することを想定しているが、メーカー定義の値として適当な値を予め装置に設定してもよい。また、期間の表し方として、ここでは１００パケットといったパケット数で表す方法を想定しているが、１分といった時間で表す方法を用いてもよい。また、平均の算出方法として、ここでは単純な相加平均を想定しているが、直近の値の影響を大きくする加重平均、又は相乗平均が用いられてもよい。
【００５６】
圧縮率長期平均３０８は、通信先３０２に対応する装置との間の通信におけるデータの圧縮率の、直近長期間の移動平均を表す。
【００５７】
平均を取る期間の長さは、ユーザ定義の値として設定ファイルなどの手段によって管理者が与えることを想定しているが、メーカー定義の値として適当な値を予め装置に設定してもよい。また、期間の表し方として、１００，０００パケットといったパケット数で表す方法を想定しているが、１，０００分といった時間で表す方法でもよい。また、平均の取り方として、ここでは単純な相加平均を想定しているが、直近の値の影響を大きくする加重平均、又は相乗平均が用いられてもよい。
【００５８】
図３Ａに示すように、圧縮伸張装置Ｃ１３１の通信先−辞書対応情報２２２は、クライアント装置Ａ１０１に対応する行３３２、及びクライアント装置Ｂ１０２に対応する行３３３を保持する。一方、図３Ｂに示すように、圧縮伸張装置Ａ１１１の通信先−辞書対応情報２２２は、サーバ１０３に対応する行３１２を保持する。
【００５９】
ここで、行３３２及び行３１２は、圧縮伸張装置Ｃ１３１及び圧縮伸張装置Ａ１１１の間の通信に関する行である。ペアとなっている圧縮伸張装置は、同一の複数の辞書を保持し、同一の辞書を用いてＩＰパケットを圧縮又は伸張する。したがって、行３３３及び行３１２の辞書数３０５、現辞書番号３０６、圧縮率短期平均３０７、及び圧縮率長期平均３０８の値は同一のものとなる。
【００６０】
図４は、本発明の実施例１における辞書管理情報２２３の一例を示す説明図である。図４は、圧縮伸張装置Ｃ１３１が保持する辞書管理情報２２３を示す。
【００６１】
辞書管理情報２２３は、圧縮伸張装置が保持する辞書のデータを管理する情報である。具体的には、辞書管理情報２２３は、ＩＤ４０１、辞書名４０２、辞書番号４０３、及び辞書データ４０４から構成される。
【００６２】
ＩＤ４０１は、辞書管理情報２２３の各行を識別するための識別番号である。
【００６３】
辞書名４０２は、通信先−辞書対応情報２２２の辞書名３０４と同一のものである。
【００６４】
辞書番号４０３は、辞書名４０２に対応する辞書名で定義された辞書のうち、現在使用されている辞書の識別番号である。
【００６５】
本実施例では、辞書名３０４に対応する辞書名で定義される辞書には、辞書数３０５の数だけに識別番号が付与される。そのため、辞書番号４０３には、現在使用される辞書の識別番号が格納される。例えば、辞書数３０５が「５」の場合、辞書名３０４に対応する辞書名で定義される辞書は五つ存在し、それぞれの辞書には「１」から「５」までの番号が付与される。
【００６６】
辞書データ４０４は、辞書名４０２及び辞書番号４０３に対応する辞書の辞書データである。本実施例では、辞書データ４０４には、圧縮伸張モジュール２２１が操作する内部表現のデータが格納されているものとする。なお、本発明はこれに限定されず、辞書データ４０４には、図１４に示すような表形式の辞書データが格納されてもよい。また、辞書管理情報２２３とは別に辞書データが管理されている場合、辞書データ４０４には、当該辞書データにアクセスするためのポインタを格納してもよい。
【００６７】
なお、辞書管理情報２２３は高速化のため主記憶装置２０２上に格納する。そのため、個々の辞書データ４０４のサイズに上限を設ける。辞書データ４０４のサイズの上限は設定ファイルなどを用いて管理者によって設定される値であり、例えば「４ＭＢ」が設定される。前述した辞書データ４０４のサイズの上限は一例であって、「４ＭＢ」より大きい値、又は小さい値であってもよい。なお、辞書データ４０４のサイズの上限は、圧縮伸張モジュールプログラム２３１に予め埋め込む等、その他の手段を用いて設定されてもよい。
【００６８】
圧縮伸張装置Ｃ１３１は、通信先−辞書対応情報２２２に示すように、圧縮伸張装置Ａ１１１を通る通信先「１９２．１６８．１．０／２４」のサブネット１１２との間の通信において、辞書名が「辞書Ａ」である辞書を五つ保持し、また、圧縮伸張装置Ｂ１２１を通る通信先「１９２．１６８．２．０／２４」との間の通信において、辞書名が「辞書Ｂ」である辞書を六つ保持する。そのため、辞書管理情報２２３には、辞書Ａの五つ分の行４４０１〜４４０５、辞書Ｂの六つ分の行４４０６〜４４１１を含む。
【００６９】
圧縮伸張モジュール２２１は、通信先−辞書対応情報２２２及び辞書管理情報２２３を用いて、通信先の装置との通信に使用する辞書を一意に取得することができる。例えば、サーバ１０３がクライアント装置Ａ１０１に対してＩＰパケットを送信する場合、圧縮伸張装置Ｃ１３１の圧縮伸張モジュール２２１は、以下の手順にしたがって辞書を取得する。
【００７０】
圧縮伸張モジュール２２１は、ＩＰパケットのＩＰヘッダから通信先の装置（クライアント装置Ａ１０１）のＩＰアドレスを取得する。ここでは、ＩＰアドレス「１９２．１６８．１．１０１」が取得される。
【００７１】
次に、圧縮伸張モジュール２２１は、通信先−辞書対応情報２２２から、ＩＰパケットから取得されたＩＰアドレスが通信先３０２に含まれる行を取得する。ここでは、行３３２が取得される。
【００７２】
次に、圧縮伸張モジュール２２１は、取得された行３３２の辞書名３０４及び現辞書番号３０６の値を取得する。ここでは、辞書名として「辞書Ａ」、現辞書番号として「５」が取得される。
【００７３】
次に、圧縮伸張モジュール２２１は、辞書管理情報２２３を参照し、辞書名４０２及び辞書番号４０３が、行３３２の辞書名３０４及び現辞書番号３０６から取得された値と一致する行を検索する。さらに、圧縮伸張モジュール２２１は、検索された行の辞書データ４０４から辞書データを取得する。ここでは、行４４０５が検索される。
【００７４】
次に、圧縮伸張モジュール２２１が実行する処理の詳細について説明する。
【００７５】
図５Ａ及び図５Ｂは、本発明の実施例１における圧縮伸張モジュール２２１がＩＰパケットを受信した場合に実行するＩＰパケットの転送処理を説明するフローチャートである。
【００７６】
図５Ａは、ＮＩＣ１（２０４）からＩＰパケットを受信した場合に実行される、圧縮処理を伴うＩＰパケットの転送処理を示す。図５Ｂは、ＮＩＣ２（２０５）からＩＰパケットを受信した場合に実行される、伸張処理を伴うＩＰパケットの転送処理を示す。
【００７７】
いずれのＩＰパケットの転送処理も、圧縮処理又は伸張処理の部分以外の処理は同様の処理であるため、比較しながら説明する。
【００７８】
まず、図５Ａを用いて圧縮処理を伴うＩＰパケットの転送処理について説明する。
【００７９】
圧縮伸張モジュール２２１は、ＮＩＣ１（２０４）からＩＰパケットを受信すると（ステップＳ５１１）、当該ＩＰパケットの送信先の装置に対して適用される辞書を取得する。具体的には、ステップＳ５１２からステップＳ５１４の手順にしたがって辞書が取得される。
【００８０】
まず、圧縮伸張モジュール２２１は、受信したＩＰパケットのＩＰヘッダから宛先ＩＰアドレス（Ｄｅｓｔｉｎａｔｉｏｎ  ＩＰ  Ａｄｄｒｅｓｓ）を取得する（ステップＳ５１２）。
【００８１】
次に、圧縮伸張モジュール２２１は、通信先−辞書対応情報２２２から、通信先３０２にステップＳ５１２において取得された宛先ＩＰアドレスが含まれる行を検索し、さらに、当該行の辞書名３０４及び現辞書番号３０６の値を取得する（ステップＳ５１３）。
【００８２】
圧縮伸張モジュール２２１は、辞書管理情報２２３を参照し、辞書名４０２及び辞書番号４０３が、ステップＳ５１３において取得された辞書名３０４及び現辞書番号３０６の値と一致する行を検索し、さらに、当該行の辞書データ４０４に格納される辞書データを取得して一時領域に格納する（ステップＳ５１４）。
【００８３】
圧縮伸張モジュール２２１は、一時領域に格納される辞書データを用いて、受信したＩＰパケットのペイロードを圧縮する（ステップＳ５１５）。このとき、圧縮伸張モジュール２２１は、送信される通信内容に基づいて、一時領域に格納される辞書データに新しい単語を追加する。また、圧縮伸張モジュール２２１は、ＩＰパケットの短期の圧縮率及び長期の圧縮率を算出する。
【００８４】
なお、新たな単語が検出されない場合、辞書データには新たな単語は追加されない。また、新たに単語を追加することによって辞書のサイズが辞書データ４０４のサイズの上限を超えてしまう場合にも、新たな単語は追加されない。また、新たに単語を追加することによって辞書のサイズが辞書データ４０４のサイズの上限を超えてしまう場合の別の対処法として、最も使われていない単語を削除する方法も知られている。
【００８５】
圧縮伸張モジュール２２１は、圧縮されたペイロードを含むＩＰパケットをＮＩＣ２（２０５）から、宛先ＩＰアドレスに対応する装置に送信する（ステップＳ５１６）。
【００８６】
その後、圧縮伸張モジュール２２１は、辞書管理情報２２３の更新処理を実行し（ステップＳ５１７）、処理を終了する。
【００８７】
なお、辞書管理情報２２３の更新処理の詳細は、図８を用いて後述するが、ステップＳ５１５において更新された辞書データは、辞書管理情報２２３の更新処理において一時領域から辞書管理情報２２３に書き戻される。
【００８８】
次に、図７Ｂを用いて伸張処理を伴うＩＰパケットの転送処理について説明する。
【００８９】
圧縮伸張モジュール２２１は、ＮＩＣ２（２０５）からＩＰパケットを受信すると（ステップＳ５２１）、当該ＩＰパケットの送信先の装置に対して適用される辞書を取得する。具体的には、ステップＳ５２３からステップＳ５２４の手順にしたがって辞書が取得される。
【００９０】
まず、圧縮伸張モジュール２２１は、受信したＩＰパケットのＩＰヘッダから送信元ＩＰアドレス（Ｓｏｕｒｃｅ  ＩＰ  Ａｄｄｒｅｓｓ）を取得する（ステップＳ５２２）。
【００９１】
次に、圧縮伸張モジュール２２１は、ステップＳ５１３と同様に、通信先−辞書対応情報２２２から、通信先３０２にステップＳ５２２において取得された送信元ＩＰアドレスが含まれる行を検索し、さらに、当該行の辞書名３０４及び現辞書番号３０６の値を取得する（ステップＳ５２３）。
【００９２】
圧縮伸張モジュール２２１は、ステップＳ５１４と同様に、辞書管理情報２２３を参照し、辞書名４０２及び辞書番号４０３が、ステップＳ５２３において取得された辞書名３０４及び現辞書番号３０６の値と一致する行を検索し、さらに、当該行から辞書データ４０４に格納される辞書データを取得して一時領域に格納する（ステップＳ５２４）。
【００９３】
圧縮伸張モジュール２２１は、一時領域に格納される辞書データを用いてＩＰパケットのペイロードを伸張する（ステップＳ５２５）。このとき、圧縮伸張モジュール２２１は、送信される通信内容に基づいて、一時領域に格納される辞書データに新しい単語を追加する。また、圧縮伸張モジュール２２１は、ＩＰパケットの短期の圧縮率及び長期の圧縮率を算出する。なお、新たな単語が検出されない場合、辞書データには新たな単語は追加されない。
【００９４】
圧縮伸張モジュール２２１は、伸張されたペイロードを含むＩＰパケットをＮＩＣ１（２０４）から、宛先ＩＰアドレスに対応する装置に送信する（ステップＳ５２６）。
【００９５】
その後、圧縮伸張モジュール２２１は、辞書管理情報２２３の更新処理を実行し（ステップＳ５２７）、処理を終了する。
【００９６】
なお、辞書管理情報２２３の更新処理の詳細は、図８を用いて後述するが、ステップＳ５２５において更新された辞書データは、辞書管理情報２２３の更新処理において一時領域から辞書管理情報２２３に書き戻される。
【００９７】
図６は、本発明の実施例１における圧縮伸張モジュール２２１が実行する辞書管理情報２２３の更新処理を説明するフローチャートである。
【００９８】
圧縮伸張モジュール２２１は、辞書管理情報２２３の更新処理を開始すると（ステップＳ６０１）、サイズ要件が成立し、かつ、圧縮率要件が成立するか否かを判定する。（ステップＳ６０２）。ここで、ステップＳ６０２の判定処理について説明する。
【００９９】
サイズ要件は、辞書のサイズが第一の閾値以上であることとする。本実施例では、辞書のサイズは、辞書に登録される単語数を想定しているが、辞書のバイト数を用いてもよい。
【０１００】
第一の閾値は、設定ファイルなどを用いて管理者によって設定される値であり、例えば、単語数として「３０，０００」が設定される。前述した第一の閾値は一例であって、「３０，０００」より大きい値、又は小さい値であってもよい。なお、第一の閾値は、圧縮伸張モジュールプログラム２３１に予め埋め込む等、その他の手段を用いて設定されてもよい。
【０１０１】
また、圧縮率要件は、圧縮率の短期平均及び圧縮率の長期平均の比率（圧縮率の長期平均に対する圧縮率の短期平均の比率）が第二の閾値以下であることとする。すなわち、圧縮率要件は、現在の辞書を用いた圧縮後のデータ又は現在の辞書を用いて伸張される前のデータが十分小さいサイズに圧縮されたデータであるか否かを判定するものである。なお、圧縮率の短期平均及び圧縮率の長期平均は、通信先−辞書対応情報２２２の圧縮率短期平均３０７及び圧縮率長期平均３０８から取得可能な値である。
【０１０２】
第二の閾値は、設定ファイルなどを用いて管理者によって設定される値であり、例えば、比率として「０．４（４０％）」が設定される。前述した第二の閾値は一例であって、「０．４」より大きい値、又は小さい値であってもよい。なお、第二の閾値は、圧縮伸張モジュールプログラム２３１に予め埋め込む等、その他の手段を用いて設定されてもよい。
【０１０３】
ステップＳ６０２の判定処理は、現在の通信内容に対して適切な辞書が使用されているか否かを判定するための処理である。具体的には、以下のような判定がなされる。
【０１０４】
サイズ要件が成立し、かつ、圧縮率要件が成立する場合、現在の通信内容に対して適切な辞書が使用されていないことを示す。したがって、この場合、圧縮伸張モジュール２２１は、他の辞書を使用し、又は新たな辞書を生成する必要がある。
【０１０５】
サイズ要件は成立するが、圧縮率要件を成立しない場合、現在の通信内容に対して適切な辞書が使用されていることを示す。
【０１０６】
サイズ要件が成立しない場合、新しく生成された辞書の単語数が十分でないことを示す。後述するステップＳ６３１において新しい辞書が生成された直後は、当該辞書の単語数が十分ではないため圧縮率が上がらない。したがって、新しく生成された辞書の単語数が増えるまで、辞書の変更及び新規辞書の生成を行わないようにするためにサイズ要件が成立するか否かが判定される。
【０１０７】
以上が、ステップＳ６０２の判定処理の説明である。
【０１０８】
サイズ要件又は圧縮率要件の少なくともいずれかが成立していないと判定された場合、圧縮伸張モジュール２２１は、辞書管理情報２２３の辞書データ４０４を更新する（ステップＳ６１１）。これは、現在の通信内容に対して適切な辞書データが使用されていること、又は新たな辞書データが生成された直後であることを示す。そのため、圧縮伸張モジュール２２１は、現在の辞書を更新し、当該辞書の使用を継続する。
【０１０９】
具体的には、圧縮伸張モジュール２２１は、ステップＳ５１５又はステップＳ５２５において新たに単語が追加された最新の辞書データを、ステップＳ５１４又はステップＳ５２４において辞書管理情報２２３から検索された行の辞書データ４０４に格納する。
【０１１０】
圧縮伸張モジュール２２１は、通信先−辞書対応情報２２２の圧縮率短期平均３０７を更新し（ステップＳ６１２）、また、通信先−辞書対応情報２２２の圧縮率長期平均３０８を更新し（ステップＳ６１３）、処理を終了する。具体的には、以下のような処理が実行される。
【０１１１】
圧縮伸張モジュール２２１は、ステップＳ５１３又はステップＳ５２３において、通信先−辞書対応情報２２２から取得された行の圧縮率短期平均３０７に、ステップＳ５１５又はステップＳ５２５において算出されたＩＰパケットの短期の圧縮率を格納する。
【０１１２】
また、圧縮伸張モジュール２２１は、ステップＳ５１３又はステップＳ５２３において、通信先−辞書対応情報２２２から取得された行の圧縮率長期平均３０８に、ステップＳ５１５又はステップＳ５２５において算出されたＩＰパケットの長期の圧縮率を格納する。
【０１１３】
以上がステップＳ６１２及びステップＳ６１３の処理の説明である。
【０１１４】
ステップＳ６０２において、サイズ要件が成立し、かつ、圧縮率要件が成立すると判定された場合、圧縮伸張モジュール２２１は、辞書管理情報２２３から現在使用している辞書データとは異なる辞書データを取得し、一時領域に当該辞書データを格納する（ステップＳ６２１）。すなわち、圧縮伸張モジュール２２１は、現在使用されていない辞書を取得する。
【０１１５】
具体的には、圧縮伸張モジュール２２１は、辞書管理情報２２３から辞書名４０２の値がステップＳ５１３又はステップＳ５２３において取得された辞書名に一致し、かつ辞書番号４０３の値がステップＳ５１３又はステップＳ５２３において取得された現辞書番号とは異なる行を全て抽出する。さらに、圧縮伸張モジュール２２１は、抽出された行の辞書データ４０４から辞書データを取得し、一時領域に取得された辞書データを格納する。
【０１１６】
圧縮伸張モジュール２２１は、ステップＳ６２１において取得された辞書データを用いて、ＩＰパケットのペイロードの圧縮率を算出する（ステップＳ６２２）。
【０１１７】
具体的には、圧縮伸張モジュール２２１は、取得された辞書データを用いて、ステップＳ５１１において受信したＩＰパケット又はステップＳ５２６において送信されたＩＰパケットのペイロードを圧縮する。これによって、圧縮伸張モジュール２２１は、当該ＩＰパケットのペイロードの圧縮率を算出できる。
【０１１８】
圧縮伸張モジュール２２１は、他の辞書データを用いたペイロードの圧縮率が、現在使用している辞書を用いたペイロードの圧縮率長期平均より高い辞書データが存在するか否かを判定する（ステップＳ６２３）。すなわち、他の辞書を用いた圧縮後のデータが十分小さいサイズに圧縮されたデータであるか否かが判定される。
【０１１９】
具体的には、圧縮伸張モジュール２２１は、ステップＳ６２２において算出されたペイロードの圧縮率と、ステップＳ５１３又はステップＳ５２３において取得された行の圧縮率長期平均３０８の値とを比較し、算出されたペイロードの圧縮率が圧縮率長期平均３０８の値より大きいか否かを判定する。
【０１２０】
他の辞書データを用いたペイロードの圧縮率が、現在使用している辞書を用いたペイロードの圧縮率長期平均より高い辞書データが存在しないと判定された場合、圧縮伸張モジュール２２１は、辞書管理情報２２３に新たな辞書データに対応する行を追加する（ステップＳ６３１）。
【０１２１】
このとき、圧縮伸張モジュール２２１は、追加された行のＩＤ４０１に任意の値を設定し、辞書名４０２にステップＳ５１３又はステップＳ５２３において取得された辞書名を設定し、辞書番号４０３にステップＳ５１３又はステップＳ５２３において取得された行の辞書数３０５の値に「１」を加算した値を設定する。なお、追加された行の辞書データ４０４は空の辞書データとする。
【０１２２】
圧縮伸張モジュール２２１は、通信先−辞書対応情報２２２の辞書数３０５及び現辞書番号３０６を更新し（ステップＳ６３２）、さらに、圧縮率短期平均３０７を「０％」に更新し（ステップＳ６３３）、その後、ステップＳ６１３に進む。
【０１２３】
具体的には、圧縮伸張モジュール２２１は、ステップＳ５１３又はステップＳ５２３において取得された行の辞書数３０５の値に「１」を加算する。また、圧縮伸張モジュール２２１は、当該行の現辞書番号３０６の値に、更新された辞書数３０５の値を格納する。
【０１２４】
ステップＳ６２３において、他の辞書データを用いたペイロードの圧縮率が、現在使用している辞書を用いたペイロードの圧縮率長期平均より高い辞書データが存在すると判定された場合、圧縮伸張モジュール２２１は、通信先−辞書対応情報２２２の現辞書番号３０６を更新し（ステップＳ６４１）、さらに、圧縮率短期平均３０７を更新し（ステップＳ６４２）、その後、ステップＳ６１３に進む。これは、過去に似たような通信内容のＩＰパケットが送信されたことを示す。この場合、他の辞書データに切り替えて通信を行うこととなる。
【０１２５】
具体的には、圧縮伸張モジュール２２１は、ステップＳ５１３又はステップＳ５２３において取得された行の現辞書番号３０６の値を、現在使用している辞書を用いたペイロードの圧縮率長期平均より大きい圧縮率の辞書データの番号に更新する。また、圧縮伸張モジュール２２１は、当該行の圧縮率短期平均３０７の値を、ステップＳ５１５又はステップＳ５２５において算出されたＩＰパケットの圧縮率に更新する。
【０１２６】
なお、ステップＳ６２２において、現在使用している辞書を用いたペイロードの圧縮率長期平均より大きい圧縮率の辞書データが複数存在する場合、圧縮伸張モジュール２２１は、最も圧縮率の高い辞書データを選択するものとする。
【０１２７】
なお、実施例１では、圧縮伸張装置間を接続するネットワーク構成について説明したが本発明はこれに限定されない。例えば、クライアント装置側に圧縮機能のみを備えた圧縮装置を接続し、サーバ側に伸張機能のみを備えた伸張装置を接続するネットワーク構成であってもよい。
【０１２８】
なお、実施例１では、クライアント装置及びサーバと別の装置として圧縮伸張装置を記載したが本発明はこれに限定されない。例えば、クライアント装置及びサーバが、圧縮伸張装置が備える機能を有してもよい。
【０１２９】
なお、実施例１では、圧縮率短期平均及び圧縮率長期平均を用いて辞書の切り替え、又は辞書の生成を行うか否かを判定していたが本発明はこれに限定されない。例えば、圧縮率短期平均の絶対値が第二の閾値以下の場合に圧縮率要件が成立すると判定してもよい。
【０１３０】
以上で説明したように、実施例１によれば、圧縮伸張装置は、一つの通信先に対して、ＩＰパケットを圧縮又は伸張するための情報である辞書を複数の辞書を保持し、通信内容に応じて圧縮率が高い辞書を用いて通信内容を圧縮又は伸張することができる。
【０１３１】
これによって、各通信先の装置との間で送受信されるデータの圧縮率を高めることができる。また、通信内容に応じて、動的に辞書を切り替え、又は、新たに辞書を生成することによって、最適な圧縮率を実現可能な通信が可能となる。
【０１３２】
さらに、小さいサイズの辞書を用いるため、全ての辞書を主記憶装置２０２上に格納することができる。したがって、検索時のＩ／Ｏ速度を高速化することができる。
【実施例２】
【０１３３】
実施例２では、実施例１の圧縮伸張装置が使用する辞書式圧縮にエントロピー符号を組合せることによって、さらに圧縮率を高めている点が異なる。以下、実施例１との差異を中心に実施例２について説明する。
【０１３４】
実施例２の計算機システムの構成は、実施例１と同一であるため説明を省略する。ただし、実施例２では、圧縮伸張装置Ａ１１１、圧縮伸張装置Ｂ１２１、及び圧縮伸張装置Ｃ１３１の構成が異なる。
【０１３５】
以下、図７から図１０を用いて、実施例２の圧縮伸張装置の構成について説明する。なお、実施例２の圧縮伸張装置は、実施例１の圧縮伸張装置にエントロピー符号に関する機能が追加されている点が異なる。したがって、実施例２の圧縮伸張装置について、実施例１の圧縮伸張装置との差異を中心に説明する。
【０１３６】
図７は、本発明の実施例２における圧縮伸張装置の構成例を示すブロック図である。図７では、圧縮伸張装置Ａ１１１の構成例を示す。なお、圧縮伸張装置Ｂ１２１及び圧縮伸張装置Ｃ１３１も同一の構成である。
【０１３７】
圧縮伸張装置Ａ１１１のハードウェア構成は実施例１と同一であるため説明を省略する。
【０１３８】
実施例２の二次記憶装置２０３には、辞書エントロピー圧縮伸張モジュール７２１を実現する辞書エントロピー圧縮伸張モジュールプログラム７３１が格納される。
【０１３９】
ＣＰＵ２０１は、圧縮伸張装置Ａ１１１の起動時に、辞書エントロピー圧縮伸張モジュールプログラム７３１を二次記憶装置２０３から読み出し、主記憶装置２０２上に展開する。さらに、ＣＰＵ２０１は、展開された辞書エントロピー圧縮伸張モジュールプログラム７３１を実行することによって辞書エントロピー圧縮伸張モジュール７２１を実現する。辞書エントロピー圧縮伸張モジュール７２１は、後述する通信先−辞書頻度表対応情報７２２及び辞書頻度表管理情報７２３を主記憶装置２０２上に展開する。
【０１４０】
辞書エントロピー圧縮伸張モジュール７２１は、後述する通信先−辞書頻度表対応情報７２２及び辞書頻度表管理情報７２３に基づいて、ＮＩＣ１（２０４）から受信したＩＰパケットのペイロードを圧縮し、ＮＩＣ２（２０５）から圧縮されたペイロードを含むＩＰパケットを通信先の装置に転送する。また、圧縮伸張モジュール２２１は、通信先−辞書頻度表対応情報７２２及び辞書頻度表管理情報７２３に基づいて、ＮＩＣ２（２０５）から受信したＩＰパケットのペイロードを伸張し、ＮＩＣ１（２０４）から伸張されたペイロードを含むＩＰパケットを通信先の装置に転送する。
【０１４１】
図８は、本発明の実施例２における通信先−辞書頻度表対応情報７２２の一例を示す説明図である。図８は圧縮伸張装置Ｃ１３１が保持する通信先−辞書頻度表対応情報７２２を示す。
【０１４２】
通信先−辞書頻度表対応情報７２２は、実施例１の通信先−辞書対応情報２２２を、通信先の装置と、辞書及び頻度表との対応を管理するように変更したものである。具体的には、通信先−辞書対応情報２２２の辞書名３０４、辞書数３０５、及び現辞書番号３０６が、辞書頻度表名８０４、辞書頻度表数８０５、及び現辞書頻度表番号８０６に変更される。その他の情報列は実施例１と同一のものである。
【０１４３】
なお、実施例２では、辞書の切り替えと同時に、頻度表も切り替えられるため、辞書及び頻度表を同一の行で管理する。しかし、辞書及び頻度表は異なるタイミングで切り替えることも考えられる。この場合、通信先−辞書頻度表対応情報７２２の情報列には、辞書名及び頻度表名、並びにそれらの番号を管理する辞書数、頻度表数、現辞書番号、及び現頻度表番号が含まれる。
【０１４４】
図９は、本発明の実施例２における辞書頻度表管理情報７２３の一例を示す説明図である。図９は、圧縮伸張装置Ｃ１３１が保持する辞書頻度表管理情報７２３を示す。
【０１４５】
辞書頻度表管理情報７２３は、頻度表を管理するために、実施例1の辞書管理情報２２３に頻度表データ９０５が追加された構造になっている。
【０１４６】
また、辞書頻度表管理情報７２３では、実施例１の辞書管理情報２２３の辞書名４０２、及び辞書番号４０３が辞書頻度表名９０２及び辞書頻度表番号９０３に変更される。その他の情報列は実施例１と同一のものである。
【０１４７】
圧縮伸張装置Ｃ１１３は、通信先−辞書頻度表対応情報７２２に示すように、圧縮伸張装置Ａ１１１を通る通信先「１９２．１６８．１．０／２４」のサブネット１１２との間の通信において、辞書頻度表名が「辞書頻度表Ａ」である辞書頻度表管理情報を構成する辞書データ及び頻度表データを五つ保持し、また、圧縮伸張装置Ｂ１２１を通る通信先「１９２．１６８．２．０／２４」のサブネット１２２との間の通信において、辞書頻度表名が「辞書頻度表Ｂ」である辞書頻度表管理情報を構成する辞書データ及び頻度表データを六つ保持する。そのため、辞書頻度表管理情報７２３には、辞書頻度表Ａの五つ分の行９４０１〜９４０５、辞書頻度表Ｂの六つ分の行９４０６〜９４１１を含む。
【０１４８】
辞書エントロピー圧縮伸張モジュール７２１は、通信先−辞書頻度表対応情報７２２及び辞書頻度表管理情報７２３を用いて、通信先の装置との通信に使用する辞書及び頻度表を一意に取得することができる。例えば、サーバ１０３がクライアント装置Ａ１０１に対してＩＰパケットを送信する場合、圧縮伸張装置Ｃ１３１の辞書エントロピー圧縮伸張モジュール７２１は、以下の手順にしたがって辞書データ及び頻度表データを取得する。
【０１４９】
辞書エントロピー圧縮伸張モジュール７２１は、ＩＰパケットのＩＰヘッダから通信先の装置（クライアント装置Ａ１０１）のＩＰアドレスを取得する。ここでは、ＩＰアドレス「１９２．１６８．１．１０１」が取得される。
【０１５０】
次に、辞書エントロピー圧縮伸張モジュール７２１は、通信先‐辞書頻度表対応情報７２２から、取得されたＩＰアドレスが通信先３０２に含まれる行を取得する。ここでは、行８３２が取得される。
【０１５１】
次に、辞書エントロピー圧縮伸張モジュール７２１は、取得された行８３２の辞書頻度表名８０４及び現辞書頻度表番号８０６の値を取得する。ここでは、辞書頻度表名として「辞書頻度表Ａ」、現辞書頻度表番号として「５」が取得される。
【０１５２】
次に、辞書エントロピー圧縮伸張モジュール７２１は、辞書頻度表管理情報７２３を参照し、辞書頻度表名９０２及び辞書頻度表番号９０３が、行８３２から取得された辞書頻度表名８０４及び現辞書頻度表番号８０６の値と一致する行を検索する。ここでは、行９４０５が検索される。
【０１５３】
さらに、辞書エントロピー圧縮伸張モジュール７２１は、検索された行９４０５の辞書データ４０４及び頻度表データ９０５から辞書データ及び頻度表データを取得する。
【０１５４】
次に、辞書エントロピー圧縮伸張モジュール７２１が実行する処理の詳細について説明する。
【０１５５】
図１０Ａ及び図１０Ｂは、本発明の実施例２における辞書エントロピー圧縮伸張モジュール７２１がＩＰパケットを受信した場合に実行するＩＰパケットの転送処理を説明するフローチャートである。
【０１５６】
図１０Ａは、ＮＩＣ１（２０４）からＩＰパケットを受信した場合に実行される、圧縮処理を伴うＩＰパケットの転送処理を示す。図１０Ｂは、ＮＩＣ２（２０５）からＩＰパケットを受信した場合に実行される、伸張処理を伴うＩＰパケットの転送処理を示す。
【０１５７】
なお、辞書エントロピー圧縮伸張モジュール７２１が実行するＩＰパケットの転送処理は、圧縮伸張モジュール２２１が実行するＩＰパケットの転送処理と基本的には同一の手順となるため、以下の説明では差異を中心に説明する。
【０１５８】
辞書エントロピー圧縮伸張モジュール７２１は、ＮＩＣ１（２０４）からＩＰパケットを受信すると（ステップＳ５１１）、当該ＩＰパケットのＩＰヘッダから宛先ＩＰアドレス（Ｄｅｓｔｉｎａｔｉｏｎ  ＩＰ  Ａｄｄｒｅｓｓ）を取得する（ステップＳ５１２）。
【０１５９】
次に、辞書エントロピー圧縮伸張モジュール７２１は、通信先−辞書頻度表対応情報７２２から、通信先３０２にステップＳ５１２において取得された宛先ＩＰアドレスが含まれる行を検索し、さらに、当該行の辞書頻度表名８０４と現辞書頻度表番号８０６の値を取得する（ステップＳ１０１３）。
【０１６０】
辞書エントロピー圧縮伸張モジュール７２１は、辞書頻度表管理情報７２３を参照し、辞書頻度表名９０２及び辞書頻度表番号９０３が、ステップＳ１０１３において取得された辞書頻度表名８０４及び現辞書頻度表番号８０６の値と一致する行を検索し、さらに、当該行から辞書データ４０４及び頻度表データ９０５に格納される辞書データ及び頻度表データを取得して一時領域に格納する（ステップＳ１０１４）。
【０１６１】
辞書エントロピー圧縮伸張モジュール７２１は、一時領域に格納される辞書データ及び頻度表データを用いて、受信したＩＰパケットのペイロードを圧縮する（ステップＳ１０１５）。このとき、辞書エントロピー圧縮伸張モジュール７２１は、送信される通信内容に基づいて、一時領域に格納される辞書データに新しい単語が追加し、また頻度表データの出現頻度を更新する。また、辞書エントロピー圧縮伸張モジュール７２１は、ＩＰパケットの短期の圧縮率及び長期の圧縮率を算出する。なお、新たな単語が検出されない場合、辞書データには新たな単語は追加されない。
【０１６２】
辞書エントロピー圧縮伸張モジュール７２１は、圧縮されたペイロードを含むＩＰパケットをＮＩＣ２（２０５）から、宛先ＩＰアドレスに対応する装置に送信する（ステップＳ５１６）。
【０１６３】
その後、辞書エントロピー圧縮伸張モジュール７２１は、辞書頻度表管理情報７２３の更新処理を実行し（ステップＳ１０１７）、処理を終了する。
【０１６４】
なお、辞書頻度表管理情報７２３の更新処理の詳細は図１１を用いて後述するが、ステップＳ１０１５において更新された辞書データ及び頻度表データは、辞書頻度表管理情報７２３の更新処理において一時領域から辞書頻度表管理情報７２３に書き戻される。
【０１６５】
次に、図１０Ｂを用いて伸張処理を伴うＩＰパケットの転送処理について説明する。
【０１６６】
辞書エントロピー圧縮伸張モジュール７２１は、ＮＩＣ２（２０５）からＩＰパケットを受信すると（ステップＳ５２１）、受信したＩＰパケットのＩＰヘッダから送信元ＩＰアドレス（Ｓｏｕｒｃｅ  ＩＰ  Ａｄｄｒｅｓｓ）を取得する（ステップＳ５２２）。
【０１６７】
次に、辞書エントロピー圧縮伸張モジュール７２１は、ステップＳ５１３と同様に、通信先−辞書頻度表対応情報７２２から、通信先３０２にステップＳ５２２において取得された送信元ＩＰアドレスが含まれる行を検索し、さらに、当該行の辞書頻度表名８０４及び現辞書頻度表番号８０６の値を取得する（ステップＳ１０２３）。
【０１６８】
辞書エントロピー圧縮伸張モジュール７２１は、ステップＳ１０１４と同様に、辞書頻度表管理情報７２３を参照し、辞書頻度表名９０２及び辞書頻度表番号９０３が、ステップＳ１０２３において取得された辞書頻度表名８０４及び現辞書頻度表番号８０６の値と一致する行を検索し、さらに、当該行から辞書データ４０４及び頻度表データ９０５に格納される辞書データ及び頻度表データを取得して一時領域に格納する（ステップＳ１０２４）。
【０１６９】
辞書エントロピー圧縮伸張モジュール７２１は、ステップＳ１０１５と同様に、一時領域に格納される辞書データ及び頻度表データを用いて、受信したＩＰパケットのペイロードを伸張する（ステップＳ１０２５）。このとき、辞書エントロピー圧縮伸張モジュール７２１は、送信される通信内容に基づいて、一時領域に格納される辞書データに新しい単語を追加し、頻度表データの出現頻度を更新する。また、辞書エントロピー圧縮伸張モジュール７２１は、ＩＰパケットの短期の圧縮率及び長期の圧縮率を算出する。なお、新たな単語が検出されない場合、辞書データには新たな単語は追加されない。
【０１７０】
辞書エントロピー圧縮伸張モジュール７２１は、伸張されたペイロードを含むＩＰパケットをＮＩＣ１（２０４）から、宛先ＩＰアドレスに対応する装置に送信する（ステップＳ５２６）。
【０１７１】
その後、辞書エントロピー圧縮伸張モジュール７２１は、辞書頻度表管理情報７２３の更新処理を実行し（ステップＳ１０２７）、処理を終了する。
【０１７２】
なお、辞書頻度表管理情報７２３の更新処理は、図１１を用いて後述するが、ステップＳ１０２５において更新された辞書データ及び頻度表データは、辞書頻度表管理情報７２３の更新処理において一時領域から辞書頻度表管理情報７２３に書き戻される。
【０１７３】
図１１は、本発明の実施例２における辞書エントロピー圧縮伸張モジュール７２１が実行する辞書頻度表管理情報７２３の更新処理を説明するフローチャートである。
【０１７４】
なお、辞書エントロピー圧縮伸張モジュール７２１が実行する辞書頻度表管理情報７２３の更新処理は、圧縮伸張モジュール２２１が実行する辞書管理情報２２３の更新処理と基本的には同一の手順となるため、以下の説明では差異を中心に説明する。
【０１７５】
辞書エントロピー圧縮伸張モジュール７２１は、辞書頻度表管理情報７２３の更新処理を開始すると（ステップＳ１１０１）、サイズ要件が成立し、かつ、圧縮率要件が成立するか否かを判定する（ステップＳ６０２）。
【０１７６】
サイズ要件又は圧縮率要件の少なくともいずれかが成立していないと判定された場合、辞書エントロピー圧縮伸張モジュール７２１は、辞書頻度表管理情報７２３の辞書データ４０４及び頻度表データ９０５を更新する（ステップＳ１１１１）。これは、現在の通信内容に対して適切な辞書データ及び頻度表データが使用されていること、又は新たな辞書データ及び頻度表データが生成された直後であることを示す。そのため、辞書エントロピー圧縮伸張モジュール７２１は、現在の辞書データ及び頻度表データの使用を継続する。
【０１７７】
具体的には、辞書エントロピー圧縮伸張モジュール７２１は、ステップＳ１０１５又はステップＳ１０２５において新たに単語が追加された辞書データ及び頻度が更新された頻度表データを、ステップＳ１０１４又はステップＳ１０２４において辞書頻度表管理情報７２３から検索された行の辞書データ４０４及び頻度表データ９０５に格納する。
【０１７８】
辞書エントロピー圧縮伸張モジュール７２１は、通信先−辞書頻度表対応情報７２２の圧縮率短期平均３０７を更新し（ステップＳ１１１２）、また、通信先−辞書頻度表対応情報７２２の圧縮率長期平均３０８を更新し（ステップＳ１１１３）、処理を終了する。具体的には、以下のような処理が実行される。
【０１７９】
辞書エントロピー圧縮伸張モジュール７２１は、ステップＳ１０１３又はステップＳ１０２３において、通信先−辞書頻度表対応情報７２２から取得された行の圧縮率短期平均３０７に、ステップＳ１０１５又はステップＳ１０２５において算出されたＩＰパケットの短期の圧縮率を格納する。
【０１８０】
また、辞書エントロピー圧縮伸張モジュール７２１は、ステップＳ１０１３又はステップＳ１０２３において、通信先−辞書頻度表対応情報７２２から取得された行の圧縮率長期平均３０８に、ステップＳ１０１５又はステップＳ１０２５において算出されたＩＰパケットの長期の圧縮率を格納する。
【０１８１】
以上がステップＳ１１１２及びステップＳ１１１３の処理の説明である。
【０１８２】
ステップＳ６０２において、サイズ要件が成立し、かつ、圧縮率要件が成立すると判定された場合、辞書エントロピー圧縮伸張モジュール７２１は、辞書頻度表管理情報７２３から、現在使用している辞書データとは異なる辞書データ、及び、現在使用している頻度表データとは異なる頻度表データを取得し、一時領域に当該辞書データ及び頻度表データを格納する（ステップＳ１１２１）。すなわち、辞書エントロピー圧縮伸張モジュール７２１は、現在使用されていない辞書データ及び頻度表データを取得する。
【０１８３】
具体的には、辞書エントロピー圧縮伸張モジュール７２１は、辞書頻度表管理情報７２３から辞書頻度表名９０２の値がステップＳ１０１３又はステップＳ１０２３において取得された辞書頻度表名に一致し、かつ、辞書頻度表番号９０３の値がステップＳ１０１３又はステップＳ１０２３において取得された現辞書頻度表番号とは異なる行を全て抽出する。さらに、辞書エントロピー圧縮伸張モジュール７２１は、抽出された行の辞書データ４０４及び頻度表データ９０５から辞書データ及び頻度表データを取得し、一時領域に格納する。
【０１８４】
辞書エントロピー圧縮伸張モジュール７２１は、ステップＳ１１２１において取得された辞書データ及び頻度表データを用いて、ＩＰパケットのペイロードの圧縮率を算出する（ステップＳ１１２２）。
【０１８５】
具体的には、辞書エントロピー圧縮伸張モジュール７２１は、取得された辞書データ及び頻度表データを用いて、ステップＳ５１１において受信したＩＰパケット又はステップＳ５２６において送信されたＩＰパケットのペイロードを圧縮する。これによって、辞書エントロピー圧縮伸張モジュール７２１は、当該ＩＰパケットのペイロードの圧縮率を算出できる。
【０１８６】
辞書エントロピー圧縮伸張モジュール７２１は、ステップＳ１１２１において取得された辞書データ及び頻度表データを用いて圧縮されたペイロードの圧縮率が、現在使用している辞書データ及び頻度表データを用いたペイロードの圧縮率長期平均より高い辞書データ及び頻度表データが存在するか否かを判定する（ステップＳ１１２３）。
【０１８７】
具体的には、辞書エントロピー圧縮伸張モジュール７２１は、ステップＳ１１２２において算出されたペイロードの圧縮率と、ステップＳ１０１３又はステップＳ１０２３において取得された行の圧縮率長期平均３０８の値と比較し、算出されたペイロードの圧縮率が圧縮率長期平均３０８の値より大きいか否かを判定する。
【０１８８】
他の辞書データを用いたペイロードの圧縮率が、現在使用している辞書データ及び頻度表データを用いたペイロードの圧縮率長期平均より高い辞書データ及び頻度表データが存在しないと判定された場合、辞書エントロピー圧縮伸張モジュール７２１は、辞書頻度表管理情報７２３に新たな辞書データ及び頻度表データに対応する行を追加する（ステップＳ１１３１）。
【０１８９】
このとき、辞書エントロピー圧縮伸張モジュール７２１は、追加された行のＩＤ４０１に任意の値を格納し、辞書頻度表名９０２にステップＳ１０１３又はステップＳ１０２３において取得された辞書頻度表名を格納し、辞書頻度表番号９０３にステップＳ１０１３又はステップＳ１０２３において取得された行の辞書頻度表数８０５の値に「１」を加算した値を格納する。なお、追加された行の辞書データ４０４には空の辞書データが格納され、頻度表データ９０５には空の頻度表データが格納される。
【０１９０】
辞書エントロピー圧縮伸張モジュール７２１は、通信先−辞書頻度表対応情報７２２の辞書頻度表数８０５及び現辞書頻度表番号８０６を更新し（ステップＳ１１３２）、さらに、圧縮率短期平均３０７を「０％」に更新し（ステップＳ１１３３）、その後、ステップＳ１１１３に進む。
【０１９１】
具体的には、辞書エントロピー圧縮伸張モジュール７２１は、ステップＳ１０１３又はステップＳ１０２３において取得された行の辞書頻度表数８０５の値に「１」を加算する。また、辞書エントロピー圧縮伸張モジュール７２１は、当該行の現辞書頻度表番号８０６に、更新された辞書頻度表数８０５の値を格納する。
【０１９２】
ステップＳ１１２３において、他の辞書データを用いたペイロードの圧縮率が、現在使用している辞書データ及び頻度表データを用いたペイロードの圧縮率長期平均より高い辞書データ及び頻度表データが存在すると判定された場合、辞書エントロピー圧縮伸張モジュール７２１は、通信先−辞書頻度表対応情報７２２の現辞書頻度表番号８０６を更新し（ステップＳ１１４１）、さらに、圧縮率短期平均３０７を更新し（ステップＳ１１４２）、その後、ステップＳ６１３に進む。これは、過去に似たような通信内容のＩＰパケットが送信されたことを示す。この場合、他の辞書データ及び頻度表データに切り替えて通信を行うこととなる。
【０１９３】
具体的には、辞書エントロピー圧縮伸張モジュール７２１は、ステップＳ１０１３又はステップＳ１０２３において取得された行の現辞書頻度表番号８０６の値を、現在使用している辞書データ及び頻度表データを用いたペイロードの圧縮率長期平均より大きい圧縮率の辞書データ及び頻度表データに対応する辞書頻度表番号に更新する。また、辞書エントロピー圧縮伸張モジュール７２１は、当該行の圧縮率短期平均３０７の値を、ステップＳ１０１５又はステップＳ１０２５において算出されたＩＰパケットの圧縮率に更新する。
【０１９４】
なお、ステップＳ１１２２において、現在使用している辞書データ及び頻度表データを用いたペイロードの圧縮率長期平均より大きい圧縮率の辞書データ及び頻度表データが複数存在する場合、辞書エントロピー圧縮伸張モジュール７２１は、最も圧縮率が高い辞書データ及び頻度表データを選択する。
【０１９５】
なお、実施例２では、辞書及び頻度表を用いてＩＰパケットを圧縮又は伸張していたが、頻度表のみを用いてＩＰパケットを圧縮又は伸張してもよい。すなわち、実施例１における辞書の代わりに頻度表を用いた実施例であってもよい。
【０１９６】
以上で説明したように、実施例２によれば、圧縮伸張装置は、通信先に対して複数の辞書及び頻度表を保持し、通信内容に応じて圧縮率が高い辞書及び頻度表を用いて通信内容を圧縮することができる。
【０１９７】
これによって、各通信先に送受信されるデータの圧縮率を高めることができる。また、通信内容に応じて、動的に辞書及び頻度表を切り替え、又は、新たに辞書及び頻度表を生成することによって、最適な圧縮率を実現可能な通信を実現することができる。
【０１９８】
さらに、辞書はＩＰパケットに含まれる通信内容（ペイロード）から生成されるものであるため小さいサイズに辞書となり、全ての辞書を主記憶装置２０２上に格納することができる。したがって、検索時のＩ／Ｏ速度を高速化することができる。
【実施例３】
【０１９９】
実施例３では、圧縮伸張装置のメモリの記憶容量には上限があるため、運用中に必要性の低い辞書を削除することによって、辞書を格納する記憶容量を確保する点が実施例１と異なる。以下、実施例１との差異を中心に実施例３について説明する。なお、本実施例は実施例１のシステムを拡張したものだが、実施例２のシステムを同様に拡張することによって辞書及び頻度表を格納する記憶容量に上限がある場合にも対応可能である。
【０２００】
辞書を格納する記憶容量に上限がある場合、圧縮伸張モジュール２２１は、辞書管理情報２２３の更新処理において、記憶容量の不足から新しい辞書が生成できない可能性又は新たな辞書を格納できない可能性がある。
【０２０１】
そのため、圧縮伸張モジュール２２１は、適切なタイミングで、辞書管理情報２２３の辞書名４０２に対応する辞書毎に、必要性の低い辞書を削除する。
【０２０２】
なお、辞書を削除するタイミングとしては、例えば、１日単位等、周期的なタイミングが考えられる。また、辞書を削除するタイミングの他の例としては、通信先−辞書対応情報２２２に新たな行が追加されたタイミング、新しい辞書が生成されるタイミングなどが考えられる。
【０２０３】
また、本実施例では、非特許文献５に開示されたキャッシュメモリのページ置換アルゴリズムであるＬＲＵ−ｋ方式を用いて必要性の低い辞書を特定する。なお、本実施例では簡単のためＬＲＵ−ｋのパラメータｋを「ｋ＝１」として説明するが、ｋは「２」以上であってもよい。また、ＬＲＵ以外に、ＦＩＦＯ及び２Ｑ等の他のページ置換アルゴリズムを用いることも可能である。
【０２０４】
図１２は、本発明の実施例３における辞書管理情報２２３の一例を示す説明図である。図１２に示す辞書管理情報２２３は、前述のようにパラメータｋが１のＬＲＵ−１に対応したものである。
【０２０５】
実施例３の辞書管理情報２２３は、新たに、最終アクセス時刻１２０５の情報列が追加される。最終アクセス時刻１２０５には、辞書データが更新された時刻を格納する。例えば、ステップＳ６１１において辞書データが更新された時刻、ステップＳ６３１において、辞書管理情報２２３に新たな辞書データに対応する行が追加された時刻が格納される。
【０２０６】
なお、最終アクセス時刻１２０５の他に、最終アクセス時刻の一つ前のアクセス時刻を管理する情報列を追加することによって、ＬＲＵ−２に対応した辞書管理情報２２３になる。また、最終アクセス時刻１２０５の代わりに、仮想的にキューを想定し、当該キュー内での順序を表す番号を管理する情報列を追加することによってＦＩＦＯに対応した辞書管理情報２２３になる。さらに、仮想的なキューを２本又は３本想定し、それらの中での順序を表す番号を管理する列も２つ又は３つ追加することによって２Ｑに対応した辞書管理情報２２３になる。
【０２０７】
図１３Ａ及び図１３Ｂは、本発明の実施例３における辞書の削除処理を説明するフローチャートである。
【０２０８】
以下の説明では、ＬＲＵ−１に対応した辞書管理情報２２３の辞書名４０２の値を「ａ」と指定するものとする。なお、辞書名４０２の値「ａ」には、通信先−辞書対応情報２２２の辞書名３０４の値のいずれか一つが代入される。そのため、通信先−辞書対応情報２２２から辞書名３０４の値の一覧を取得し、それらに対して繰り返し、辞書名が「ａ」である辞書の削除処理を実行することによって、各通信先の辞書から必要性の低い辞書が削除される。
【０２０９】
圧縮伸張モジュール２２１は、辞書の削除処理を開始すると（ステップＳ１３０１）、ＬＲＵ−１に対応した辞書管理情報２２３から辞書名４０２が「ａ」である行を取得する（ステップＳ１３０２）。例えば、「ａ＝辞書Ａ」である行が取得される。
【０２１０】
圧縮伸張モジュール２２１は、取得された行の最終アクセス時刻１２０５を参照し、最終アクセス時刻１２０５が最も古い行を辞書管理情報２２３から削除する（ステップＳ１３０３）。ここで、ＦＩＦＯ又は２Ｑ等、ＬＲＵ−１以外の方式を用いて必要性の低い辞書を特定する場合には、各方式に対応した処理内容に変更される。
【０２１１】
圧縮伸張モジュール２２１は、通信先−辞書対応情報２２２の辞書名３０４が「ａ」である行の辞書数３０５及び現辞書番号３０６を更新する（ステップＳ１３０４）。
【０２１２】
具体的には、圧縮伸張モジュール２２１は、辞書名３０４が「ａ」である行の辞書数３０５の値を「１」減算する。当該行の現辞書番号３０６の値については、削除された辞書が現辞書番号３０６の値に一致する辞書である場合、現辞書番号３０６の値が「１」減算され、削除された辞書が現辞書番号３０６の値に一致しない辞書である場合、現辞書番号３０６は特に更新されない。
【０２１３】
次に、圧縮伸張モジュール２２１は、削除された辞書を保持する対向装置を特定する（ステップＳ１３０５）。ここで、対向装置とは、削除された辞書を用いて通信を行う送信先の圧縮伸張装置のことを示す。
【０２１４】
具体的には、圧縮伸張モジュール２２１は、通信先−辞書対応情報２２２の辞書名３０４が「ａ」である行を参照し、当該行の装置ＩＤ３０３から対向装置の装置ＩＤを取得する。
【０２１５】
圧縮伸張モジュール２２１は、対向装置に対して、辞書管理情報２２３から削除された行の情報を含むメッセージを送信する（ステップＳ１３０６）。削除された行の情報としては、辞書名４０２及び辞書番号４０３がペアとなった（ａ、辞書番号）のような情報が考えられる。
【０２１６】
メッセージを受信した対向装置の圧縮伸張モジュール２２１は、辞書の削除処理を開始する（ステップＳ１３１１）。
【０２１７】
圧縮伸張モジュール２２１は、ＬＲＵ−１に対応した辞書管理情報２２３から、辞書名４０２及び辞書番号４０３が、メッセージに含まれる（ａ、辞書番号）に一致する行を削除する（ステップＳ１３１２）。
【０２１８】
圧縮伸張モジュール２２１は、通信先−辞書対応情報２２２の辞書名３０４が「ａ」である行の辞書数３０５及び現辞書番号３０６を更新する（ステップＳ１３１３）。
【０２１９】
具体的には、圧縮伸張モジュール２２１は、辞書名３０４が「ａ」である行の辞書数３０５の値を「１」減算する。当該行の現辞書番号３０６の値については、削除された辞書が現辞書番号３０６の値に一致する辞書である場合、現辞書番号３０６の値が「１」減算され、削除された辞書が現辞書番号３０６の値に一致しない辞書である場合、現辞書番号３０６は特に更新されない。
【０２２０】
以上で説明したように、実施例３によれば、圧縮伸張モジュール２２１は、辞書を格納する記憶容量が上限を超えないように、運用中に必要性の低い辞書を削除することによって、記憶容量の上限にあわせた辞書の管理を行うことが可能となる。
【０２２１】
各実施例では、ソフトウェアによる制御を用いた例について説明したが、その一部をハードウェアによって実現することも可能である。
【０２２２】
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。
【符号の説明】
【０２２３】
１０１、１０２  クライアント装置
１０３  サーバ
１０４  広域網
１１１、１２１、１３１  圧縮伸張装置
１１２、１２２    サブネット
２０１  ＣＰＵ
２０２  主記憶装置
２０３  二次記憶装置
２２１  圧縮伸張モジュール
２２２  通信先−辞書対応情報
２２３  辞書管理情報
２３１  圧縮伸張モジュールプログラム
７２１  辞書エントロピー圧縮伸張モジュール
７２２  辞書頻度表対応情報
７２３  辞書頻度表管理情報
７３１  辞書エントロピー圧縮伸張モジュールプログラム
８０４  辞書頻度表名
８０５  辞書頻度表数
８０６  現辞書頻度表番号
９０５  頻度表データ
９０５  辞書頻度表番号
【図１】
2015043502.tif 000003
【図２】
2015043502.tif 000004
【図３Ａ】
2015043502.tif 000005
【図３Ｂ】
2015043502.tif 000006
【図４】
2015043502.tif 000007
【図５Ａ】
2015043502.tif 000008
【図５Ｂ】
2015043502.tif 000009
【図６】
2015043502.tif 000010
【図７】
2015043502.tif 000011
【図８】
2015043502.tif 000012
【図９】
2015043502.tif 000013
【図１０Ａ】
2015043502.tif 000014
【図１０Ｂ】
2015043502.tif 000015
【図１１】
2015043502.tif 000016
【図１２】
2015043502.tif 000017
【図１３Ａ】
2015043502.tif 000018
【図１３Ｂ】
2015043502.tif 000019
【図１４】
2015043502.tif 000020
【図１５Ａ】
2015043502.tif 000021
【図１５Ｂ】
2015043502.tif 000022
【図１５Ｃ】
2015043502.tif 000023