(57)【要約】【課題】  ＷＡＮのようなＲＴＴが大きく、ホップ数が大きく廃棄発生箇所が多い環境において、大きなスループットを得られる独自ＴＣＰによる通信が、インターネットのような公衆網において通常のＴＣＰによる通信と競合しても、回線帯域を占有することを防ぎつつ、回線帯域の利用効率を最大化する。【解決手段】  通信網に接続される通信装置におけるパケットの送信帯域の制御方法であって、通信装置は、パケットが送信される通信網が公衆網か否かに基づいて、パケットの送信帯域の制御方法を判定し、判定された制御方法に従って、パケットの送信帯域を制御し、制御された送信帯域に従って、パケットを通信網に送信する。【選択図】図１６
2014135575.tif 000002
【特許請求の範囲】
【請求項１】
通信網に接続される通信装置であって、
パケットが送信される前記通信網又は前記通信網の状態に基づいて、パケットの送信帯域の制御方法を判定する判定部と、
前記判定部により判定された前記制御方法に従って、パケットの送信帯域を制御する帯域制御部と、
前記帯域制御部により制御された送信帯域に従って、パケットを前記通信網に送信する送信部と、を有することを特徴とする通信装置。
【請求項２】
請求項１に記載の通信装置であって、
前記判定部は、パケットが送信される前記通信網が公衆網か否かに基づいて、パケットの送信帯域の制御方法を判定すること、を特徴とする通信装置。
【請求項３】
請求項２に記載の通信装置であって、
前記判定部は、パケットが送信される前記通信網が公衆網である場合、前記通信網における輻輳を検出していない時のパケットの送信帯域の増加速度を、パケットが送信される前記通信網が公衆網ではない場合よりも小さくする制御方法と判定すること、を特徴とする通信装置。
【請求項４】
請求項２に記載の通信装置であって、
前記判定部は、パケットのヘッダに記載されたＩＰアドレスがプライベートＩＰアドレスか否かに基づいて、パケットが送信される前記通信網が公衆網か否かを判定すること、を特徴とする通信装置。
【請求項５】
請求項２に記載の通信装置であって、
前記判定部は、前記通信網における輻輳頻度又は前記通信網に送信するパケットの送信帯域の変化率に基づいて、パケットが送信される前記通信網が公衆網か否かを判定すること、を特徴とする通信装置。
【請求項６】
請求項３に記載の通信装置であって、
前記帯域制御部は、送信されたパケットの廃棄率の変化率又は再送率の変化率に基づいて、前記通信網における輻輳を検出すること、を特徴とする通信装置。
【請求項７】
請求項１に記載の通信装置であって、
前記判定部は、パケットのヘッダに記載されたＩＰアドレスがプライベートＩＰアドレスか否かに基づいて、パケットの送信帯域の制御方法を判定すること、を特徴とする通信装置。
【請求項８】
請求項７に記載の通信装置であって、
前記判定部は、パケットのヘッダに記載された送信先ＩＰアドレス又は送信元ＩＰアドレスがプライベートＩＰアドレスではない場合、輻輳を検出していない時のパケットの送信帯域の増加速度を、ヘッダに記載された前記送信先ＩＰアドレス及び前記送信元ＩＰアドレスの双方がプライベートＩＰアドレスであるパケットの送信帯域の増加速度よりも小さくする前記制御方法と判定すること、を特徴とする通信装置。
【請求項９】
請求項１に記載の通信装置であって、
前記判定部は、前記通信網における輻輳頻度又は前記通信網に送信するパケットの送信帯域の変化率に基づいて、パケットの送信帯域の制御方法を判定すること、を特徴とする通信装置。
【請求項１０】
通信網に接続される通信装置におけるパケットの送信帯域の制御方法であって、
前記通信装置は、
パケットが送信される前記通信網又は前記通信網の状態に基づいて、パケットの送信帯域の制御方法を判定し、
前記判定された制御方法に従って、パケットの送信帯域を制御し、
前記制御された送信帯域に従って、パケットを前記通信網に送信すること、を特徴とする制御方法。
【請求項１１】
請求項１０に記載の制御方法であって、
前記通信装置は、パケットが送信される前記通信網が公衆網か否かに基づいて、パケットの送信帯域の制御方法を判定すること、を特徴とする制御方法。
【請求項１２】
請求項１１に記載の制御方法であって、
前記通信装置は、パケットが送信される前記通信網が公衆網である場合、前記通信網における輻輳を検出していない時のパケットの送信帯域の増加速度を、パケットが送信される前記通信網が公衆網ではない場合よりも小さくする制御方法と判定すること、を特徴とする制御方法。
【請求項１３】
請求項１１に記載の制御方法であって、
前記通信装置は、パケットのヘッダに記載されたＩＰアドレスがプライベートＩＰアドレスか否かに基づいて、パケットが送信される前記通信網が公衆網か否かを判定すること、を特徴とする制御方法。
【請求項１４】
請求項１１に記載の制御方法であって、
前記通信装置は、前記通信網における輻輳頻度又は前記通信網に送信するパケットの送信帯域の変化率に基づいて、パケットが送信される前記通信網が公衆網か否かを判定すること、を特徴とする制御方法。
【請求項１５】
請求項１０に記載の制御方法であって、
前記通信装置は、パケットのヘッダに記載されたＩＰアドレスがプライベートＩＰアドレスか否かに基づいて、パケットの送信帯域の制御方法を判定すること、を特徴とする制御方法。
【請求項１６】
請求項１５に記載の制御方法であって、
前記判定部は、パケットのヘッダに記載された送信先ＩＰアドレス又は送信元ＩＰアドレスがプライベートＩＰアドレスではない場合、輻輳を検出していない時のパケットの送信帯域の増加速度を、ヘッダに記載された前記送信先ＩＰアドレス及び前記送信元ＩＰアドレスの双方がプライベートＩＰアドレスであるパケットの送信帯域の増加速度よりも小さくする前記制御方法と判定すること、を特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置に係り、特に、端末間の通信帯域を制御する通信装置に関する。
【背景技術】
【０００２】
クラウド等に用いられる拠点間の通信網として、ＩＰ−ＶＰＮ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ−  Ｖｉｒｔｕａｌ  Ｐｒｉｖａｔｅ  Ｎｅｔｗｏｒｋ）技術等を用いたＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）を用いることが、一般的になっている。
【０００３】
或る拠点に存在する端末が、別の拠点に存在する端末と通信する場合は、自拠点ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）とＷＡＮを接続する回線と、ＷＡＮと別拠点ＬＡＮを接続する回線とを経由して通信が行われる。これらの回線は、契約帯域によって、通信に使用可能な帯域幅が制限されている。
【０００４】
端末間の通信では、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）を用いるのが一般的である。ＴＣＰ通信では、送信端末が送信したデータに対して、受信端末が受信済みデータの位置を送信端末にフィードバック通知する。送信端末は、フィードバック通知される受信済みデータの位置が増加しなくなると、廃棄が発生したと判定する。
【０００５】
さらに、送信端末は、輻輳ウィンドウサイズ（受信したことを受信端末から通知されなくても送信可能なデータサイズ）と呼ばれるパラメータを管理しており、ＲＴＴ（Ｒｏｕｎｄ  Ｔｒｉｐ  Ｔｉｍｅ）や廃棄検出の有無に応じて、輻輳ウィンドウサイズを変化させる。
【０００６】
送信端末は、廃棄検出時やＲＴＴ増加時にネットワークが混雑していると判定して、ウィンドウサイズを減少させることで、送信帯域を間接的に減少させて、ネットワークの混雑を回避する。また、送信端末は、廃棄が無い時やＲＴＴ減少時にネットワークが空いていると判定して、ウィンドウサイズを増加させることで、送信帯域を間接的に増加させて、ネットワークの回線帯域を有効利用する。
【０００７】
ＲＴＴが大きいほど、また、廃棄率が大きいほど、ウィンドウサイズが増加しにくくなり、帯域が小さくなる。
【０００８】
以上のように、ＷＡＮにおけるＴＣＰを用いた通信では、送信帯域がＲＴＴと廃棄率に大きく左右される。
【０００９】
ウィンドウサイズを増加させる方法として、最初は非線形に増加させていき、ある閾値を上回った後は、線形に増加させていく技術がある（特許文献１）。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】国際公開ＷＯ２００７／０９２９０１号
【発明の概要】
【発明が解決しようとする課題】
【００１１】
ＴＣＰを用いた通信では、送信帯域がＲＴＴと廃棄率に大きく左右されるため、ＷＡＮのようなＲＴＴが大きく、ホップ数が大きく廃棄発生箇所が多い環境において、契約帯域を大幅に下回る通信帯域しか得られない場合がある。このような場合は、ＷＡＮアクセラレータのような装置を用いて通常のＴＣＰによる通信を独自ＴＣＰによる通信に変換することで、ＲＴＴや廃棄率が大きいＷＡＮのような回線でも、大きな通信帯域を確保することができる。
【００１２】
ここで、独自ＴＣＰを用いた通信とは、ＴＣＰパケットと同じフォーマットを用いて、通常のＴＣＰを用いた通信とは異なる帯域制御を実施する通信のことを言い、独自ＴＣＰを用いた通信の説明を図１１〜１４を用いて後述する。
【００１３】
ところが、一部の拠点にのみＷＡＮアクセラレータが導入されているＷＡＮや、インターネットなどでは、通常のＴＣＰを用いた通信と、独自ＴＣＰを用いた通信が、同一の通信回線を共有する場合がある。この場合、独自ＴＣＰを用いた通信が、回線帯域を占有してしまい、通常のＴＣＰを用いた通信が通信帯域を確保できないケースがあった。
【００１４】
本発明は、以上の点に鑑み、部分的にＷＡＮアクセラレータが導入されているＷＡＮやインターネットのように、独自ＴＣＰを用いた通信と通常のＴＣＰを用いた通信が、通信回線を共有する場合でも、独自ＴＣＰを用いた通信が回線帯域を占有することを防ぎ、通常のＴＣＰを用いた通信が通信帯域を確保できるようにする通信装置を提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記の目的を達成するために、本発明の一つの観点から、通信網に接続される通信装置が提供される。当該通信装置は、パケットが送信される通信網又は通信網の状態に基づいて、パケットの送信帯域の制御方法を判定する判定部と、判定部により判定された制御方法に従って、パケットの送信帯域を制御する帯域制御部と、帯域制御部により制御された送信帯域に従って、パケットを通信網に送信する送信部と、を有する。
【００１６】
より好ましくは、判定部は、パケットが送信される通信網が公衆網か否かに基づいて、パケットの送信帯域の制御方法を判定する。
【００１７】
さらに好ましくは、判定部は、パケットのヘッダに記載されたＩＰアドレスがプライベートＩＰアドレスか否かに基づいて、また、通信網における輻輳頻度もしくは通信網に送信するパケットの送信帯域の変化率に基づいて、パケットの送信帯域の制御方法を判定する。
【００１８】
本発明の別の観点によれば、通信網に接続される通信装置におけるパケットの送信帯域の制御方法が提供される。当該制御方法は、パケットが送信される通信網又は通信網の状態に基づいて、パケットの送信帯域の制御方法を判定し、判定された制御方法に従って、パケットの送信帯域を制御し、制御された送信帯域に従って、パケットを前記通信網に送信する。
【００１９】
より好ましくは、パケットが送信される通信網が公衆網か否かに基づいて、パケットの送信帯域の制御方法を判定する。
【００２０】
さらに好ましくは、パケットのヘッダに記載されたＩＰアドレスがプライベートＩＰアドレスか否かに基づいて、また、通信網における輻輳頻度もしくは通信網に送信するパケットの送信帯域の変化率に基づいて、パケットの送信帯域の制御方法を判定する。
【発明の効果】
【００２１】
本発明によると、通常のＴＣＰを用いた通信と、独自ＴＣＰを用いた通信が、同一の通信回線を共有する場合でも、通常のＴＣＰを用いた通信が通信帯域を確保しつつ、独自ＴＣＰを用いた通信が、回線帯域を占有することなく効率的に通信帯域を利用することが可能となる。
【図面の簡単な説明】
【００２２】
【図１】本実施の形態における装置を有するシステム構成図。
【図２】本実施の形態における装置を有するシステム構成図。
【図３】本実施の形態における装置１００のブロック図。
【図４】バッファのポインタの説明図。
【図５】パケットのフォーマット図。
【図６】状態テーブル３１２のフォーマット図。
【図７】状態テーブル３１２が保持する値の意味を説明する概念図。
【図８】プロキシ部３０６のブロック図。
【図９】ＷＡＮ  ＴＣＰ部３０９のブロック図。
【図１０】ＬＡＮ  ＴＣＰ部３０３のブロック図。
【図１１】廃棄率の変化率を用いた輻輳制御の説明図。
【図１２】制御帯域を更新する上位のフローチャート図。
【図１３】制御帯域を増加させる部分のフローチャート図。
【図１４】制御帯域を更新する詳細なフローチャート図。
【図１５】パケット受信時のエントリ作成のフローチャート図。
【図１６】ＩＰアドレスの種類に応じてモードを決定するフローチャート図。
【図１７】送信帯域変化率や輻輳頻度に応じてモードを決定するフローチャート図。
【図１８】送信帯域変化率や輻輳頻度に応じてモードを切り替えるフローチャート図。
【図１９】制御方式に応じて暗号化・復号の有無を決めるフローチャート図。
【図２０】対向装置の独自ＴＣＰへの対応の有無に応じてモードを切り替える概念図（例１）。
【図２１】対向装置の独自ＴＣＰへの対応の有無に応じてモードを切り替える概念図（例２）。
【図２２】対向装置の独自ＴＣＰへの対応の有無に応じてモードを切り替える概念図（例３）。
【図２３】対向装置の独自ＴＣＰへの対応の有無に応じてモードを切り替える概念図（例４）。
【図２４】ＷＡＮにおける帯域のボトルネックを示す図。
【発明を実施するための形態】
【００２３】
本発明を実施するための代表的な形態は、下記の通りである。実施例１には基本的な一形態を、記載する。
＜第一の実施形態＞
まず、図１と図２を用いて、本発明が解決しようとする課題について説明する。
【００２４】
図１には、本実施の形態の通信装置を適用した中継システムの構成図の一つ目の例を示す。
【００２５】
通信装置（中継装置ともいう。以下、単に装置と記す）１００は、ある拠点内のＬＡＮ１２０とＷＡＮ１１０を接続する通信回線上に設置される。ＬＡＮ１２０には、端末１２１が接続されており、端末１２１にはプライベートＩＰアドレスが割り振られている。ＷＡＮ１１０からインターネット１３０への出入り口には、プライベートＩＰアドレスとパブリックＩＰアドレスとの間でアドレス変換を行うためのＮＡＴ（Ｎｅｔｗｏｒｋ  Ａｄｄｒｅｓｓ  Ｔｒａｎｓｌａｔｉｏｎ）装置１１１が設置されている。インターネット１３０には、装置１０１経由で端末１３１が接続されている他、装置１４０、１４１が接続されている。端末１３１、１４０、１４１には、パブリックＩＰアドレスが割り振られている。なお、端末、装置及びネットワークの数は図示以外にも適宜の数を備えても良い。
【００２６】
インターネット１３０に接続された端末１３１が、ある拠点内のＬＡＮ１２０に接続された端末１２１と通信する際は、装置１００とＮＡＴ装置１１１と装置１０１を経由して通信が行われる。ＬＡＮ１２０内では、端末１２１のプライベートＩＰアドレスと端末１３１のパブリックＩＰアドレスを用いて通信が行われる。ＮＡＴ装置１１１において、端末１２１のプライベートＩＰアドレスがパブリックＩＰアドレスに変換され、インターネット１３０では、端末１２１のパブリックＩＰアドレスと端末１３１のパブリックＩＰアドレスを用いて通信が行われる。装置１００と装置１０１との間の通信は、本実施の形態の通信装置を経由する独自ＴＣＰを用いた通信となる一方、装置１４０と装置１４１との間の通信は、通常のＴＣＰを用いた通信となるため、インターネット１３０では、独自ＴＣＰを用いた通信と、通常ＴＣＰを用いた通信が、同一の回線を共有するケースがある。
【００２７】
このように、通常のＴＣＰを用いた通信と、独自ＴＣＰを用いた通信が、同一の通信回線を共有する場合、従来は、独自ＴＣＰを用いた通信が、回線帯域を占有してしまい、通常のＴＣＰを用いた通信が通信帯域を確保できないケースがあった。
【００２８】
図２には、本実施の形態の通信装置を適用した中継システムの構成図の二つ目の例を示す。
【００２９】
通信装置１００、２００は、ある拠点内のＬＡＮ１２０，２２０とＷＡＮ１１０，２１０を接続する通信回線上に設置される。ＬＡＮ１２０，２２０には、端末１２１，２２１が接続されており、端末１２１，２２１にはプライベートＩＰアドレスが割り振られている。ＷＡＮ１１０，２１０からインターネット１３０への出入り口には、プライベートＩＰアドレスとパブリックＩＰアドレスとの間でアドレス変換を行うためのＮＡＴ装置１１１，２１１が設置されている。その他、インターネット１３０には、端末２４０、２４１が接続されている。端末２４０，２４１にはパブリックＩＰアドレスが割り振られている。ＮＡＴ／ＮＡＰＴを経由して通信する場合などは、端末２４０，２４１にプライベートＩＰアドレスが割り振られていても良い。なお、端末、装置及びネットワークの数は図示以外にも適宜の数を備えても良い。
【００３０】
ある拠点内のＬＡＮ２２０に接続された端末２２１が、別の拠点内のＬＡＮ１２０に接続された端末１２１と通信する際は、装置１００とＮＡＴ装置１１１とＮＡＴ装置２１１と装置２００を経由して通信が行われる。ＬＡＮ１２０内では、端末１２１のプライベートＩＰアドレスと端末２２１のパブリックＩＰアドレスを用いて通信が行われる。ＬＡＮ２２０内では、端末２２１のプライベートＩＰアドレスと端末１２１のパブリックＩＰアドレスを用いて通信が行われる。ＮＡＴ装置１１１において、端末１２１のプライベートＩＰアドレスがパブリックＩＰアドレスに変換される。一方、ＮＡＴ装置２１１では、端末２２１のプライベートＩＰアドレスがパブリックＩＰアドレスに変換される。インターネット１３０では、端末１２１のパブリックＩＰアドレスと端末２２１のパブリックＩＰアドレスを用いて通信が行われる。装置１００と装置１０１との間の通信は、本実施の形態の通信装置を経由する独自ＴＣＰを用いた通信となる一方、端末２４０と端末２４１との間の通信は、通常のＴＣＰを用いた通信となるため、インターネット１３０では、独自ＴＣＰを用いた通信と、通常ＴＣＰを用いた通信が、同一の回線を共有する場合がある。
【００３１】
このように、通常のＴＣＰを用いた通信と、独自ＴＣＰを用いた通信が、同一の通信回線を共有する場合、従来は、独自ＴＣＰを用いた通信が、回線帯域を占有してしまい、通常のＴＣＰを用いた通信が通信帯域を確保できないケースがあった。
【００３２】
本発明は、装置１００、１０１、２００における独自ＴＣＰの送信帯域の制御に関するものであり、通常のＴＣＰを用いた通信が通信帯域を確保しつつ、独自ＴＣＰを用いた通信が、回線帯域を占有することなく効率的に通信帯域を利用できるようにすることを目的とする。
【００３３】
図３には、本実施の形態の通信装置１００（図１及び図２における装置１００、１０１、２００に相当する）のブロック図を示す。
【００３４】
装置１００は、例えば、外部のＷＡＮ／ＬＡＮネットワークとのパケットの送受信を行うＷＡＮ側及びＬＡＮ側のネットワークインターフェース（３０１／３１１）と、高速化非対象のＴＣＰパケットやＴＣＰ以外のＵＤＰパケットやＡＲＰパケット等を素通しさせるためのフィルタ（３０２／３１０）と、ＴＣＰ通信のための制御を行うＷＡＮ側及びＬＡＮ側のＴＣＰ処理部３０３／３０９と、ＷＡＮ側のＴＣＰ処理部３０９で管理されるＮ個の送信バッファ３０７およびＮ個の受信バッファ３０８と、ＬＡＮ側のＴＣＰ処理部３０３で管理されるＮ個の送信バッファ３０５およびＮ個の受信バッファ３０４と、送受信バッファ間でデータの乗せ換えを行うプロキシ３０６と、Ｎ個のエントリを備えた状態テーブル（状態記憶領域）３１２と、ＩＰアドレスの種類や輻輳頻度や送信帯域変動率に応じて通信モードを決定するモード判定部３２０と、パケットの暗号化・復号を行う暗号化・復号部３３０とを備える。なお、上述のＮ個は、それぞれ異なる数でもよい。モード判定部３２０が、ＩＰアドレスの種類に基づいて、通信モード（ｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４、ｐｕｂｌｉｃ＿ｍｏｄｅ６６２、ｅｎｃｒｙｐｔｉｏｎ＿ｍｏｄｅ６３５）を変更する方法は、図１６を用いて後述する。
【００３５】
ＴＣＰ処理部３０３、３０９、プロキシ３０６については、後に詳述し、ここでは概略を述べる。
【００３６】
ＬＡＮ側のＴＣＰ処理部３０３は、送信履歴更新部１０２５と、パケット再送部１０２４と、受信履歴更新部１０２６と、振分部１０２８と、集約部１０３２とを備える。受信履歴更新部１０２６は、受信したパケットデータを、ＬＡＮ側受信バッファ３０４に蓄積する。更に、受信履歴更新部１０２６は、蓄積したデータに応じて、状態テーブル３１２のバッファ管理ポインタ（６０８〜６１０、６１４〜６１６、６２１〜６２３、６２７〜６２９）の情報を更新する。更に、受信履歴更新部１０２６は、受信したデータの位置を記載したＡＣＫパケットを集約部１０３２経由で返信する。送信履歴更新部１０２５は、ＬＡＮ側送信バッファ３０５から読み出した送信データをパケットにして送信すると共に、読み出したデータに応じて、状態テーブル３１２のバッファ管理ポインタ（６０８〜６１０、６１４〜６１６、６２１〜６２３、６２７〜６２９）の情報を更新する。
【００３７】
ＷＡＮ側のＴＣＰ処理部３０９は、送信帯域制御部９１５と、送信履歴更新部９０５と、パケット再送部９０４と、受信履歴更新部９０６と、振分部９０８と、集約部９１２とを備える。受信履歴更新部９０６は、受信したパケットデータを、ＷＡＮ側受信バッファ３０８に蓄積する。更に、受信履歴更新部９０６は、蓄積したデータに応じて、状態テーブル３１２のバッファ管理ポインタ（６０８〜６１０、６１４〜６１６、６２１〜６２３、６２７〜６２９）の情報を更新する。更に、受信履歴更新部９０６は、受信したデータの位置を記載したＡＣＫパケットを集約部９１２経由で返信する。送信帯域制御部９１５は、送信帯域と再送帯域とＡＣＫ受信数の情報を状態テーブル３１２に蓄積する。送信履歴更新部９０５は、ＷＡＮ側送信バッファ３０７から読み出した送信データをパケットにして送信すると共に、読み出した送信データサイズに応じて、状態テーブル３１２のバッファ管理ポインタ（６０８〜６１０、６１４〜６１６、６２１〜６２３、６２７〜６２９）の情報を更新する。
【００３８】
プロキシ３０６は、データ読出し部（８０１、８０６）と、データ加工部（８０２、８０５）と、データ書込部（８０３、８０４）を備える。データ読出部（８０１、８０６）は、受信バッファ（３０４、３０８）から読み出したデータサイズに応じて、状態テーブル３１２のバッファ管理ポインタ（６０８〜６１０、６１４〜６１６、６２１〜６２３、６２７〜６２９）の情報を更新する。データ書込部（８０３、８０４）は、送信バッファ（３０７、３０５）に書き込んだデータサイズに応じて、状態テーブル３１２のバッファ管理ポインタ（６０８〜６１０、６１４〜６１６、６２１〜６２３、６２７〜６２９）の情報を更新する。データ加工部（８０２、８０５）は、データの圧縮・解凍などを行う。データ加工部（８０２、８０５）が、互いにデータのやり取りをおこなってもよい。
【００３９】
図４には、送受信バッファ管理用のポインタの説明図を表す。本図で示したバッファでは、データを左から右に書き込んでいき、左から右に読み出していくものとする。
【００４０】
受信バッファ（３０４、３０８）では、受信したデータの末尾を示すポインタｒｉｇｈｔ＿ｒｅｃｖ４０３と、整列済みデータと未整列データの境界を示すポインタｌｅｆｔ＿ｒｅｃｖ４０２と、プロキシ３０６がすでに読出し済のデータとまだ読出していないデータの境界を示すｌｅｆｔ＿ｒｂｕｆ４０１と、が管理される。これらのポインタの値は、ＬＡＮ側のＴＣＰ処理部３０３やＷＡＮ側のＴＣＰ処理部３０９やプロキシ３０６によって、データが読み書きされるときに更新される。
【００４１】
受信したデータの末尾を示すポインタｒｉｇｈｔ＿ｒｅｃｖ４０３は、パケット廃棄が発生せずに、前から順番にデータを受信すると、受信したデータサイズ分増えて、右へ移動する。パケット廃棄が発生するなどして受信できずに歯抜けになったデータ箇所（ロスセグメント）が存在する状態で、再送パケットを受信して、ロスセグメントが消滅すると、整列済みデータと未整列データの境界を示すポインタｌｅｆｔ＿ｒｅｃｖ４０２は、最も前側(左側)にあるロスセグメントの左端まで移動する。プロキシ３０６は、読出済データと未読出データの境界を示すｌｅｆｔ＿ｒｂｕｆ４０１から右へ向かって順番にデータを読み出し、読み出したデータサイズ分、ｌｅｆｔ＿ｒｂｕｆ４０１を右へ移動させる。新たに読み出せるデータサイズの最大値は、ｌｅｆｔ＿ｒｅｃｖ４０２とｌｅｆｔ＿ｒｂｕｆ４０１の差である。
【００４２】
送信バッファ（３０５、３０７）は、プロキシ３０６から書き込まれ送信可能な状態となっているデータの末尾を表すポインタｒｉｇｈｔ＿ｓｂｕｆ４０６と、すでに送信済みのデータの末尾を示すポインタｒｉｇｈｔ＿ｓｅｎｄ４０５と、受信側から確認応答を受信済みのデータの末尾を示すポインタｌｅｆｔ＿ｓｅｎｄ４０４と、を管理する。
【００４３】
プロキシ３０６から書き込まれ送信可能な状態となっているデータの末尾を表すポインタｒｉｇｈｔ＿ｓｂｕｆ４０６は、プロキシ３０６が新たにデータを書き込む毎に、書き込んだデータサイズ分増加し、右へ移動する。すでに送信済みデータの末尾を示すポインタｒｉｇｈｔ＿ｓｅｎｄ４０５を始点として右に向かって新たなデータが送信され、ｒｉｇｈｔ＿ｓｅｎｄ４０５は、送信されたデータサイズ分増加し、右へ移動する。受信側から、ｌｅｆｔ＿ｓｅｎｄ４０４よりも大きな受信シーケンス番号を持つ確認応答パケットを受信すると、ｌｅｆｔ＿ｓｅｎｄ４０４は、確認応答パケットに記載された受信シーケンス番号へと増加し、右へ移動する。
【００４４】
図５は、装置が送受信するパケットのフォーマットを表す。パケットは、ＭＡＣヘッダ５００、ＩＰヘッダ５１０、ＴＣＰヘッダ５２０、ＴＣＰオプションヘッダ５３０、ペイロード５５０を含む。ＭＡＣヘッダ５００は、宛先ＭＡＣアドレスを表すＤＭＡＣ５０１と、送信元ＭＡＣアドレスを表すＳＭＡＣ５０２と、ＭＡＣフレームタイプを表すＴｙｐｅ５０３を含む。ＩＰヘッダ５１０は、ＭＡＣヘッダを除くパケット長を表すＩＰ  ｌｅｎｇｔｈ５１１と、プロトコル番号を表すｐｒｏｔｏｃｏｌ５１２と、送信元ＩＰアドレスを表すＳＩＰ５１３と、宛先ＩＰアドレスを現すＤＩＰ５１４とを含む。ＴＣＰヘッダ５２０は、送信元ポート番号を表すｓｒｃ．ｐｏｒｔ５２１と、宛先ポート番号を表すｄｓｔ．ｐｏｒｔ５２２と、送信シーケンス番号を表すＳＥＱ５２３と、受信シーケンス番号を表すＡＣＫ５２４と、ＴＣＰフラグ番号を表すｆｌａｇ５２５と、ＴＣＰのヘッダ長を表すｔｃｐ  ｈｌｅｎ５２６と、ＴＣＰのリモートウィンドウサイズを表すｗｉｎ＿ｓｉｚｅ５２７を含む。ＴＣＰオプションヘッダ５３０は、オプション種別を表すｏｐｔｉｏｎ  ｋｉｎｄ５３１と、オプション長を表すｏｐｔｉｏｎ  ｌｅｎｇｔｈ５３２と、どこからどこまで部分的に受信できたかを示すデータ箇所の位置を、送信端末に通知するために用いられるｌｅｆｔ＿ｅｄｇｅ＿１〜４（５３３、５３５、５３７、５３９）、ｒｉｇｈｔ＿ｅｄｇｅ＿１〜４（５３４、５３６、５３８、５４０）を含む。これらのｌｅｆｔ＿ｅｄｇｅ＿１〜４（５３３、５３５、５３７、５３９）、ｒｉｇｈｔ＿ｅｄｇｅ＿１〜４（５３４、５３６、５３８、５４０）は、部分的に受信できなかったデータ箇所の位置を通知するために用いられるケースもある。更に、ＴＣＰオプションヘッダ５３０は、ＴＣＰ通信を開始するときに、装置間の情報交換などに使用するケースもある。
【００４５】
例えば、ＭＳＳ（Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ）オプションは、ＴＣＰ通信を開始するときに、自装置の受信可能なＭＳＳのサイズを対向装置に通知するために用いられる。ＳＡＣＫオプションは、ＴＣＰ通信を開始するときに、自装置がＳＡＣＫオプションに対応可能であることを対向装置に通知するために用いられるだけでなく、通信中に廃棄が検出されたときに部分的に受信出来た箇所を対向装置に通知するためにも用いられる。タイムスタンプオプションは、通信中の自装置の送信時刻や受信時刻を対向装置に通知するために用いられる。このように、ＴＣＰオプションは、通信開始時および通信中に、自装置の対応可能な機能や情報を対向装置に伝えるために用いられる。ＴＣＰオプション種別を指定する番号には、０〜２５５の整数が用いられ、ＩＡＮＡ（Ｉｎｔｅｒｎｅｔ  Ａｓｓｉｇｎｅｄ  Ｎｕｍｂｅｒｓ  Ａｕｔｈｏｒｉｔｙ）により定められている。例えば、ＭＳＳオプションは２、ＳＡＣＫオプションは４および５、タイムスタンプオプションは８、が割当てられている。３０〜２５２は未割当となっており、これらの未割当の番号を用いて、独自のＴＣＰオプションを定義する場合もある。
【００４６】
図６には、状態テーブル３１２のフォーマット図を示す。
【００４７】
通信装置１００の状態テーブル３１２は、例えばＴＣＰコネクション毎の状態を記録するためのｎ個のエントリ６００−ｉ（ｉ＝１〜ｎ）を有する。
【００４８】
各エントリ６００は、例えば、エントリが使用中であるか否かを記載するＶＬＤ６０１と、ＬＡＮまたはＷＡＮ側のコネクションが確立中であるか否かを記載するｃｏｎｎｅｃｔ＿ｓｔａｔｅ６０２と、ＬＡＮ側の端末のＩＰアドレスを表すＬＩＰ６０３と、ＷＡＮ側の端末のＩＰアドレスを表すＷＩＰ６０４と、ＬＡＮ側の端末のＴＣＰポート番号を表すＬｐｏｒｔ６０５と、ＷＡＮ側の端末のＴＣＰポート番号を表すＷｐｏｒｔ６０６と、ＬＡＮ側のＴＣＰ通信の状態を表すｌａｎ＿ｓｔａｔｅ６０７と、ＬＡＮ側の受信バッファ管理用のポインタを表すｌａｎ＿ｌｅｆｔ＿ｒｂｕｆ６０８、ｌａｎ＿ｌｅｆｔ＿ｒｅｃｖ６０９、ｌａｎ＿ｒｉｇｈｔ＿ｒｅｃｖ６１０と、ＬＡＮ側のウィンドウスケールオプションの値を表すｌａｎ＿ｗｓ６１１と、ＬＡＮ側の平均ＲＴＴを表すｌａｎ＿ｒｔｔ６１２と、ＬＡＮ側の受信バッファから読み出されＷＡＮ側の送信バッファへ転送中・加工中のデータサイズを表すｌａｎ＿ｗａｎ６１３と、ＬＡＮ側の送信バッファ管理用のポインタを表すｌａｎ＿ｌｅｆｔ＿ｓｅｎｄ６１４、ｌａｎ＿ｒｉｇｈｔ＿ｓｅｎｄ６１５、ｌａｎ＿ｒｉｇｈｔ＿ｓｂｕｆ６１６と、ＬＡＮ側の輻輳ウィンドウサイズを表すＬｃｗｎｄ６１７と、ＬＡＮ側のリモートウィンドウサイズを表すＬｒｗｎｄ６１８と、ＬＡＮ側の最大セグメントサイズＭＳＳを表すＬｍｓｓ６１９と、ＷＡＮ側のＴＣＰ通信の状態を表すｗａｎ＿ｓｔａｔｅ６２０と、ＷＡＮ側の受信バッファ管理用のポインタを表すｗａｎ＿ｌｅｆｔ＿ｒｂｕｆ６２１、ｗａｎ＿ｌｅｆｔ＿ｒｅｃｖ６２２、ｗａｎ＿ｒｉｇｈｔ＿ｒｅｃｖ６２３と、ＷＡＮ側のウィンドウスケールオプションの値を表すｗａｎ＿ｗｓ６２４と、ＷＡＮ側の平均／初期ＲＴＴを表すｗａｎ＿ｒｔｔ６２５と、ＷＡＮ側の受信バッファから読み出されＬＡＮ側の送信バッファへ転送中・加工中のデータサイズを表すｗａｎ＿ｌａｎ６２６と、ＷＡＮ側の送信バッファ管理用のポインタを表すｗａｎ＿ｌｅｆｔ＿ｓｅｎｄ６２７、ｗａｎ＿ｒｉｇｈｔ＿ｓｅｎｄ６２８、ｗａｎ＿ｒｉｇｈｔ＿ｓｂｕｆ６２９と、ＷＡＮ側の輻輳ウィンドウサイズを表すＷｃｗｎｄ６３０と、ＷＡＮ側のリモートウィンドウサイズを表すＷｒｗｎｄ６３１と、ＷＡＮ側の最大セグメントサイズＭＳＳを表すＷｍｓｓ６３２と、前回の更新時刻におけるＡＣＫ受信済み箇所を表すｏｌｄ＿ｗａｎ＿ｌｅｆｔ＿ｓｅｎｄ６３３と、通常のＴＣＰのスループットを圧迫しないように通常のＴＣＰに対して公平性を保つようにフレンドリモード（輻輳を検出していないときの制御帯域ｔｏｋｅｎ６３６の増加速度を一定期間小さくする）で通信するか否かを決定するためのｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４と、暗号化通信を行うか否かを決定するためのｅｎｃｒｙｐｔｉｏｎ＿ｍｏｄｅ６３５と、インターネットなどのパブリックなネットワーク向けのモードで通信するか否かを決定するためのｐｕｂｌｉｃ＿ｍｏｄｅ６６２と、現在時刻での制御帯域を表すｔｏｋｅｎ６３６と、前回の更新時刻における制御帯域を表すｏｌｄ＿ｔｏｋｅｎ６３７と、前々回の更新時刻における制御帯域を表すｏｌｄ＿ｏｌｄ＿ｔｏｋｅｎ６３８と、最低保証帯域を決定するためのｍｉｎ＿ｔｏｋｅｎ６３９と、直近の輻輳検出状態における制御帯域を表すｔ＿ｔｏｋｅｎ６４０と、前回更新時の制御帯域を表すｃ＿ｔｏｋｅｎ６４１と、制御帯域を増加させ始めた直近の時刻を表すｉｎｃ＿ｔｉｍｅ６４２と、現在時刻での送信帯域を表すｓｎｄ６４３と、前回更新時の送信帯域を表すｏｌｄ＿ｓｎｄ６４４と、前々回の更新時刻の送信帯域を表すｏｌｄ＿ｏｌｄ＿ｓｎｄ６４５と、現在時刻での再送帯域または廃棄帯域を表すｒｔｓ６４６と、前回更新時の再送帯域または廃棄帯域を表すｏｌｄ＿ｒｔｓ６４７と、現在時刻での受信帯域を表すｒｃｖ６４８と、前回更新時の受信帯域を表すｏｌｄ＿ｒｃｖ６４９と、制御帯域を更新した直近の更新時刻を表すｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０と、現在時刻での再送率または廃棄率を表すｌｏｓｓ＿ｒａｔｉｏ６５１と、前回更新時の再送率または廃棄率を表すｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ６５２と、制御帯域を更新した前々回の更新時刻を表すｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５３と、現在時刻での送信バイト積算値を表すｓｎｄ＿ｂｙｔｅ６５４と、現在時刻での再送バイト積算値を表すｒｔｓ＿ｂｙｔｅ６５５と、現在時刻での受信バイト積算値を表すａｃｋ＿ｂｙｔｅ６５６と、廃棄率の変化率と比較することで輻輳を検出するための閾値Ｋ６５７と、輻輳が発生していないときに一定期間の間は線形増加させるための閾値Ｔ６５８と、これまでに輻輳が発生した回数を記録したｃｏｎｇｅｓｔｉｏｎ＿ｎｕｍ６５９と、制御帯域を更新した回数を記録したｒｅｎｅｗｅｄ＿ｎｕｍ６６０と、ネットワークの輻輳頻度や制御帯域変化率から通信モードを変更するために用いる閾値Ｃ６６１と、を有する。
【００４９】
図７には、前々回の更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５３と、前回の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０と、現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅと、パケットデータを送出する際に送信間隔を制限するために用いる制御帯域（ｔｏｋｅｎ６３６、ｏｌｄ＿ｔｏｋｅｎ６３７、ｏｌｄ＿ｏｌｄ＿ｔｏｋｅｎ６３８）と、実際に送出したパケットデータから計算した送信帯域（ｓｎｄ６４３、ｏｌｄ＿ｓｎｄ６４４、ｏｌｄ＿ｏｌｄ＿ｓｎｄ６４５）と、受信帯域（ｒｃｖ６４８、ｏｌｄ＿ｒｃｖ６４９）と、実際に再送したパケットデータから計算した再送／廃棄帯域（ｒｔｓ６４６、ｏｌｄ＿ｒｔｓ６４７）と、再送／廃棄帯域と送信帯域から計算した再送／廃棄率（ｌｏｓｓ＿ｒａｔｉｏ６５１、ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ６５２）の関係を表す。計算方法の詳細は以下の段落に記述する。
【００５０】
前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０と前々回更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５３との差は、インターバル時間である。インターバル時間には、平均ＲＴＴ、初期ＲＴＴ、固定値などを用いる。前々回更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５３までのインターバル時間における制御帯域、送信帯域は、各々ｏｌｄ＿ｏｌｄ＿ｔｏｋｅｎ６３８、ｏｌｄ＿ｏｌｄ＿ｓｎｄ６４５と表す（７０１）。前々回更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５３から前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０までの間の制御帯域、送信帯域、再送／廃棄帯域、受信帯域、再送／廃棄率は、各々ｏｌｄ＿ｔｏｋｅｎ６３７、ｏｌｄ＿ｓｎｄ６４４、ｏｌｄ＿ｒｃｖ６４９、ｏｌｄ＿ｒｔｓ６４７、ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ６５２と表す（７０２）。再送／廃棄率ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ６５２は、例えば、ｏｌｄ＿ｒｔｓ６４７／ｏｌｄ＿ｏｌｄ＿ｓｎｄ６４５、または、ｏｌｄ＿ｒｔｓ６４７／ｏｌｄ＿ｏｌｄ＿ｔｏｋｅｎ６３８、または、１−ｏｌｄ＿ｒｃｖ６４９／ｏｌｄ＿ｏｌｄ＿ｓｎｄ６４５、または、１−ｏｌｄ＿ｒｃｖ６４９／ｏｌｄ＿ｏｌｄ＿ｔｏｋｅｎ６３８によって計算される。前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０から現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅまでの制御帯域、送信帯域、受信帯域、再送／廃棄帯域、送信バイト積算値、再送バイト積算値、受信バイト積算値、再送／廃棄率は、各々ｔｏｋｅｎ６３６、ｓｎｄ６４３、ｒｃｖ６４８、ｒｔｓ６４６、ｓｎｄ＿ｂｙｔｅ６５４、ｒｔｓ＿ｂｙｔｅ６５５、ａｃｋ＿ｂｙｔｅ６５６、ｌｏｓｓ＿ｒａｔｉｏ６５１と表す（７０３）。送信帯域ｓｎｄ６４３は、例えば、ｓｎｄ＿ｂｙｔｅ６５４×８／（現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅ−前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０）によって計算される。再送／廃棄帯域ｒｔｓ６４６は、ｒｔｓ＿ｂｙｔｅ６５５×８／（現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅ−前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０）によって計算される。受信帯域ｒｃｖ６４８は、ａｃｋ＿ｂｙｔｅ６５６×８／（現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅ−前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０）によって計算される。受信バイト積算値は、例えば、前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０から現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅまでのｗａｎ＿ｌｅｆｔ＿ｓｅｎｄ６２７の移動バイト、または、前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０から現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅまでのＡＣＫ受信数×Ｗｍｓｓ６３２にいずれかによって計算される。再送／廃棄率ｌｏｓｓ＿ｒａｔｉｏ６５１は、例えば、ｒｔｓ６４６／ｏｌｄ＿ｓｎｄ６４４、または、ｒｔｓ６４６／ｏｌｄ＿ｔｏｋｅｎ６３７、または、１−ｒｃｖ６４８／ｏｌｄ＿ｓｎｄ６４４、または、１−ｒｃｖ６４８／ｏｌｄ＿ｔｏｋｅｎ６３７によって計算される。
【００５１】
図８には、プロキシ３０６のブロック図を示す。
【００５２】
プロキシ３０６は、ＬＡＮ側の受信バッファｒｂｕｆ３０４からデータを読出すデータ読出し部８０１と、読み出したデータに対して圧縮・解凍・暗号化・復号・削除・複製・追記などの加工を行うデータ加工部８０２と、加工済みデータをＷＡＮ側の送信バッファｓｂｕｆ３０７へ書き込むデータ書き込み部８０３と、ＷＡＮ側の受信バッファｒｂｕｆ３０８からデータを読み出すデータ読出し部８０６と、読み出したデータに対して圧縮・解凍・暗号化・復号・削除・複製・追記などの加工を行うデータ加工部８０５と、加工済みデータをＬＡＮ側の送信バッファｓｂｕｆ３０５へ書き込むデータ書き込み部８０４と、を有する。データ加工部８０２とデータ加工部８０５との間で、データのやり取りをしてもよい。データの加工は上述の例以外でもよい。
【００５３】
データ読出し部８０１は、ＬＡＮ側の受信バッファｒｂｕｆ３０４のバッファ管理ポインタｌａｎ＿ｌｅｆｔ＿ｒｂｕｆ６０８からバッファ管理ポインタｌａｎ＿ｌｅｆｔ＿ｒｅｃｖ６０９までの間に蓄積されている整列済みデータから、読み出すべきデータのデータサイズと、読みだしたデータの加工後のデータサイズを推定する。ＬＡＮ側の受信バッファｒｂｕｆ３０４に蓄積されていて、データ読出し部８０１がデータサイズの推定に用いる整列済みデータとしては、ＴＬＳ（Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ）／ＳＳＬ（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ）ヘッダデータ、ＳＭＢ（Ｓｅｒｖｅｒ  Ｍｅｓｓａｇｅ  Ｂｌｏｃｋ）ヘッダデータ、等を使用してもよい。例えば、ＬＡＮ側の受信バッファｒｂｕｆ３０４に蓄積されているＴＬＳ／ＳＳＬヘッダデータに記載された値からは、復号前の暗号化データのデータサイズと、復号後のチェックサムやヘッダを除いた平文データのデータサイズを推定することができる。ＬＡＮ側の受信バッファｒｂｕｆ３０４に蓄積されているＳＭＢヘッダデータからは、プリフェッチ等を行う前のコマンドデータのデータサイズと、プリフェッチ等を行った後のコマンドデータのデータサイズを推定することができる。推定した加工後のデータのデータサイズと、未送信データとＡＣＫ確認待ちデータのデータサイズの合計値（ｗａｎ＿ｒｉｇｈｔ＿ｓｂｕｆ６２９とｗａｎ＿ｌｅｆｔ＿ｓｅｎｄ６２７の差）との和が、ＷＡＮ側の送信バッファサイズｗａｎ＿ｓｂｕｆ＿ｓｉｚｅを超えない場合は、ＬＡＮ側の受信バッファｒｂｕｆ３０４からデータを読み出して、データ加工部８０２へ転送する。更に、推定した読み出すべきデータのデータサイズと、加工後のデータのデータサイズのうち、大きい方のデータサイズを状態テーブル３１２のｌａｎ＿ｗａｎ６１３へ記載する。
【００５４】
データ読出し部８０６は、ＷＡＮ側の受信バッファｒｂｕｆ３０８のバッファ管理ポインタｗａｎ＿ｌｅｆｔ＿ｒｂｕｆ６２１からバッファ管理ポインタｗａｎ＿ｌｅｆｔ＿ｒｅｃｖ６２２までの間に蓄積されている整列済みデータから、読み出すべきデータのデータサイズと、読みだしたデータの加工後のデータサイズを推定する。ＷＡＮ側の受信バッファｒｂｕｆ３０８に蓄積されていて、データ読出し部８０６がデータサイズの推定に用いる整列済みデータとしては、ＴＬＳ（Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ）／ＳＳＬ（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ）ヘッダデータ、ＳＭＢ（Ｓｅｒｖｅｒ  Ｍｅｓｓａｇｅ  Ｂｌｏｃｋ）ヘッダデータ、等などを使用してもよい。例えば、ＷＡＮ側の受信バッファｒｂｕｆ３０８に蓄積されているＴＬＳ／ＳＳＬヘッダデータに記載された値からは、復号前の暗号化データのデータサイズと、復号後のチェックサムやヘッダを除いた平文データのデータサイズを推定することができる。ＷＡＮ側の受信バッファｒｂｕｆ３０８に蓄積されているＳＭＢヘッダデータからは、プリフェッチ等を行う前のコマンドデータのデータサイズと、プリフェッチ等を行った後のコマンドデータのデータサイズを推定することができる。推定した加工後のデータのデータサイズと、未送信データとＡＣＫ確認待ちデータのデータサイズの合計値（ｌａｎ＿ｒｉｇｈｔ＿ｓｂｕｆ６１６とｌａｎ＿ｌｅｆｔ＿ｓｅｎｄ６１４の差）との和が、ＬＡＮ側の送信バッファサイズｌａｎ＿ｓｂｕｆ＿ｓｉｚｅを超えない場合は、ＷＡＮ側の受信バッファｒｂｕｆ３０８からデータを読み出して、データ加工部８０５へ転送する。更に、推定した読み出すべきデータのデータサイズと、加工後のデータのデータサイズのうち、大きい方のデータサイズを状態テーブル２１２のｗａｎ＿ｌａｎ６２６へ記載する。
【００５５】
図９には、ＷＡＮ側のＴＣＰ処理部３０９のブロック図を示す。
【００５６】
ＴＣＰ通信を実現するＴＣＰ処理部３０９は、受信処理を行うＲＸ部（受信部）９０２と、送信処理を行うＴＸ部（送信部）９０１を有する。
【００５７】
ＲＸ部９０２は、受信パケットを、ＳＹＮ，ＦＩＮなどのフラグが付いたＴＣＰ制御パケットとデータ付パケットとＡＣＫパケットとに分離するパケット振分部９１６と、ＴＣＰ制御パケットに記載されているフラグ番号に基づいて状態テーブル３１２内のＴＣＰ状態（ｌａｎ＿ｓｔａｔｅ６０７、ｗａｎ＿ｓｔａｔｅ６２０）を変更すると共に、ＴＣＰ制御パケットに記載されているオプション番号の有無に基づいて、状態テーブル３１２内の通信モード（ｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４、ｐｕｂｌｉｃ＿ｍｏｄｅ６６２、ｅｎｃｒｙｐｔｉｏｎ＿ｍｏｄｅ６３５）を変更するＲＸ−ＴＣＰ制御部９０７と、受信したデータパケットの送信シーケンス番号ＳＥＱ５２３と受信シーケンス番号ＡＣＫ５２４とに基づいて、状態テーブル３１２内のバッファ管理ポインタを変更してＡＣＫパケットを返信する受信履歴更新部９０６とを有する。ＲＸ−ＴＣＰ制御部９０７が、ＴＣＰ制御パケットに記載されているオプション番号の有無に基づいて、通信開始時に、通信モード（ｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４、ｐｕｂｌｉｃ＿ｍｏｄｅ６６２、ｅｎｃｒｙｐｔｉｏｎ＿ｍｏｄｅ６３５）を変更する方法は、図２０を用いて後述する。
【００５８】
ＴＸ部９０１は、状態テーブル３１２内のＴＣＰ状態（ｌａｎ＿ｓｔａｔｅ６０７、ｗａｎ＿ｓｔａｔｅ６２０）を用いてＴＣＰ制御パケットを送信するＴＸ−ＴＣＰ制御部９０３と、受信したＡＣＫパケットに基づいて状態テーブル３１２内のバッファ管理ポインタを変更し、受信したＡＣＫパケット記載の部分的確認応答であるｌｅｆｔ＿ｅｄｇｅ＿１〜４（５３３、５３５、５３６、５３９）とｒｉｇｈｔ＿ｅｄｇｅ＿１〜４（５３４、５３６、５３８、５４０）を用いて、送信バッファｓｂｕｆ３０７からデータを読み出してパケットを再送すると共に、再送ビット長とＡＣＫ受信数を送信帯域制御部９１５に通知するパケット再送部９０４と、送信バッファｓｂｕｆ３０７から読み出したデータを載せたパケットを送信して、状態テーブル３１２内のバッファ管理ポインタを変更すると共に、送信ビット長を送信帯域制御部９１５に通知する送信履歴更新部９０５と、再送パケットとデータパケットを受け取り、バッファ１〜ｎ（９０９−１〜ｎ）に振り分ける振分部９０８と、現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅを生成して送信帯域制御部９１５に通知するタイマ９１３と、インターバル時間（予め定めた固定値、または計測した初期ＲＴＴや平均ＲＴＴなど）を保存して送信帯域制御部９１５に通知するインターバル格納部９１４と、状態テーブル３１３の送信帯域や再送帯域などの履歴を更新して、各ＴＣＰコネクションのトークンサイズをトークン更新部９１７に通知する送信帯域制御部９１５と、ＴＣＰコネクション毎にトークンバケツを管理して、送信可能なコネクションをマルチプレクサ９１２に通知するトークン更新部９１７と、ＡＣＫパケットやＴＣＰ制御パケットや再送パケットやデータパケットをＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）で出力するバッファ９０９〜９１１と、これらのパケットを集約して出力するマルチプレクサ９１２を有する。
【００５９】
本実施例において、ＴＸ部９０１の各ブロックのうち、各ＴＣＰ通信の制御帯域（最大送信帯域）に従いデータを送信するブロック（例えば、トークン更新部９１７、マルチプレクサ９１２、バッファ９０９等）をまとめて送信制御部と称することもある。
【００６０】
図１０には、ＬＡＮ側のＴＣＰ処理部３０３のブロック図を示す。
【００６１】
ＬＡＮ側のＴＣＰ通信を実現するＬＡＮ側のＴＣＰ処理部３０３は、受信処理を行うＲＸ部（受信部）１００２と、送信処理を行うＴＸ部（送信部）１００１とを有する。
【００６２】
ＲＸ部１００２は、受信パケットをＴＣＰ制御パケットとデータ付パケットとＡＣＫパケットに分離するパケット振分部１００８と、受信したＴＣＰ制御パケットに基づいて状態テーブル３１２内のＴＣＰ状態（ｌａｎ＿ｓｔａｔｅ６０７、ｗａｎ＿ｓｔａｔｅ６２０）を変更するＲＸ−ＴＣＰ制御部１００７と、受信したデータパケットの送信シーケンス番号ＳＥＱ５２３と受信シーケンス番号ＡＣＫ５２４とに基づいて、状態テーブル３１２内のバッファ管理ポインタを変更してＡＣＫパケットを返信する受信履歴更新部１００６とを有する。
【００６３】
ＴＸ部１００１は、状態テーブル３１２内のＴＣＰ状態（ｌａｎ＿ｓｔａｔｅ６０７、ｗａｎ＿ｓｔａｔｅ６２０）を用いてＴＣＰ制御パケットを送信するＴＸ−ＴＣＰ制御部１００３と、受信したＡＣＫパケットに基づいて状態テーブル３１２内のバッファ管理ポインタを変更し、受信したＡＣＫパケット記載の部分的確認応答ｌｅｆｔ＿ｅｄｇｅ＿１〜４（５３３、５３５、５３６、５３９）、ｒｉｇｈｔ＿ｅｄｇｅ＿１〜４（５３４、５３６、５３８、５４０）を用いて送信バッファｓｂｕｆ３０５からデータを読み出してパケットを再送するパケット再送部１００４と、送信バッファｓｂｕｆ３０５から読み出したデータを載せたパケットを送信して、状態テーブル３１２内のバッファ管理ポインタを変更する送信履歴更新部１００５と、ＡＣＫパケットやＴＣＰ制御パケットや再送パケットやデータパケットをＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）で出力するバッファ１００９〜１０１１と、これらのパケットを集約して、出力するマルチプレクサ１０１３を有する。
【００６４】
ＷＡＮ側ＴＣＰ処理部３０９の送信帯域制御部９１５は、状態テーブル３１２内において、前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０と前々回更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５３を管理している。前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０と、タイマ９１３の現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅとの差が、インターバル格納部９１４のインターバル時間（予め定めた固定値、または計測した初期ＲＴＴや平均ＲＴＴなど）よりも大きくなると、前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０にインターバル時間を加算した値が、新たな前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０となる。加算前の前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０は、前々回更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５３となる。インターバル時間には、計測した平均／初期ＲＴＴ（ｗａｎ＿ｒｔｔ５１９）を用いることもあれば、固定値を用いることもある。
【００６５】
図３を用いて、ＬＡＮ側からデータ付きパケットを受信した際の、通信装置１００におけるパケットの流れを説明する。
【００６６】
ＬＡＮ側から到着したデータ付きパケットは、ＬＡＮ側ＴＣＰ処理部３０３に入り、受信履歴更新部１００６に到着する。受信履歴更新部１００６は、ＡＣＫパケットを集約部１０１３経由でＬＡＮ側に返信し、パケットに記載されたデータをＬＡＮ側受信バッファｒｂｕｆ３０４へと蓄積する。更に、蓄積データサイズに基づいて状態テーブル３１２のポインタを更新する。データ読出し部８０１は、ＬＡＮ側受信バッファｒｂｕｆ３０４に蓄積された整列済みデータを読出し、データ加工部８０２へ転送する。更に、読み出したデータサイズに基づいて状態テーブル３１２のポインタを更新する。データ加工部８０２は、データを加工して、データ書き込み部８０３へ転送する。更に、加工中のデータサイズに基づいて状態テーブル３１２の加工中データサイズを更新する。データ書き込み部８０３は、加工済みデータをＷＡＮ側送信バッファｓｂｕｆ３０７へと書き込む。更に、書き込んだデータサイズに基づいて状態テーブル３１２のポインタを更新する。ＷＡＮ側送信バッファｓｂｕｆ３０７に書き込まれたデータは、送信履歴更新部９０５によって読み出されて、ＷＡＮ側へデータ付きパケットとして送信される。
【００６７】
受信履歴更新部１００６についてさらに説明すると、ｌａｎ＿ｒｉｇｈｔ＿ｒｅｃｖ６１０（受信データ末尾のポインタ）とｌａｎ＿ｌｅｆｔ＿ｒｂｕｆ６０８（読出済と未読出の境界を示すポインタ）の差分を受信バッファ使用量と考えて、ＬＡＮ側の受信バッファの最大値から受信バッファ使用量を引くことで、受信バッファ残存量を計算する。パケットのペイロード５５０のサイズが、受信バッファの残存量以下のときは、ペイロード５５０に記載されたデータ全てを受信バッファに格納する。ペイロード５５０のサイズが、受信バッファの残存量よりも大きい場合は、ペイロード５５０の先頭から受信バッファの残存量に相当するサイズのデータだけを受信バッファに格納する。受信バッファに格納されているデータのサイズである格納データサイズが０よりも大きいときは、データ付きパケットのＴＣＰヘッダ５２０に記載されたＳＥＱ５２３の値と、格納データサイズに基づいて、受信バッファ管理用ポインタの更新を行う。例えば、パケットヘッダ記載のＳＥＱ５２３に格納データサイズを加算した値が、ｌａｎ＿ｒｉｇｈｔ＿ｒｅｃｖ６１０よりも大きい場合は、ｌａｎ＿ｒｉｇｈｔ＿ｒｅｃｖ６１０を、ＳＥＱ５２３に格納データサイズを加算した値に変更する。更に、受信データの最後尾がｌａｎ＿ｒｉｇｈｔ＿ｒｅｃｖ６１０となるように、受信データをＬＡＮ側の受信バッファに記載する。その後、ｌａｎ＿ｌｅｆｔ＿ｒｅｃｖ６０９（整列済み受信データと未整列の受信データの境界を示すポインタ）をＴＣＰヘッダ５２０のＡＣＫ５２４に記載したＡＣＫパケットを、ＬＡＮ側へ返信する。
【００６８】
また、送信履歴更新部９０５についてさらに説明すると、ｗａｎ＿ｒｉｇｈｔ＿ｓｅｎｄ６２８（送信済データ末尾を示すポインタ）から右方向にｗａｎ＿ｒｉｇｈｔ＿ｓｂｕｆ６２９（送信可能データ末尾を表すポインタ）までを最大とするデータを、ＷＡＮ側送信バッファｓｂｕｆ３０７から読み出す。ｗａｎ＿ｒｉｇｈｔ＿ｓｅｎｄ６２８は、読み出したデータのサイズ分だけ増加して、右に移動する。更に、読み出したデータをペイロード５５０に記載し、ｗａｎ＿ｒｉｇｈｔ＿ｓｅｎｄ６２８をＳＥＱ５２３に記載したＴＣＰヘッダ５２０を追加したデータ付きパケットを、ＷＡＮ側へ送信する。
（ＷＡＮ側に出て行くデータの送信帯域の制御に使用する変数）
送信帯域制御部９１５は、状態テーブル３１２が管理する変数である、前々回の更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５３と、前回の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０と、現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅと、制御帯域（ｔｏｋｅｎ６３６、ｏｌｄ＿ｔｏｋｅｎ６３７、ｏｌｄ＿ｏｌｄ＿ｔｏｋｅｎ６３８）と、送信帯域（ｓｎｄ６４３、ｏｌｄ＿ｓｎｄ６４４、ｏｌｄ＿ｏｌｄ＿ｓｎｄ６４５）と、受信帯域（ｒｃｖ６４８、ｏｌｄ＿ｒｃｖ６４９）と、再送／廃棄帯域（ｒｔｓ６４６、ｏｌｄ＿ｒｔｓ６４７）と、再送／廃棄率（ｌｏｓｓ＿ｒａｔｉｏ６５１、ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ６５２）と、を用いて各ＴＣＰ通信のＷＡＮ側に出て行くデータの送信帯域を制御する。これらの変数の関係は、すでに図７を用いて前述した通りである。
【００６９】
送信帯域制御部９１５は、状態テーブル３１２に記載された上述の値を用いて、廃棄／再送率（ｌｏｓｓ＿ｒａｔｉｏ６５１、ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ６５２）を計算する。現在時刻の廃棄／再送率ｌｏｓｓ＿ｒａｔｉｏ６５１は、ｒｔｓ６４６／ｏｌｄ＿ｓｎｄ６４４、または、ｒｔｓ６４６／ｏｌｄ＿ｔｏｋｅｎ６３７、または、１−ｒｃｖ６４８／ｏｌｄ＿ｓｎｄ６４４、または、１−ｒｃｖ６４８／ｏｌｄ＿ｔｏｋｅｎ６３７によって計算される。過去の廃棄／再送率ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ６５２は、ｏｌｄ＿ｒｔｓ６４７／ｏｌｄ＿ｏｌｄ＿ｓｎｄ６４５、または、ｏｌｄ＿ｒｔｓ６４７／ｏｌｄ＿ｏｌｄ＿ｔｏｋｅｎ６３８、または、１−ｏｌｄ＿ｒｃｖ６４９／ｏｌｄ＿ｏｌｄ＿ｓｎｄ６４５、または、１−ｏｌｄ＿ｒｃｖ６４９／ｏｌｄ＿ｏｌｄ＿ｔｏｋｅｎ６３８によって計算される。更に、送信帯域制御部９１５は、廃棄／再送率の変化（ｌｏｓｓ＿ｒａｔｉｏ６５１とｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ６５２の比率）に基づいて、制御帯域ｔｏｋｅｎ６３６を決定し、トークン更新部９１７へ伝える。更に、状態テーブル３１２を更新する。制御帯域ｔｏｋｅｎ６３６の更新方法の詳細は、図１２〜図１４を用いて後述する。
【００７０】
トークン更新部９１７は、送信帯域制御部９１５から伝えられた制御帯域ｔｏｋｅｎ６３６の値に基づいて、ＴＣＰコネクション毎にトークンバケツを管理して、送信可能なコネクションをマルチプレクサ９１２に通知する。
（制御帯域ｔｏｋｅｎの更新処理）
図１１の説明図と、図１２〜図１４のフローチャートを用いて、送信帯域制御部９１５が制御帯域ｔｏｋｅｎ６３６を更新する方法の詳細を説明する。
【００７１】
図１１には、ＷＡＮにおいて独自ＴＣＰによる通信を行う通信装置１００の送信側の送信帯域１１０１、廃棄率１１０２、廃棄率の変化率１１０３の時間遷移を示したグラフを示す。
【００７２】
独自ＴＣＰによる通信の送信帯域の増減には、大きく分けて３つのフェーズが存在する。フェーズ１は送信帯域を増加させるステップ、フェーズ２は送信帯域を減少させるステップ、フェーズ３は送信帯域を受信帯域に合わせて一定に保つステップ、となる。
【００７３】
まず、フェーズ１で送信帯域が増加していき（１１０４）、ある時にボトルネック帯域を超過する（１１１３）。ボトルネックとは、図２４に示すように、ネットワーク上において、回線帯域が狭くなる箇所を言い、ボトルネック帯域とは、狭くなる方の回線帯域のことを言う。送信帯域がボトルネック帯域を超過すると、パケット廃棄が発生するが、廃棄箇所が受信側から送信側に通知されるまでにＲＴＴ以上かかる。そのため、送信帯域がボトルネック帯域を超過したことが、廃棄率の増加となって現れるのは、ＲＴＴ以上後となる（１１１４）。廃棄率は、直近の再送帯域をＲＴＴ前の送信帯域で除算することで求められる。送信帯域がボトルネック帯域よりも小さい間は、確率的な廃棄しかおきないため、廃棄率は一定となる（１１１０）。送信帯域がボトルネック帯域を超過してからＲＴＴ以上経過すると、確率的な廃棄に加えて、使い過ぎによる廃棄（１１１１）が加わるようになるため、廃棄率が増加しはじめる（１１１２）。廃棄率が増加しはじめると、廃棄率の変化率は１から急激に増加し、閾値Ｋ６５７を超過する（１１０９）。
【００７４】
独自ＴＣＰによる通信では、上記のように、廃棄率の変化率が急激に増加し、閾値ｋを超過したときに、ネットワークに輻輳が発生したと判断する。
【００７５】
ネットワークに輻輳が発生したと判断すると、ＲＴＴ前の送信帯域から、現在の再送帯域を引いた値を、新たな送信帯域とする（１１１８）。ＲＴＴ前の送信帯域を用いて新たな送信帯域を計算する理由は、送信帯域がボトルネック帯域を超過した時間がＲＴＴ以上前だからである。廃棄率の増加はしばらく継続するため（１１１２）、その間は送信帯域が減少し続ける。この送信帯域を減少させるステップがフェーズ２となる（１１０５）。
【００７６】
送信帯域が減少していきボトルネック帯域よりも小さくなると、廃棄率が減少しはじめる（１１１９）。廃棄率の変化率が１よりも小さくなり、閾値ｋを下回ると（１１２０）、ネットワークに輻輳が発生しなくなったと判断される。
【００７７】
ネットワークに輻輳が発生しなくなったと判断された後も、廃棄パケットの再送処理は継続している。ＡＣＫ確認済データ末尾を表すポインタｌｅｆｔ＿ｓｅｎｄがＲＴＴ前と比較して増加していない場合は、廃棄パケットの再送処理が継続していると判断して、ＡＣＫ受信数から定まる受信帯域ｒｃｖ６４６に応じて、送信帯域を一定とする。この送信帯域を受信帯域に合わせて一定とするステップがフェーズ３となる（１１０６）。
【００７８】
ＡＣＫ確認済データ末尾を表すポインタｌｅｆｔ＿ｓｅｎｄがＲＴＴ前と比較して増加している場合は、廃棄パケットの再送処理が一度は完了したと判断して、再び送信帯域を増加させる（フェーズ１）。
【００７９】
フェーズ１の帯域増加では、例えば、線形的又は非線形的に増加するように帯域を制御してもよいし、最初は送信帯域をゆっくりと、例えば、線形的に増加させていき（１１０７）、一定期間Ｔ６５８の間、輻輳が検出されないと、その後、送信帯域を急激に（例えば、非線形的に）増加させていくように制御してもよい（１１０８）。非線形的に増加させるときは、ＲＴＴ毎にαＥ倍するなど、指数的に増加させてもよい（１１１６）。最初の送信帯域をゆっくりと（例えば、線形的に）増加させていく期間Ｔ６５８は、ＷＡＮ側のＲＴＴの値であるｗａｎ＿ｒｔｔ６２５と、制御帯域ｔｏｋｅｎ６３６によって定めても良いし、これらの積に比例させてもよい（１１２１）。また、送信帯域をゆっくりと（例えば、線形的に）増加させていく間（１１０７）は、送信帯域をＲＴＴ毎にＭＳＳ／ＲＴＴに比例する速度で線形的に増加させてもよいし、送信帯域をＲＴＴ毎にＭＳＳ／ＲＴＴに比例する速度で線形的に増加させる場合の比例係数αＬを１よりも小さい値にしてもよい（１１１７）。αＥやαＬの値を、直近の輻輳検出状態における制御帯域を表すｔ＿ｔｏｋｅｎ６４０に基づいて定めてやれば、輻輳を検出したときの制御帯域に応じて、輻輳を検出していないときの帯域増加速度を決定することができる。
【００８０】
図１２〜図１４には、送信帯域制御部９１５が制御帯域ｔｏｋｅｎ６３６を更新する方法の詳細を説明するためのフローチャートを示す。
【００８１】
図１２には、送信帯域制御部９１５が制御帯域ｔｏｋｅｎ６３６を更新する際の概念的なフローチャートを表す。独自ＴＣＰでは、送信帯域制御部９１５が、本フローチャートに従い処理を実行することで、廃棄／再送率の変化率に基づく帯域制御を実現し、ＲＴＴと廃棄率に依存せずに、回線帯域を使い切ることができる。図１２の各ステップは、送信帯域制御部９１５により実行される。
【００８２】
送信帯域制御部９１５において、制御帯域の更新処理がスタートすると（ステップ１２０１）、ＡＣＫ確認済み箇所（ＡＣＫ確認済データ末尾を表すポインタｗａｎ＿ｌｅｆｔ＿ｓｅｎｄ６２７）が一定期間増加していないか否かを判定する（ステップ１２０２）。一定期間増加していれば、次に、パケット廃棄／再送率ｌｏｓｓ＿ｒａｔｉｏ６５１（＝ｒｔｓ６４６／ｏｌｄ＿ｔｏｋｅｎ６３７またはｒｔｓ６４６／ｏｌｄ＿ｓｎｄ６４４または１−ｒｃｖ６４８／ｏｌｄ＿ｔｏｋｅｎ６３７または１−ｒｃｖ６４８／ｏｌｄ＿ｓｎｄ６４４で計算される値）の変化率が、予め定められた閾値Ｋ６５７を超過したか否かを判定する（ステップ１２０３）。パケット再送率の増加率が、予め定められた閾値Ｋ６５７を超過した場合は、現在（現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅ）の再送帯域（ｒｔｓ６４６）と、過去（前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０の）の制御帯域（ｏｌｄ＿ｔｏｋｅｎ６３７）または過去（前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０の）の送信帯域（ｏｌｄ＿ｓｎｄ６４４）を用いて、制御帯域ｔｏｋｅｎ６３６を更新する（ステップ１２０４）。例えば、過去（前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０の）の制御帯域（ｏｌｄ＿ｔｏｋｅｎ６３７）から、現在（現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅ）の再送帯域（ｒｔｓ６４６）を減算した値を、新たな現在（現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅ）の制御帯域ｔｏｋｅｎ６３６とする。一方、ステップ１２０３において、パケット再送率の増加率が、予め定められた閾値を超過しなかった場合は、制御帯域ｔｏｋｅｎ６３６を増加させる（ステップ１２０５）。更に、ステップ１２０２において、ＡＣＫ確認済み箇所（ＡＣＫ確認済データ末尾を表すポインタｗａｎ＿ｌｅｆｔ＿ｓｅｎｄ６２７）が一定期間増加していなければ、再送が継続していると判断して、ＡＣＫ受信数に応じて制御帯域ｔｏｋｅｎ６３６を一定に保つ。例えば、受信帯域ｒｃｖ６４８を、新たな制御帯域ｔｏｋｅｎ６３６とする。ステップ１２０４やステップ１２０５やステップ１２０６のあとに、各コネクションの最低保証帯域（ｍｉｎ＿ｔｏｋｅｎ６３９）に基づき、制御帯域ｔｏｋｅｎ６３６を更新する（ステップ１２０７）。制御帯域ｔｏｋｅｎ６３６を変更することで、送信帯域制御部９１５が制御帯域ｔｏｋｅｎ６３６を変更を通知してトークン更新部９１７のトークンバケツに蓄積されるトークンの量が変わり、それによりパケットの送信レートを変更することが可能となる。
【００８３】
上述のように、独自ＴＣＰでは、図１２を用いて説明したフローチャートのように、廃棄率または再送率の変化率に基づく帯域制御を行うことで、確率的な廃棄の影響を受けずに、送信帯域がボトルネック帯域に到達してトップスピードになるまで、送信帯域を増加させることが出来るようになる。これにより、独自ＴＣＰは、ＲＴＴと廃棄率に依存せずに、回線帯域を効率的に使うことが出来る。
【００８４】
図１３には、図１２のステップ１２０５における帯域増加処理のフローチャート図を示す。
【００８５】
送信帯域制御部９１５が行う帯域増加処理１２０５では、初めに、状態テーブル３１２に記載されているフレンドリモードｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４が有効か無効かの判断を行い、尚且つ、現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅと帯域増加開始時刻ｉｎｃ＿ｔｉｍｅ６４２の差が閾値Ｔ６５８を超過していないかどうかを確認することで帯域増加が一定期間以上継続していないかどうかを判断する（ステップ１３０１）。フレンドリモードｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４が有効で、尚且つ、現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅと帯域増加開始時刻ｉｎｃ＿ｔｉｍｅ６４２との差が時間Ｔを超過しておらず帯域増加が一定期間以上継続していない場合は、帯域をゆっくりと増加させる（ステップ１３０３）。例えば、新たな制御帯域ｔｏｋｅｎ６３６＝元の制御帯域ｔｏｋｅｎ６３６＋係数αＬ×最大セグメントサイズＷｍｓｓ６３２×８／ｗａｎ＿ｒｔｔ６２５などとすることで、線形に増加させる（ステップ１３０３）。係数αＬは、例えば１未満にする。フレンドリモードｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４が無効、または、現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅと帯域増加開始時刻ｉｎｃ＿ｔｉｍｅ６４２との差が時間Ｔを超過しており帯域増加が一定期間以上継続している場合は、帯域を、ステップ１３０３の処理での増加よりも急激に増加させる（ステップ１３０２）。例えば、新たな制御帯域ｔｏｋｅｎ６３６＝係数αＥ×元の制御帯域ｔｏｋｅｎ６３６などとする（ステップ１３０２）。係数αＥは、例えば１よりも大きな値とする。
【００８６】
上述したように、一定の期間Ｔは、送信帯域をゆっくりと、例えば線形的に増加させ（ステップ１３０３）、その後、送信帯域を急激に、例えば非線形的に増加させる（ステップ１３０２）ことで、独自ＴＣＰを用いた通信が回線帯域を占有することを防ぎ、通常のＴＣＰを用いた通信が通信帯域を確保できるようになる。
【００８７】
図１４には、送信帯域制御部９１５が状態テーブル３１２記載の値を用いて、制御帯域ｔｏｋｅｎ６３６を変更するフローチャート図を表し、図１２をより詳細にした例を示す。図１４の各ステップは、送信帯域制御部９１５により実行される。独自ＴＣＰでは、送信帯域制御部９１５が、本フローチャートに従い処理を実行することで、再送／廃棄率の変化率に基づく帯域制御を実現し、ＲＴＴと廃棄率に依存せず、回線帯域を効率的に使用することができる。
【００８８】
制御帯域ｔｏｋｅｎ６３６の更新処理がスタートすると（ステップ１４０１）、送信帯域制御部９１５が、タイマ９１３の出力する現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅと状態テーブル３１２記載の前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０との差が、インターバル格納部９１４の出力するインターバル時間ｉｎｔｅｒｖａｌ以上であるか否かを判定する（ステップ１４０２）。インターバル時間として、計測したＲＴＴの平均値や初期値等を記録した状態テーブル３１２のｗａｎ＿ｒｔｔ６２５等を使用してもよい。ステップ１４０２において真と判断された場合は、現在時刻の制御帯域ｔｏｋｅｎ６３６の値をｔｍｐに退避させておく（ステップ１４０３）。次に、ＡＣＫ確認済データ末尾を表すポインタｗａｎ＿ｌｅｆｔ＿ｓｅｎｄ６２７が、前回の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０におけるＡＣＫ確認済データ末尾を表すポインタｏｌｄ＿ｗａｎ＿ｌｅｆｔ＿ｓｅｎｄ６３３よりも増加しているか否かを判定することで、ＡＣＫ確認済み箇所が一定期間後に増加しているか否かを判定する（ステップ１４０４）。ステップ１４０４において真と判断された場合は、パケット廃棄／再送率の変化率（ｌｏｓｓ＿ｒａｔｉｏ６５１／ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ６５２）が、予め定められた閾値Ｋ６５７を超過したか否かを判定する（ステップ１４０５）。閾値Ｋ６５７の値は、固定としてもよいし、ｔｏｋｅｎの値に応じて変化してもよい。ステップ１４０５において真と判定された場合は、ネットワークに輻輳が発生していると判断して、前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０における制御帯域ｏｌｄ＿ｔｏｋｅｎ６３７の値よりも小さくなるように、新たな制御帯域ｔｏｋｅｎ６３６の値を決定する（ステップ１４０６）。例えば、再送／廃棄帯域ｒｔｓ６４６を用いて減少させる。例えば、新たな制御帯域ｔｏｋｅｎ６３６＝前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０における制御帯域ｏｌｄ＿ｔｏｋｅｎ６３７−再送／廃棄帯域ｒｔｓ６４６などとする（ステップ１４０６）。更に、輻輳発生回数ｃｏｎｇｅｓｔｉｏｎ＿ｎｕｍ６５９のカウントアップし、直近の輻輳検出状態における制御帯域を表すｔ＿ｔｏｋｅｎ６４０を新たな制御帯域ｔｏｋｅｎ６３６で更新する。更に、帯域増加開始時刻ｉｎｃ＿ｔｉｍｅ６４２を現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅで更新する（ステップ１４０６）。ステップ１４０５で偽と判定された場合は、制御帯域ｔｏｋｅｎ６３６を増加させる（ステップ１４０７）。制御帯域ｔｏｋｅｎ６３６の増加方法は、線形に増加させてもよいし、指数的に増加させてもよいし、線形増加と指数増加を組み合わせても良いし、最初線形増加させてその後で指数増加してもよいし、増加率を制御帯域ｔｏｋｅｎ６３６の大きさに応じて変化させてもよい。ステップ１４０４で偽と判定された場合は、再送が継続していると判断して、ＡＣＫ受信数に応じて制御帯域ｔｏｋｅｎ６３６を一定に保つ（ステップ１４０８）。例えば、新たな制御帯域ｔｏｋｅｎ６３６＝受信帯域ｒｃｖ６４８とする（ステップ１４０８）。更に、直近の輻輳検出状態における制御帯域を表すｔ＿ｔｏｋｅｎ６４０を新たな制御帯域ｔｏｋｅｎ６３６で更新する。更に、帯域増加開始時刻ｉｎｃ＿ｔｉｍｅ６４２を現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅで更新する（ステップ１４０８）。
【００８９】
ステップ１４０６またはステップ１４０７またはステップ１４０８が完了すると、例えば、前々回更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５３における送信帯域ｏｌｄ＿ｏｌｄ＿ｓｎｄ６４５＝前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０における送信帯域ｏｌｄ＿ｓｎｄ６４４、前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０における送信帯域ｏｌｄ＿ｓｎｄ６４４＝現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅにおける送信帯域ｓｎｄ６４３、前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０における再送帯域ｏｌｄ＿ｒｔｓ６４７＝現在時刻ｃｕｒｒｅｎｔ＿ｔｉｍｅにおける再送帯域ｒｔｓ６４６、前々回の更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５３＝前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０、前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０＝前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０＋インターバルｉｎｔｅｒｖａｌ、送信バイト積算値ｓｎｄ＿ｂｙｔｅ６５４＝０、再送バイト積算値ｒｔｓ＿ｂｙｔｅ６５５＝０、受信バイト積算値ｒｃｖ＿ｂｙｔｅ６５６＝０、前々回の更新時刻ｏｌｄ＿ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５３における制御帯域ｏｌｄ＿ｏｌｄ＿ｔｏｋｅｎ６３８＝前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０における制御帯域ｏｌｄ＿ｔｏｋｅｎ６３７、前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０における制御帯域ｏｌｄ＿ｔｏｋｅｎ６３７＝ｔｍｐ、前回の定期更新時の制御帯域ｃ＿ｔｏｋｅｎ６４１＝新たな制御帯域ｔｏｋｅｎ６３６、制御帯域更新回数ｒｅｎｅｗｅｄ＿ｎｕｍ６６０＝制御帯域更新回数ｒｅｎｅｗｅｄ＿ｎｕｍ６６０＋１、などと更新し、状態テーブル３１２に記録する（ステップ１４０９）。その後ステップ１４１２に移る。
【００９０】
一方、ステップ１４０２で、偽と判定された場合は、ＡＣＫ確認済データ末尾を表すポインタｗａｎ＿ｌｅｆｔ＿ｓｅｎｄ６２７が、前回の更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０におけるＡＣＫ確認済データ末尾を表すポインタｏｌｄ＿ｗａｎ＿ｌｅｆｔ＿ｓｅｎｄ６３３よりも増加しており、尚且つ、パケット廃棄／再送率の変化率（ｌｏｓｓ＿ｒａｔｉｏ６５１／ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ６５２）が、予め定められた閾値Ｋ６５７を超過しているか否かを判定する（ステップ１４１０）。Ｋの値は、固定としてもよいし、ｔｏｋｅｎの値に応じて変化してもよい。ステップ１４１０において真と判定した場合は、ネットワークに輻輳が発生していると判断して、ステップ１４０６と同様に、前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０における制御帯域ｏｌｄ＿ｔｏｋｅｎ６３７の値よりも小さくなるように、新たな制御帯域ｔｏｋｅｎ６３６の値を決定する（ステップ１４１１）。例えば、再送／廃棄帯域ｒｔｓ６４６を用いて減少させる。例えば、新たな制御帯域ｔｏｋｅｎ６３６＝前回更新時刻ｒｅｎｅｗｅｄ＿ｔｉｍｅ６５０における制御帯域ｏｌｄ＿ｔｏｋｅｎ６３７−再送／廃棄帯域ｒｔｓ６４６などとする（ステップ１４１１）。ステップ１４１０において偽と判定した場合は、何もしない。これらのステップにより、インターバル時間が経過しなくても、再送率の増加からネットワークの輻輳を即座に検出し、制御帯域を減少させることができる。これらのステップの後、ステップ１４１２に移る。
【００９１】
ステップ１４１２では、制御帯域ｔｏｋｅｎ６３６が、各ＴＣＰ通信の最低保証帯域ｍｉｎ＿ｔｏｋｅｎ６３９よりも小さい場合は、制御帯域ｔｏｋｅｎ６３６を各ＴＣＰ通信の最低保証帯域ｍｉｎ＿ｔｏｋｅｎ６３９に変更する（ステップ１４１２）。なお、ステップ１４１２におけるｔｏｋｅｎ６３６やｍｉｎ＿ｔｏｋｅｎ６３９などのデータは、送信帯域制御部９１５が状態テーブル３１２を参照して読み出すことができる。制御帯域ｔｏｋｅｎ６３６を変更することで、トークンバケツに蓄積されるトークンの量が変わり、それによりパケットの送信レートを変更することが可能となる。
【００９２】
上述のように、独自ＴＣＰでは、図１４を用いて説明したフローチャートのように、廃棄率または再送率に基づく帯域制御を行うことで、確率論的な廃棄の影響を受けずに、送信帯域がボトルネック帯域に到達してトップスピードになるまで、送信帯域を増加させることが出来るようになる。これにより、独自ＴＣＰは、ＲＴＴと廃棄率に依存せずに、回線帯域を効率的に使用することが出来る。
【００９３】
図１５には、ＬＡＮ側のＴＣＰ処理部３０３のＴＣＰ制御部１００７、または、ＷＡＮ側のＴＣＰ処理部３０９のＲＸ−ＴＣＰ制御部９０７が、接続要求パケット（ＳＹＮパケット）を受け取ったときに、状態テーブル３１２にエントリを作成するフローチャート図を示す。
【００９４】
処理がスタートし（ステップ１５００）、パケットを受信すると（ステップ１５０１）、そのパケットが接続要求パケット（ＳＹＮパケット）であるか否かを判定する（ステップ１５０２）。接続要求パケットである場合は、パケットヘッダ記載の送信元ＩＰアドレスＳＩＰ５１３と宛先ＩＰアドレスＤＩＰ５１４と送信元ポート番号ｓｒｃ．ｐｏｒｔ５２１と宛先ポート番号ｄｓｔ．ｐｏｒｔ５２２と、状態テーブル３１２のエントリ６００記載のＬＡＮ側ＩＰアドレス６０３とＷＡＮ側ＩＰアドレスＷＩＰ６０４とＬＡＮ側ポート番号Ｌｐｏｒｔ６０５とＷＡＮ側ポート番号Ｗｐｏｒｔ６０６と、を比較して、一致するエントリが無いか否か判断する（ステップ１５０３）。無い場合は、ＶＬＤ＝０の空きエントリ６００を見つけ出し、ＶＬＤ＝１の新たなエントリ６００として作成する（ステップ１５０４）。エントリ６００のＬＡＮ側ＩＰアドレス６０３とＷＡＮ側ＩＰアドレスＷＩＰ６０４とＬＡＮ側ポート番号Ｌｐｏｒｔ６０５とＷＡＮ側ポート番号Ｗｐｏｒｔ６０６は、パケットヘッダ記載の送信元ＩＰアドレスＳＩＰ５１３と宛先ＩＰアドレスＤＩＰ５１４と送信元ポート番号ｓｒｃ．ｐｏｒｔ５２１と宛先ポート番号ｄｓｔ．ｐｏｒｔ５２２で上書きされる（ステップ１５０４）。上記の手順により、新規エントリ６００が作成される。新規エントリ６００が作成されると、次に、モード判定部３２０がＩＰアドレスの種類に応じて通信モードを決定する。
【００９５】
図１６には、モード判定部３２０がＩＰアドレスの種類に応じて通信モードを決定するフローチャートを示す。本処理は、図１５に示した新規エントリ作成直後に実施してもよい。
【００９６】
処理がスタートすると（ステップ１６００）、初めに、新規作成したエントリ６００のＬＡＮ側ＩＰアドレス６０３とＷＡＮ側ＩＰアドレスＷＩＰ６０４が共にプライベートＩＰアドレスかどうかを判定する（ステップ１６０１）。プライベートＩＰアドレスは、１０．ＸＸＸ．ＸＸＸ．ＸＸＸ、１７２．１６〜３２．ＸＸＸ．ＸＸＸ、１９２．１６８．ＸＸＸ．ＸＸＸ（ＸＸＸは任意の０〜２５５の整数）のいずれかである。ステップ１６０１が偽である場合は、状態テーブル３１２のパブリックモードｐｕｂｌｉｃ＿ｍｏｄｅ６６２を１に変更してパブリックモードを有効にする（ステップ１６０２）。更に、ｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４やｅｎｃｒｙｐｔｉｏｎ＿ｍｏｄｅ６３５を１に変更して通信モードを変更する（ステップ１６０３）。更に、輻輳検出用の閾値Ｋ６５７を小さくして、パケット廃棄／再送率の変化率が小さくても、輻輳を検出しやすいようにする（ステップ１６０４）。ステップ１６０１が偽のときは何もしない。
【００９７】
上述のように、モード判定部３２０がパブリックＩＰアドレスを使用している通信をフレンドリモードや暗号モードに変更して、図１３に示したように、輻輳を検出していないときの制御帯域ｔｏｋｅｎ６３６の増加速度を一定期間小さくする。これにより、独自ＴＣＰを用いた通信がインターネットのような公衆網を使用して、通常のＴＣＰを用いた通信と通信回線を共有する際に、独自ＴＣＰを用いた通信が回線帯域を占有することを防ぎ、通常のＴＣＰを用いた通信が通信帯域を確保できるようなる。更に、独自ＴＣＰを用いた通信がインターネットのような公衆網を使用する時に、通信内容を盗聴されるのを防止する。
＜第二の実施形態＞
図１７には、モード判定部３２０が帯域変動率や輻輳頻度に応じて通信モードを決定するフローチャートを示す。本処理は、通信中に実施してもよい。
【００９８】
処理がスタートすると（ステップ１７００）、初めに、通信のパブリックモードｐｕｂｌｉｃ＿ｍｏｄｅ６６２が有効（１）か無効（０）かを判定する（ステップ１７０１）。無効な場合は、帯域変動率１−ｔｏｋｅｎ６３６／ｏｌｄ＿ｔｏｋｅｎ６３７が閾値Ｃ６６１よりも大きいか否か、または、輻輳頻度ｃｏｎｇｅｓｔｉｏｎ＿ｎｕｍ６５９／ｒｅｎｅｗｅｄ＿ｎｕｍ６６０が閾値Ｃ６６１よりも大きいか否かを判定する（ステップ１７０２）。ステップ１７０２が真の場合は、ｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４やｅｎｃｒｙｐｔｉｏｎ＿ｍｏｄｅ６３５を有効（１）に変更して通信モードを変更する（ステップ１７０３）。更に、輻輳検出用の閾値Ｋ６５７を小さくしたり通信モード変更用の閾値Ｃ６６１を変更したりして、パケット廃棄／再送率の変化率が小さくても輻輳を検出しやすくする（ステップ１７０４）。ステップ１７０１が真のときは、何もしない。ステップ１７０２が偽のときは、何もしない。
【００９９】
上述のように、モード判定部３２０が帯域変動率や輻輳頻度の大きい通信をフレンドリモードや暗号モードに変更して、図１３に示したように、輻輳を検出していないときの制御帯域ｔｏｋｅｎ６３６の増加速度を一定期間小さくする。これにより、独自ＴＣＰを用いた通信がインターネットのような公衆網を使用して、通常のＴＣＰを用いた通信と通信回線を共有する際に、独自ＴＣＰを用いた通信が回線帯域を占有することを防ぎ、通常のＴＣＰを用いた通信が通信帯域を確保できるようなる。更に、独自ＴＣＰを用いた通信がインターネットのような公衆網を使用する時に、通信内容を盗聴されるのを防止する。
【０１００】
図１８には、モード判定部３２０が帯域変動率や輻輳頻度に応じて通信モードを変更するフローチャートを示す。本処理は、通信中に実施してもよい。
【０１０１】
処理がスタートすると（ステップ１８００）、初めに、通信のパブリックモードｐｕｂｌｉｃ＿ｍｏｄｅ６６２が有効（１）か無効（０）かを判定する（ステップ１８０１）。有効な場合は、帯域変動率１−ｔｏｋｅｎ６３６／ｏｌｄ＿ｔｏｋｅｎ６３７が閾値Ｃ６６１よりも大きいか否か、または、輻輳頻度ｃｏｎｇｅｓｔｉｏｎ＿ｎｕｍ６５９／ｒｅｎｅｗｅｄ＿ｎｕｍ６６０が閾値Ｃ６６１よりも大きいか否かを判定する（ステップ１８０２）。ステップ１８０２が真の場合は、ｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４を１に変更して通信モードをフレンドリに変更する（ステップ１８０３）。更に、輻輳検出用の閾値Ｋ６５７を小さくしたり、通信モード変更用の閾値Ｃ６６１を小さくしたりして、パケット廃棄／再送率の変化率が小さくても輻輳を検出しやすくする（ステップ１８０４）。ステップ１８０１が偽のときは、何もしない。ステップ１８０２が偽のときは、ｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４を０に変更して通信モードをノーマルに変更する（ステップ１８０５）。更に、輻輳検出用の閾値Ｋ６５７や通信モード変更用の閾値Ｃ６６１を大きくして、パケット廃棄／再送率の変化率が大きくても輻輳を検出しにくくする（ステップ１８０６）。
【０１０２】
上述のように、モード判定部３２０が帯域変動率や輻輳頻度に応じて通信モードをフレンドリモードとノーマルモードの間で切り替えることで、混雑時にはフレンドリモードにより制御帯域の増加速度を小さくすることで廃棄を抑制しつつも、空いている時には制御帯域の増加速度を大きくすることで帯域を効率的に利用できるようになる。
＜第三の実施形態＞
図１９には、ＷＡＮ側のフィルタ３１０が、状態テーブル３１２記載の暗号モードｅｎｃｒｙｐｔｉｏｎ＿ｍｏｄｅ６３５の有効・無効に応じて、パケットの入出力・暗号化・復号を行うフローチャート図を示す。
【０１０３】
処理がスタートすると（ステップ１９００）、初めに、パケットをＷＡＮ側から受信したか否かを判定する（ステップ１９０１）。ＷＡＮ側からパケットを受信した場合は、状態テーブル３１２の暗号モードｅｎｃｒｙｐｔｉｏｎ＿ｍｏｄｅ６３５が有効（１）か否かを判定する（ステップ１９０２）。有効な場合は、暗号化・復号部３３０にて受信したパケットを復号して平文に変換する（ステップ１９０３）。その後、復号したパケットをＬＡＮ側へ転送する（ステップ１９０４）。ステップ１９０１において、ＬＡＮ側からパケットを受信した場合は、状態テーブル３１２の暗号モードｅｎｃｒｙｐｔｉｏｎ＿ｍｏｄｅ６３５が有効（１）か否かを判定する（ステップ１９０５）。有効な場合は、暗号化・復号部３３０にて受信したパケットを暗号化して暗号文に変換する（ステップ１９０６）。その後、暗号化したパケットをＷＡＮ側へ転送する（ステップ１９０７）。
【０１０４】
上述のように、ＷＡＮ側のフィルタ３１０が、状態テーブル３１２記載の暗号モードｅｎｃｒｙｐｔｉｏｎ＿ｍｏｄｅ６３５の有効・無効に応じて、パケットの入出力・暗号化・復号を行うことで、パブリックＩＰアドレスを使用している通信や帯域変動率や輻輳頻度の大きな通信など、図１６や図１７に示したようにモード判定部３２０が暗号モードに指定した通信を暗号化することができる。
＜第四の実施形態＞
（通信モードを変更する処理）
図２０〜２３のシーケンス図を用いて、ＷＡＮ側ＴＣＰ処理部３０９のＲＸ／ＴＸ−ＴＣＰ制御部９０７／９０３が、状態テーブル３１２に記載する通信モード（パブリックモードｐｕｂｌｉｃ＿ｍｏｄｅ６６２、フレンドリモードｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４、暗号モードｅｎｃｒｙｐｔｉｏｎ＿ｍｏｄｅ６３５）を決定する方法の詳細を説明する。
【０１０５】
図２０には、通信を自発的に開始する装置２００１が、対向装置２００２が独自ＴＣＰに対応している場合の、通信モードを決定するシーケンス図を示す。
【０１０６】
独自ＴＣＰ対応装置２００１は、自装置が独自ＴＣＰに対応していることを通知するために、対向の独自ＴＣＰ対応装置２００２に対して、独自のＴＣＰオプション番号を持つＳＹＮパケット２００３を送信する。独自のＴＣＰオプション番号として、例えば、ＩＡＮＡ（Ｉｎｔｅｒｎｅｔ  Ａｓｓｉｇｎｅｄ  Ｎｕｍｂｅｒｓ  Ａｕｔｈｏｒｉｔｙ）により未割当となっている３０〜２５２の値を使用する。対向の独自ＴＣＰ対応装置２００２は、独自のＴＣＰオプション番号を持つＳＹＮパケット２００３を受け取ると、自装置も独自ＴＣＰに対応していることを通知するために、独自のＴＣＰオプション番号を持つＳＹＮＡＣＫパケット２００４を返信する。独自ＴＣＰ対応装置２００１は、対向の独自ＴＣＰ対応装置２００２から、独自のＴＣＰオプション番号を持つＳＹＮＡＣＫパケット２００４を受け取ると、状態テーブル３１２のパブリックモードｐｕｂｌｉｃ＿ｍｏｄｅ６６２とフレンドリモードｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４を無効（０）にする（２００５）。
【０１０７】
図２１には、通信を自発的に開始する独自ＴＣＰ対応装置２００１が、対向装置２００６が独自ＴＣＰに対応していない場合の、通信モードを決定するシーケンス図を示す。
【０１０８】
独自ＴＣＰ対応装置２００１は、自装置が独自ＴＣＰに対応していることを通知するために、対向の独自ＴＣＰ非対応装置２００６に対して、独自のＴＣＰオプション番号を持つＳＹＮパケット２００３を送信する。独自のＴＣＰオプション番号として、例えば、ＩＡＮＡ（Ｉｎｔｅｒｎｅｔ  Ａｓｓｉｇｎｅｄ  Ｎｕｍｂｅｒｓ  Ａｕｔｈｏｒｉｔｙ）により未割当となっている３０〜２５２の値を使用する。対向の独自ＴＣＰ非対応装置２００６は、独自のＴＣＰオプション番号を持つＳＹＮパケット２００３を受け取ると、自装置が独自ＴＣＰに対応していないため、独自のＴＣＰオプション番号を持たないＳＹＮＡＣＫパケット２００７を返信する。独自ＴＣＰ対応装置２００１は、対向の独自ＴＣＰ非対応装置２００６から、独自のＴＣＰオプション番号を持たないＳＹＮＡＣＫパケット２００７を受け取ると、状態テーブル３１２のパブリックモードｐｕｂｌｉｃ＿ｍｏｄｅ６６２とフレンドリモードｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４と暗号モードｅｎｃｒｙｐｔｉｏｎ＿ｍｏｄｅ６３５を有効（１）にする（２００８）。
【０１０９】
図２２には、通信を受動的に開始する独自ＴＣＰ対応装置２００１が、対向装置２００２が独自ＴＣＰに対応している場合の、通信モードを決定するシーケンス図を示す。
【０１１０】
独自ＴＣＰ対応装置２００１は、対向の独自ＴＣＰ対応装置２００２から、独自のオプション番号を持つＳＹＮパケット２００９を受信すると、独自のオプション番号を持つＳＹＮＡＣＫパケット２０１０を返信する。更に、状態テーブル３１２のパブリックモードｐｕｂｌｉｃ＿ｍｏｄｅ６６２とフレンドリモードｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４を無効（０）にする（２０１１）。
【０１１１】
図２３には、通信を受動的に開始する独自ＴＣＰ対応装置２００１が、対向装置２００６が独自に対応していない場合の、通信モードを決定するシーケンス図を示す。
【０１１２】
独自ＴＣＰ対応装置２００１は、対向の独自ＴＣＰ非対応装置２００６から、独自のオプション番号を持たないＳＹＮパケット２０１２を受信すると、独自のオプション番号を持たないＳＹＮＡＣＫパケット２０１３を返信する。更に、状態テーブル３１２のパブリックモードｐｕｂｌｉｃ＿ｍｏｄｅ６６２とフレンドリモードｆｒｉｅｎｄｌｙ＿ｍｏｄｅ６３４と暗号モードｅｎｃｒｙｐｔｉｏｎ＿ｍｏｄｅ６３５を有効（１）にする（２０１４）。
【０１１３】
上述の図２０〜２３に示すシーケンスを用いて、通信モードを決定することで、ＴＣＰ通信の開始時に対向装置から特定の値を持つオプション情報が送付されないときに、フレンドリモードや暗号モードやパブリックモードを強制的に適用することが可能となる。
【符号の説明】
【０１１４】
１００、１０１、２００  装置
１１０、１２０、１３０  ネットワーク
１２１、１３１、１４０  端末
１１１、２１１  ＮＡＴ
３０３、３０９  処理部
３０４、３０８  バッファ
３０５、３０７  バッファ
３０６  プロキシ
３１２  テーブル
４０１、４０２、４０４  ポインタ
５００  ヘッダデータ
６００  エントリ
７０１  説明図
１１０１  スループットのグラフ
１１０２  廃棄率のグラフ
１１０３  廃棄率の変化率のグラフ
１２０２  フローチャートの分岐処理
１２０４  フローチャートのステップ
２００１  装置
２００３  パケットシーケンス
２００５  処理
【図１】
2014135575.tif 000003
【図２】
2014135575.tif 000004
【図３】
2014135575.tif 000005
【図５】
2014135575.tif 000006
【図６】
2014135575.tif 000007
【図７】
2014135575.tif 000008
【図８】
2014135575.tif 000009
【図９】
2014135575.tif 000010
【図１０】
2014135575.tif 000011
【図１２】
2014135575.tif 000012
【図１３】
2014135575.tif 000013
【図１４】
2014135575.tif 000014
【図１５】
2014135575.tif 000015
【図１６】
2014135575.tif 000016
【図１７】
2014135575.tif 000017
【図１８】
2014135575.tif 000018
【図１９】
2014135575.tif 000019
【図２０】
2014135575.tif 000020
【図２１】
2014135575.tif 000021
【図２２】
2014135575.tif 000022
【図２３】
2014135575.tif 000023
【図２４】
2014135575.tif 000024
【図４】
2014135575.tif 000025
【図１１】
2014135575.tif 000026