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